Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Poyasnitelnaya_zapiska_RED.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.36 Mб
Скачать

Заключение

В рамках курсовой работы, язык Object Pascal - среда разработки Delphi 2005, был выбран платформой для реализации поставленной передо мной задачи (разработка информационной системы расчетов по договорам) так, как данный язык является удобным средством создания визуального приложения для работы с базами данными (хотя возможно было также воспользоваться языком C# - среда разработки MSVS 2011). Хранить всю информацию базы в Object Pascal возможно в файле типа .dat, который хорошо подходит для этой цели.

Тестирование программы показало, что данный продукт может использоваться коммерческими научно-производственными организациями (НПО), которые регистрируют хозяйственные договоры (ХД), выполняемые временными трудовыми коллективами (ВТК). В программе предусмотрены следующие моменты: добавление, удаление, изменение баз данных (членов ВТК, ХД и банков), поиск, сортировка записей по различным аспектам, просмотр записей в виде таблицы, создание новых баз или перезапись существующих.

Пользовательский интерфейс отличается дружественностью и позволяет работать с приложением без прохождения специального длительного обучения.

Также следует заметить, что при необходимости данную программу можно дополнить и усовершенствовать (например, создать новые функции, которые будут зависеть от новых поставленных задач).

Литература

  1. Бакнелл Д.М. Фундаментальные алгоритмы и структуры данных в Delphi.  СПб: ООО «ДиаСофтЮП», 2003.  506 с.

  2. Вирт Н. Алгоритмы и структуры данных.  СПб: Невский диалект, 2001. – 352 с.

  3. Гудрич М. Т. Структуры данных и алгоритмы в Java. / М. Т. Гудрич, Р. Тамассия. – Мн.: Новое знание, 2003. – 671 с.

  4. Кормен Т. Х., Лейзерсон Ч. И., Ривест Р. Л., Штайн К. Алгоритмы: построение и анализ. – М.: Издательский дом «Вильямс», 2009. – 1296 с.

  5. Круз Р. Л. Структуры данных и проектирование программ. – М.: БИНОМ. Лаборатория знаний, 2008. – 765 с.

  6. Седжвик Р. Фундаментальные алгоритмы на С. Части 14: Анализ / Структуры данных / Сортировка / Поиск.  К.: Издательство «ДиаСофт», 2003.  672 с.

  7. Седжвик Р. Фундаментальные алгоритмы на С. Часть 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.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]