Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Мое (Восстановлен) - копия.doc
Скачиваний:
3
Добавлен:
20.09.2019
Размер:
532.99 Кб
Скачать

Заключение

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

1. Глобальные данные размещаются в памяти в том же порядке, в котором они описаны в программе и хранятся в сегменте данных;

2. Локальные данные размещаются в памяти в той последовательности, в которой они вызываются в процедуре и хранятся в сегменте стека на время выполнения процедуры, в которой они описаны;

3. Рассмотренный в данном курсовом проекте метод сортировки не является самых эффективным, хотя имеет самый простой алгоритм.

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

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

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

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

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

ПРИЛОЖЕНИЕ А

unit Main;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, ExtCtrls, Buttons, Perem, Grids;

type

TMainForm = class(TForm)

MainPanel: TPanel;

RadioGroup1: TRadioGroup;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

SecondPanel: TPanel;

BitBtn3: TBitBtn;

BitBtn4: TBitBtn;

RadioGroup2: TRadioGroup;

OpenDialog1: TOpenDialog;

SaveDialog1: TSaveDialog;

F9Panel: TPanel;

RadioGroup3: TRadioGroup;

CheckBox1: TCheckBox;

BitBtn5: TBitBtn;

BitBtn6: TBitBtn;

StringGrid1: TStringGrid;

procedure BitBtn1Click(Sender: TObject);

procedure BitBtn3Click(Sender: TObject);

procedure BitBtn4Click(Sender: TObject);

procedure BitBtn6Click(Sender: TObject);

procedure BitBtn5Click(Sender: TObject);

private

{ Private declarations }

Count : Byte; { Счетчик}

Shaping : Boolean; { Переменная для проверки создана структура или нет}

public

{ Public declarations }

fXD : file of XD; { Файловая переменная хоздоговоров }

fWTK : file of WTK; { Файловая переменная исполнителей }

fBANK : file of BANK; { Файловая переменная отделения сбербанка }

zXD : XD; { Переменная запись хоздоговоров }

zWTK : WTK; { Переменная запись исполнителей }

zBANK : BANK; { Переменная запись отделений сбербанка}

first1,cur1 : TFirstLevel; { Переменные указатели на первый уровень иерархической структуры }

first2,cur2 : TSecondLeval; { Переменные указатели на второй уровень иерархической структуры }

procedure InputXD; { Процедура создает шапку для ввода записей в файл хоздоговоров}

procedure InputWTK; { Процедура создает шапку для ввода записей в файл исполнителей}

procedure InputBANK; { Процедура создает шапку для ввода записей в файл отделения сбербанка}

procedure OutputXD; { Процедура создает шапку для вывода записей из файла хоздоговоров}

procedure OutputWTK; { Процедура создает шапку для вывода записей из файла исполнителей}

procedure OutputBANK; { Процедура создает шапку для вывода записей из файла отделение сбербанка}

procedure InputSt; { Процедура создает шапку для добавления заприси в структуру}

procedure InputFind; { Процедура создает шапку для поиска записи в структуре}

end;

var

MainForm: TMainForm;

implementation

uses FileUnit, Struct, Prosmotr;

{$R *.DFM}

procedure TMainForm.InputXD;

begin

MainForm.SaveDialog1.Execute;

AssignFile(MainForm.fXD,MainForm.SaveDialog1.FileName);

Rewrite(MainForm.fXD);

FileForm.Label1.Visible:=True;

FileForm.Label1.Caption:='Номер договора';

FileForm.Label2.Visible:=True;

FileForm.Label2.Caption:='Дата заключения договора';

FileForm.Label3.Visible:=True;

FileForm.Label3.Caption:='Дата завершения договора';

FileForm.Label4.Visible:=True;

FileForm.Label4.Caption:='Тема договора';

FileForm.Label5.Visible:=True;

FileForm.Label5.Caption:='Наименование организации';

FileForm.Label6.Visible:=True;

FileForm.Label6.Caption:='признак завершения';

FileForm.Label7.Visible:=True;

FileForm.Label7.Caption:='(1 - завершен, 0 - не завершен )';

FileForm.Label8.Visible:=True;

FileForm.Label8.Caption:='Стоимость';

FileForm.Label9.Visible:=False;

FileForm.Label10.Visible:=False;

FileForm.Label11.Visible:=False;

FileForm.Edit1.Visible:=True;

FileForm.Edit2.Visible:=True;

FileForm.Edit3.Visible:=True;

FileForm.Edit4.Visible:=True;

FileForm.Edit5.Visible:=True;

FileForm.Edit6.Visible:=True;

FileForm.Edit7.Visible:=True;

FileForm.Edit8.Visible:=False;

FileForm.Edit9.Visible:=False;

FileForm.Edit10.Visible:=False;

end;

procedure TMainForm.InputWTK;

begin

MainForm.SaveDialog1.Execute;

AssignFile(MainForm.fWTK,MainForm.SaveDialog1.FileName);

Rewrite(MainForm.fWTK);

FileForm.Label1.Visible:=True;

FileForm.Label1.Caption:='Фамилия';

FileForm.Label2.Visible:=True;

FileForm.Label2.Caption:='Имя';

FileForm.Label3.Visible:=True;

FileForm.Label3.Caption:='Отчество';

FileForm.Label4.Visible:=True;

FileForm.Label4.Caption:='Год рождения';

FileForm.Label5.Visible:=True;

FileForm.Label5.Caption:='Код ХД';

FileForm.Label6.Visible:=True;

FileForm.Label6.Caption:='Признак';

FileForm.Label7.Visible:=True;

FileForm.Label7.Caption:='(1-руководитель, 0-рядовой)';

FileForm.Label8.Visible:=True;

FileForm.Label8.Caption:='Сумма вознаграждения';

FileForm.Label9.Visible:=True;

FileForm.Label9.Caption:='Домашний адрес';

FileForm.Label10.Visible:=True;

FileForm.Label10.Caption:='Номер отделения';

FileForm.Label11.Visible:=True;

FileForm.Label11.Caption:='Расчетный счет';

