Содержание
Формализация
задачи
Словесное
описание алгоритма
Листинг
программы
Тестирование
Отладка
Формализация задачи
Разработка
программы представления табличных данных в виде диаграммы прямоугольников.
Словесное описание алгоритма
Нажатием
кнопки «Новый» производится создание нового типизированного (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;
Контрольная работа | Концепция информатизации Российской Федерации |
Контрольная работа | Причины агрессивного поведения. Методы работы с агрессивными детьми |
Контрольная работа | Алгоритм выбора и реализации предпринимательской идеи |
Контрольная работа | Современные методы арт-терапии |
Контрольная работа | Системы управления взаимоотношения с клиентами |
Контрольная работа | Учет материальных затрат в бухгалтерском учете |
Контрольная работа | Геополитическое положение России |
Контрольная работа | Особенности вознаграждения работников в организации |
Контрольная работа | Виды запасов |
Контрольная работа | Психоанализ |
Контрольная работа | Средства лечебной физкультуры, применяемые в детском возрасте |
Контрольная работа | Регуляция сосудистого тонуса |
Контрольная работа | Химически опасные объекты РФ, аварии на них 6 |
Контрольная работа | Политическая социология |
Контрольная работа | Термическая обработка стали |