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

Эти операции затем повторяются с оставшимися n2 элементами, затем с n3 элементами, пока не останется только один элемент  наибольший.

  1. Main.Cur:=Main.First; //Указатель перемещается на первую запись

«Рисунок 4.1 – Начальное состояние»

  1. Поиск наименьшего элемента во всем списке:

for q:=1 to i-1 do

Main.Cur:=Main.Cur^.Next;

X.Surname:=Main.Cur^.Surname;

X.Name:=Main.Cur^.Name;

X.Patronymic_name:=Main.Cur^.Patronymic_name;

X.Of_birth:=Main.Cur^.Of_birth;

X.Code:=Main.Cur^.Code;

X.Branch_Number:=Main.Cur^.Branch_Number;

for j:=i+1 to n do

begin

Main.Cur:=Main.First;

for q:=1 to j-1 do

Main.Cur:=Main.Cur^.Next;

if ((Main.Cur^.Surname<X.Surname) AND (TypeSort)) OR

((Main.Cur^.Surname>X.Surname) AND (TypeSort=False))

«Рисунок 4.2 – Поиск наименьшего элемента»

  1. Перемещение наименьшего элемента на первую позицию:

k:=j;

Main.Cur:=Main.First;

for q:=1 to k-1 do

Main.Cur:=Main.Cur^.Next;

X.Surname:=Main.Cur^.Surname;

X.Name:=Main.Cur^.Name;

X.Patronymic_name:=Main.Cur^.Patronymic_name;

X.Of_birth:=Main.Cur^.Of_birth;

X.Code:=Main.Cur^.Code;

X.Branch_Number:=Main.Cur^.Branch_Number;

«Рисунок 4.3 – Перемещение наименьшего элемента на первую позицию»

Добавление.

Фрагмент программного кода организации вставки:

begin

Main.Cur:=Main.First;

while Main.Cur^.Next<>NIL do

Main.Cur:=Main.Cur^.Next;

New(Main.Cur^.Next);

Main.Cur:=Main.Cur^.Next;

Main.Cur^.Surname:=Main.Surname.Text;

Main.Cur^.Name:=Main.Name.Text;

Main.Cur^.Patronymic_name:=Main.Patronymic.Text;

Main.Cur^.Of_birth:=StrToInt(Main.Of_birth.Text);

Main.Cur^.Code:=Main.Code.Text;

Main.Cur^.Branch_Number:=Main.Branch.Text;

Main.Cur^.Next:=NIL;

end;

Начальное состояние структуры показано на рисунке 4.4.

«Рисунок 4.4 – Начальное состояние структуры»

Конечное состояние структуры показано на рисунке 4.5.

«Рисунок 4.5 – Конечное состояние структуры»

Исключение.

Начальное состояние структуры показано на рисунке 4.6 .

«Рисунок 4.6 – Начальное состояние структуры»

Конечное состояние структуры показано на рисунке 4.7.

While Main.Cur^.Next<>NIL do

begin

if (Main.Cur^.Next^.Surname=Main.Surname.Text) and

(Main.Cur^.Next^.Name=Main.Name.Text) and

(Main.Cur^.Next^.Patronymic_name=Main.Patronymic.Text) and

(IntToStr(Main.Cur^.Next^.Of_birth)=Main.Of_birth.Text) and

(Main.Cur^.Next^.Code=Main.Code.Text) and

(Main.Cur^.Next^.Branch_Number=Main.Branch.Text) then

begin // Удаление записи

Cur:=Main.Cur^.Next;

Main.Cur^.Next:=Cur^.Next;

«Рисунок 4.7 – Конечное состояние структуры»

ВЫВОДЫ

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

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

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

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

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

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

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

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

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

ПРИЛОЖЕНИЕ А

program Project1;

uses

Forms,

MainUnit in 'MainUnit.pas' {Main},

Perem in 'Perem.pas',

Struct in 'Struct.pas';

{$R *.RES}

begin

Application.Initialize;

Application.CreateForm(TMain, Main);

Application.Run;

end.

unit MainUnit;

unit MainUnit;

interface

uses

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

Menus, Perem, Grids, Struct, StdCtrls, Buttons, Spin;

type

TMain = class(TForm)

MainMenu1: TMainMenu;

Files: TMenuItem;

Operations: TMenuItem;

New: TMenuItem;

Open: TMenuItem;

Save: TMenuItem;

N7: TMenuItem;

Exit: TMenuItem;

Shaping: TMenuItem;

NewXD: TMenuItem;

NewWTK: TMenuItem;

NewBANK: TMenuItem;

OpenXD: TMenuItem;

OpenWTK: TMenuItem;

OpenBank: TMenuItem;

SaveXD: TMenuItem;

SaveWTK: TMenuItem;

SaveBANK: TMenuItem;

Viewing: TMenuItem;

Adjustment: TMenuItem;

Sorting: TMenuItem;

Growth: TMenuItem;

Decrease: TMenuItem;

DelZap: TMenuItem;

EditZap: TMenuItem;

InsertZap: TMenuItem;

Searching: TMenuItem;

StringGrid1: TStringGrid;

PopupMenu1: TPopupMenu;

AddRow: TMenuItem;

N2: TMenuItem;

DeleteRow: TMenuItem;

OpenDialog1: TOpenDialog;

SaveDialog1: TSaveDialog;

CheckBox1: TCheckBox;

CheckBox2: TCheckBox;

CheckBox3: TCheckBox;

CheckBox4: TCheckBox;

CheckBox5: TCheckBox;

CheckBox6: TCheckBox;

Surname: TEdit;

Name: TEdit;

Patronymic: TEdit;

Of_birth: TEdit;

Code: TEdit;

Branch: TEdit;

BitBtn1: TBitBtn;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

BitBtn3: TBitBtn;

N1: TMenuItem;

N121: TMenuItem;

Label7: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Label8: TLabel;