FileForm.Edit1.Visible:=True;

FileForm.Edit2.Visible:=True;

FileForm.Edit3.Visible:=True;

FileForm.Edit4.Visible:=True;

FileForm.Edit5.Visible:=True;

FileForm.Edit6.Visible:=True;

FileForm.Edit7.Visible:=True;

FileForm.Edit8.Visible:=True;

FileForm.Edit9.Visible:=True;

FileForm.Edit10.Visible:=True;

end;

procedure TMainForm.InputBANK;

begin

MainForm.SaveDialog1.Execute;

AssignFile(MainForm.fBANK,MainForm.SaveDialog1.FileName);

Rewrite(MainForm.fBANK);

FileForm.Label1.Visible:=True;

FileForm.Label1.Caption:='Номер отделения';

FileForm.Label2.Visible:=True;

FileForm.Label2.Caption:='Город, в котором находится отдел';

FileForm.Label3.Visible:=True;

FileForm.Label3.Caption:='Адрес без указания города';

FileForm.Label4.Visible:=True;

FileForm.Label4.Caption:='Наименование отделения';

FileForm.Label5.Visible:=True;

FileForm.Label5.Caption:='Банковский код';

FileForm.Label6.Visible:=False;

FileForm.Label7.Visible:=False;

FileForm.Label8.Visible:=False;

FileForm.Label9.Visible:=False;

FileForm.Label10.Visible:=False;

FileForm.Label11.Visible:=False;

FileForm.Edit1.Visible:=True;

FileForm.Edit2.Visible:=True;

FileForm.Edit3.Visible:=True;

FileForm.Edit4.Visible:=True;

FileForm.Edit5.Visible:=True;

FileForm.Edit6.Visible:=False;

FileForm.Edit7.Visible:=False;

FileForm.Edit8.Visible:=False;

FileForm.Edit9.Visible:=False;

FileForm.Edit10.Visible:=False;

end;

procedure TMainForm.BitBtn1Click(Sender: TObject);

var

sXD, sWTK, sBANK : String;

begin

case MainForm.RadioGroup1.ItemIndex of

0 : begin

{ Ввод данных в файл }

MainForm.MainPanel.Visible:=False;

MainForm.SecondPanel.Visible:=True;

end;

1 : begin

{ Просмотр данных из файла }

MainForm.MainPanel.Visible:=False;

MainForm.SecondPanel.Visible:=True;

end;

2 : begin

{ Формирование структуры }

MainForm.Shaping:=True;

MessageBox(0,'Откройте файл, который содержит атрибуты хоздоговоров','Указание',MB_OK);

MainForm.OpenDialog1.Execute;

sXD:=MainForm.OpenDialog1.FileName;

MessageBox(0,'Откройте файл, который содержит атрибуты исполнителей','Указание',MB_OK);

MainForm.OpenDialog1.Execute;

sWTK:=MainForm.OpenDialog1.FileName;

MessageBox(0,'Откройте файл, который содержит атрибуты отделения сбербанка','Указание',MB_OK);

MainForm.OpenDialog1.Execute;

sBANK:=MainForm.OpenDialog1.FileName;

ShapingFirst(sWTK);

ShapingSecond(sXD,sWTK,sBANK);

end;

3 : begin

{ Выполнение задания }

if MainForm.Shaping then

begin

MainForm.MainPanel.Visible:=False;

MainForm.F9Panel.Visible:=True;

end

else

MessageBox(0,'Сперва нужно сформировать структуру','Указание',MB_OK);

end;

4 : begin

{ Теоретические сведения }

Teor.ShowModal;

end;

end;

end;

procedure TMainForm.BitBtn3Click(Sender: TObject);

begin

case MainForm.RadioGroup2.ItemIndex of

0 : begin

{ Выбран файл хоздоговоров }

if MainForm.RadioGroup1.ItemIndex=0 then

begin

{ Осуществляется ввод записей в файл хоздоговоров}

MainForm.InputXD;

If MainForm.SaveDialog1.FileName<>'' then

begin

FileForm.Caption:='Введите запись в файл хоздоговоров';

FileForm.OneRecord.Visible:=True;

FileForm.AllRecord.Visible:=False;

FileForm.ShowModal;

end;

end

else

begin

{Осуществляется вывод записей из файла хоздоговоров}

MainForm.OutputXD;

//FileForm.Caption:='Все записи файла содержащего хоздоговора';

//FileForm.AllRecord.Visible:=True;

//FileForm.OneRecord.Visible:=False;

//FileForm.ShowModal;

end;

end;

1 : begin

{ Выбран файл исполнителей }

if MainForm.RadioGroup1.ItemIndex=0 then

begin

{Осуществляется ввод записей в файл исплнителей}

MainForm.InputWTK;

If MainForm.SaveDialog1.FileName<>'' then

begin

FileForm.Caption:='Введите запись в файл исполнителей';

FileForm.OneRecord.Visible:=True;

FileForm.AllRecord.Visible:=False;

FileForm.ShowModal;

end;

end

else

begin

{Осуществляется вывод из файла исполнителей}

MainForm.OutputWTK;

//FileForm.Caption:='Все записи файла исполнителей';

//FileForm.AllRecord.Visible:=True;

//FileForm.OneRecord.Visible:=False;

//FileForm.ShowModal;

end;

end;

2 : begin

{ Выбран файл отделения сбербанка }

if MainForm.RadioGroup1.ItemIndex=0 then

begin

{Осуществляется ввод записей в файл отделения сбербанка}

MainForm.InputBANK;

If MainForm.SaveDialog1.FileName<>'' then

begin

FileForm.Caption:='Введите запись в файл отделения сбербанка';

FileForm.OneRecord.Visible:=True;

FileForm.AllRecord.Visible:=False;

FileForm.ShowModal;

end;

end

else

begin

{Осуществляется вывод записей из файла отделения сбербанка}

MainForm.OutputBANK;

//FileForm.Caption:='Все записи файла отделения сбербанка';

//FileForm.AllRecord.Visible:=True;

//FileForm.OneRecord.Visible:=False;

