Заключение
В рамках курсовой работы, язык Object Pascal - среда разработки Delphi 2005, был выбран платформой для реализации поставленной передо мной задачи (разработка информационной системы расчетов по договорам) так, как данный язык является удобным средством создания визуального приложения для работы с базами данными (хотя возможно было также воспользоваться языком C# - среда разработки MSVS 2011). Хранить всю информацию базы в Object Pascal возможно в файле типа .dat, который хорошо подходит для этой цели.
Тестирование программы показало, что данный продукт может использоваться коммерческими научно-производственными организациями (НПО), которые регистрируют хозяйственные договоры (ХД), выполняемые временными трудовыми коллективами (ВТК). В программе предусмотрены следующие моменты: добавление, удаление, изменение баз данных (членов ВТК, ХД и банков), поиск, сортировка записей по различным аспектам, просмотр записей в виде таблицы, создание новых баз или перезапись существующих.
Пользовательский интерфейс отличается дружественностью и позволяет работать с приложением без прохождения специального длительного обучения.
Также следует заметить, что при необходимости данную программу можно дополнить и усовершенствовать (например, создать новые функции, которые будут зависеть от новых поставленных задач).
Литература
Бакнелл Д.М. Фундаментальные алгоритмы и структуры данных в Delphi. СПб: ООО «ДиаСофтЮП», 2003. 506 с.
Вирт Н. Алгоритмы и структуры данных. СПб: Невский диалект, 2001. – 352 с.
Гудрич М. Т. Структуры данных и алгоритмы в Java. / М. Т. Гудрич, Р. Тамассия. – Мн.: Новое знание, 2003. – 671 с.
Кормен Т. Х., Лейзерсон Ч. И., Ривест Р. Л., Штайн К. Алгоритмы: построение и анализ. – М.: Издательский дом «Вильямс», 2009. – 1296 с.
Круз Р. Л. Структуры данных и проектирование программ. – М.: БИНОМ. Лаборатория знаний, 2008. – 765 с.
Седжвик Р. Фундаментальные алгоритмы на С. Части 14: Анализ / Структуры данных / Сортировка / Поиск. К.: Издательство «ДиаСофт», 2003. 672 с.
Седжвик Р. Фундаментальные алгоритмы на С. Часть 5: Алгоритмы на графах. К.: Издательство «ДиаСофт», 2003. 496 с.
Приложение (исходные тексты всех модулей)
unit UnitMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, Menus, ExtCtrls, XPMan,UnitRecordNfile,UnitCreatFile,
UnitXD, TeeProcs, TeEngine, Chart, Series,UnitBank,UnitWTK,UnitOpenData;
type
TMainForm = class(TForm)
PanelMainGrid: TPanel;
MainMenu1: TMainMenu;
N1: TMenuItem;
StringGridMain: TStringGrid;
Label1: TLabel;
XPManifest1: TXPManifest;
ButtonOpenBANK: TButton;
GroupBox1: TGroupBox;
ButtonRedBTK: TButton;
ButtonBank: TButton;
ButtonXD: TButton;
GroupBox2: TGroupBox;
ButtonSort: TButton;
ButtonSearch: TButton;
Button1: TButton;
Button2: TButton;
RadioGroupSort: TRadioGroup;
ButtonOtSort: TButton;
RadioGroupMinMax: TRadioGroup;
N2: TMenuItem;
procedure N2Click(Sender: TObject);
procedure ButtonSearchClick(Sender: TObject);
procedure ButtonOtSortClick(Sender: TObject);
procedure ButtonSortClick(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure ButtonRedBTKClick(Sender: TObject);
procedure ButtonBankClick(Sender: TObject);
procedure ButtonXDClick(Sender: TObject);
procedure ButtonOpenBANKClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
MainForm: TMainForm;
implementation
uses ClassList,UnitFind;
var NoFreeSotre:TNoFreeXD;
{$R *.dfm}
procedure TMainForm.FormCreate(Sender: TObject);
begin
StringGridMain.Cells[0,0]:='№';
StringGridMain.Cells[1,0]:='Имя';
StringGridMain.Cells[2,0]:='Фамилия';
StringGridMain.Cells[3,0]:='Отчество';
StringGridMain.Cells[4,0]:='Год рождения';
StringGridMain.Cells[5,0]:='Код ХД';
StringGridMain.Cells[6,0]:='Сумма вознаграждения';
StringGridMain.Cells[7,0]:='Город нахождения банка';
end;
procedure TMainForm.ButtonOpenBANKClick(Sender: TObject);
begin
Application.CreateForm(TFormCreatFile,FormCreatFile);
FormCreatFile.ShowModal;
end;
procedure TMainForm.ButtonXDClick(Sender: TObject);
begin
Application.CreateForm(TFormMainXD,FormMainXD);
FormMainXD.ShowModal;
end;
procedure TMainForm.ButtonBankClick(Sender: TObject);
begin
Application.CreateForm(TFormBank,FormBank);
FormBank.ShowModal;
end;
procedure TMainForm.ButtonRedBTKClick(Sender: TObject);
begin
Application.CreateForm(TFormWTK,FormWTK);
FormWTK.ShowModal;
end;
procedure TMainForm.Button1Click(Sender: TObject);
begin
Application.CreateForm(TFormOpenData,FormOpenData);
FormOpenData.ShowModal;
Button2Click(Self);
end;
procedure TMainForm.Button2Click(Sender: TObject);
begin
if (XD=Nil) or (BTK=Nil) or (BANK=Nil) then
begin
MessageDlg('Список сформировать нельзя ',mtConfirmation,[mbOK],0);
end
else
begin
if NoFreeSotre<>Nil then
NoFreeSotre.Free;
NoFreeSotre:=TNoFreeXD.Create;
NoFreeSotre.FormingList;
NoFreeSotre.GetList(StringGridMain);
ButtonSearch.Enabled:=true;
ButtonSort.Enabled:=true;
end;
end;
procedure TMainForm.ButtonSortClick(Sender: TObject);
begin
MainForm.Height:=618;
end;
procedure TMainForm.ButtonOtSortClick(Sender: TObject);
var
metka:boolean;
begin
MainForm.Height:=494;
if RadioGroupMinMax.ItemIndex=0 then
metka:=true
else metka:=false;
NoFreeSotre.Sorting(RadioGroupSort.ItemIndex,metka);
NoFreeSotre.GetList(StringGridMain);
end;
procedure TMainForm.ButtonSearchClick(Sender: TObject);
begin
Application.CreateForm(TFormFind,FormFind);
FormFind.NotFreeStor:=NoFreeSotre;
FormFind.ShowModal;
end;
procedure TMainForm.N2Click(Sender: TObject);
begin
MainForm.Close;
end;
end.
unit UnitOpenData;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TFormOpenData = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
ButtonOpenXD: TButton;
ButtonOpenWTB: TButton;
ButtonOpenBank: TButton;
OpenDialog1: TOpenDialog;
procedure ButtonOpenBankClick(Sender: TObject);
procedure ButtonOpenWTBClick(Sender: TObject);
procedure ButtonOpenXDClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FormOpenData: TFormOpenData;
implementation
uses UnitMain,UnitRecordNfile;
{$R *.dfm}
procedure TFormOpenData.FormCreate(Sender: TObject);
begin
Label1.Caption:=' Файл не открыт';
Label2.Caption:=' Файл не открыт';
Label3.Caption:=' Файл не открыт';
end;
procedure TFormOpenData.ButtonOpenXDClick(Sender: TObject);
begin
if XD<>Nil then
begin
XD:=nil;
end;
OpenDialog1.Title:='Открыть файл';
if OpenDialog1.Execute then
begin
NameFxd:=OpenDialog1.FileName;
AssignFile(Fxd,NameFxd);
Reset(Fxd);
While not EOF(Fxd) do
begin
SetLenXDM;
Read(Fxd, XD[GetXDM-1]);
Label1.Caption:='Файл открыт';
end;
end;
MainForm.ButtonXD.Enabled:=true;
end;
procedure TFormOpenData.ButtonOpenWTBClick(Sender: TObject);
begin
if BTK<>Nil then
begin
BTK:=nil;
end;
OpenDialog1.Title:='Открыть файл';
if OpenDialog1.Execute then
begin
NameFwtk:=OpenDialog1.FileName;
AssignFile(Fwtk,NameFwtk);
Reset(Fwtk);
While not EOF(Fwtk) do
begin
SetLenBTKM;
Read(Fwtk, BTK[GetBTKM-1]);
Label2.Caption:='Файл открыт';
end;
end;
MainForm.ButtonRedBTK.Enabled:=true;
end;
procedure TFormOpenData.ButtonOpenBankClick(Sender: TObject);
begin
if BANK<>Nil then
begin
BANK:=nil;
end;
OpenDialog1.Title:='Открыть файл';
if OpenDialog1.Execute then
begin
NameFbank:=OpenDialog1.FileName;
AssignFile(Fbank,NameFbank);
Reset(Fbank);
While not EOF(Fbank) do
begin
SetLenBANKM;
Read(Fbank, BANK[GetBANKM-1]);
Label3.Caption:='Файл открыт';
end;
end;
MainForm.ButtonBank.Enabled:=true;
end;
end.
unit UnitWTK;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls, ExtCtrls, Buttons;
type
TFormWTK = class(TForm)
StringGridWTK: TStringGrid;
Label1: TLabel;
EditFam: TEdit;
Label2: TLabel;
EditName: TEdit;
Label3: TLabel;
EditOct: TEdit;
Label4: TLabel;
EditYear: TEdit;
Label5: TLabel;
Label6: TLabel;
EditAddres: TEdit;
Label7: TLabel;
EditSchet: TEdit;
RadioGroupDol: TRadioGroup;
Label10: TLabel;
EditNumberBank: TEdit;
ButtonAddWTK: TButton;
ButtonDelWTK: TButton;
ButtonChangWTK: TButton;
Label8: TLabel;
EditCod: TEdit;
Label9: TLabel;
EditSum: TEdit;
SpeedButtonXD: TSpeedButton;
SpeedButtonBank: TSpeedButton;
Gr: TGroupBox;
procedure SpeedButtonBankClick(Sender: TObject);
procedure SpeedButtonXDClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure StringGridWTKSelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
procedure ButtonDelWTKClick(Sender: TObject);
procedure ButtonChangWTKClick(Sender: TObject);
procedure ButtonAddWTKClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
MetkaChange:boolean;
{ Private declarations }
public
{ Public declarations }
end;
var
FormWTK: TFormWTK;
implementation
uses UnitRecordNfile,UnitClikXD,UnitClikBank;
{$R *.dfm}
procedure GetWTK();
var
i,j:cardinal;
begin
for i:=1 to 15 do
for j:=0 to 16 do
FormWTK.StringGridWTK.Cells[j,i]:='';
if BTK<>Nil then
begin
for i:=0 to GetBTKM-1 do
begin
FormWTK.StringGridWTK.Cells[0,i+1]:=IntToStr(i+1);
FormWTK.StringGridWTK.Cells[1,i+1]:=BTK[i].FamilyName;
FormWTK.StringGridWTK.Cells[2,i+1]:=BTK[i].Name;
FormWTK.StringGridWTK.Cells[3,i+1]:=BTK[i].Patronymic;
FormWTK.StringGridWTK.Cells[4,i+1]:=IntToStr(BTK[i].Year);
case BTK[i].Sign of
Head:FormWTK.StringGridWTK.Cells[5,i+1]:='Руководитель ВТК';
Radovo:FormWTK.StringGridWTK.Cells[5,i+1]:='Рядовой член ВТК';
end;
FormWTK.StringGridWTK.Cells[6,i+1]:=BTK[i].Addres;
FormWTK.StringGridWTK.Cells[7,i+1]:=IntToStr(BTK[i].Account);
FormWTK.StringGridWTK.Cells[8,i+1]:=BTK[i].Kod;
FormWTK.StringGridWTK.Cells[9,i+1]:=FloatToStr(BTK[i].SummMany);
FormWTK.StringGridWTK.Cells[10,i+1]:=IntToStr(BTK[i].NumberBank);
end;
end;
end;
procedure TFormWTK.FormCreate(Sender: TObject);
begin
StringGridWTK.Cells[0,0]:='№';
StringGridWTK.Cells[1,0]:='Фамилия';
StringGridWTK.Cells[2,0]:='Имя';
StringGridWTK.Cells[3,0]:='Отчество';
StringGridWTK.Cells[4,0]:='Год рождения';
StringGridWTK.Cells[5,0]:='Должность';
StringGridWTK.Cells[6,0]:='Домашний адрес';
StringGridWTK.Cells[7,0]:='Расчетный счет';
StringGridWTK.Cells[8,0]:='Код ХД';
StringGridWTK.Cells[9,0]:='Вознаграждение';
StringGridWTK.Cells[10,0]:='Номер отделения банка';
GetWTK;
MetkaChange:=false;
end;
procedure TFormWTK.ButtonAddWTKClick(Sender: TObject);
begin
SetLenBTKM;
BTK[GetBTKM-1].FamilyName:=EditFam.Text;
BTK[GetBTKM-1].Name:=EditName.Text;
BTK[GetBTKM-1].Patronymic:=EditOct.Text;
BTK[GetBTKM-1].Year:=StrToInt(EditYear.Text);
case RadioGroupDol.ItemIndex of
0:BTK[GetBTKM-1].Sign:=Head;
1:BTK[GetBTKM-1].Sign:=Radovo;
end;
BTK[GetBTKM-1].Addres:=EditAddres.Text;
BTK[GetBTKM-1].Account:=StrToInt(EditSchet.Text);
BTK[GetBTKM-1].Kod:=EditCod.Text;
BTK[GetBTKM-1].SummMany:=StrToFloat(EditSum.Text);
BTK[GetBTKM-1].NumberBank:=StrToInt(EditNumberBank.Text);
GetWTK;
MetkaChange:=true;
end;
procedure TFormWTK.ButtonChangWTKClick(Sender: TObject);
var
N:Cardinal;
begin
N:=StringGridWTK.Row-1;
BTK[N].FamilyName:=EditFam.Text;
BTK[N].Name:=EditName.Text;
BTK[N].Patronymic:=EditOct.Text;
BTK[N].Year:=StrToInt(EditYear.Text);
case RadioGroupDol.ItemIndex of
0:BTK[N].Sign:=Head;
1:BTK[N].Sign:=Radovo;
end;
BTK[N].Addres:=EditAddres.Text;
BTK[N].Account:=StrToInt(EditSchet.Text);
BTK[N].Kod:=EditCod.Text;
BTK[N].SummMany:=StrToFloat(EditSum.Text);
BTK[N].NumberBank:=StrToInt(EditNumberBank.Text);
GetWTK;
MetkaChange:=true;
end;
procedure TFormWTK.ButtonDelWTKClick(Sender: TObject);
var
i,j,N:Cardinal;
begin
N:=StringGridWTK.Row-1;
for i:=N to GetBTKM-1 do
begin
BTK[i]:=BTK[i+1];
end;
SetLength(BTK,GetBTKM-1);
GetWTK;
MetkaChange:=true;
end;
procedure TFormWTK.StringGridWTKSelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
begin
if ARow-1<GetBTKM then
begin
EditFam.Text:=BTK[ARow-1].FamilyName;
EditName.Text:=BTK[ARow-1].Name;
EditOct.Text:=BTK[ARow-1].Patronymic;
EditYear.Text:=IntToStr(BTK[ARow-1].Year);
case BTK[ARow-1].Sign of
Head:RadioGroupDol.ItemIndex:=0;
Radovo:RadioGroupDol.ItemIndex:=1;
end;
EditAddres.Text:=BTK[ARow-1].Addres;
EditSchet.Text:=IntToStr(BTK[ARow-1].Account);
EditCod.Text:=BTK[ARow-1].Kod;
EditSum.Text:=FloatToStr(BTK[ARow-1].SummMany);
EditNumberBank.Text:=IntToStr(BTK[ARow-1].NumberBank);
end
else
begin
CanSelect:=false;
end;
end;
procedure TFormWTK.FormClose(Sender: TObject; var Action: TCloseAction);
var
i:integer;
begin
if (NameFwtk<>'') and (MetkaChange=true) then
begin
if MessageDlg('Сохранить изменения в файле "'+NameFwtk+'" ?',mtConfirmation,[mbYes,mbNo],0)=mrYes then
begin
Rewrite(Fwtk);
for i:=0 to GetBTKM-1 do
Write(Fwtk,BTK[i]);
end;
end;
end;
procedure TFormWTK.SpeedButtonXDClick(Sender: TObject);
begin
Application.CreateForm(TFormClikXD,FormClikXD);
FormClikXD.ShowModal;
end;
procedure TFormWTK.SpeedButtonBankClick(Sender: TObject);
begin
Application.CreateForm(TFormClikBAnk,FormClikBAnk);
FormClikBAnk.ShowModal;
end;
end.
unit UnitXD;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls, ComCtrls;
type
TFormMainXD = class(TForm)
StringGridXD: TStringGrid;
ButtonAddXd: TButton;
ButtonDelXD: TButton;
EditNumber: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Label4: TLabel;
Label5: TLabel;
Edit4: TEdit;
Label7: TLabel;
DateTimePickerZakl: TDateTimePicker;
DateTimePickerVkl: TDateTimePicker;
Button1: TButton;
CheckBox1: TCheckBox;
procedure StringGridXDSelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
procedure Button1Click(Sender: TObject);
procedure ButtonDelXDClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure ButtonAddXdClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
MetkaChange:boolean;
procedure GetXD;
{ Private declarations }
public
{ Public declarations }
end;
var
FormMainXD: TFormMainXD;
implementation
uses UnitRecordNfile;
{$R *.dfm}
procedure TFormMainXD.GetXD;
var
i,j:integer;
begin
for i:=1 to 15 do
for j:=0 to 16 do
StringGridXD.Cells[j,i]:='';
if XD<>Nil then
begin
j:=GetXDM-1;
for i:=0 to GetXDM-1 do
begin
StringGridXD.Cells[0,i+1]:=IntToStr(i+1);
StringGridXD.Cells[1,i+1]:=IntToStr(XD[i].Number);
StringGridXD.Cells[2,i+1]:=DateToStr(XD[i].DateCreat);
StringGridXD.Cells[3,i+1]:=DateToStr(XD[i].DataFree);
StringGridXD.Cells[4,i+1]:=XD[i].Tema;
StringGridXD.Cells[5,i+1]:=XD[i].Customer;
if XD[i].PriznakFree=true then
StringGridXD.Cells[6,i+1]:='Завершен'
else StringGridXD.Cells[6,i+1]:='Не завершен';
StringGridXD.Cells[7,i+1]:=FloatToStr(XD[i].Price);
end;
end;
end;
procedure TFormMainXD.FormCreate(Sender: TObject);
begin
StringGridXD.Cells[0,0]:='№';
StringGridXD.Cells[1,0]:='Номер договора';
StringGridXD.Cells[2,0]:='Дата заключения договора';
StringGridXD.Cells[3,0]:='Дата завершения договора';
StringGridXD.Cells[4,0]:='Тема договора';
StringGridXD.Cells[5,0]:='Заказчик работ';
StringGridXD.Cells[6,0]:='Признак завершения';
StringGridXD.Cells[7,0]:='Стоимость договора';
MetkaChange:=false;
GetXD;
end;
procedure TFormMainXD.ButtonAddXdClick(Sender: TObject);
var
i:integer;
begin
SetLenXDM;
XD[GetXDM-1].Number:=StrToInt(EditNumber.Text);
XD[GetXDM-1].DateCreat:=DateTimePickerZakl.Date;
XD[GetXDM-1].DataFree:=DateTimePickerVkl.Date;
XD[GetXDM-1].Tema:=Edit1.Text;
XD[GetXDM-1].Customer:=Edit2.Text;
XD[GetXDM-1].PriznakFree:= CheckBox1.Checked;
XD[GetXDM-1].Price:=StrToInt(Edit4.Text);
XD[GetXDM-1].NumPeopl:=0;
GetXD;
MetkaChange:=true;
end;
procedure TFormMainXD.FormClose(Sender: TObject; var Action: TCloseAction);
var
i:integer;
begin
if (NameFxd<>'') and (MetkaChange=true) then
begin
if MessageDlg('Сохранить изменения в файле "'+NameFxd+'" ?',mtConfirmation,[mbYes,mbNo],0)=mrYes then
begin
Rewrite(Fxd);
for i:=0 to GetXDM-1 do
Write(Fxd,XD[i]);
end;
end;
end;
procedure TFormMainXD.ButtonDelXDClick(Sender: TObject);
var
i,j,N:Cardinal;
Tmep:TXD;
begin
N:=StringGridXD.Row-1;
for i:=N to GetXDM-1 do
begin
XD[i]:=XD[i+1];
end;
SetLength(XD,GetXDM-1);
GetXD;
MetkaChange:=true;
end;
procedure TFormMainXD.Button1Click(Sender: TObject);
var
N:Cardinal;
begin
N:=StringGridXD.Row-1;
XD[N].Number:=StrToInt(FormMainXD.EditNumber.Text);
XD[N].DateCreat:=FormMainXD.DateTimePickerZakl.Date;
XD[N].DataFree:=FormMainXD.DateTimePickerVkl.Date;
XD[N].Tema:=FormMainXD.Edit1.Text;
XD[N].Customer:=FormMainXD.Edit2.Text;
XD[N].PriznakFree:=CheckBox1.Checked;
XD[N].Price:=StrToInt(FormMainXD.Edit4.Text);
GetXD;
MetkaChange:=true;
end;
procedure TFormMainXD.StringGridXDSelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);
begin
if ARow-1<GetXDM then
begin
EditNumber.Text:=IntToStr(XD[ARow-1].Number);
DateTimePickerZakl.DateTime:=XD[ARow-1].DateCreat;
DateTimePickerVkl.DateTime:=XD[ARow-1].DataFree;
Edit1.Text:=XD[ARow-1].Tema;
Edit2.Text:=XD[ARow-1].Customer;
CheckBox1.Checked:=XD[ARow-1].PriznakFree;
Edit4.Text:=FloatToStr(XD[ARow-1].Price);
end
else
begin
CanSelect:=false;
end;
end;
end.
unit UnitBank;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls;
type
TFormBank = class(TForm)
StringGridBank: TStringGrid;
EditNum_4: TEdit;
Label1: TLabel;
EditCity: TEdit;
Label2: TLabel;
EditAddres: TEdit;
Label3: TLabel;
EditNameOtdel: TEdit;
Label4: TLabel;
EditCod: TEdit;
Label5: TLabel;
ButtonAddBank: TButton;
ButtonCutBank: TButton;
ButtonDelBank: TButton;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure ButtonDelBankClick(Sender: TObject);
procedure StringGridBankSelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
procedure ButtonCutBankClick(Sender: TObject);
procedure ButtonAddBankClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
MetkaChange:boolean;
{ Private declarations }
public
{ Public declarations }
end;
var
FormBank: TFormBank;
implementation
uses UnitRecordNfile;
{$R *.dfm}
procedure GetStrinGrid();
var
i,j:integer;
begin
for i:=1 to 15 do
for j:=0 to 16 do
FormBank.StringGridBank.Cells[j,i]:='';
if BANK<>Nil then
begin
for i:=0 to GetBANKM-1 do
begin
FormBank.StringGridBank.Cells[0,i+1]:=IntToStr(i+1);
FormBank.StringGridBank.Cells[1,i+1]:=IntToStr(Bank[i].Number);
FormBank.StringGridBank.Cells[2,i+1]:=BANK[i].City;
FormBank.StringGridBank.Cells[3,i+1]:=BANK[i].Addres;
FormBank.StringGridBank.Cells[4,i+1]:=BANK[i].NameFront;
FormBank.StringGridBank.Cells[5,i+1]:=IntToStr(BANK[i].Cod);
end;
end;
end;
procedure TFormBank.FormCreate(Sender: TObject);
begin
StringGridBank.Cells[0,0]:='№';
StringGridBank.Cells[1,0]:='Номер отделения';
StringGridBank.Cells[2,0]:='Город';
StringGridBank.Cells[3,0]:='Адрес';
StringGridBank.Cells[4,0]:='Название отделения';
StringGridBank.Cells[5,0]:='Код отделения';
MetkaChange:=false;
GetStrinGrid;
end;
procedure TFormBank.ButtonAddBankClick(Sender: TObject);
begin
SetLenBANKM;
BANK[GetBANKM-1].Number:=StrToInt(EditNum_4.Text);
BANK[GetBANKM-1].City:=EditCity.Text;
BANK[GetBANKM-1].Addres:=EditAddres.Text;
BANK[GetBANKM-1].NameFront:=EditNameOtdel.Text;
BANK[GetBANKM-1].Cod:=StrToInt(EditCod.Text);
MetkaChange:=true;
GetStrinGrid;
end;
procedure TFormBank.ButtonCutBankClick(Sender: TObject);
var
i,j,N:Cardinal;
begin
N:=StringGridBank.Row-1;
BANK[N].Number:=StrToInt(EditNum_4.Text);
BANK[N].City:=EditCity.Text;
BANK[N].Addres:=EditAddres.Text;
BANK[N].NameFront:=EditNameOtdel.Text;
BANK[N].Cod:=StrToInt(EditCod.Text);
GetStrinGrid;
MetkaChange:=true;
end;
procedure TFormBank.StringGridBankSelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);
begin
if ARow-1<GetBANKM then
begin
EditNum_4.Text:=IntToStr(Bank[ARow-1].Number);
EditCity.Text:=BANK[ARow-1].City;
EditAddres.Text:=BANK[ARow-1].Addres;
EditNameOtdel.Text:=BANK[ARow-1].NameFront;
EditCod.Text:=IntToStr(BANK[ARow-1].Cod);
end
else
begin
CanSelect:=false;
end;
end;
procedure TFormBank.ButtonDelBankClick(Sender: TObject);
var
i,N:Cardinal;
begin
if GetBANKM-1<>0 then
begin
N:=StringGridBank.Row-1;
for i:=N to GetBANKM-1 do
begin
BANK[i]:=BANK[i+1];
end;
SetLength(BANK,GetBANKM-1);
GetStrinGrid;
MetkaChange:=true;
end
else if GetBANKM-1=0 then
begin
MessageDlg('База пуста',mtInformation,[mbOK],0);
end;
end;
procedure TFormBank.FormClose(Sender: TObject; var Action: TCloseAction);
var
i:integer;
begin
if (NameFbank<>'') and(MetkaChange=true) then
begin
if MessageDlg('Сохранить изменения в файле "'+NameFbank+'" ?',mtConfirmation,[mbYes,mbNo],0)=mrYes then
begin
Rewrite(Fbank);
for i:=0 to GetBANKM-1 do
Write(Fbank,BANK[i]);
end;
end;
end;
end.
unit UnitClikBank;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls;
type
TFormClikBAnk = class(TForm)
StringGridClikBank: TStringGrid;
ButtonOK: TButton;
procedure ButtonOKClick(Sender: TObject);
procedure StringGridClikBankSelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FormClikBAnk: TFormClikBAnk;
implementation
uses UnitWTK,UnitRecordNfile;
{$R *.dfm}
procedure TFormClikBAnk.FormCreate(Sender: TObject);
var
i,j:integer;
begin
for i:=1 to 15 do
for j:=0 to 16 do
StringGridClikBank.Cells[j,i]:='';
if BANK<>Nil then
begin
for i:=0 to GetBANKM-1 do
begin
StringGridClikBank.Cells[0,i+1]:=IntToStr(i+1);
StringGridClikBank.Cells[1,i+1]:=IntToStr(Bank[i].Number);
StringGridClikBank.Cells[2,i+1]:=BANK[i].City;
StringGridClikBank.Cells[3,i+1]:=BANK[i].Addres;
StringGridClikBank.Cells[4,i+1]:=BANK[i].NameFront;
StringGridClikBank.Cells[5,i+1]:=IntToStr(BANK[i].Cod);
end;
end;
StringGridClikBank.Cells[0,0]:='№';
StringGridClikBank.Cells[1,0]:='Номер отделения';
StringGridClikBank.Cells[2,0]:='Город';
StringGridClikBank.Cells[3,0]:='Адрес';
StringGridClikBank.Cells[4,0]:='Название отделения';
StringGridClikBank.Cells[5,0]:='Код отделения';
end;
procedure TFormClikBAnk.StringGridClikBankSelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);
begin
if ARow-1>GetBANKM then
begin
CanSelect:=false;
end;
end;
procedure TFormClikBAnk.ButtonOKClick(Sender: TObject);
var
N:cardinal;
begin
N:=StringGridClikBank.Row-1;
FormWTK.EditNumberBank.Text:=IntToStr(Bank[N].Number);
FormClikBAnk.Close;
end;
end.
unit UnitClikXD;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids,StdCtrls,UnitRecordNfile;
type
TFormClikXD = class(TForm)
StringGridClikXD: TStringGrid;
ButtonOK: TButton;
procedure ButtonOKClick(Sender: TObject);
procedure StringGridClikXDSelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FormClikXD: TFormClikXD;
implementation
uses UnitWTK;
{$R *.dfm}
procedure TFormClikXD.FormCreate(Sender: TObject);
var
i,j:cardinal;
begin
for i:=1 to 15 do
for j:=0 to 16 do
StringGridClikXD.Cells[j,i]:='';
StringGridClikXD.Cells[0,0]:='№';
StringGridClikXD.Cells[1,0]:='Номер договора';
StringGridClikXD.Cells[2,0]:='Дата заключения договора';
StringGridClikXD.Cells[3,0]:='Дата завершения договора';
StringGridClikXD.Cells[4,0]:='Тема договора';
StringGridClikXD.Cells[5,0]:='Заказчик работ';
StringGridClikXD.Cells[6,0]:='Признак завершения';
StringGridClikXD.Cells[7,0]:='Стоимость договора';
if XD<>Nil then
begin
for i:=0 to GetXDM-1 do
begin
StringGridClikXD.Cells[0,i+1]:=IntToStr(i+1);
StringGridClikXD.Cells[1,i+1]:=IntToStr(XD[i].Number);
StringGridClikXD.Cells[2,i+1]:=DateToStr(XD[i].DateCreat);
StringGridClikXD.Cells[3,i+1]:=DateToStr(XD[i].DataFree);
StringGridClikXD.Cells[4,i+1]:=XD[i].Tema;
StringGridClikXD.Cells[5,i+1]:=XD[i].Customer;
if XD[i].PriznakFree=true then
StringGridClikXD.Cells[6,i+1]:='Завершен'
else StringGridClikXD.Cells[6,i+1]:='Не завершен';
StringGridClikXD.Cells[7,i+1]:=FloatToStr(XD[i].Price);
end;
end;
end;
procedure TFormClikXD.StringGridClikXDSelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);
begin
if ARow-1>GetXDM then
begin
CanSelect:=false;
end;
end;
procedure TFormClikXD.ButtonOKClick(Sender: TObject);
var
N:Cardinal;
str,_strYear:string;
Year: Word;
Month: Word;
Day: Word;
begin
N:=StringGridClikXD.Row-1;
XD[N].NumPeopl:=XD[N].NumPeopl+1;
FormWTK.EditSum.Text:=FloatToStr(XD[N].Price);
DecodeDate(XD[N].DateCreat,Year,Month,Day);
_strYear:=IntToStr(Year);
str:=IntToStr(XD[N].Number)+'/'+_strYear[3]+_strYear[4];
FormWTK.EditCod.Text:=str;
FormClikXD.Close;
end;
end.
unit UnitCreatFile;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,UnitRecordNfile;
type
TFormCreatFile = class(TForm)
ButtonCreatXD: TButton;
ButtonCreatWTB: TButton;
ButtonCreatBank: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
SaveDialogCreatFile: TSaveDialog;
procedure ButtonCreatBankClick(Sender: TObject);
procedure ButtonCreatWTBClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure ButtonCreatXDClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FormCreatFile: TFormCreatFile;
implementation
uses UnitMain;
{$R *.dfm}
procedure TFormCreatFile.ButtonCreatXDClick(Sender: TObject);
begin
SaveDialogCreatFile.Title:=' Создать базу';
if SaveDialogCreatFile.Execute then
begin
NameFxd:=SaveDialogCreatFile.FileName;
AssignFile(Fxd,NameFxd);
Rewrite(Fxd);
Label1.Caption:=' Файл создан';
MainForm.ButtonXD.Enabled:=true;
end;
end;
procedure TFormCreatFile.FormCreate(Sender: TObject);
begin
Label1.Caption:=' Файл не создан';
Label2.Caption:=' Файл не создан';
Label3.Caption:=' Файл не создан';
end;
procedure TFormCreatFile.ButtonCreatWTBClick(Sender: TObject);
begin
SaveDialogCreatFile.Title:=' Создать базу';
if SaveDialogCreatFile.Execute then
begin
NameFwtk:=SaveDialogCreatFile.FileName;
AssignFile(Fwtk,NameFwtk);
Rewrite(Fwtk);
Label2.Caption:=' Файл создан';
MainForm.ButtonRedBTK.Enabled:=true;
end;
end;
procedure TFormCreatFile.ButtonCreatBankClick(Sender: TObject);
begin
SaveDialogCreatFile.Title:=' Создать базу';
if SaveDialogCreatFile.Execute then
begin
NameFbank:=SaveDialogCreatFile.FileName;
AssignFile(Fbank,NameFbank);
Rewrite(Fbank);
Label3.Caption:=' Файл создан';
MainForm.ButtonBank.Enabled:=true;
end;
end;
end.
unit UnitFind;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Grids,ClassList,UnitMain;
type
TFormFind = class(TForm)
RadioGroupfind: TRadioGroup;
StringGridFind: TStringGrid;
Label1: TLabel;
Edit1: TEdit;
ButtonSeach: TButton;
procedure ButtonSeachClick(Sender: TObject);
procedure RadioGroupfindClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
NotFreeStor:TNoFreeXD;
{ Public declarations }
end;
var
FormFind: TFormFind;
implementation
{$R *.dfm}
procedure TFormFind.FormCreate(Sender: TObject);
begin
StringGridFind.Cells[0,0]:='№';
StringGridFind.Cells[1,0]:='Имя';
StringGridFind.Cells[2,0]:='Фамилия';
StringGridFind.Cells[3,0]:='Отчество';
StringGridFind.Cells[4,0]:='Год рождения';
StringGridFind.Cells[5,0]:='Код ХД';
StringGridFind.Cells[6,0]:='Сумма вознаграждения';
StringGridFind.Cells[7,0]:='Город нахождения банка';
end;
procedure TFormFind.RadioGroupfindClick(Sender: TObject);
begin
case RadioGroupfind.ItemIndex of
0:begin
Label1.Caption:='Имя члена ВТК';
end;
1:begin
Label1.Caption:='Фамилия члена ВТК';
end;
2:begin
Label1.Caption:='Отчество члена ВТК';
end;
3:begin
Label1.Caption:='Год рождения члена ВТК';
end;
4:begin
Label1.Caption:='Вознаграждение за работу';
end;
5:begin
Label1.Caption:='Город банка где находится расчетный счет';
end;
end;
end;
procedure TFormFind.ButtonSeachClick(Sender: TObject);
begin
NotFreeStor.Search(RadioGroupfind.ItemIndex,Edit1.Text,StringGridFind);
end;
end.
unit ClassList;
interface
uses Grids, SysUtils, Dialogs;
//двусвязный список
Type
TPointer = ^TListStore;
TListStore=record
Name: string[50];
FamilyName:string[50];
Patronymic:string[50];
Year:integer;
Kod:string[10];
SummMany:extended;
City:string[100];
Dir,Back:TPointer; //Указатели на следующий и предыдущий элементы
end;
TNoFreeXD=class(TObject)
private
Left{начало}, Right{конец}, Current, G, Sort{для сортировки}:TPointer;
procedure ElementToStringGrid(i:Cardinal;StringGrid:TStringGrid);
public
procedure FormingList;
procedure GetList(StringGrid:TStringGrid);
procedure ClearList;
procedure Sorting(Index:Integer;Increase:Boolean);
procedure Replace;
procedure Search(Index:Integer;Text:String;StringGrid:TStringGrid);
end;
implementation
uses UnitRecordNfile;
procedure TNoFreeXD.FormingList;
var
i,j,k:Cardinal;
str,_strYear:string;
Year: Word;
Month: Word;
Day: Word;
begin
New(Current);
Left:=Current;//указатель на начало
Current^.Back:=nil;//указатель на предыдущий должен равен быть в начале (nil)
for i:=0 to GetBTKM-1 do
begin
for j:=0 to GetXDM-1 do
begin
DecodeDate(XD[j].DateCreat,Year,Month,Day);
_strYear:=IntToStr(Year);
str:=IntToStr(XD[j].Number)+'/'+_strYear[3]+_strYear[4];
if (str=BTK[i].Kod) and (XD[j].PriznakFree=false) then
begin
Current^.Name:=BTK[i].Name;
Current^.FamilyName:=BTK[i].FamilyName;
Current^.Patronymic:=BTK[i].Patronymic;
Current^.Year:=BTK[i].Year;
Current^.Kod:=BTK[i].Kod;
Current^.SummMany:=BTK[i].SummMany;
for k:=0 to GetBANKM-1 do
begin
if BANK[k].Number=BTK[i].NumberBank then
begin
Current^.City:=BANK[k].City;
end;
end;
New(Current^.Dir);
Current^.Dir^.Back:= Current;//указатель на данный элемент
Current:=Current^.Dir;//указатель на следующий
end;
end;
end;
Current^.Back^.Dir:=nil;
Right:=Current^.Back;//указатель на конец списка(равен предыдущему)
Dispose(Current);
end;
procedure TNoFreeXD.GetList(StringGrid:TStringGrid);
var
i,j:integer;
begin
for i:=1 to 25 do
for j:=0 to 8 do
StringGrid.Cells[j,i]:='';
Current:=Left;//получаем указатель на начало
i:=1;
while Current<> nil do
begin
StringGrid.Cells[0,i]:=IntToStr(i);
StringGrid.Cells[1,i]:=Current^.Name;
StringGrid.Cells[2,i]:=Current^.FamilyName;
StringGrid.Cells[3,i]:=Current^.Patronymic;
StringGrid.Cells[4,i]:=IntToStr(Current^.Year);
StringGrid.Cells[5,i]:=Current^.Kod;
StringGrid.Cells[6,i]:=FloatToStr(Current^.SummMany);
StringGrid.Cells[7,i]:=Current^.City;
Current:=Current^.Dir;//указатель на следующий элемент
Inc(i);
end;
end;
procedure TNoFreeXD.ClearList;
begin
Dispose(Left);
Dispose(Right);
Dispose(Current);
end;
procedure TNoFreeXD.Sorting(Index:Integer;Increase:Boolean);
var
XPointer:TPointer;
begin
if Left=Right then Exit;
XPointer:=Left;
while XPointer^.Dir<>nil do
begin
Sort:=XPointer;//берем указатель на элемен
XPointer:=XPointer^.Dir;//перемещаемм указатель на следующий
G:=Sort;//элемент с которым будем сравнивать
Current:=G^.Dir;//следующий элемент
while Current<>nil do//пока не пройдем весь список
begin
case Index of
0: if Increase=True//как сортировать(убыванию или увелечению)
then
begin
if G^.Name<Current^.Name
then G:=Current;
end
else if G^.Name>Current^.Name
then G:=Current;
1: if Increase=True
then
begin
if G^.FamilyName<Current^.FamilyName
then G:=Current;
end
else if G^.FamilyName>Current^.FamilyName
then G:=Current;
2: if Increase=True
then
begin
if G^.Patronymic<Current^.Patronymic
then G:=Current;
end
else if G^.Patronymic>Current^.Patronymic
then G:=Current;
3: if Increase=True
then
begin
if G^.SummMany<Current^.SummMany
then G:=Current;
end
else if G^.SummMany>Current^.SummMany
then G:=Current;
4: if Increase=True
then
begin
if G^.City<Current^.City
then G:=Current;
end
else if G^.City>Current^.City
then G:=Current;
5: if Increase=True
then
begin
if G^.Year<Current^.Year
then G:=Current;
end
else if G^.Year>Current^.Year
then G:=Current;
end;
Current:=Current^.Dir;//указываем на следующий элемент
end;
//если было найдено наименьшое значение (то меняем указатели)
if G<>Sort then Replace;
end;
end;
procedure TNoFreeXD.Replace;
begin
if G^.Dir<>nil
then G^.Dir^.Back:=Sort
else Right:=Sort;
if Sort^.Dir<>G
then
begin
Sort^.Dir^.Back:=G;
G^.Back^.Dir:=Sort;
end;
if Sort^.Back<>nil
then Sort^.Back^.Dir:=G
else Left:=G;
Current:=G^.Dir;
if Sort^.Dir=G
then G^.Dir:=Sort
else G^.Dir:=Sort^.Dir;
Sort^.Dir:=Current;
if G^.Back=Sort
then
begin
Current:=Sort^.Back;
Sort^.Back:=G;
G^.Back:=Current;
end
else
begin
Current:=G^.Back;
G^.Back:=Sort^.Back;
Sort^.Back:=Current;
end;
end;
procedure TNoFreeXD.ElementToStringGrid(i:Cardinal;StringGrid:TStringGrid);
begin
StringGrid.Cells[0,i]:=IntToStr(i);
StringGrid.Cells[1,i]:=Current^.Name;
StringGrid.Cells[2,i]:=Current^.FamilyName;
StringGrid.Cells[3,i]:=Current^.Patronymic;
StringGrid.Cells[4,i]:=IntToStr(Current^.Year);
StringGrid.Cells[5,i]:=Current^.Kod;
StringGrid.Cells[6,i]:=FloatToStr(Current^.SummMany);
StringGrid.Cells[7,i]:=Current^.City;
end;
procedure TNoFreeXD.Search(Index:Integer;Text:String;StringGrid:TStringGrid);
var i, j:integer;
begin
for i:=1 to 250 do
for j:=0 to 5 do
StringGrid.Cells[j,i]:='';
Current:=Left;//получаем указатель на начало
i:=1;
while Current<> nil do
begin
case Index of
0: if Current^.Name=Text
then
begin
ElementToStringGrid(i,StringGrid);
Inc(i);
end;
1: if Current^.FamilyName=Text
then
begin
ElementToStringGrid(i,StringGrid);
Inc(i);
end;
2: if Current^.Patronymic=Text
then
begin
ElementToStringGrid(i,StringGrid);
Inc(i);
end;
3: if Current^.Year=StrToInt(Text)
then
begin
ElementToStringGrid(i,StringGrid);
Inc(i);
end;
4: if Current^.SummMany=StrToFloat(Text)
then
begin
ElementToStringGrid(i,StringGrid);
Inc(i);
end;
5: if Current^.City=Text
then
begin
ElementToStringGrid(i,StringGrid);
Inc(i);
end;
end;
Current:=Current^.Dir;
end;
MessageDlg('Поиск завершен. Найдено элементов - '+IntToStr(i-1),mtInformation,[mbOk],0);
end;
end.