Button1: TButton;

procedure NewXDClick(Sender: TObject);

procedure NewWTKClick(Sender: TObject);

procedure NewBANKClick(Sender: TObject);

procedure AddRowClick(Sender: TObject);

procedure DeleteRowClick(Sender: TObject);

procedure OpenXDClick(Sender: TObject);

procedure OpenWTKClick(Sender: TObject);

procedure OpenBankClick(Sender: TObject);

procedure SaveXDClick(Sender: TObject);

procedure SaveWTKClick(Sender: TObject);

procedure SaveBANKClick(Sender: TObject);

procedure ExitClick(Sender: TObject);

procedure ShapingClick(Sender: TObject);

procedure ViewingClick(Sender: TObject);

procedure DelZapClick(Sender: TObject);

procedure InsertZapClick(Sender: TObject);

procedure EditZapClick(Sender: TObject);

procedure GrowthClick(Sender: TObject);

procedure DecreaseClick(Sender: TObject);

procedure SearchingClick(Sender: TObject);

procedure BitBtn1Click(Sender: TObject);

procedure BitBtn3Click(Sender: TObject);

procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;

var CanSelect: Boolean);

procedure N1Click(Sender: TObject);

procedure N121Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

FileXD : file of XD; // Файловая переменная файла хоздоговоров

FileWTK : file of WTK; // Файловая переменная файла исполнителей

FileBANK : file of BANK; // Файловая переменная файла отделения сбербанка

zXD : XD; // Запись хоздоговоров

zWTK : WTK; // Запись исполнителей

zBANK : BANK; // Запись отделения сбербанка

Cur : TLos; // Указатель на текущий элемент структуры

First : TLos; // Указатель на первый элемент структуры

CountAdjustment : Byte; // Выбор (удаление, добавление, редактирование)

end;

var

Main: TMain;

Num : integer;

implementation

var

i, j : Byte;

{$R *.DFM}

procedure TMain.NewXDClick(Sender: TObject);

begin

// Создание таблицы для занесения данных в файл хоздоговоров

Main.PopupMenu1.AutoPopup:=True;

// Свойства таблицы

Main.StringGrid1.Options:=[goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine,goRangeSelect,goEditing,goTabs];

Main.StringGrid1.Visible:=True; // Делает видимой таблицу

Main.StringGrid1.RowCount:=2; // Количество строк

Main.StringGrid1.ColCount:=7; // Количество столбцов

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

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

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

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

Main.StringGrid1.Cells[4,0]:='Организация заказчик';

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

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

for i:=0 to 6 do // Обнуляет столбцы последеней строки

Main.StringGrid1.Cells[i,1]:='';

Main.SaveXD.Enabled:=True;

Main.SaveWTK.Enabled:=False;

Main.SaveBANK.Enabled:=False;

end;

procedure TMain.NewWTKClick(Sender: TObject);

begin

// Создание таблицы для занесения данных в файл исполнителей

Main.PopupMenu1.AutoPopup:=True;

// Свойства таблицы

Main.StringGrid1.Options:=[goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine,goRangeSelect,goEditing,goTabs];

Main.StringGrid1.Visible:=True; // Делает видимой таблицу

Main.StringGrid1.RowCount:=2; // Количество строк

Main.StringGrid1.ColCount:=10; // Количестов столбцов

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

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

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

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

Main.StringGrid1.Cells[4,0]:='Признак рук./ряд. 1/0';

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

Main.StringGrid1.Cells[6,0]:='Сумма вознаграждения';

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

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

Main.StringGrid1.Cells[9,0]:='Расчётный счёт';

for i:=0 to 9 do // Обнуляет столбцы последеней строки

Main.StringGrid1.Cells[i,1]:='';

Main.SaveXD.Enabled:=False;

Main.SaveWTK.Enabled:=True;

Main.SaveBANK.Enabled:=False;

end;

procedure TMain.NewBANKClick(Sender: TObject);

begin

// Создание таблицы для занесения данных в файл отделения сбербанка

Main.PopupMenu1.AutoPopup:=True;

// Свойства таблицы

Main.StringGrid1.Options:=[goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine,goRangeSelect,goEditing,goTabs];

Main.StringGrid1.Visible:=True; // Делает видимой таблицу

Main.StringGrid1.RowCount:=2; // Количество строк

Main.StringGrid1.ColCount:=5; // Количество столбцов

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

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

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

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

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

for i:=0 to 4 do // Обнуляет столбцы последеней строки

Main.StringGrid1.Cells[i,1]:='';

Main.SaveXD.Enabled:=False;

Main.SaveWTK.Enabled:=False;

Main.SaveBANK.Enabled:=True;

end;

procedure TMain.AddRowClick(Sender: TObject);

var

Row : Byte; // Текущий столбец

begin

// Добавить строку в таблицу

// Строка добавляется в конец таблицы

Row:=Main.StringGrid1.Row; // Содержится номер выбранногг строки

Main.StringGrid1.RowCount:=Main.StringGrid1.RowCount+1; // Добавление в таблицу столбца

if Main.StringGrid1.RowCount-2<>Row then // Столбец добавляется в промежутке между первым и последним столбцом

begin

for j:=Main.StringGrid1.RowCount-1 downto Row+1 do

for i:=0 to Main.StringGrid1.ColCount-1 do

Main.StringGrid1.Cells[i,j]:=Main.StringGrid1.Cells[i,j-1];

for i:=0 to Main.StringGrid1.ColCount-1 do

Main.StringGrid1.Cells[i,Row+1]:=''; // Обнуления полей нового столбца

end

else

for i:=0 to Main.StringGrid1.ColCount-1 do

Main.StringGrid1.Cells[i,Main.StringGrid1.RowCount-1]:=''; // Обнуления полей нового столбца

end;

procedure TMain.DeleteRowClick(Sender: TObject);

Var