//FileForm.ShowModal;

end;

end;

end;

end;

procedure TMainForm.BitBtn4Click(Sender: TObject);

begin

MainForm.SecondPanel.Visible:=False;

MainForm.MainPanel.Visible:=True;

end;

procedure TMainForm.OutputXD;

begin

MainForm.OpenDialog1.Execute;

MainForm.StringGrid1.RowCount:=7;

MainForm.StringGrid1.Cells[0,0]:='Номер договора';

MainForm.StringGrid1.Cells[0,1]:='Дата заключения';

MainForm.StringGrid1.Cells[0,2]:='Дата завершения';

MainForm.StringGrid1.Cells[0,3]:='Тема договора';

MainForm.StringGrid1.Cells[0,4]:='Наим. организации';

MainForm.StringGrid1.Cells[0,5]:='Признак заверш.';

MainForm.StringGrid1.Cells[0,6]:='Стоимость';

AssignFile(MainForm.fXD,MainForm.OpenDialog1.FileName);

Reset(MainForm.fXD);

MainForm.Count:=1;

while not (eof(MainForm.fXD)) do

begin

MainForm.StringGrid1.ColCount:=MainForm.Count+1;

read(MainForm.fXD,MainForm.zXD);

MainForm.StringGrid1.Cells[MainForm.Count,0]:=IntToStr(MainForm.zXD.Number);

MainForm.StringGrid1.Cells[MainForm.Count,1]:=MainForm.zXD.Date_of_conclusions;

MainForm.StringGrid1.Cells[MainForm.Count,2]:=MainForm.zXD.Date_of_terminations;

MainForm.StringGrid1.Cells[MainForm.Count,3]:=MainForm.zXD.Subject_of_agreement;

MainForm.StringGrid1.Cells[MainForm.Count,4]:=MainForm.zXD.Name_of_organization;

if MainForm.zXD.Sing_of_termination=1 then

MainForm.StringGrid1.Cells[MainForm.Count,5]:='Завершен'

else

MainForm.StringGrid1.Cells[MainForm.Count,5]:='Не завершен';

MainForm.StringGrid1.Cells[MainForm.Count,6]:=IntToStr(MainForm.zXd.Cost);

Inc(MainForm.Count);

end;

CloseFile(MainForm.fXD);

end;

procedure TMainForm.OutputWTK;

begin

MainForm.OpenDialog1.Execute;

MainForm.StringGrid1.RowCount:=10;

MainForm.StringGrid1.Cells[0,0]:='Фамилия';

MainForm.StringGrid1.Cells[0,1]:='Имя';

MainForm.StringGrid1.Cells[0,2]:='Отчесто';

MainForm.StringGrid1.Cells[0,3]:='Год рождения';

MainForm.StringGrid1.Cells[0,4]:='Код ХД';

MainForm.StringGrid1.Cells[0,5]:='Признак';

MainForm.StringGrid1.Cells[0,6]:='Сумма';

MainForm.StringGrid1.Cells[0,7]:='Домашний адрес';

MainForm.StringGrid1.Cells[0,8]:='Номер отделения';

MainForm.StringGrid1.Cells[0,9]:='Счет исполнителя';

AssignFile(MainForm.fWTK,MainForm.OpenDialog1.FileName);

Reset(MainForm.fWTK);

MainForm.Count:=1;

while not (eof(MainForm.fWTK)) do

begin

MainForm.StringGrid1.ColCount:=MainForm.Count+1;

read(MainForm.fWTK,MainForm.zWTK);

MainForm.StringGrid1.Cells[MainForm.Count,0]:=MainForm.zWTK.Surname;

MainForm.StringGrid1.Cells[MainForm.Count,1]:=MainForm.zWTK.Name;

MainForm.StringGrid1.Cells[MainForm.Count,2]:=MainForm.zWTK.Patronymic_name;

MainForm.StringGrid1.Cells[MainForm.Count,3]:=IntToStr(MainForm.zWTK.Of_birth);

MainForm.StringGrid1.Cells[MainForm.Count,4]:=MainForm.zWTK.Code;

if MainForm.zWTK.Sign=1 then

MainForm.StringGrid1.Cells[MainForm.Count,5]:='Руководитель'

else

MainForm.StringGrid1.Cells[MainForm.Count,5]:='Рядовой';

MainForm.StringGrid1.Cells[MainForm.Count,6]:=IntToStr(MainForm.zWTK.Remuneration_Amount);

MainForm.StringGrid1.Cells[MainForm.Count,7]:=MainForm.zWTK.Home_Address;

MainForm.StringGrid1.Cells[MainForm.Count,8]:=MainForm.zWTK.Branch_Number;

MainForm.StringGrid1.Cells[MainForm.Count,9]:=MainForm.zWTK.Accouting_count;

Inc(MainForm.Count);

end;

CloseFile(MainForm.fWTK);

end;

procedure TMainForm.OutputBANK;

begin

MainForm.OpenDialog1.Execute;

MainForm.StringGrid1.RowCount:=5;

MainForm.StringGrid1.Cells[0,0]:='Номер отделения';

MainForm.StringGrid1.Cells[0,1]:='Город';

MainForm.StringGrid1.Cells[0,2]:='Адрес';

MainForm.StringGrid1.Cells[0,3]:='Наим. отделения';

MainForm.StringGrid1.Cells[0,4]:='Банковский код';

AssignFile(MainForm.fBANK,MainForm.OpenDialog1.FileName);

Reset(MainForm.fBANK);

MainForm.Count:=1;

while not (eof(MainForm.fBANK)) do

begin

MainForm.StringGrid1.ColCount:=MainForm.Count+1;

read(MainForm.fBANK,MainForm.zBANK);

MainForm.StringGrid1.Cells[MainForm.Count,0]:=MainForm.zBANK.Branch_Name;

MainForm.StringGrid1.Cells[MainForm.Count,1]:=MainForm.zBANK.City;

MainForm.StringGrid1.Cells[MainForm.Count,2]:=MainForm.zBANK.Address;

