|
Программирование в Delphi |
b>Блок 4 - задание начального условия цикла.Блоки 5,6 - повторный цикл очистки массива.Блоки 7,8,9 - чтение из типизированного файла в типизированный массив.Блок 10 - вызов подтверждения очистки StringGrid.Блок 11 - задание начального условия цикла.Блоки 12,13,14,15,16 - повтор цикла перевода массива в StringGrid.Блок 17 - вызов процедуры расчета.Блок 18 - вывод в поле memo подтверждения.9. процедура удаления базы: button3click. Пояснения к алгоритму 9:Блок 2 - очистка выбранной строки.Блок 3 - задание начального условия цикла.Блоки 4,5 - повторный цикл очистки массива.Блок 6 - задание начального условия цикла.Блоки 7,8,9 - повторение цикла перевода строки StrinGrid в массив записей.Блок 10 - задание начального условия цикла.Блоки 11,12,13,14,15 - повтор цикла перевода массива в StrinGrid.Блок 16 - расчет.10. клик StringGrid-а. Пояснения к алгоритму 10:Блок 2 - подтверждение выбора.11. вызов печати. Пояснения к алгоритму 11:Блок 2 - вызов стандартного почтового клиента.12. выход. Пояснения к алгоритму 12:Блок 2 - выход из программы.5. Форма представления исходных данныхПо условию поставленной задачи необходимо предусмотреть хранение информации в типизированных файлах. Для решения данного вопроса, необходимо разработать типизированный элемент хранения данных - строку набора базы данных, роль которой в данном приложении будет выполнять переменная «zap», имеющая следующую структуру.type zap=recordprod:string[80];onng:longint;plan:longint;onkg:longint;svocep:extended;end;Т.е. данная переменная представляет собой линейный массив переменных данных необходимого нам типа. Для организации двумерного массива, опишем в разделе переменных массив «Mzap»:varMzap:array[1..200] of zap; //объявление типа массива записейТипизированный файл представляет собой набор типизированных элементов, структура и наименование которого описаны в вышеназванном разделе переменных:filezap: file of zap;filenamezap:string;6. Разработка интерфейсаПринимая во внимание поставленную ранее задачу, создаем на форме следующие визуальные компоненты:- StringGrid - для визуального отображения данных в табличной форме. Шапка таблицы будет повторять таблицу, указанную в начальном условии, и заполняется при открытии формы. Предустановленное максимальное количество строк - 100, столбцов - 7. Ширины столбцов выбираем в соответствии с размерностью данных. - MEMO-поле для вывода данных, указанных в условии.- 5 компонентов edit для добавления / изменения / удаления записей в базу данных (компоненты имеют ширину, соответствующую ширинам стобцов, и расположены напротив каждого столбца снизу) (см. рис. 1).Рис.1. Общий вид приложения.2 button-а для добавления и удаления записи, названных соответственно выполняемой функции. Так как для отображения информации в StringGrid используется текстовая форма, предусмотрено невозможность ввода текстовых данных в численные поля с выводом соответствующего сообщения, а также невозможность внесения «пустого» поля, так как все поля базы данных, необходимые для математического расчета по условиям задачи, должны быть обязательными для заполнения. Эти события регистрируются специальными предвартельными условиями и при обнаружения несоответствия выводится окно, отображающее наименование ошибки (см. рис.2 и рис.3).Рис.2. Ошибка при добавлении пустого (пыстых) полей.Рис.3. Ошибка при добавлении не численного значения.- использованы стандартные диалоги OpenDialog и SaveDialog для предоставления пользователю возможности визуального выбора имени и пути типизированного файла для открытия либо для сохранения базы данных (См. рис.4).Рис.4. Стандартное диалоговое окно для открытия базы данных.Для вызова диалогов использованы 2 компонента button с соответствующими названиями. А для «обнуления» данных, т.е. создания новой базы использовать компонент button с подписью «создать базу».Для дублирования функций программы и создания дополнительного удобства работы с приложением применен компонент menu с соответствующими подменю и подписями кнопок.Расположение кнопок и других полей выбрано для гарантированного удобства работы с приложением.7. Листинг программыunit EconomInfo;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, Menus, StdCtrls,shellapi;type TForm1 = class(TForm) sg1: TStringGrid; MainMenu1: TMainMenu; N1: TMenuItem; N2: TMenuItem; N3: TMenuItem; N4: TMenuItem; N5: TMenuItem; N6: TMenuItem; N7: TMenuItem; N9: TMenuItem; N10: TMenuItem; N11: TMenuItem; Memo1: TMemo; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Edit5: TEdit; Button1: TButton; Button3: TButton; Button4: TButton; Button5: TButton; Button6: TButton; OpenDialog1: TOpenDialog; SaveDialog1: TSaveDialog; N8: TMenuItem; procedure FormShow(Sender: TObject); procedure cleansg(Sender: TObject); procedure cleanedit(Sender:TObject); procedure Button4Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure autorachet(Sender: TObject); procedure Button6Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure sg1Click(Sender: TObject); procedure N8Click(Sender: TObject); procedure N5Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}type zap=record // объявление типа записиprod:string[80];onng:longint;plan:longint;onkg:longint;svocep:extended;end;varMzap:array[1..200] of zap; //объявление типа массива записейfilezap: file of zap;filenamezap:string;//процедура выполнения действий при загрузке формыprocedure TForm1.FormShow(Sender: TObject);beginwith sg1 do beginCells[0,0]:='Наименование продукции';Cells[1,0]:='ОнНГ';Cells[2,0]:='ПВ';Cells[3,0]:='ОнКГ';Cells[4,0]:='ОР, шт';Cells[5,0]:='СвОЦЕП, руб';Cells[6,0]:='СвОЦВОР, т.руб';end;memo1.Lines.Insert(0,DateTimeToStr(Now)+' - Программа запущена!');end;//процедура очистки стринггридаprocedure Tform1.cleansg(Sender: TObject);var n2:integer;beginwith sg1 do beginfor n2:=1 to RowCount do beginRows[n2].Clear;end;end;end;//процедура очистки эдитовprocedure Tform1.cleanedit(Sender: TObject);beginedit1.Clear;edit2.Clear;edit3.Clear;edit4.Clear;edit5.Clear;end;//Создание новой базыprocedure TForm1.Button4Click(Sender: TObject);beginif messagedlg('Все несохраненные данные текушей базы будут стерты!',mtconfirmation,mbYesNoCancel,0)=mrYes then begincleansg(Sender);memo1.Lines.Insert(0,DateTimeToStr(Now)+' - Новая база создана. Пожалуйста сохраните, задав новое имя.');end;end;//добавление записиprocedure TForm1.Button1Click(Sender: TObject);var n,k,l:integer;o:extended;begin//проверка на пустые поля edit-овif (edit1.Text<>'') and (edit2.Text<>'') and (edit3.Text<>'') and (edit4.Text<>'') and (edit5.Text<>'') thenbegintry n:=strtoint(edit2.text); n:=strtoint(edit3.text); n:=strtoint(edit4.text); o:=strtofloat(edit5.text);excepton EConvertError do messagedlg('Поля 2..5 должны быть числом!',mterror,mbOKCancel,1);end;//цикл очистки массива записейn:=0;repeatMzap[n].prod:='';Mzap[n].onng:=0;Mzap[n].plan:=0;Mzap[n].onkg:=0;Mzap[n].svocep:=0;n:=n+1;until n>=200;//цикл перевода строк stringgrid-a в массив записейn:=1;repeatif sg1.Cells[0,n]<>'' then beginMzap[2*n].prod:=sg1.Cells[0,n];Mzap[2*n].onng:=strtoint(sg1.cells[1,n]);Mzap[2*n].plan:=strtoint(sg1.cells[2,n]);Mzap[2*n].onkg:=strtoint(sg1.cells[3,n]);Mzap[2*n].svocep:=strtofloat(sg1.cells[5,n]);end;n:=n+1;until n>=sg1.RowCount;//цикл нахождения количества записей больших добавляемого значенияn:=1;l:=0;repeatif (Mzap[2*n].prod<>'') and (CompareText(edit1.Text,Mzap[2*n].prod)>0) then l:=l+1;n:=n+1;until n>=200;//междустрочная запись в массивk:=2*l+1;Mzap[k].prod:=edit1.Text;Mzap[k].onng:=strtoint(edit2.text);Mzap[k].plan:=strtoint(edit3.text);Mzap[k].onkg:=strtoint(edit4.text);Mzap[k].svocep:=strtofloat(edit5.text);cleansg(sender); //вызов очистки стрингрида//цикл перевода массива записей в стринггридn:=1;k:=1;repeatif Mzap[n].prod<>'' then beginsg1.Cells[0,k]:=Mzap[n].prod;sg1.Cells[1,k]:=inttostr(Mzap[n].onng);sg1.Cells[2,k]:=inttostr(Mzap[n].plan);sg1.Cells[3,k]:=inttostr(Mzap[n].onkg);sg1.Cells[5,k]:=floattostr(Mzap[n].svocep);k:=k+1;end;n:=n+1;until n>=200;cleanedit(Sender); //вызов очистки эдитовautorachet(sender);endelse messagedlg('Все поля обязательна для заполенения!',mterror,mbOKCancel,1); //вызов предупрежденияend;//Процедура автоматического расчетаprocedure Tform1.autorachet(Sender: TObject);var n,l:longint; max:extended;beginn:=1;max:=0;repeatwith sg1 do beginif cells[0,n]<>'' then begincells[4,n]:=inttostr(strtoint(cells[1,n])+strtoint(cells[2,n])-strtoint(cells[3,n]));cells[6,n]:=floattostr(strtoint(cells[4,n])*strtofloat(cells[5,n])/1000);if strtofloat(cells[6,n])>max then begin l:=n; max:=strtofloat(cells[6,n]);end;end;end;n:=n+1;until n>=sg1.rowCount;memo1.Lines.Insert(0,DateTimeToStr(Now)+' - Расчет произведен. Максимальный СвОЦВОР '+floattostr(max)+' руб. у '+sg1.cells[0,l]);end;procedure TForm1.Button6Click(Sender: TObject);var n:longint;beginwith savedialog1 do begintitle:='Сохранение базы';if execute thenbeginfilenamezap:=filename;assignfile(filezap,filenamezap);rewrite(filezap);n:=0;repeatMzap[n].prod:='';Mzap[n].onng:=0;Mzap[n].plan:=0;Mzap[n].onkg:=0;Mzap[n].svocep:=0;n:=n+1;until n>=200;n:=1;repeatif sg1.Cells[0,n]<>'' then beginMzap[n].prod:=sg1.Cells[0,n];Mzap[n].onng:=strtoint(sg1.cells[1,n]);Mzap[n].plan:=strtoint(sg1.cells[2,n]);Mzap[n].onkg:=strtoint(sg1.cells[3,n]);Mzap[n].svocep:=strtofloat(sg1.cells[5,n]);end;n:=n+1;until n>=sg1.RowCount;for n:=1 to 100 do write(filezap,mzap[n]);closefile(filezap);end;end;memo1.Lines.Insert(0,DateTimeToStr(Now)+' - База сохранена под именем '+filenamezap);end;rocedure TForm1.Button5Click(Sender: TObject);var n,k:longint;beginwith opendialog1 do begintitle:= 'Открытие базы';if execute thenbeginfilenamezap:=filename;assignfile(filezap,filenamezap);reset(filezap);n:=0;repeatMzap[n].prod:='';Mzap[n].onng:=0;Mzap[n].plan:=0;Mzap[n].onkg:=0;Mzap[n].svocep:=0;n:=n+1;until n>=200;n:=1;while not eof(filezap) dobeginread(filezap,mzap[n]);n:=n+1;end;cleansg(sender);n:=0;k:=1;repeatif Mzap[n].prod<>'' then beginsg1.Cells[0,k]:=Mzap[n].prod;sg1.Cells[1,k]:=inttostr(Mzap[n].onng);sg1.Cells[2,k]:=inttostr(Mzap[n].plan);sg1.Cells[3,k]:=inttostr(Mzap[n].onkg);sg1.Cells[5,k]:=floattostr(Mzap[n].svocep);k:=k+1;end;n:=n+1;until n>=200;autorachet(sender);end;end;memo1.Lines.Insert(0,DateTimeToStr(Now)+' - База '+filenamezap+ ' открыта');end;//процедура удаления записиprocedure TForm1.Button3Click(Sender: TObject);var n,k:longint;beginsg1.Rows[sg1.Row].Clear;n:=0;repeatMzap[n].prod:='';Mzap[n].onng:=0;Mzap[n].plan:=0;Mzap[n].onkg:=0;Mzap[n].svocep:=0;n:=n+1;until n>=200;n:=1;repeatif sg1.Cells[0,n]<>'' then beginMzap[n].prod:=sg1.Cells[0,n];Mzap[n].onng:=strtoint(sg1.cells[1,n]);Mzap[n].plan:=strtoint(sg1.cells[2,n]);Mzap[n].onkg:=strtoint(sg1.cells[3,n]);Mzap[n].svocep:=strtofloat(sg1.cells[5,n]);end;n:=n+1;until n>=sg1.RowCount;cleansg(sender);n:=0;k:=1;repeatif Mzap[n].prod<>'' then beginsg1.Cells[0,k]:=Mzap[n].prod;sg1.Cells[1,k]:=inttostr(Mzap[n].onng);sg1.Cells[2,k]:=inttostr(Mzap[n].plan);sg1.Cells[3,k]:=inttostr(Mzap[n].onkg);sg1.Cells[5,k]:=floattostr(Mzap[n].svocep);k:=k+1;cleanedit(Sender); //вызов очистки эдитовend;n:=n+1;until n>=200;autorachet(sender);end;procedure TForm1.sg1Click(Sender: TObject);beginedit1.Text:=sg1.Cells[0,sg1.Row];edit2.Text:=sg1.Cells[1,sg1.Row];edit3.Text:=sg1.Cells[2,sg1.Row];edit4.Text:=sg1.Cells[3,sg1.Row];edit5.Text:=sg1.Cells[5,sg1.Row];memo1.Lines.Insert(0,DateTimeToStr(Now)+' - Запись № '+inttostr(sg1.Row)+ ' выбрана');end;procedure TForm1.N8Click(Sender: TObject);
Страницы: 1, 2, 3
|
|
|
© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент. |
|
|