Содержание
Формализация задачи
Словесное описание алгоритма
Листинг программы
Тестирование
Отладка
Формализация задачи
Разработка программы представления табличных данных в виде диаграммы прямоугольников.
Словесное описание алгоритма
Нажатием кнопки «Новый» производится создание нового типизированного (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;
Похожие работы
... помещается на страницах, даже при ландшафтном расположении.1.1.3.5 Пользовательский интерфейс Excel Пользовательский интерфейс Excel аналогичен компонентам других интегрированных пакетов Microsoft office. Табличным процессором можно управлять с помощью команд из основного меню, команд из контекстного меню, панели инструментов и клавиатуры. Загружается табличный процессор с помощью главного ...
... многочисленные средства автоматизации решения задач, так что возможным стало даже написание конкретных приложений на их основе. Кроме того, они обладают широкими графическими возможностями. Табличные процессоры особенно широко используются в аналитической деятельности, а также для подготовки документов сложной формы. Основное назначение табличного процессора – автоматизация Расчетов в табличной ...
... . В случае выбора пункта «выход», необходимо реализовать завершение работы программы и передачу управления операционной системе DOS. 1.3. Требования техническим и программным средствам Программа выполнена на языке ассемблера 8086 процессора, соответственно ей необходим IBM PC – совместимый компьютер с процессором не ниже 8086, также программа может выполняться на компьютерах с ...
... . Пользователям, не желающим прибегать к программированию, все три таблицы предоставляют возможность простой записи команд в интерактивном режиме. 2. Проектирование информационной системы по начислению заработной платы по 18-разрядной тарифной сетке. 1. Пояснительная записка. 2.1 Постановка задачи Используя методику расчета и нормативно-справочную базу, разработать и реализовать в ...
0 комментариев