MainForm.StringGrid1.Cells[MainForm.Count,3]:=MainForm.zBANK.Name_of_branch;

MainForm.StringGrid1.Cells[MainForm.Count,4]:=MainForm.zBANK.Bank_Code;

Inc(MainForm.Count);

end;

CloseFile(MainForm.fBANK);

end;

procedure TMainForm.BitBtn6Click(Sender: TObject);

begin

MainForm.F9Panel.Visible:=False;

MainForm.MainPanel.Visible:=True;

end;

procedure TMainForm.BitBtn5Click(Sender: TObject);

begin

case MainForm.RadioGroup3.ItemIndex of

0 : begin

{ Просмотр записей }

FileForm.AllRecord.Visible:=True;

FileForm.OneRecord.Visible:=False;

Viewing;

end;

1 : begin

{ Поиск }

FileForm.OneRecord.Visible:=True;

FileForm.AllRecord.Visible:=False;

FileForm.Clear;

MainForm.InputFind;

FileForm.ShowModal;

end;

2 : begin

{ Добавление }

FileForm.OneRecord.Visible:=True;

FileForm.AllRecord.Visible:=False;

FileForm.Clear;

MainForm.InputSt;

FileForm.BitBtn1.Caption:='Добавление';

FileForm.ShowModal;

end;

3 : begin

{Удаление}

FileForm.OneRecord.Visible:=True;

FileForm.AllRecord.Visible:=False;

FileForm.Clear;

MainForm.InputSt;

FileForm.BitBtn1.Caption:='Удаление';

FileForm.ShowModal;

end;

end;

end;

procedure TMainForm.InputSt;

begin

FileForm.Label1.Visible:=True;

FileForm.Label1.Caption:='Сумма';

FileForm.Label2.Visible:=True;

FileForm.Label2.Caption:='Фамилия';

FileForm.Label3.Visible:=True;

FileForm.Label3.Caption:='Имя';

FileForm.Label4.Visible:=True;

FileForm.Label4.Caption:='Отчество';

FileForm.Label5.Visible:=True;

FileForm.Label5.Caption:='Город';

FileForm.Label6.Visible:=True;

FileForm.Label6.Caption:='Код ХД';

FileForm.Label7.Visible:=False;

FileForm.Label8.Visible:=False;

FileForm.Label9.Visible:=False;

FileForm.Label10.Visible:=False;

FileForm.Label11.Visible:=False;

FileForm.Edit1.Visible:=True;

FileForm.Edit2.Visible:=True;

FileForm.Edit3.Visible:=True;

FileForm.Edit4.Visible:=True;

FileForm.Edit5.Visible:=True;

FileForm.Edit6.Visible:=True;

FileForm.Edit7.Visible:=False;

FileForm.Edit8.Visible:=False;

FileForm.Edit9.Visible:=False;

FileForm.Edit10.Visible:=False;

FileForm.CheckBox1.Visible:=False;

FileForm.CheckBox2.Visible:=False;

FileForm.CheckBox3.Visible:=False;

FileForm.CheckBox4.Visible:=False;

FileForm.CheckBox5.Visible:=False;

FileForm.CheckBox6.Visible:=False;

end;

procedure TMainForm.InputFind;

begin

FileForm.CheckBox1.Visible:=True;

FileForm.CheckBox2.Visible:=True;

FileForm.CheckBox3.Visible:=True;

FileForm.CheckBox4.Visible:=True;

FileForm.CheckBox5.Visible:=True;

FileForm.CheckBox6.Visible:=True;

FileForm.BitBtn1.Caption:='Поиск';

FileForm.Label1.Visible:=True;

FileForm.Label1.Caption:='Сумма';

FileForm.Label2.Visible:=True;

FileForm.Label2.Caption:='Фамилия';

FileForm.Label3.Visible:=True;

FileForm.Label3.Caption:='Имя';

FileForm.Label4.Visible:=True;

FileForm.Label4.Caption:='Отчество';

FileForm.Label5.Visible:=True;

FileForm.Label5.Caption:='Город';

FileForm.Label6.Visible:=True;

FileForm.Label6.Caption:='Код ХД';

FileForm.Label7.Visible:=False;

FileForm.Label8.Visible:=False;

FileForm.Label9.Visible:=False;

FileForm.Label10.Visible:=False;

FileForm.Label11.Visible:=False;

FileForm.Edit1.Visible:=True;

FileForm.Edit2.Visible:=True;

FileForm.Edit3.Visible:=True;

FileForm.Edit4.Visible:=True;

FileForm.Edit5.Visible:=True;

FileForm.Edit6.Visible:=True;

FileForm.Edit7.Visible:=False;

FileForm.Edit8.Visible:=False;

FileForm.Edit9.Visible:=False;

FileForm.Edit10.Visible:=False;

end;

end.

unit Struct;

interface

procedure ShapingFirst(sWTK : String); {формирование первого уровня}

procedure ShapingSecond(sXD,sWTK,sBANK : String); {Формирование второго уровня}

procedure Sort(TypeSort : Byte); {Сортировка (1-по возрастанию, 0-по убыванию)}

procedure Viewing; {Просмотр записей структуры}

procedure Insert; {Добавление записи в структуру}

procedure Find; {Поск записей в структуре}

procedure Delete; {Удаление записи из структуры}

implementation

Uses

Windows, SysUtils, Perem, Main, FileUnit;

Var

count : Byte;

procedure ShapingFirst(sWTK : String);

var

cur : TFirstLevel;

count : Byte; { Переменная счетчик (используется для проверки внесена сумма в структуру или нет)}

begin

AssignFile(MainForm.fWTK,sWTK);

reset(MainForm.fWTK);

{формирование первого уровня структуры}

New(MainForm.Cur1);

MainForm.first1:=MainForm.Cur1;

read(MainForm.fWTK,MainForm.zWTK);

MainForm.cur1^.Remuneration_Amount:=MainForm.zWTK.Remuneration_Amount;

MainForm.cur1^.S:=NIL;

while not (eof(MainForm.fWTK)) do

begin

New(MainForm.cur1^.L);