Row : Byte; // Текущий столбец

begin

// Удаление текущего столбца

Row:=Main.StringGrid1.Row; // Содержится номер выбранного столба

if Main.StringGrid1.RowCount>2 then

begin

if Row=Main.StringGrid1.RowCount-1 then

// Выбран последний столбец

Main.StringGrid1.RowCount:=Main.StringGrid1.RowCount-1

else

begin // Выбран не последний столбей

for i:=Row to Main.StringGrid1.RowCount-1 do

for j:=0 to Main.StringGrid1.ColCount-1 do

Main.StringGrid1.Cells[j,i]:=Main.StringGrid1.Cells[j,i+1];

Main.StringGrid1.RowCount:=Main.StringGrid1.RowCount-1;

end;

end

else

for i:=0 to Main.StringGrid1.ColCount-1 do

Main.StringGrid1.Cells[i,Main.StringGrid1.RowCount-1]:=''; // Обнуления полей нового столбца

end;

procedure TMain.OpenXDClick(Sender: TObject);

var

Count : Byte; // Количество записей в таблице

begin

// Просмотр записей файла хоздоговоров

Main.PopupMenu1.AutoPopup:=True;

// Свойства таблицы

Main.StringGrid1.Options:=[goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine,goRangeSelect,goEditing,goTabs];

Main.StringGrid1.Visible:=True; // Делает видимой таблицу

Main.StringGrid1.RowCount:=2; // Количество строк

Main.StringGrid1.ColCount:=7; // Количество столбцов

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

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

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

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

Main.StringGrid1.Cells[4,0]:='Организация заказчик';

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

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

Main.OpenDialog1.Execute; // Выводит диалоговое окно для выбора имени файла, который следует открыть

AssignFile(Main.FileXD,Main.OpenDialog1.FileName); // Связывает логческое имя файла с именем файла

Reset(Main.FileXD); // Открывает файл для чтения

Count:=0; // Обнуления количества элементов

while not (eof(Main.FileXD)) do // Считывает все записи файла

begin

read(Main.FileXD,Main.zXD); // Считывае одну запись из файла

Inc(Count); // Увеличивает счетчик на единицу

Main.StringGrid1.RowCount:=Count+1; // Увеличивает количество столбцов в таблице

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

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

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

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

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

if Main.zXD.Sing_of_termination=1 then

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

else

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

Main.StringGrid1.Cells[6,Count]:=IntToStr(Main.zXD.Cost);

end;

CloseFile(Main.FileXD); // Закрытие файла

Main.SaveXD.Enabled:=True;

Main.SaveWTK.Enabled:=False;

Main.SaveBANK.Enabled:=False;

end;

procedure TMain.OpenWTKClick(Sender: TObject);

var

Count : Byte; // Количество записей в таблице

begin

// Просмотр записей файла исполнителей

Main.PopupMenu1.AutoPopup:=True;

// Свойства таблицы

Main.StringGrid1.Options:=[goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine,goRangeSelect,goEditing,goTabs];

Main.StringGrid1.Visible:=True; // Делает видимой таблицу

Main.StringGrid1.RowCount:=2; // Количество строк

Main.StringGrid1.ColCount:=10; // Количество столбцов

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

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

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

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

Main.StringGrid1.Cells[4,0]:='Признак рук./ряд.';

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

Main.StringGrid1.Cells[6,0]:='Сумма вознаграждения';

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

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

Main.StringGrid1.Cells[9,0]:='Расчётный счёт';

Main.OpenDialog1.Execute; // Выводит диалоговое окно для выбора имени файла, который следует открыть

AssignFile(Main.FileWTK,Main.OpenDialog1.FileName); // Связывает логческое имя файла с именем файла

Reset(Main.FileWTK); // Открывает файл для чтения

Count:=0; // Обнуления количества элементов

while not (eof(Main.FileWTK)) do // Считывает все записи файла

begin

read(Main.FileWTK,Main.zWTK); // Считывае одну запись из файла

Inc(Count); // Увеличивает счетчик на единицу

Main.StringGrid1.RowCount:=Count+1; // Увеличивает количество столбцов в таблице

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

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

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

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

if Main.zWTK.Sign=1 then

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

else

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

Main.StringGrid1.Cells[5,Count]:=Main.zWTK.Code;

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

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

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

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

end;

CloseFile(Main.FileWTK); // Закрытие файла

Main.SaveWTK.Enabled:=True;

Main.SaveXD.Enabled:=False;

Main.SaveBANK.Enabled:=False;

end;

procedure TMain.OpenBankClick(Sender: TObject);

var

Count : Byte; // Количество записей в таблице

begin

// Просмотр записей файла отделения сбербанка

Main.PopupMenu1.AutoPopup:=True;

// Свойства таблицы

Main.StringGrid1.Options:=[goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine,goRangeSelect,goEditing,goTabs];

Main.StringGrid1.Visible:=True; // Делает видимой таблицу

Main.StringGrid1.RowCount:=2; // Количество строк

Main.StringGrid1.ColCount:=5; // Количество столбцов

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

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

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

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

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

Main.OpenDialog1.Execute; // Выводит диалоговое окно для выбора имени файла, который следует открыть

AssignFile(Main.FileBANK,Main.OpenDialog1.FileName); // Связывает логческое имя файла с именем файла

Reset(Main.FileBANK); // Открывает файл для чтения

Count:=0; // Обнуления количества элементов

while not (eof(Main.FileBANK)) do // Считывает все записи файла

begin

read(Main.FileBANK,Main.zBANK); // Считывае одну запись из файла

Inc(Count); // Увеличивает счетчик на единицу

Main.StringGrid1.RowCount:=Count+1; // Увеличивает количество столбцов в таблице

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

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

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

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

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

end;

CloseFile(Main.FileBANK); // Закрытие файла

Main.SaveBANK.Enabled:=True;

