Контрольная работа по предмету "Информатика, программирование"


Разработка программы представления табличных данных в виде диаграммы прямоугольников

Содержание





Формализация
задачи



Словесное
описание алгоритма



Листинг
программы



Тестирование



Отладка









Формализация задачи





Разработка
программы представления табличных данных в виде диаграммы прямоугольников.



 



Словесное описание алгоритма





Нажатием
кнопки «Новый» производится создание нового типизированного (nrec)
файла: выводится диалоговое окно с текстовым полем для имени файла, затем это
имя устанавливается в соответствие файловой переменной (fdata).
Файл открывается процедурой Rewrite,
затем производится проверка на наличие ошибок при открытии файла. Если открытие
было успешным, то флаг is_open
присваивается значение true,
становятся доступными элементы для ввода записей.



Нажатием
кнопки «Открыть» производится открытие файла для чтения процедурой Reset.
Если файл открыт, производится считывание всех записей из этого файла и
помещение их в таблицу (SG),
флаг is_open
устанавливается в true.



Нажатием
кнопки «Ввод» проверяется не пусты ли текстовые поля EKEY
и EVAL. Если «нет»б проверяются данные в
поле EVAL. Если эти данные
являются числом, то данные из EKEY
и EVAL записываются в таблицу.



Диаграмма
(GR) строится нажатием кнопки
«Построить»: очищаются значения диаграммы, если в таблице значений не больше
чем два, построение не выполняется.



Кнопка
«Сохранить» перемещает указатель на начало файла и записывает все данные из
таблицы в открытый файл.



 







Листинг программы



 



{
Листинг файла Kmain.pas
}



unit Kmain;



interface



uses



KDialog,



Windows, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms,



Dialogs, Grids, StdCtrls, ExtCtrls, TeeProcs,
TeEngine, Chart, Series;



type nrec = record



key:string[20];



val:real



end;



type



TFMAIN = class(TForm)



SG: TStringGrid; GR: TChart;        EKEY: TEdit;     EVAL:
TEdit;



BENT: TButton; BNEW: TButton; BOPEN: TButton;      
BMAKE: TButton;



Button1: TButton;        BCLO: TButton; BSAV:
TButton; Label1: TLabel;



Label2: TLabel;    Series1: TBarSeries;



procedure BNEWClick(Sender: TObject);



procedure BSAVClick(Sender: TObject);



procedure BENTClick(Sender: TObject);



procedure FormClose(Sender: TObject; var Action:
TCloseAction);



procedure FormCreate(Sender: TObject);



procedure BOPENClick(Sender: TObject);



procedure BMAKEClick(Sender: TObject);



procedure Button1Click(Sender: TObject);



procedure BCLOClick(Sender: TObject);



private



fdata:file of nrec;



rec:nrec;



is_open:boolean;



end;



var



FMAIN: TFMAIN;



implementation



{$R *.dfm}



procedure TFMAIN.BNEWClick(Sender: TObject);



begin



FDIALOG.Caption:='Сохранить
файл';



FDIALOG.ShowModal;



if(FDIALOG.getName<>'') then begin



AssignFile(fdata, FDIALOG.getName);



{$I+} Rewrite(fdata); {$I-}



if IOresult<>0 then begin



MessageDlg('Ошибка
при
открытии
файла!',



mtError, [mbOK], 0);



exit;



end;



SG.Cells[0,1]:=''; SG.Cells[1,1]:='';



SG.RowCount:=2;



SG.Enabled:=true; EVAL.Enabled:=true;



GR.Enabled:=true; EKEY.Enabled:=true;



BENT.Enabled:=true; BMAKE.Enabled:=true;



BCLO.Enabled:=true; BSAV.Enabled:=true;



BNEW.Enabled:=false; BOPEN.Enabled:=false;



FMAIN.Caption:='Таблица
'+FDIALOG.getName;



is_open:=true;



