- •Процедура выполняети задание ф11.
- •2. Логическая структура данных
- •«Рисунок 2.1 - Логическая структура линейного односвязного списка»
- •Эти операции затем повторяются с оставшимися n2 элементами, затем с n3 элементами, пока не останется только один элемент наибольший.
- •«Рисунок 4.2 – Поиск наименьшего элемента»
- •Перемещение наименьшего элемента на первую позицию:
Эти операции затем повторяются с оставшимися n2 элементами, затем с n3 элементами, пока не останется только один элемент наибольший.
Main.Cur:=Main.First; //Указатель перемещается на первую запись
«Рисунок 4.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 – Поиск наименьшего элемента»
Перемещение наименьшего элемента на первую позицию:
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.