Курсовая работа: Программирование в Delphi
--PAGE_BREAK----PAGE_BREAK--Блок 16 – расчет.<img width=«106» height=«63» src=«dopb124126.zip» v:shapes="_x0000_s1609 _x0000_s1608 _x0000_s1611 _x0000_s1610"> <img width=«246» height=«58» src=«dopb124127.zip» v:shapes="_x0000_s1613 _x0000_s1612 _x0000_s1614"> <img width=«271» height=«314» src=«dopb124128.zip» v:shapes="_x0000_s1620 _x0000_s1619 _x0000_s1618 _x0000_s1617 _x0000_s1616 _x0000_s1615 _x0000_s1628 _x0000_s1627 _x0000_s1626 _x0000_s1625 _x0000_s1624 _x0000_s1623 _x0000_s1622 _x0000_s1621 _x0000_s1632 _x0000_s1633 _x0000_s1631 _x0000_s1629 _x0000_s1630"> <img width=«12» height=«22» src=«dopb124129.zip» v:shapes="_x0000_s1634"> <img width=«444» height=«406» src=«dopb124130.zip» v:shapes="_x0000_s1637 _x0000_s1638 _x0000_s1639 _x0000_s1636 _x0000_s1635 _x0000_s1642 _x0000_s1641 _x0000_s1640 _x0000_s1657 _x0000_s1656 _x0000_s1655 _x0000_s1664 _x0000_s1663 _x0000_s1662 _x0000_s1661 _x0000_s1660 _x0000_s1659 _x0000_s1658 _x0000_s1674 _x0000_s1673 _x0000_s1672 _x0000_s1671 _x0000_s1670 _x0000_s1669 _x0000_s1668 _x0000_s1667 _x0000_s1675 _x0000_s1647 _x0000_s1648 _x0000_s1645 _x0000_s1646 _x0000_s1644 _x0000_s1643 _x0000_s1653 _x0000_s1654 _x0000_s1652 _x0000_s1651 _x0000_s1650 _x0000_s1649"> <img width=«223» height=«27» src=«dopb124131.zip» v:shapes="_x0000_s1666 _x0000_s1665">
<img width=«485» height=«613» src=«dopb124132.zip» v:shapes="_x0000_s1704 _x0000_s1703 _x0000_s1702 _x0000_s1701 _x0000_s1700 _x0000_s1699 _x0000_s1698 _x0000_s1697 _x0000_s1696 _x0000_s1695 _x0000_s1694 _x0000_s1693 _x0000_s1692 _x0000_s1691 _x0000_s1690 _x0000_s1689 _x0000_s1688 _x0000_s1687 _x0000_s1686 _x0000_s1685 _x0000_s1684 _x0000_s1683 _x0000_s1682 _x0000_s1681 _x0000_s1680 _x0000_s1679 _x0000_s1678 _x0000_s1677 _x0000_s1676 _x0000_s1708 _x0000_s1707 _x0000_s1706 _x0000_s1705 _x0000_s1709 _x0000_s1710 _x0000_s1711 _x0000_s1712"> <img width=«106» height=«80» src=«dopb124133.zip» v:shapes="_x0000_s1716 _x0000_s1717 _x0000_s1718 _x0000_s1715">
10. клик StringGrid-а.
Пояснения к алгоритму 10: <img width=«106» height=«30» src=«dopb124134.zip» v:shapes="_x0000_s1719"><img width=«12» height=«27» src=«dopb124135.zip» v:shapes="_x0000_s1720"> Блок 2 – подтверждение выбора.
<img width=«146» height=«40» src=«dopb124136.zip» v:shapes="_x0000_s1725 _x0000_s1724"> <img width=«12» height=«37» src=«dopb124137.zip» v:shapes="_x0000_s1726"> <img width=«106» height=«33» src=«dopb124138.zip» v:shapes="_x0000_s1728 _x0000_s1729">
11. вызов печати.
Пояснения к алгоритму 11: <img width=«106» height=«30» src=«dopb124134.zip» v:shapes="_x0000_s1730"><img width=«12» height=«27» src=«dopb124135.zip» v:shapes="_x0000_s1731"> Блок 2 – вызов стандартного почтового клиента.
<img width=«122» height=«89» src=«dopb124139.zip» v:shapes="_x0000_s1736 _x0000_s1734 _x0000_s1735 _x0000_s1737 _x0000_s1738"> <img width=«106» height=«32» src=«dopb124140.zip» v:shapes="_x0000_s1739 _x0000_s1740">
12. выход.
Пояснения к алгоритму 12: <img width=«106» height=«30» src=«dopb124134.zip» v:shapes="_x0000_s1741"><img width=«12» height=«27» src=«dopb124135.zip» v:shapes="_x0000_s1742"> Блок 2 – выход из программы.
<img width=«106» height=«88» src=«dopb124141.zip» v:shapes="_x0000_s1747 _x0000_s1745 _x0000_s1746 _x0000_s1748 _x0000_s1749"> <img width=«106» height=«32» src=«dopb124142.zip» v:shapes="_x0000_s1750 _x0000_s1751">
5. Форма представления исходных данных
По условию поставленной задачи необходимо предусмотреть хранение информации в типизированных файлах. Для решения данного вопроса, необходимо разработать типизированный элемент хранения данных – строку набора базы данных, роль которой в данном приложении будет выполнять переменная «zap», имеющая следующую структуру.
type zap=record
prod:string[80];
onng:longint;
plan:longint;
onkg:longint;
svocep:extended;
end;
Т.е. данная переменная представляет собой линейный массив переменных данных необходимого нам типа. Для организации двумерного массива, опишем в разделе переменных массив «Mzap»:
var
Mzap:array[1..200] of zap; //объявление типа массива записей
Типизированный файл представляет собой набор типизированных элементов, структура и наименование которого описаны в вышеназванном разделе переменных:
filezap: file of zap;
filenamezap:string;
6. Разработка интерфейса
Принимая во внимание поставленную ранее задачу, создаем на форме следующие визуальные компоненты:
— StringGrid — для визуального отображения данных в табличной форме. Шапка таблицы будет повторять таблицу, указанную в начальном условии, и заполняется при открытии формы. Предустановленное максимальное количество строк – 100, столбцов – 7. Ширины столбцов выбираем в соответствии с размерностью данных.
— MEMO-поле для вывода данных, указанных в условии.
— 5 компонентов edit для добавления / изменения / удаления записей в базу данных (компоненты имеют ширину, соответствующую ширинам стобцов, и расположены напротив каждого столбца снизу) (см. рис. 1).
<shapetype id="_x0000_t75" coordsize=«21600,21600» o:spt=«75» o:divferrelative=«t» path=«m@4@5l@4@11@9@11@9@5xe» filled=«f» stroked=«f»><path o:extrusionok=«f» gradientshapeok=«t» o:connecttype=«rect»><lock v:ext=«edit» aspectratio=«t»><imagedata src=«28602.files/image107.png» o:><img border=«0» width=«448» height=«324» src=«dopb124143.zip» v:shapes="_x0000_i1025">
Рис.1. Общий вид приложения.
2 button-а для добавления и удаления записи, названных соответственно выполняемой функции. Так как для отображения информации в StringGrid используется текстовая форма, предусмотрено невозможность ввода текстовых данных в численные поля с выводом соответствующего сообщения, а также невозможность внесения «пустого» поля, так как все поля базы данных, необходимые для математического расчета по условиям задачи, должны быть обязательными для заполнения. Эти события регистрируются специальными предвартельными условиями и при обнаружения несоответствия выводится окно, отображающее наименование ошибки (см. рис.2 и рис.3).
<imagedata src=«28602.files/image109.png» o:><img border=«0» width=«490» height=«321» src=«dopb124144.zip» v:shapes="_x0000_i1026">
Рис.2. Ошибка при добавлении пустого (пыстых) полей.
<imagedata src=«28602.files/image111.png» o:><img border=«0» width=«499» height=«358» src=«dopb124145.zip» v:shapes="_x0000_i1027">
Рис.3. Ошибка при добавлении не численного значения.
— использованы стандартные диалоги OpenDialog и SaveDialog для предоставления пользователю возможности визуального выбора имени и пути типизированного файла для открытия либо для сохранения базы данных (См. рис.4).
<imagedata src=«28602.files/image113.png» o:><img border=«0» width=«482» height=«354» src=«dopb124146.zip» v:shapes="_x0000_i1028">
Рис.4. Стандартное диалоговое окно для открытия базы данных.
Для вызова диалогов использованы 2 компонента button с соответствующими названиями. А для «обнуления» данных, т.е. создания новой базы использовать компонент button с подписью «создать базу».
Для дублирования функций программы и создания дополнительного удобства работы с приложением применен компонент menu с соответствующими подменю и подписями кнопок.
Расположение кнопок и других полей выбрано для гарантированного удобства работы с приложением.
7. Листингпрограммы
unit EconomInfo;
interface
uses
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;
var
Mzap:array[1..200] of zap; //объявление типа массива записей
filezap: file of zap;
filenamezap:string;
//процедура выполнения действий при загрузке формы
procedure TForm1.FormShow(Sender: TObject);
begin
with sg1 do begin
Cells[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;
begin
with sg1 do begin
for n2:=1 to RowCount do begin
Rows[n2].Clear;
end;
end;
end;
//процедура очистки эдитов
procedure Tform1.cleanedit(Sender: TObject);
begin
edit1.Clear;
edit2.Clear;
edit3.Clear;
edit4.Clear;
edit5.Clear;
end;
//Создание новой базы
procedure TForm1.Button4Click(Sender: TObject);
begin
if messagedlg('Все несохраненные данные текушей базы будут стерты!',mtconfirmation,mbYesNoCancel,0)=mrYes then begin
cleansg(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<>'') then
begin
try
n:=strtoint(edit2.text);
n:=strtoint(edit3.text);
n:=strtoint(edit4.text);
o:=strtofloat(edit5.text);
except
on EConvertError do messagedlg('Поля 2..5 должны быть числом!',mterror,mbOKCancel,1);
end;
//цикл очистки массива записей
n:=0;
repeat
Mzap[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;
repeat
if sg1.Cells[0,n]<>'' then begin
Mzap[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;
repeat
if (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;
repeat
if Mzap[n].prod<>'' then begin
sg1.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);
end
else messagedlg('Все поля обязательна для заполенения!',mterror,mbOKCancel,1); //вызов предупреждения
end;
//Процедура автоматического расчета
procedure Tform1.autorachet(Sender: TObject);
var n,l:longint; max:extended;
begin
n:=1;
max:=0;
repeat
with sg1 do begin
if cells[0,n]<>'' then begin
cells[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;
begin
with savedialog1 do begin
title:='Сохранение базы';
if execute then
begin
filenamezap:=filename;
assignfile(filezap,filenamezap);
rewrite(filezap);
n:=0;
repeat
Mzap[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;
repeat
if sg1.Cells[0,n]<>'' then begin
Mzap[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;
begin
with opendialog1 do begin
title:= 'Открытие базы';
if execute then
begin
filenamezap:=filename;
assignfile(filezap,filenamezap);
reset(filezap);
n:=0;
repeat
Mzap[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) do
begin
read(filezap,mzap[n]);
n:=n+1;
end;
cleansg(sender);
n:=0;k:=1;
repeat
if Mzap[n].prod<>'' then begin
sg1.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;
begin
sg1.Rows[sg1.Row].Clear;
n:=0;
repeat
Mzap[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;
repeat
if sg1.Cells[0,n]<>'' then begin
Mzap[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;
продолжение
--PAGE_BREAK--
еще рефераты
Еще работы по информатике
Реферат по информатике
ЭВМ с использованием математического пакета MathCad в среде Windows 98 для решения дифференциального
1 Сентября 2013
Реферат по информатике
Проект программного модуля для нахождения корня уравнения
18 Июня 2015
Реферат по информатике
Разработка програмного обеспечения для расч та дисперсионной характеристики планарного волновода
1 Сентября 2013
Реферат по информатике
Компьютерное моделирование вычислительных задач в различных средах программного обеспечения
18 Июня 2015