Main.SaveXD.Enabled:=False;

Main.SaveWTK.Enabled:=False;

end;

procedure TMain.SaveXDClick(Sender: TObject);

begin

// Сохранения записей в файл хоздоговоров

Main.SaveDialog1.Execute; // Выводит диалоговое окна для выбора имени для сохранения файла

AssignFile(Main.FileXD,Main.SaveDialog1.FileName); // Связывает логическое имя файла с выбранным именем файла

Rewrite(Main.FileXD); // Открывает файл для записи

for i:=1 to Main.StringGrid1.RowCount-1 do

begin

Main.zXD.Number:=StrToInt(Main.StringGrid1.Cells[0,i]);

Main.zXD.Date_of_conclusions:=Main.StringGrid1.Cells[1,i];

Main.zXD.Date_of_terminations:=Main.StringGrid1.Cells[2,i];

Main.zXD.Subject_of_agreement:=Main.StringGrid1.Cells[3,i];

Main.zXD.Name_of_organization:=Main.StringGrid1.Cells[4,i];

if Main.StringGrid1.Cells[5,i]='Завершен' then

Main.zXD.Sing_of_termination:=1

else

if Main.StringGrid1.Cells[5,i]='Незавершен' then

Main.zXD.Sing_of_termination:=0

else

Main.zXD.Sing_of_termination:=StrToInt(Main.StringGrid1.Cells[5,i]);

Main.zXD.Cost:=StrToInt(Main.StringGrid1.Cells[6,i]);

write(Main.FileXD,Main.zXD); // Запись записи в файл

end;

CloseFile(Main.FileXD); // Закрытие файла

end;

procedure TMain.SaveWTKClick(Sender: TObject);

begin

// Сохранения записей в файл исполнителей

Main.SaveDialog1.Execute; // Выводит диалоговое окна для выбора имени для сохранения файла

AssignFile(Main.FileWTK,Main.SaveDialog1.FileName); // Связывает логическое имя файла с выбранным именем файла

Rewrite(Main.FileWTK); // Открывает файл для записи

for i:=1 to Main.StringGrid1.RowCount-1 do

begin

Main.zWTK.Surname:=Main.StringGrid1.Cells[0,i];

Main.zWTK.Name:=Main.StringGrid1.Cells[1,i];

Main.zWTK.Patronymic_name:=Main.StringGrid1.Cells[2,i];

Main.zWTK.Of_birth:=StrToInt(Main.StringGrid1.Cells[3,i]);

if Main.StringGrid1.Cells[4,i]='Руководитель' then

Main.zWTK.Sign:=1

else

if Main.StringGrid1.Cells[4,i]='Рядовой' then

Main.zWTK.Sign:=0

else

Main.zWTK.Sign:=StrToInt(Main.StringGrid1.Cells[4,i]);

Main.zWTK.Code:=Main.StringGrid1.Cells[5,i];

Main.zWTK.Remuneration_Amount:=StrToInt(Main.StringGrid1.Cells[6,i]);

Main.zWTK.Home_Address:=Main.StringGrid1.Cells[7,i];

Main.zWTK.Branch_Number:=Main.StringGrid1.Cells[8,i];

Main.zWTK.Accouting_count:=Main.StringGrid1.Cells[9,i];

write(Main.FileWTK,Main.zWTK); // Запись записи в файл

end;

CloseFile(Main.FileWTK); // Закрытие файла

end;

procedure TMain.SaveBANKClick(Sender: TObject);

begin

// Сохранения записей в файл отделение сбербанка

Main.SaveDialog1.Execute; // Выводит диалоговое окна для выбора имени для сохранения файла

AssignFile(Main.FileBANK,Main.SaveDialog1.FileName); // Связывает логическое имя файла с выбранным именем файла

Rewrite(Main.FileBANK); // Открывает файл для записи

for i:=1 to Main.StringGrid1.RowCount-1 do

begin

Main.zBANK.Branch_Name:=Main.StringGrid1.Cells[0,i];

Main.zBANK.City:=Main.StringGrid1.Cells[1,i];

Main.zBANK.Address:=Main.StringGrid1.Cells[2,i];

Main.zBANK.Name_of_branch:=Main.StringGrid1.Cells[3,i];

Main.zBANK.Bank_Code:=Main.StringGrid1.Cells[4,i];

write(Main.FileBANK,Main.zBANK); // Запись записи в файл

end;

CloseFile(Main.FileBANK); // Закрытие файла

end;

procedure TMain.ExitClick(Sender: TObject);

begin

// Завершить работу приложения

Close;

end;

procedure TMain.ShapingClick(Sender: TObject);

begin

// Формирование линейного односвязного списка

Main.SaveXD.Enabled:=False;

Main.SaveWTK.Enabled:=False;

Main.SaveBANK.Enabled:=False;

Main.Operations.Enabled:=True;

Main.N121.Enabled:=True;

Main.Operations.Enabled:=True;

ShapingLos;

end;

procedure TMain.ViewingClick(Sender: TObject);

begin

// Просмотр линейного односвязного списка

Main.PopupMenu1.AutoPopup:=False;

// Свойства таблицы

Main.StringGrid1.Options:=[goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine,goRangeSelect];

ViewingLos;

end;

procedure TMain.DelZapClick(Sender: TObject);

begin

// Удаление записи из списка

Main.StringGrid1.Visible:=False;

Main.Label1.Visible:=True;

Main.Label2.Visible:=True;

Main.Label3.Visible:=True;

Main.Label4.Visible:=True;

Main.Label5.Visible:=True;

Main.Label6.Visible:=True;

Main.Surname.Visible:=True;

Main.Name.Visible:=True;

Main.Patronymic.Visible:=True;

Main.Of_birth.Visible:=True;

Main.Code.Visible:=True;

Main.Branch.Visible:=True;

Main.BitBtn1.Visible:=True;

Main.BitBtn3.Visible:=True;