MainForm.cur1:=MainForm.cur1^.L;

read(MainForm.fWTK,MainForm.zWTK);

MainForm.cur1^.Remuneration_Amount:=MainForm.zWTK.Remuneration_Amount;

MainForm.cur1^.S:=NIL;

end;

MainForm.cur1^.L:=NIL;

CloseFile(MainForm.fWTK);

{Логическое удаление (производится занесение нуля в поле суммы)}

MainForm.cur1:=MainForm.first1;

while MainForm.cur1<>nil do

begin

cur:=MainForm.first1;

count:=0;

while cur<>nil do

begin

if (cur^.Remuneration_Amount=MainForm.cur1^.Remuneration_Amount) and (count=1) then

cur^.Remuneration_Amount:=0

else

if (cur^.Remuneration_Amount=MainForm.cur1^.Remuneration_Amount) then

Inc(count);

cur:=cur^.L;

end;

MainForm.cur1:=MainForm.cur1^.L;

end;

{физическое удаление (устраняет все элементы у которых поле суммы содержит ноль) }

MainForm.cur1:=MainForm.first1;

while MainForm.cur1<>NIL do

begin

if MainForm.cur1^.L<>NIL then

begin

if MainForm.cur1^.L^.L<>NIL then

begin

if MainForm.cur1^.L^.Remuneration_Amount=0 then

begin

cur:=MainForm.cur1^.L;

MainForm.cur1^.L:=cur^.L;

end

else

MainForm.cur1:=MainForm.cur1^.L;

end

else

if MainForm.cur1^.L^.Remuneration_Amount=0 then

MainForm.cur1^.L:=NIL

else

MainForm.cur1:=MainForm.cur1^.L;

end

else

MainForm.cur1:=MainForm.cur1^.L;

end

end;

procedure ShapingSecond(sXD,sWTK,sBANK : String);

var

Len : Byte;

S : TString;

begin

AssignFile(MainForm.fWTK,sWTK);

reset(MainForm.fWTK);

{ Вносит в структуру данные из файла исполнителей}

while not (eof(MainForm.fWTK)) do

begin

read(MainForm.fWTK,MainForm.zWTK);

MainForm.cur1:=MainForm.first1;

while MainForm.cur1<>NIL do

begin

if MainForm.cur1^.Remuneration_Amount=MainForm.zWTK.Remuneration_Amount then

begin

{ Проверает пуст второй уровень иерархической структуры или нет }

if MainForm.cur1^.S=NIL then

begin

{ Если пуст создает первый элемент }

New(MainForm.cur2);

MainForm.cur1^.S:=MainForm.cur2;

MainForm.cur2^.Surname:=MainForm.zWTK.Surname;

MainForm.cur2^.Name:=MainForm.zWTK.Name;

MainForm.cur2^.Patronymic_Name:=MainForm.zWTK.Patronymic_name;

MainForm.cur2^.Code:=MainForm.zWTK.Code;

MainForm.cur2^.Branch_Number:=MainForm.zWTK.Branch_Number;

MainForm.cur2^.Next:=NIL;

MainForm.cur1:=MainForm.cur1^.L;

end

else

begin

{ Иначе заносит записи в конец }

MainForm.cur2:=MainForm.cur1^.S;

while MainForm.cur2^.Next<>NIL do

MainForm.cur2:=MainForm.cur2^.Next;

New(MainForm.cur2^.Next);

MainForm.cur2:=MainForm.cur2^.Next;

MainForm.cur2^.Surname:=MainForm.zWTK.Surname;

MainForm.cur2^.Name:=MainForm.zWTK.Name;

MainForm.cur2^.Patronymic_Name:=MainForm.zWTK.Patronymic_name;

MainForm.cur2^.Code:=MainForm.zWTK.Code;

MainForm.cur2^.Branch_Number:=MainForm.zWTK.Branch_Number;

MainForm.cur2^.Next:=NIL;

MainForm.cur1:=MainForm.cur1^.L;

end

end

else

MainForm.cur1:=MainForm.cur1^.L;

end;

end;

CloseFile(MainForm.fWTK);

AssignFile(MainForm.fBANK,sBANK);

reset(MainForm.fBANK);

{Вносит в структуру данные из файла отделение сбербанка }

while not (eof(MainForm.fBANK)) do

begin

read(MainForm.fBANK,MainForm.zBANK);

MainForm.cur1:=MainForm.first1;

while MainForm.cur1<>NIL do

begin

MainForm.cur2:=MainForm.cur1^.S;

while MainForm.cur2<>NIL do

begin

if MainForm.cur2.Branch_Number=MainForm.zBANK.Branch_Name then

MainForm.cur2^.City:=MainForm.zBANK.City;

MainForm.cur2:=MainForm.cur2^.Next;

end;

MainForm.cur1:=MainForm.cur1^.L;

end;

end;

CloseFile(MainForm.fBANK);

AssignFile(MainForm.fXD,sXD);

reset(MainForm.fXD);

{Вносит в структуру данные из файла хоздоговоров }

while not (eof(MainForm.fXD)) do

begin

read(MainForm.fXD,MainForm.zXD);

MainForm.cur1:=MainForm.first1;

while MainForm.cur1<>NIL do

begin

MainForm.cur2:=MainForm.cur1^.S;

while MainForm.cur2<>NIL do

begin

Len:=Length(MainForm.zXD.Date_of_conclusions);

S:=IntToStr(MainForm.zXD.Number)+'/'+MainForm.zXD.Date_of_conclusions[Len-1]+MainForm.zXD.Date_of_conclusions[Len];

if MainForm.cur2.Code=S then

MainForm.cur2^.Sing_of_termination:=MainForm.zXD.Sing_of_termination;

MainForm.cur2:=MainForm.cur2^.Next;

end;

MainForm.cur1:=MainForm.cur1^.L;

end;

end;

CloseFile(MainForm.fXD);

end;

procedure Sort(TypeSort : Byte);

var

cur : TFirstLevel;

spt : TSecondLeval;

S : Word;

begin

MainForm.cur1:=MainForm.first1;

