Заключение
Рассмотрена двухуровневая иерархическая структура. Программа при тестировании показала положительные результаты при работе с различными данными.
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.