Main.Surname.Text:='';

Main.Name.Text:='';

Main.Patronymic.Text:='';

Main.Of_birth.Text:='';

Main.Code.Text:='';

Main.Branch.Text:='';

Main.CountAdjustment:=1;

end;

procedure TMain.InsertZapClick(Sender: TObject);

begin

// Добавление записи в список

Main.StringGrid1.Visible:=False;

Main.Label1.Visible:=True;

Main.Label2.Visible:=True;

Main.Label3.Visible:=True;

Main.Label4.Visible:=True;

Main.Label5.Visible:=True;

Main.Label6.Visible:=True;

Main.Surname.Visible:=True;

Main.Name.Visible:=True;

Main.Patronymic.Visible:=True;

Main.Of_birth.Visible:=True;

Main.Code.Visible:=True;

Main.Branch.Visible:=True;

Main.BitBtn1.Visible:=True;

Main.BitBtn3.Visible:=True;

Main.Surname.Text:='';

Main.Name.Text:='';

Main.Patronymic.Text:='';

Main.Of_birth.Text:='';

Main.Code.Text:='';

Main.Branch.Text:='';

Main.CountAdjustment:=2;

end;

procedure TMain.EditZapClick(Sender: TObject);

begin

// Редактировать записи

Main.PopupMenu1.AutoPopup:=False;

// Свойства таблицы

Main.StringGrid1.Options:=[goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine,goRangeSelect,goEditing,goTabs];

ViewingLos;

Main.BitBtn1.Visible:=True;

Main.CountAdjustment:=3;

end;

procedure TMain.GrowthClick(Sender: TObject);

begin

// Сортировать по возрастанию

Sort(True);

ViewingLos;

end;

procedure TMain.DecreaseClick(Sender: TObject);

begin

// Сортировать по убыванию

Sort(False);

ViewingLos;

end;

procedure TMain.SearchingClick(Sender: TObject);

begin

// Поиск записей

Main.CountAdjustment:=4;

Main.StringGrid1.Visible:=False;

Main.CheckBox1.Visible:=True;

Main.CheckBox2.Visible:=True;

Main.CheckBox3.Visible:=True;

Main.CheckBox4.Visible:=True;

Main.CheckBox5.Visible:=True;

Main.CheckBox6.Visible:=True;

Main.Surname.Visible:=True;

Main.Name.Visible:=True;

Main.Patronymic.Visible:=True;

Main.Of_birth.Visible:=True;

Main.Code.Visible:=True;

Main.Branch.Visible:=True;

Main.BitBtn1.Visible:=True;

Main.BitBtn3.Visible:=True;

Main.Surname.Text:='';

Main.Name.Text:='';

Main.Patronymic.Text:='';

Main.Of_birth.Text:='';

Main.Code.Text:='';

Main.Branch.Text:='';

end;

procedure TMain.BitBtn1Click(Sender: TObject);

begin

Case CountAdjustment of

1 : Delete; // Удаление записи из списка

2 : Add; // Добавление записи

3 : Insert; // Редактирование записей

4 : Find; // Поск записей

5 : AddInst;// Вставка записи

end;

Main.Label1.Visible:=False;

Main.Label2.Visible:=False;

Main.Label3.Visible:=False;

Main.Label4.Visible:=False;

Main.Label5.Visible:=False;

Main.Label6.Visible:=False;

Main.CheckBox1.Visible:=False;

Main.CheckBox2.Visible:=False;

Main.CheckBox3.Visible:=False;

Main.CheckBox4.Visible:=False;

Main.CheckBox5.Visible:=False;

Main.CheckBox6.Visible:=False;

Main.Surname.Visible:=False;

Main.Name.Visible:=False;

Main.Patronymic.Visible:=False;

Main.Of_birth.Visible:=False;

Main.Code.Visible:=False;

Main.Branch.Visible:=False;

Main.BitBtn1.Visible:=False;

Main.BitBtn3.Visible:=False;

Label7.Enabled:=False;

Label8.Enabled:=False;

Button1.Enabled:=False;

Edit1.Enabled:=False;

Edit2.Enabled:=False;

Label7.Enabled:=False;

Label8.Enabled:=False;

Button1.Enabled:=False;

Edit1.Enabled:=False;

Edit2.Enabled:=False;

end;

procedure TMain.BitBtn3Click(Sender: TObject);

begin

// Отмена (удаления, добавления, поиск)

Main.Label1.Visible:=False;

Main.Label2.Visible:=False;

Main.Label3.Visible:=False;

Main.Label4.Visible:=False;

Main.Label5.Visible:=False;

Main.Label6.Visible:=False;

Main.CheckBox1.Visible:=False;

Main.CheckBox2.Visible:=False;

Main.CheckBox3.Visible:=False;

Main.CheckBox4.Visible:=False;

Main.CheckBox5.Visible:=False;

Main.CheckBox6.Visible:=False;

Main.Surname.Visible:=False;

Main.Name.Visible:=False;

Main.Patronymic.Visible:=False;

Main.Of_birth.Visible:=False;

Main.Code.Visible:=False;

Main.Branch.Visible:=False;

Main.BitBtn1.Visible:=False;

Main.BitBtn3.Visible:=False;

end;

procedure TMain.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;

var CanSelect: Boolean);

begin

Num := ARow-1;

end;

procedure TMain.N1Click(Sender: TObject);

begin

Main.StringGrid1.Visible:=False;

Main.Label1.Visible:=True;

Main.Label2.Visible:=True;

Main.Label3.Visible:=True;

Main.Label4.Visible:=True;

Main.Label5.Visible:=True;

Main.Label6.Visible:=True;

Main.Surname.Visible:=True;

Main.Name.Visible:=True;

Main.Patronymic.Visible:=True;

Main.Of_birth.Visible:=True;

Main.Code.Visible:=True;

Main.Branch.Visible:=True;