while MainForm.cur1^.L<>NIL do

begin

cur:=MainForm.cur1^.L;

while cur<>NIL do

begin

if TypeSort=1 then

begin

if MainForm.cur1^.Remuneration_Amount>cur^.Remuneration_Amount then

begin

{ Сортировка по возрастанию }

S:=MainForm.cur1.Remuneration_Amount;

MainForm.cur1^.Remuneration_Amount:=cur^.Remuneration_Amount;

cur^.Remuneration_Amount:=S;

spt:=MainForm.cur1^.S;

MainForm.cur1^.S:=cur^.S;

cur^.S:=spt;

end;

end

else

begin

{ Сортировка поубыванию }

S:=MainForm.cur1.Remuneration_Amount;

MainForm.cur1^.Remuneration_Amount:=cur^.Remuneration_Amount;

cur^.Remuneration_Amount:=S;

spt:=MainForm.cur1^.S;

MainForm.cur1^.S:=cur^.S;

cur^.S:=spt;

end;

cur:=cur^.L;

end;

MainForm.cur1:=MainForm.cur1^.L;

end;

end;

procedure Viewing;

begin

if MainForm.CheckBox1.Checked then

Sort(1) { по возрастанию }

else

Sort(0); { по убыванию }

MainForm.StringGrid1.RowCount:=6;

MainForm.StringGrid1.Cells[0,0]:='Сумма';

MainForm.StringGrid1.Cells[0,1]:='Фамилия';

MainForm.StringGrid1.Cells[0,2]:='Имя';

MainForm.StringGrid1.Cells[0,3]:='Отчество';

MainForm.StringGrid1.Cells[0,4]:='Город';

MainForm.StringGrid1.Cells[0,5]:='Код ХД';

count:=1;

MainForm.Cur1:=MainForm.first1;

while MainForm.cur1<>NIL do

begin

MainForm.cur2:=MainForm.cur1^.S;

while MainForm.cur2<>NIL do

begin

if (MainForm.cur2^.Sing_of_termination=0) then

begin

MainForm.StringGrid1.ColCount:=count+1;

MainForm.StringGrid1.Cells[count,0]:=IntToStr(MainForm.cur1^.Remuneration_Amount);

MainForm.StringGrid1.Cells[count,1]:=MainForm.cur2^.Surname;

MainForm.StringGrid1.Cells[count,2]:=MainForm.cur2^.Name;

MainForm.StringGrid1.Cells[count,3]:=MainForm.cur2^.Patronymic_Name;

MainForm.StringGrid1.Cells[count,4]:=MainForm.cur2^.City;

MainForm.StringGrid1.Cells[count,5]:=MainForm.cur2^.Code;

Inc(count);

end;

MainForm.cur2:=MainForm.cur2^.Next;

end;

MainForm.cur1:=MainForm.cur1^.L;

end;

end;

procedure Insert;

begin

MainForm.Cur1:=MainForm.first1;

count:=0;

while MainForm.cur1<>NIL do

begin

MainForm.cur2:=MainForm.cur1^.S;

if (StrToInt(FileForm.Edit1.Text)=MainForm.cur1^.Remuneration_Amount) then

begin

count:=1;

while MainForm.cur2^.Next<>NIL do

begin

MainForm.cur2:=MainForm.cur2^.Next;

end;

New(MainForm.cur2^.Next);

MainForm.cur2:=MainForm.cur2^.Next;

MainForm.cur2^.Surname:=FileForm.Edit2.Text;

MainForm.cur2^.Name:=FileForm.Edit3.Text;

MainForm.cur2^.Patronymic_Name:=FileForm.Edit4.Text;

MainForm.cur2^.Code:=FileForm.Edit6.Text;

MainForm.cur2^.City:=FileForm.Edit5.Text;

MainForm.cur2^.Sing_of_termination:=0;

MainForm.cur2^.Next:=NIL;

end;

MainForm.cur1:=MainForm.cur1^.L;

end;

if count=0 then

begin

MainForm.cur1:=MainForm.first1;

while MainForm.cur1^.L<>NIL do

begin

MainForm.cur1:=MainForm.cur1^.L;

end;

New(MainForm.cur1^.L);

MainForm.cur1:=MainForm.cur1^.L;

MainForm.cur1^.Remuneration_Amount:=StrToInt(FileForm.Edit1.Text);

MainForm.cur1^.L:=NIL;

New(MainForm.cur2);

MainForm.cur1^.S:=MainForm.cur2;

MainForm.cur2^.Surname:=FileForm.Edit2.Text;

MainForm.cur2^.Name:=FileForm.Edit3.Text;

MainForm.cur2^.Patronymic_Name:=FileForm.Edit4.Text;

MainForm.cur2^.City:=FileForm.Edit5.Text;

MainForm.cur2^.Code:=FileForm.Edit6.Text;

MainForm.cur2^.Sing_of_termination:=0;

MainForm.cur2^.Next:=NIL;

end;

end;

procedure Find;

var

Remuneration_Amount : Word; // Сумма вознаграждения

Surname : TString; // Фамилия

Name : TString; // Имя

Patronymic_Name : TString; // Отчество

Code : TString; // Код ХД

City : TString; // Город в котором находится отделнение

begin

if FileForm.CheckBox1.Checked then

Remuneration_Amount:=StrToInt(FileForm.Edit1.Text)

else

Remuneration_Amount:=0;

if FileForm.CheckBox2.Checked then

Surname:=FileForm.Edit2.Text

else

Surname:=' ';

if FileForm.CheckBox3.Checked then

Name:=FileForm.Edit3.Text

else

Name:=' ';

if FileForm.CheckBox4.Checked then

Patronymic_Name:=FileForm.Edit4.Text

else

Patronymic_Name:=' ';

if FileForm.CheckBox5.Checked then

City:=FileForm.Edit5.Text

else

City:=' ';

if FileForm.CheckBox6.Checked then

Code:=FileForm.Edit6.Text

else

Code:=' ';

FileForm.BitBtn1.Caption:='Следующая запись';

FileForm.AllRecord.Visible:=True;

FileForm.OneRecord.Visible:=False;

FileForm.StringGrid1.RowCount:=6;

FileForm.StringGrid1.Cells[0,0]:='Сумма';

FileForm.StringGrid1.Cells[0,1]:='Фамилия';

FileForm.StringGrid1.Cells[0,2]:='Имя';

FileForm.StringGrid1.Cells[0,3]:='Отчество';

FileForm.StringGrid1.Cells[0,4]:='Город';

FileForm.StringGrid1.Cells[0,5]:='Код ХД';

count:=1;

MainForm.Cur1:=MainForm.first1;

while MainForm.cur1<>NIL do

begin

MainForm.cur2:=MainForm.cur1^.S;

while MainForm.cur2<>NIL do

begin

if ((Remuneration_Amount=MainForm.cur1^.Remuneration_Amount) or (Remuneration_Amount=0) ) and

((Surname=MainForm.cur2^.Surname) or (Surname=' ')) and

((Name=MainForm.cur2^.Name) or (Name=' ')) and

((Patronymic_Name=MainForm.cur2^.Patronymic_Name) or (Patronymic_Name=' ')) and

((Code=MainForm.cur2^.Code) or (Code=' '))and

((City=MainForm.cur2^.City) or (City=' ')) then

begin

FileForm.StringGrid1.ColCount:=count+1;

FileForm.StringGrid1.Cells[count,0]:=IntToStr(MainForm.cur1^.Remuneration_Amount);

FileForm.StringGrid1.Cells[count,1]:=MainForm.cur2^.Surname;

FileForm.StringGrid1.Cells[count,2]:=MainForm.cur2^.Name;

FileForm.StringGrid1.Cells[count,3]:=MainForm.cur2^.Patronymic_Name;

FileForm.StringGrid1.Cells[count,4]:=MainForm.cur2^.City;

FileForm.StringGrid1.Cells[count,5]:=MainForm.cur2^.Code;

Inc(count);

end;

MainForm.cur2:=MainForm.cur2^.Next;

end;

MainForm.cur1:=MainForm.cur1^.L;

end;

if count=1 then

begin

FileForm.StringGrid1.ColCount:=2;

FileForm.StringGrid1.Cells[count,0]:='';

FileForm.StringGrid1.Cells[count,1]:='';

FileForm.StringGrid1.Cells[count,2]:='';

FileForm.StringGrid1.Cells[count,3]:='';

FileForm.StringGrid1.Cells[count,4]:='';

FileForm.StringGrid1.Cells[count,5]:='';

MessageBox(0,'Данная запись не сoдержится в структуре','Сообщение',MB_OK);

end;

end;

procedure Delete;

var

Remuneration_Amount : Word; // Сумма вознаграждения

Surname : TString; // Фамилия

Name : TString; // Имя

Patronymic_Name : TString; // Отчество

Code : TString; // Код ХД

City : TString; // Город в котором находится отделнение

CountCur : Boolean; // Проверка существует ли такая запись

begin

Remuneration_Amount:=StrToInt(FileForm.Edit1.Text);

Surname:=FileForm.Edit2.Text;

Name:=FileForm.Edit3.Text;

Patronymic_Name:=FileForm.Edit4.Text;

City:=FileForm.Edit5.Text;

Code:=FileForm.Edit6.Text;

CountCur:=False;

MainForm.Cur1:=MainForm.first1;

while MainForm.cur1<>NIL do

begin

if (Remuneration_Amount=MainForm.cur1^.Remuneration_Amount) then

begin

MainForm.cur2:=MainForm.cur1^.S;

while MainForm.cur2<>NIL do

begin

if (Remuneration_Amount=MainForm.cur1^.Remuneration_Amount) and

(Surname=MainForm.cur2^.Surname) and

(Name=MainForm.cur2^.Name) and

(Patronymic_Name=MainForm.cur2^.Patronymic_Name) and

(Code=MainForm.cur2^.Code) and

(City=MainForm.cur2^.City) then

begin

CountCur:=True;

{Логическое удаление записи из структуры}

MainForm.cur2^.Sing_of_termination:=1;

end;

MainForm.cur2:=MainForm.cur2^.Next;

end;

end;

MainForm.cur1:=MainForm.cur1^.L;

end;

if CountCur then

MessageBox(0,'Запись удалена','Собщение',MB_OK)

else

MessageBox(0,'Данной записи не существует в структуре','Удаление не возможно',MB_OK);

end;

end.

unit FileUnit;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, Buttons, ExtCtrls, Grids;

type

TFileForm = class(TForm)

OneRecord: TPanel;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

Label7: TLabel;

Label8: TLabel;

Label9: TLabel;

Label10: TLabel;

Label11: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Edit4: TEdit;

Edit5: TEdit;

Edit6: TEdit;

Edit7: TEdit;

Edit8: TEdit;

Edit9: TEdit;

Edit10: TEdit;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

AllRecord: TPanel;

StringGrid1: TStringGrid;

BitBtn3: TBitBtn;

CheckBox1: TCheckBox;

CheckBox2: TCheckBox;

CheckBox3: TCheckBox;

CheckBox4: TCheckBox;

CheckBox5: TCheckBox;

CheckBox6: TCheckBox;

