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

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

Содержание


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


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


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


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


Отладка


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


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



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


Нажатием кнопки «Новый» производится создание нового типизированного (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;

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

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

Слов:776
Символов:10911
Размер:21.31 Кб.