Main.BitBtn1.Visible:=True;

Main.BitBtn3.Visible:=True;

Main.Surname.Text:='';

Main.Name.Text:='';

Main.Patronymic.Text:='';

Main.Of_birth.Text:='';

Main.Code.Text:='';

Main.Branch.Text:='';

Main.CountAdjustment:=5;

end;

procedure TMain.N121Click(Sender: TObject);

begin

Main.StringGrid1.Visible:=False;

Main.Label7.Visible:=True;

Main.Edit1.Visible:=True;

Main.Edit2.Visible:=True;

Main.Button1.Visible:=True;

end;

procedure TMain.Button1Click(Sender: TObject);

begin

Main.Label7.Visible:=False;

Main.Edit1.Visible:=False;

Main.Edit2.Visible:=False;

Main.Button1.Visible:=False;

F11;

end;

end.

unit Perem;

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[4] ; // Номер отделения четырехзначное число

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

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

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

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

end;

TLos = ^ZLos;

ZLos = record

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

Name : TString; // Имя

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

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

Code : TString; // Код ХД

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

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

end;

ZapLos = record

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

Name : TString; // Имя

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

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

Code : TString; // Код ХД

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

end;

implementation

end.

unit Struct;

unit Struct;

interface

procedure ShapingLos; // Формирование линейного односвязного списка

procedure ViewingLos; // Просмот лиейного односвязного списка

procedure Delete; // Удаление одной записи в списке

procedure Add; // Добавление записи

procedure Insert; // Редактирование записей

procedure Sort(TypeSort : Boolean); //Сортировка прямым выбором (True - по возрастанию, False - по убыванию)

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

procedure AddInst;

procedure F11;

implementation

Uses

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

Menus, Perem, Grids, MainUnit;

procedure ShapingLos; // Формирование линейного односвязного списка

var

Code : TString; // Код ХД

Len : Byte; // Длина слова

CheckLos : Boolean; // Проверка есть в списке записи или нет

begin

// Вывод диалогового окна с указание последовательности действий

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

Main.OpenDialog1.Execute; // Выводит диалоговое окно для выбора имени файла

AssignFile(Main.FileXD,Main.OpenDialog1.FileName); // Связь логического имени файла с выбранным именем

Reset(Main.FileXD);

Main.OpenDialog1.Execute; // Выводит диалоговое окно для выбора имени файла

AssignFile(Main.FileWTK,Main.OpenDialog1.FileName); // Связь логического имени файла с выбранным именем

CheckLos:=False;

while not (eof(Main.FileXD)) do // Считывает все записи из файла хоздоговоров

begin

Read(Main.FileXD,Main.zXD); // Считывает одну запись из файла хоздоговоров

Reset(Main.FileWTK,Main.OpenDialog1.FileName); // Открытие файла исполнителей для чтения

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

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

end;

CloseFile(Main.FileXD); // Закрытие файла хоздоговоров

while not (eof(Main.FileWTK)) do // Считывает все записи файла исполнителей

begin

Read(Main.FileWTK,Main.zWTK); // Считывает одну запись файла исполнителей

if CheckLos then // Записи в списке есть

begin

New(Main.Cur^.Next); // Выделяется память для следующей записи

Main.Cur:=Main.Cur^.Next; // Указатель перемещается на следующую запись

Main.Cur^.Surname:=Main.zWTK.Surname;

Main.Cur^.Name:=Main.zWTK.Name;

Main.Cur^.Patronymic_name:=Main.zWTK.Patronymic_name;

Main.Cur^.Of_birth:=Main.zWTK.Of_birth;

Main.Cur^.Code:=Main.zWTK.Code;

Main.Cur^.Branch_Number:=Main.zWTK.Branch_Number;

end

else // Записей в списке нет

begin

CheckLos:=True; // Запись в список занесена

New(Main.Cur); // Выделяется память для первой записи списка

Main.Cur^.Surname:=Main.zWTK.Surname;

Main.Cur^.Name:=Main.zWTK.Name;

Main.Cur^.Patronymic_name:=Main.zWTK.Patronymic_name;

Main.Cur^.Of_birth:=Main.zWTK.Of_birth;

Main.Cur^.Code:=Main.zWTK.Code;

Main.Cur^.Branch_Number:=Main.zWTK.Branch_Number;

Main.First:=Main.Cur; // Заносится адрес первой записи

end;

end;

CloseFile(Main.FileWTK);

Main.Cur^.Next:=NIL; // Конец списка

end;

procedure ViewingLos; // Просмотр линейного односвязного списка

var

Count : Byte; // Количество записей в таблице

begin

Main.StringGrid1.Visible:=True; // Делает видимой таблицу

Main.StringGrid1.RowCount:=2; // Количество строк

Main.StringGrid1.ColCount:=6; // Количество столбцов

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

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

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

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

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

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

Count:=0; // Обнуления количества элементов

Main.Cur:=Main.First;

while Main.Cur<>NIL do // Считывает все записи файла

begin

Inc(Count); // Увеличивает счетчик на единицу

Main.StringGrid1.RowCount:=Count+1; // Увеличивает количество столбцов в таблице

Main.StringGrid1.Cells[0,Count]:=Main.Cur^.Surname;

Main.StringGrid1.Cells[1,Count]:=Main.Cur^.Name;

Main.StringGrid1.Cells[2,Count]:=Main.Cur^.Patronymic_name;

Main.StringGrid1.Cells[3,Count]:=IntToStr(Main.Cur^.Of_birth);

Main.StringGrid1.Cells[4,Count]:=Main.Cur^.Code;

Main.StringGrid1.Cells[5,Count]:=Main.Cur^.Branch_Number;

Main.Cur:=Main.Cur^.Next;

end;

end;

procedure Delete; // Удаление одной записи в списке

var

Cur : TLos;

CheckDel : Boolean;

begin

CheckDel:=False;

Main.Cur:=Main.First; // Текущему указателю присваевается первый элемент

if (Main.Cur^.Surname=Main.Surname.Text) and

(Main.Cur^.Name=Main.Name.Text) and

(Main.Cur^.Patronymic_name=Main.Patronymic.Text) and

(IntToStr(Main.Cur^.Of_birth)=Main.Of_birth.Text) and

(Main.Cur^.Code=Main.Code.Text) and

(Main.Cur^.Branch_Number=Main.Branch.Text) then

begin // Удаление первой записи

Main.First:=Main.Cur^.Next;

CheckDel:=True;

end;

While Main.Cur^.Next<>NIL do

begin

if (Main.Cur^.Next^.Surname=Main.Surname.Text) and

(Main.Cur^.Next^.Name=Main.Name.Text) and

(Main.Cur^.Next^.Patronymic_name=Main.Patronymic.Text) and

(IntToStr(Main.Cur^.Next^.Of_birth)=Main.Of_birth.Text) and

(Main.Cur^.Next^.Code=Main.Code.Text) and

(Main.Cur^.Next^.Branch_Number=Main.Branch.Text) then

begin // Удаление записи

Cur:=Main.Cur^.Next;

Main.Cur^.Next:=Cur^.Next;

CheckDel:=True;

end

else

Main.Cur:=Main.Cur^.Next;

end;

if (Main.Cur^.Surname=Main.Surname.Text) and

(Main.Cur^.Name=Main.Name.Text) and

(Main.Cur^.Patronymic_name=Main.Patronymic.Text) and

(IntToStr(Main.Cur^.Of_birth)=Main.Of_birth.Text) and

(Main.Cur^.Code=Main.Code.Text) and

(Main.Cur^.Branch_Number=Main.Branch.Text) then

begin // Удаление последней записи

Main.Cur^.Next:=NIL;

CheckDel:=True;

end;

if CheckDel then

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

else

MessageBox(0,'Такой записи в списке нет','Сообщение',MB_OK);

end;

procedure Add; // Добавление записи

begin

Main.Cur:=Main.First;

while Main.Cur^.Next<>NIL do

Main.Cur:=Main.Cur^.Next;

New(Main.Cur^.Next);

Main.Cur:=Main.Cur^.Next;

Main.Cur^.Surname:=Main.Surname.Text;

Main.Cur^.Name:=Main.Name.Text;

Main.Cur^.Patronymic_name:=Main.Patronymic.Text;

Main.Cur^.Of_birth:=StrToInt(Main.Of_birth.Text);

Main.Cur^.Code:=Main.Code.Text;

Main.Cur^.Branch_Number:=Main.Branch.Text;

Main.Cur^.Next:=NIL;

end;

procedure Insert; // Редактирование записей

var

i : Byte;

begin

Main.Cur:=Main.First;

for i:=1 to Main.StringGrid1.RowCount-1 do

begin

Main.Cur^.Surname:=Main.StringGrid1.Cells[i,0];

Main.Cur^.Name:=Main.StringGrid1.Cells[i,1];

Main.Cur^.Patronymic_name:=Main.StringGrid1.Cells[i,2];

Main.Cur^.Of_birth:=StrToInt(Main.StringGrid1.Cells[i,3]);

Main.Cur^.Code:=Main.StringGrid1.Cells[i,4];

Main.Cur^.Branch_Number:=Main.StringGrid1.Cells[i,5];

Main.Cur:=Main.Cur^.Next;

end;

end;

procedure Sort(TypeSort : Boolean); //Сортировка прямым выбором (True - по возрастанию, False - по убыванию)

var

i, j, q : Byte;

K : Byte;

X, Y : ZapLos;

N : Byte; // Количество записей в ЛОС

Current, First:TLos;

begin

N:=0; // Обнуление количество записей в ЛОС

First := Main.First; // Указатель перемещается на первую запись

Current := Main.First ;

while Current <> NIL do // Подсчитывает количество записей в ЛОС

begin

Inc(N);

Current := Current^.Next; // Перемещает указатель на следующую запись

end;

For i:=1 to N-1 do

begin

k:=i;

Main.Cur:=Main.First; // Указатель перемещается на первую запись

for q:=1 to i-1 do // Указатель сдвигается на i-ую запись

Main.Cur:=Main.Cur^.Next;

X.Surname:=Main.Cur^.Surname;

X.Name:=Main.Cur^.Name;

X.Patronymic_name:=Main.Cur^.Patronymic_name;

X.Of_birth:=Main.Cur^.Of_birth;

X.Code:=Main.Cur^.Code;

X.Branch_Number:=Main.Cur^.Branch_Number;

for j:=i+1 to n do

begin

Main.Cur:=Main.First; // Указатель перемещается на первую запись

for q:=1 to j-1 do // Указатель сдвигается на j-ую запись

Main.Cur:=Main.Cur^.Next;

if ((Main.Cur^.Surname<X.Surname) AND (TypeSort)) OR

((Main.Cur^.Surname>X.Surname) AND (TypeSort=False))

then

begin

k:=j;

Main.Cur:=Main.First; // Указатель перемещается на первую запись

for q:=1 to k-1 do // Указатель сдвигается на k-ую запись

Main.Cur:=Main.Cur^.Next;

X.Surname:=Main.Cur^.Surname;

X.Name:=Main.Cur^.Name;

X.Patronymic_name:=Main.Cur^.Patronymic_name;

X.Of_birth:=Main.Cur^.Of_birth;

X.Code:=Main.Cur^.Code;

X.Branch_Number:=Main.Cur^.Branch_Number;

end;

end;

Main.Cur:=Main.First; // Указатель перемещается на первую запись

for q:=1 to i-1 do // Указатель сдвигается на i-ую запись

Main.Cur:=Main.Cur^.Next;

Y.Surname:=Main.Cur^.Surname;

Y.Name:=Main.Cur^.Name;

Y.Patronymic_name:=Main.Cur^.Patronymic_name;

Y.Of_birth:=Main.Cur^.Of_birth;

Y.Code:=Main.Cur^.Code;

Y.Branch_Number:=Main.Cur^.Branch_Number;

Main.Cur:=Main.First; // Указатель перемещается на первую запись

for q:=1 to k-1 do // Указатель сдвигается на k-ую запись

Main.Cur:=Main.Cur^.Next;

Main.Cur^.Surname:=Y.Surname;

Main.Cur^.Name:=Y.Name;

Main.Cur^.Patronymic_name:=Y.Patronymic_name;

Main.Cur^.Of_birth:=Y.Of_birth;

Main.Cur^.Code:=Y.Code;

Main.Cur^.Branch_Number:=Y.Branch_Number;

Main.Cur:=Main.First; // Указатель перемещается на первую запись

for q:=1 to i-1 do // Указатель сдвигается на i-ую запись

Main.Cur:=Main.Cur^.Next;

Main.Cur^.Surname:=X.Surname;

Main.Cur^.Name:=X.Name;

Main.Cur^.Patronymic_name:=X.Patronymic_name;

Main.Cur^.Of_birth:=X.Of_birth;

Main.Cur^.Code:=X.Code;

Main.Cur^.Branch_Number:=X.Branch_Number;

end;

end;

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

var

Count : Byte; // Количество записей в таблице

CheckFine : Boolean; // Найдена ли хоть одна запись

begin

Main.StringGrid1.Visible:=True; // Делает видимой таблицу

Main.StringGrid1.RowCount:=2; // Количество строк

Main.StringGrid1.ColCount:=6; // Количество столбцов

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

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

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

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

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

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

Count:=0; // Обнуления количества элементов

CheckFine:=False;

Main.Cur:=Main.First;

While Main.Cur<>NIL do // Просматриваются все записи

begin

if ((Main.Cur^.Surname=Main.Surname.Text) or (Main.CheckBox1.Checked=False)) and

((Main.Cur^.Name=Main.Name.Text) or (Main.CheckBox2.Checked=False)) and

((Main.Cur^.Patronymic_name=Main.Patronymic.Text) or (Main.CheckBox3.Checked=False)) and

((IntToStr(Main.Cur^.Of_birth)=Main.Of_birth.Text) or (Main.CheckBox4.Checked=False)) and

((Main.Cur^.Code=Main.Code.Text) or (Main.CheckBox5.Checked=False)) and

((Main.Cur^.Branch_Number=Main.Branch.Text) or (Main.CheckBox6.Checked=False)) then

begin

Inc(Count); // Увеличивает счетчик на единицу

Main.StringGrid1.ColCount:=Count+1; // Увеличивает количество столбцов в таблице

Main.StringGrid1.Cells[0,Count]:=Main.Cur^.Surname;

Main.StringGrid1.Cells[1,Count]:=Main.Cur^.Name;

Main.StringGrid1.Cells[2,Count]:=Main.Cur^.Patronymic_name;

Main.StringGrid1.Cells[3,Count]:=IntToStr(Main.Cur^.Of_birth);

Main.StringGrid1.Cells[4,Count]:=Main.Cur^.Code;

Main.StringGrid1.Cells[5,Count]:=Main.Cur^.Branch_Number;

CheckFine:=True;

end;

Main.Cur:=Main.Cur^.Next;

end;

if CheckFine=False then

begin

Main.StringGrid1.Visible:=False;

MessageBox(0,'Записи с такими полями нет','Сообщение',MB_OK);

end;

end;

procedure AddInst;

var

G: TLos;

i:integer;

begin

Main.Cur:=Main.First;

for i:=1 to MainUnit.Num do

Main.Cur:=Main.Cur^.Next;

New(G);

G^.Next := Main.Cur^.Next;

Main.Cur^.Next := G;

G^.Surname:=Main.Surname.Text;

G^.Name:=Main.Name.Text;

G^.Patronymic_name:=Main.Patronymic.Text;

G^.Of_birth:=StrToInt(Main.Of_birth.Text);

G^.Code:=Main.Code.Text;

G^.Branch_Number:=Main.Branch.Text;

end;

procedure F11;

var

Count : Byte; // Количество записей в таблице

begin

Sort(True);

Main.StringGrid1.RowCount:=2; // Количество строк

Main.StringGrid1.ColCount:=6; // Количество столбцов

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

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

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

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

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

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

Count:=0; // Обнуления количества элементов

Main.Cur:=Main.First;

while Main.Cur<>NIL do // Считывает все записи файла

begin

if (Main.Cur^.Surname[1]>=Main.Edit1.Text) and (Main.Cur^.Surname[1]<=Main.Edit2.Text) then

begin

Inc(Count); // Увеличивает счетчик на единицу

Main.StringGrid1.RowCount:=Count+1; // Увеличивает количество столбцов в таблице

Main.StringGrid1.Cells[0,Count]:=Main.Cur^.Surname;

Main.StringGrid1.Cells[1,Count]:=Main.Cur^.Name;

Main.StringGrid1.Cells[2,Count]:=Main.Cur^.Patronymic_name;

Main.StringGrid1.Cells[3,Count]:=IntToStr(Main.Cur^.Of_birth);

Main.StringGrid1.Cells[4,Count]:=Main.Cur^.Code;

Main.StringGrid1.Cells[5,Count]:=Main.Cur^.Branch_Number;

end;

Main.Cur:=Main.Cur^.Next;

end;

if Count=0 then

MessageBox(0,'Таких записей нет','Сообщение',MB_OK)

else

begin

Main.PopupMenu1.AutoPopup:=False;

// Свойства таблицы

Main.StringGrid1.Options:=[goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine,goRangeSelect];

Main.StringGrid1.Visible:=True;

end;

end;

end.