procedure BitBtn1Click(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

published

procedure Clear; {Процедура производит очистку полей Edit.Text}

private

{ Private declarations }

public

{ Public declarations }

end;

var

FileForm: TFileForm;

implementation

uses Main, Struct;

{$R *.DFM}

procedure TFileForm.BitBtn1Click(Sender: TObject);

begin

if MainForm.RadioGroup1.ItemIndex=0 then

case MainForm.RadioGroup2.ItemIndex of

0 : begin

{Ввод записей в файл хоздоговоров}

MainForm.zXD.Number:=StrToInt(FileForm.Edit1.Text);

MainForm.zXD.Date_of_conclusions:=FileForm.Edit2.Text;

MainForm.zXD.Date_of_terminations:=FileForm.Edit3.Text;

MainForm.zXD.Subject_of_agreement:=FileForm.Edit4.Text;

MainForm.zXD.Name_of_organization:=FileForm.Edit5.Text;

MainForm.zXD.Sing_of_termination:=StrToInt(FileForm.Edit6.Text);

MainForm.zXd.Cost:=StrToInt(FileForm.Edit7.Text);

write(MainForm.fXD,MainForm.zXD);

FileForm.Clear;

end;

1 : begin

{Ввод записей в файл исполнителей}

MainForm.zWTK.Surname:=FileForm.Edit1.Text;

MainForm.zWTK.Name:=FileForm.Edit2.Text;

MainForm.zWTK.Patronymic_name:=FileForm.Edit3.Text;

MainForm.zWTK.Of_birth:=StrToInt(FileForm.Edit4.Text);

MainForm.zWTK.Code:=FileForm.Edit5.Text;

MainForm.zWTK.Sign:=StrToInt(FileForm.Edit6.Text);

MainForm.zWTK.Remuneration_Amount:=StrToInt(FileForm.Edit7.Text);

MainForm.zWTK.Home_Address:=FileForm.Edit8.Text;

MainForm.zWTK.Branch_Number:=FileForm.Edit9.Text;

MainForm.zWTK.Accouting_count:=FileForm.Edit10.Text;

write(MainForm.fWTK,MainForm.zWTK);

FileForm.Clear;

end;

2 : begin

{Ввод записей в файл отделения сбербанка}

MainForm.zBANK.Branch_Name:=FileForm.Edit1.Text;

MainForm.zBANK.City:=FileForm.Edit2.Text;

MainForm.zBANK.Address:=FileForm.Edit3.Text;

MainForm.zBANK.Name_of_branch:=FileForm.Edit4.Text;

MainForm.zBANK.Bank_Code:=FileForm.Edit5.Text;

write(MainForm.fBANK,MainForm.zBANK);

FileForm.Clear;

end;

end;

if MainForm.RadioGroup3.ItemIndex=1 then

begin

{Поиск}

Find;

end;

if MainForm.RadioGroup3.ItemIndex=2 then

begin

{Добавление}

Insert;

FileForm.Clear;

Sort(1);

end;

if MainForm.RadioGroup3.ItemIndex=3 then

begin

{Удаление}

Delete;

FileForm.Clear;

Sort(1);

end;

end;

procedure TFileForm.BitBtn2Click(Sender: TObject);

begin

if MainForm.RadioGroup1.ItemIndex=0 then

case MainForm.RadioGroup2.ItemIndex of

0 : begin

CloseFile(MainForm.fXD);

end;

1 : begin

CloseFile(MainForm.fWTK);

end;

2 : begin

CloseFile(MainForm.fBANK);

end;

end;

FileForm.BitBtn1.Caption:='Следующая запись';

end;

procedure TFileForm.Clear;

begin

FileForm.Edit1.Text:='';

FileForm.Edit2.Text:='';

FileForm.Edit3.Text:='';

FileForm.Edit4.Text:='';

FileForm.Edit5.Text:='';

FileForm.Edit6.Text:='';

FileForm.Edit7.Text:='';

FileForm.Edit8.Text:='';

FileForm.Edit9.Text:='';

FileForm.Edit10.Text:='';

end;

end.

unit Perem;

interface

Type

TString = String[30];

XD = record

Number : Byte; // Номер договора

Date_of_conclusions : TString; // Дата заключения договора

Date_of_terminations : TString; // Дата завершения договора

Subject_of_agreement : TString; // Тема договора

Name_of_organization : TString; // Наименование организации

Sing_of_termination : Byte; // Признак завершения (1 - завершен, 0 - незавершен )

Cost : Word; // Стоимость

end;

WTK = record

Surname : TString; // Фамилия

Name : TString; // Имя

Patronymic_name : TString; // Отчество

Of_birth : Word; // Год рождения

Code : TString; // Код ХД

Sign : Byte; // Признак 1- руководитель, 0 - рядовой

Remuneration_Amount : Word; // Сумма вознаграждения

Home_Address : TString; // Домашний адрес

Branch_Number : String[4]; // Номер отделения четырехзначный

Accouting_count : String[7]; // Расчетный счет исполнителя семизначное число

end;

BANK = record

Branch_Name : String[7]; // Номер отделения четырехзначное число

City : TString; // Город, в котором находится отделение

Address : TString; // Адрес без указания города

Name_of_branch : TString; // Ноименование отдела

Bank_Code : String[3]; // Трехзначный банковский код

end;

TSecondLeval = ^SecondLevel;

SecondLevel = record

Surname : TString; // Фамилия

Name : TString; // Имя

Patronymic_Name : TString; // Отчество

Code : TString; // Код ХД

City : TString; // Город в котором находится отделнение

Branch_Number : TString; // Номер отделения четырехзначной

Sing_of_termination : Byte; // Признак завершения (1- завершен, 0 - незавршен)

Next : TSecondLeval; // Ссылка на следующий элемент

end;

TFirstLevel = ^FirstLevel;

FirstLevel = record

Remuneration_Amount : Word; // Сумма вознаграждения

L : TFirstLevel; // Ссылка на следующий элемент

S : TSecondLeval; // Ссылка на второй уровень иерархической структуры

end;

implementation

end.

unit Prosmotr;

{ Просмотр теоретических сведений}

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, Buttons, ExtCtrls;

type

TTeor = class(TForm)

Memo1: TMemo;

Image1: TImage;

BitBtn2: TBitBtn;

BitBtn1: TBitBtn;

procedure BitBtn1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Teor: TTeor;

implementation

{$R *.DFM}

procedure TTeor.BitBtn1Click(Sender: TObject);

begin

if Teor.BitBtn1.Caption='Рисунок' then

begin

Teor.Memo1.Visible:=False;

Teor.Image1.Visible:=True;

Teor.BitBtn1.Caption:='Текст';

end

else

begin

Teor.Memo1.Visible:=True;

Teor.Image1.Visible:=False;

Teor.BitBtn1.Caption:='Рисунок';

end;

end;

end.