end;{if(FDIALOG...}



end;



procedure TFMAIN.BSAVClick(Sender: TObject);



var i:integer;



begin



seek(fdata, 0);



for i:=1 to SG.RowCount-2 do begin



rec.key:=SG.Cells[0, i];



rec.val:=StrToFloat(SG.Cells[1, i]);



write(fdata, rec);



end;



end;



procedure TFMAIN.BENTClick(Sender: TObject);



begin



if (EKEY.Text<>'')and(EVAL.Text<>'')
then



begin



try



StrToFloat(EVAL.Text);



except



MessageDlg('Вводить
только
числа',
mtWarning, [mbOK], 0);



EVAL.Text:='';



exit;



end;{try...}



SG.Cells[0, SG.RowCount-1]:=EKEY.Text;



SG.Cells[1, SG.RowCount-1]:=EVAL.Text;



SG.RowCount:=SG.RowCount+1;



end;{if (EKEY...}



end;



procedure TFMAIN.FormClose(Sender: TObject; var
Action: TCloseAction);



begin



if is_open then CloseFile(fdata);



end;



procedure TFMAIN.FormCreate(Sender: TObject);



begin



is_open:=false;



SG.Cells[0,0]:='Имя';



SG.Cells[1,0]:='Значение';



SG.RowCount:=SG.RowCount+1;



end;



procedure TFMAIN.BOPENClick(Sender: TObject);



var i:integer;



begin



FDIALOG.Caption:='Открыть
файл';



FDIALOG.ShowModal;



if(FDIALOG.getName<>'') then begin



AssignFile(fdata, FDIALOG.getName);



{$I-}Reset(fdata){$I+};



if IOresult<>0 then begin



MessageDlg('Ошибка
при
открытии
файла!',



mtError, [mbOK], 0);



exit;



end;



i:=1;



SG.RowCount:=2;



while not EOF(fdata) do begin



read(fdata, rec);



SG.Cells[0, i]:=rec.key;



SG.Cells[1, i]:=FloatToStr(rec.val);



SG.RowCount:=SG.RowCount+1;



inc(i);



end;



SG.Enabled:=true;



SG.Enabled:=true; EVAL.Enabled:=true;



GR.Enabled:=true; EKEY.Enabled:=true;



BENT.Enabled:=true; BMAKE.Enabled:=true;



BCLO.Enabled:=true; BSAV.Enabled:=true;



FMAIN.Caption:='Таблица
'+FDIALOG.getName;



is_open:=true;



BNEW.Enabled:=false; BOPEN.Enabled:=false;



end;{if(FDIALOG...}



end;



procedure TFMAIN.BMAKEClick(Sender: TObject);



var ser:integer;



begin



GR.Series[0].Clear;



if SG.RowCount<=2 then begin



MessageDlg('В таблице нет
данных!', mtWarning, [mbOK],
0);



end



else



for ser:=1 to SG.RowCount-2 do begin



GR.Series[0].Add(StrToFloat(SG.Cells[1, ser]),



SG.Cells[0, ser], clMedGray);



end;



end;



procedure TFMAIN.Button1Click(Sender: TObject);



begin



Close;



end;



procedure TFMAIN.BCLOClick(Sender: TObject);



var i:integer;



begin



if is_open then begin



CloseFile(fdata);



for i:=1 to SG.RowCount-1 do



SG.Rows[i].Clear;



GR.Series[0].Clear;



SG.Cells[0,1]:=''; SG.Cells[1,1]:='';



SG.RowCount:=2;



SG.Enabled:=false;



SG.Enabled:=false; EVAL.Enabled:=false;



GR.Enabled:=false; EKEY.Enabled:=false;



BENT.Enabled:=false; BMAKE.Enabled:=false;



BSAV.Enabled:=false; BCLO.Enabled:=false;



FMAIN.Caption:='Представление
табл. данных прямоугольной диаграммой'



is_open≔false;



BNEW.Enabled:=true; BOPEN.Enabled:=true;



end; end;



end.



{ Листинг
файла
KDialog.pas }



unit KDialog;



interface



uses



Windows, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms,



Dialogs, StdCtrls, Buttons;



type



TFDIALOG = class(TForm)



Edit1: TEdit;



BOK: TBitBtn;



BCAN: TBitBtn;



procedure BOKClick(Sender: TObject);



procedure BCANClick(Sender: TObject);



private



fname:string;



public



function getName:string;



end;



var



FDIALOG: TFDIALOG;



implementation



function TFDIALOG.getName;



begin



getname:=fname;



end;



{$R *.dfm}



procedure TFDIALOG.BOKClick(Sender: TObject);



begin



fname:=FDIALOG.Edit1.Text;



end;



procedure TFDIALOG.BCANClick(Sender: TObject);



begin



fname:='';



end;



end.



{ Листинг
файла
Kurs.dpr }



program Kurs;



uses



Forms, Kmain in 'Kmain.pas' {FMAIN}, KDialog in
'KDialog.pas' {FDIALOG};



{$R *.res}



begin



Application.Initialize;



Application.CreateForm(TFMAIN, FMAIN);



Application.CreateForm(TFDIALOG, FDIALOG);



Application.Run;



end.





Тестирование





При
закрытии программы всегда выполняется процедура CloseFile;



Для
каждой записи строится своя диаграмма;



При
нажатии «Построить» данные из таблицы добавляются к прошлым значениям
диаграммы;



При
сохранении в файл считывается больше записей чем есть в таблице;



Не
очищаются имена и значения в таблице при закрытии файла.





Отладка





Чтобы
при закрытии программы процедура CloseFile
выполнялась только тогда, когда есть открытый файл введена переменная is_open;



Изменено



GR.Series[i].Add(StrToFloat(SG.Cells[1, ser]),
SG.Cells[0, ser], clMedGray);



на



GR.Series[0].Add(StrToFloat(SG.Cells[1, ser]),
SG.Cells[0, ser], clMedGray);



В
обработчике события OnClick
кнопки «Построить» добавлена строка



GR.Series[0].Clear;



Число
записей читаемых из таблицы уменьшено на единицу:



for i:=1 to SG.RowCount-2 do …



В
обработчике события OnClick
кнопки «Закрыть» добавлено:



for i:=1 to SG.RowCount-1 do begin



SG.Rows[i].Clear;



end;



Не сдавайте скачаную работу преподавателю!
Данную контрольную работу Вы можете использовать для выполнения своих заданий.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :