Информационная система расчетов по договорам
КУРСОВОЙ
ПРОЕКТ
Тема:
«Информационная система расчетов по договорам»
Минск 2010
Введение
Для разработки программы
была выбрана среда визуального проектирования Borland Delphi 7.0. Она позволяет
за короткий промежуток времени и с наименьшими затратами физических и
умственных сил создавать прикладные программы различной направленности,
обеспечивая при этом наличие дружественного оконного интерфейса. Указанные (а
также ряд других) преимущества среды Delphi 7.0. обуславливают широкое её
использование при создании программного обеспечения разнообразного назначения.
Представленная для
разработки в качестве курсового проекта программа является учебной, и
предназначена для демонстрации возможностей технологии ООП и представляет собой
форму чем-то похожую на приложение Excel.
Данная программа вносит
данные в специальные файлы, сортирует их, осуществляет поиск, внося все данные
при этом в специально приготовленную структуру.
Данная программа
напоминает базу данных, но написанную вручную, данное ПО может успешно
применяться в качестве учебного пособия, но не может применяться в качестве
коммерческого проекта.
1. Состав проекта Delphi
Проект содержит главную
форму, форму осуществления поиска, форму осуществления сортировки, форму
очистки строк, главная форма содержит такие элементы как кнопки, StringGrid, CheckBox, RadioButton, меню и манифест Windows.
Проект содержит модули Unit1, Unit2,
Unit3, Uni4, UnitCl.
Unit1 – головной файл
программы
Unit2 – файл формы очистки
строк
Unit3 – файл формы поиска
Unit4 – файл формы сортировки
Все методы
инкапсулированы в класс. Класс (UnitCl) имеет следующие методы:
procedure RowC
(AStringGrid:TStringGrid); – процедура разметки строк
procedure XDGr
(AStringGrid:TStringGrid); – процедура создания заголовка для ХД
procedure WTKGr
(AStringGrid:TStringGrid); – процедура создания заголовка для ВТК
procedure BANGr
(AStringGrid:TStringGrid); – процедура создания заголовка для БАНК
procedure Clear
(AStringGrid:TStringGrid); – процедура очистки формы
procedure
WriteXD (AStringGrid:TStringGrid); – процедура записи в файл ХД
procedure
WriteWTK (AStringGrid:TStringGrid); – процедура записи в файл ВТК
procedure
WriteBAN (AStringGrid:TStringGrid); – процедура записи в файл БАНК
procedure
ReadXD (AStringGrid:TStringGrid); – процедура чтения из файла ХД
procedure
ReadWTK (AStringGrid:TStringGrid); – процедура чтения из файла ВТК
procedure
ReadBAN (AStringGrid:TStringGrid); – процедура чтения из файла БАНК
procedure BANK
(AStringGrid:TStringGrid); – процедура внесения данных в структуру
procedure WTK
(AStringGrid:TStringGrid); – процедура внесения данных в структуру
procedure XD (AStringGrid:TStringGrid);
– процедура внесения данных в структуру
procedure XDShow; – процедура
просмотра структуры ХД
procedure WTKShow; – процедура
просмотра структуры ВТК
procedure BANKShow; – процедура
просмотра структуры БАНК
procedure null; – процедура
сброса начала списка
procedure
FindXD (AEdit1:TEdit; AStringGrid:TStringGrid); – процедура поиска в ХД
procedure
FindWTK (AEdit1:TEdit; AStringGrid:TStringGrid); – процедура поиска в ВТК
procedure
FindBANK (AEdit1:TEdit; AStringGrid:TStringGrid); – процедура поиска в БАНК
procedure
MoySort1 (AStringGrid:TStringGrid); – процедура сортировки списка ХД по атр. 1
procedure
MoySort2 (AStringGrid:TStringGrid); – процедура сортировки списка ХД по атр. 2
procedure
MoySort5 (AStringGrid:TStringGrid); – процедура сортировки списка ХД по атр. 5
procedure
MoySort7 (AStringGrid:TStringGrid); – процедура сортировки списка ХД по атр. 7
2. Статические данные и
структуры
Запись линейного
односвязного списка для данных хозяйственных договоров. В данной записи все
поля являются строковыми, строковое поле имеет размер памяти 8 байт,
следовательно, запись ХД будет иметь размер 56 байт. Поле Next во всех трех структурах
означает адрес следующего элемента в списке. Поскольку в задании предлагался
линейный односвязный список то переход от одного элемента к другому возможен
только вперед, в отличие от двухсвязного списка, где можно перемещаться как вперед
так и назад. В квадратных скобках указано количество символов, которое может
входить в строку данного поля.
type
TPSpisXD=^TSpisXD;
TSpisXD =
record
numb:string[20]; //
номер
datzak:string[20]; //
дата заключения
datzav:string[20]; //
дата завершения
temadog:string[40]; //
тема
namorg:string[20]; //
наименование организации
priznak:string[15]; //
признак
stoimost:string[10]; //
стоимость в тыс руб.
next: TPSpisXD; //
следующий элемент списка
end;
Запись линейного
односвязного списка для данных о временных трудовых коллективах. В данной
записи все поля являются строковыми, строковое поле имеет размер памяти 8 байт,
следовательно, запись ВТК будет иметь размер 80 байт.
type
TPSpisWTK=^TSpisWTK;
TSpisWTK=record
fam:string[20]; //
фамилия
name:string[20]; //
имя
otc:string[20]; //
отчество
god:string[40]; //
дата рождения
kod:string[20]; //
код договора
prznak:string[15]; //
признак
zarplat:string[20]; //
зарплата
adres:string[20]; //
адрес
banknum:string[20]; //
номер банка
rasschet:string[40]; //
Р/С
next:
TPSpisWTK;
end;
Запись линейного
односвязного списка для данных с атрибутами банка. В данной записи все поля
являются строковыми, строковое поле имеет размер памяти 8 байт, следовательно,
запись БАНК будет иметь размер 40 байт.
type
TPSpisBAN=^TSpisBAN;
TSpisBAN=record
numotd:string[20]; //
фамилия
gorod:string[20]; //
имя
adress:string[20]; //
отчество
naim:string[40]; //
дата рождения
kod:string[20]; //
код отделения
next: TPSpisBAN;
end;
глобальные переменные,
содержащие адреса головы списка для трех разных структур.
var
head1: TPSpisXD; //
начало (голова) списка XD
head2: TPSpisWTK; //
голова списка WTK
head3: TPSpisBAN; //
голова списка BAN
Ниже приведены глобальные
переменные различных типов данных, которые использует весь модуль класса.
kp:TKp;
i, Row, CP:
Integer;
SList: TStringList;
n: integer; // длина
(кол-во элементов) списка
st: string; //
строковое представление списка
Fil: string;
FirstStr: string;
3. Логическая структура
данных
Используемая, в проекте
структура линейный односвязный список приведена для всех трех записей поэтому
ниже приведена схема структуры реализованной в проекте для записи хозяйственные
договоры.
type
TPSpisXD=^TSpisXD;
TSpisXD =
record
numb:string[20]; //
номер
datzak:string[20]; //
дата заключения
datzav:string[20]; //
дата завершения
temadog:string[40]; //
тема
namorg:string[20]; //
наименование организации
priznak:string[15]; //
признак
stoimost:string[10]; //
стоимость в тыс руб.
next: TPSpisXD; //
следующий элемент списка
end;
Данная структура является
примером линейного односвязного списка, в этой структуре возможен переход
только к следующему элементу (next) т.е. только вперед.
В линейном односвязном
списке можно передвигаться только в сторону конца списка. Узнать адрес
предыдущего элемента из данного не возможно. Точно такая же схема базовой
структуры и у 2-х других списков, а именно списка временных трудовых
коллективов и списка банков. (Из-за их абсолютной похожести, различается только
их количество и название элементов) те две схемы не приводятся.
4. Логические схемы
операций в базовой структуре данных
Процедура сортировки
списка на примере списка ХД.
procedure TKp.
MoySort1 (AStringGrid:TStringGrid);
// Сортировка по первой
колонке
var
node: TPSpisXD; //
новый узел списка
curr: TPSpisXD; //
текущий узел списка
pre: TPSpisXD; //
предыдущий, относительно curr, узел
i:integer; //
counter
begin
Kp.null;
i:=1;
//repeat
while
(i<11) do
begin
new(node);
node^.numb:=AStringGrid.
Cells [1, i];
node^.datzak:=AStringGrid.
Cells [2, i];
node^.datzav:=AStringGrid.
Cells [3, i];
node^.temadog:=AStringGrid.
Cells [4, i];
node^.namorg:=AStringGrid.
Cells [5, i];
node^.priznak:=AStringGrid.
Cells [6, i];
node^.stoimost:=AStringGrid.
Cells [7, i];
// подходящее место для
узла
curr:=head1;
pre:=NIL;
while (curr
<> NIL) and (node.numb > curr^.numb) do
begin
// введенное
значение больше текущего
pre:= curr;
curr:=curr^.next; //
к следующему узлу
end;
if pre = NIL
then
begin
// новый узел в начало
списка
node^.next:=head1;
head1:=node;
end
else
begin
// новый узел после pre, перед curr
node^.next:=pre^.next;
pre^.next:=node;
end;
i:=i+1;
end;
Kp.XDShow;
end;
procedure
TKp.XDShow;
var
curr:
TPSpisXD; // текущий элемент списка
//n:integer; //
длина (кол-во элементов) списка
// st:string; //
строковое представление списка
begin
n:=0;
st:='';
curr:=head1;
while curr
<> NIL do
begin
n:=n+1;
st:=st+curr^.numb+'
'+curr^.datzak+' '+curr^.datzav+' '+curr^.temadog+' '+curr^.namorg+'
'+curr^.priznak+' '+curr^.stoimost+#13;
curr:=curr^.next;
end;
if n <>
0
then
ShowMessage ('Список:'+#13+#13+st)
else ShowMessage ('В списке
нет элементов.');
end;
procedure
TKp.XD (AStringGrid:TStringGrid);
var
node:
TPSpisXD; // новый узел списка
curr:
TPSpisXD; // текущий узел списка
pre: TPSpisXD; //
предыдущий, относительно curr, узел
i:integer; //
counter
// n:integer; //
длина (кол-во элементов) списка
// st:string; //
строковое представление списка
begin
i:=1;
//repeat
while
(i<11) do
begin
new(node);
node^.numb:={Edit1.
Text;} AStringGrid. Cells [1, i];
node^.datzak:=
{Edit2. Text;} AStringGrid. Cells [2, i];
node^.datzav:=
{Edit3. Text;} AStringGrid. Cells [3, i];
node^.temadog:=
{Edit4. Text;} AStringGrid. Cells [4, i];
node^.namorg:=
{Edit5. Text;} AStringGrid. Cells [5, i];
node^.priznak:=
{Edit6. Text;} AStringGrid. Cells [6, i];
node^.stoimost:=
{Edit7. Text;} AStringGrid. Cells [7, i];
// подходящее место для узла
curr:=head1;
pre:=NIL;
while (curr
<> NIL) and (node.numb > curr^.numb) do
begin
// введенное
значение больше текущего
pre:= curr;
curr:=curr^.next; //
к следующему узлу
end;
if pre = NIL
then
begin
// новый узел в начало
списка
node^.next:=head1;
head1:=node;
end
else
begin
// новый узел после pre, перед curr
node^.next:=pre^.next;
pre^.next:=node;
end;
i:=i+1;
//until
(i<11);
end;
ShowMessage ('
ГОТОВО – СПИСОК ХД!');
end;
procedure TKp.
FindXD (AEdit1:TEdit; AStringGrid:TStringGrid);
var
curr:TPSpisXD; //
текущий, проверяемый узел
pre: TPSpisXD; //
предыдущий узел
found:boolean; //
TRUE – узел, который надо удалить
//
st:string;
// a:integer;
begin
if head1 = NIL
then
begin
MessageDlg ('Список пустой!', mtError, [mbOk],
0);
Exit;
end;
curr:=head1; //
текущий узел – первый узел
pre:=NIL; //
предыдущего узла нет
found:=FALSE;
// найти узел
=======
while (curr
<> NIL) and (not found) do
begin
if (curr^.numb
= {'13'} AEdit1. Text) xor (curr^.datzak = AEdit1. Text)
xor
(curr^.datzav = AEdit1. Text) xor (curr^.temadog = AEdit1. Text)
xor
(curr^.namorg = AEdit1. Text) xor (curr^.priznak = AEdit1. Text)
xor
(curr^.stoimost = AEdit1. Text)
then
found:=TRUE // нужный узел найден
else // к следующему узлу
begin
pre:=curr;
curr:=curr^.next;
end;
=======
end;
if found then
begin
Kp. Clear(AStringGrid);
Kp.XDGr(AStringGrid);
Kp. RowC(AStringGrid);
ShowMessage ('Элемент найден');
AStringGrid. Cells
[1,1]:=''+curr^.numb;
AStringGrid. Cells
[2,1]:=''+curr^.datzak;
AStringGrid. Cells
[3,1]:=''+curr^.datzav;
AStringGrid. Cells
[4,1]:=''+curr^.temadog;
AStringGrid. Cells
[5,1]:=''+curr^.namorg;
AStringGrid. Cells
[6,1]:=''+curr^.priznak;
AStringGrid. Cells
[7,1]:=''+curr^.stoimost;
end
else // если
искомого в списке нет
MessageDlg ('Элемент не найден', mtError, [mbOk],
0);
end;
5. Руководство
пользователя
Для старта программы
нужно запустить файл project1.exe. Запуститься программа, после этого пользователь
увидит окно представленное ниже.
Для навигации и
управления проектом пользователя предоставлены многочисленные виджеты, такие
как меню, кнопки управления, флажки и переключатели, а также многочисленные
выпадающие окна.
Все органы управления
имеют всплывающие подсказки.
Для поиска нужно нажать
кнопку Поиск, а для удаления кнопку DEL, все операции программы дублированы
пользовательским меню.
Для загрузки списков
нужно перемещать переключатели в 3 разных положения, а для просмотра списка
необходимо вызвать одноименный пункт меню, или нажать соответствующую кнопку.
Заключение
В ходе работы над
проектом были закреплены навыки работы с технологией ООП, были изучены
структуры и то как они представлены в памяти компьютера. В ходе работы над
проектом были доработаны и закреплены навыки работы в среде визуальной
разработки приложений Delphi.
Данный проект очень
интересен тем, что он дает студенту возможность попробовать себя в разработке
простейшей базы данных, знания, полученные во время работы над проектом
пригодятся в дальнейшей трудовой деятельности, а также в предметах курса,
изучающих принципы построения и работы с базами данных.
Данный курсовой проект
сможет пригодиться для изучения возможностей ООП использования структур данных
Литература
1.
Бакнелл Д.М. Фундаментальные
алгоритмы и структуры данных в Delphi. - СПб: ООО «ДиаСофтЮП»,
2003. -
506 с.
2.
Вирт
Н. Алгоритмы и структуры данных. - СПб: Невский диалект,
2001. – 352 с.
3.
Гудрич М.Т. Структуры
данных и алгоритмы в Java. / М.Т. Гудрич, Р. Тамассия. – Мн.:
Новое знание, 2003. – 671 с.
4.
Кормен Т.Х.,
Лейзерсон Ч.И., Ривест Р.Л., Штайн К. Алгоритмы: построение и анализ.
– М.: Издательский дом «Вильямс», 2009. – 1296 с.
5.
Круз Р.Л. Структуры
данных и проектирование программ. – М.: БИНОМ. Лаборатория знаний, 2008. – 765 с.
6.
Седжвик
Р. Фундаментальные алгоритмы на С. Части 1-4:
Анализ / Структуры данных / Сортировка / Поиск. - К.: Издательство
«ДиаСофт», 2003. - 672 с.
Приложение
Текст главного модуля Unit1.pas
// ==============
//
Created by Kamenev A.I.
// gr
417318
// Minsk
2010 MIDO BNTU
// ===================
unit Unit1;
interface
uses
Windows,
Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,
StdCtrls, ExtCtrls, Grids, XPMan, UnitCl, Menus, Unit2;
type
TForm1 =
class(TForm)
StringGrid1:
TStringGrid;
Button1:
TButton;
Button2:
TButton;
Button4:
TButton;
Button5:
TButton;
Button6:
TButton;
RadioButton1:
TRadioButton;
RadioButton2:
TRadioButton;
RadioButton3:
TRadioButton;
XPManifest1:
TXPManifest;
Button7:
TButton;
Bevel1:
TBevel;
CheckBox1:
TCheckBox;
MainMenu1:
TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
N10:
TMenuItem;
Bevel2:
TBevel;
Button3:
TButton;
Button8:
TButton;
FindDialog1:
TFindDialog;
procedure
Button6Click (Sender: TObject);
procedure
FormCreate (Sender: TObject);
procedure
RadioButton1Click (Sender: TObject);
procedure
RadioButton2Click (Sender: TObject);
procedure
RadioButton3Click (Sender: TObject);
procedure
CheckBox1Click (Sender: TObject);
procedure
Button4Click (Sender: TObject);
procedure
Button1Click (Sender: TObject);
procedure
N2Click (Sender: TObject);
procedure
N10Click (Sender: TObject);
procedure
N8Click (Sender: TObject);
procedure
Button5Click (Sender: TObject);
procedure
Button2Click (Sender: TObject);
procedure
N3Click (Sender: TObject);
procedure
N4Click (Sender: TObject);
procedure
FormActivate (Sender: TObject);
procedure
Button3Click (Sender: TObject);
procedure
Button8Click (Sender: TObject);
procedure
N6Click (Sender: TObject);
procedure
N7Click (Sender: TObject);
private
{Private
declarations}
public
{Public
declarations}
end;
var
Form1: TForm1;
implementation
uses Unit3,
Unit4;
{$R *.dfm}
// ===================
procedure
TForm1. Button6Click (Sender: TObject);
begin
// Остановка
программы:
Halt;
end;
// ===================
procedure
TForm1. FormCreate (Sender: TObject);
begin
// Инициализация
формы и чтение из файла в стринг грид – из класса
CheckBox1Click(Sender);
Kp. ReadXD(StringGrid1);
Kp. Free;
end;
// ===================
procedure
TForm1. RadioButton1Click (Sender: TObject);
begin
// Дублир XD
FormCreate(Sender);
Button8Click(Sender);
end;
// ===================
procedure
TForm1. RadioButton2Click (Sender: TObject);
begin
// Открытие WTK
автоматом из файла
Kp. Clear(StringGrid1); //
Очистка грида
// инициал формы
WTK
Kp.WTKGr(StringGrid1);
Kp. RowC(StringGrid1);
Kp. ReadWTK(StringGrid1);
Kp. Free;
Button8Click(Sender);
end;
procedure
TForm1. RadioButton3Click (Sender: TObject);
begin
// Открытие файла BANK
Kp. Clear(StringGrid1); //
Очистка грида
// Инициал формы Bank
Kp.BANGr(StringGrid1);
Kp. RowC(StringGrid1);
Kp. ReadBAN(StringGrid1);
Kp. Free;
Button8Click(Sender);
end;
// ===================
procedure
TForm1. CheckBox1Click (Sender: TObject);
begin
// запрет на
редактир снять – поставить
If CheckBox1. Checked
Then
StringGrid1. Options:=[goFixedVertLine,
goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goRowSizing, goColSizing]
else
StringGrid1. Options:=[goFixedVertLine,
goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goRowSizing, goColSizing,
goEditing]
end;
// ===================
procedure
TForm1. Button4Click (Sender: TObject);
begin
// Поиск в гриде
Form3. Top:=Trunc (Form1.
Top + Form1. Height/2 – Form3. Height/2);
Form3. Left:=Trunc
(Form1. Left +Form1. Width/2 – Form3. Width/2);
Form3.
ShowModal;
end;
// ===================
procedure
TForm1. Button1Click (Sender: TObject);
begin
// процедура очистки грида по выбору радио кнопы
Kp. Clear(StringGrid1); //
Вызов процедуры из класса
If
RadioButton1. Checked Then //
begin //
Kp.XDGr(StringGrid1); //
–
Kp. RowC(StringGrid1);
end
else if
RadioButton2. Checked Then
begin
Kp.WTKGr(StringGrid1);
Kp. RowC(StringGrid1);
end
else if
RadioButton3. Checked Then
begin
Kp.BANGr(StringGrid1);
Kp. RowC(StringGrid1);
end;
Kp. Free;
end;
// = О ПРОГРАММЕ
=====
procedure
TForm1.N2Click (Sender: TObject);
begin
ShowMessage
('КУРСОВОЙ
ПРОЕКТ'+#13+#13+'Разработал Каменев А.И. гр 417 318 / 10 вариант'
+#13+'МИДО БНТУ 2010 г.'+#13+#13+'Структуры
и алгоритмы обработки данных.');
end;
// ===================
procedure
TForm1.N10Click (Sender: TObject);
begin
// Меню дубл выход
Button6Click(Sender);
end;
// ===================
procedure
TForm1.N8Click (Sender: TObject);
begin
// Сброс дубл меню
Button1Click(Sender);
end;
// ===================
procedure
TForm1. Button5Click (Sender: TObject);
// сортировка грида в
польз. сообщений
begin
Form4. Top:=Trunc
(Form1. Top + Form1. Height/2 – Form4. Height/2);
Form4. Left:=Trunc
(Form1. Left +Form1. Width/2 – Form4. Width/2);
Form4.
ShowModal;
end;
// ===================
procedure
TForm1. Button2Click (Sender: TObject);
// Запись в файл
begin
If
RadioButton1. Checked Then
Kp. WriteXD(StringGrid1)
else if
RadioButton2. Checked Then
Kp. WriteWTK(StringGrid1)
else if
RadioButton3. Checked Then
Kp. WriteBAN(StringGrid1);
ShowMessage ('Данные записаны в файл!');
Kp. Free;
end;
// ===================
procedure
TForm1.N3Click (Sender: TObject);
begin
// меню дублир
Button2Click(Sender);
end;
// ===================
// Удаление строки из грида
procedure TForm1. Button7Click (Sender:
TObject);
begin
Form2. Top:=Trunc
(Form1. Top + Form1. Height/2 – Form2. Height/2);
Form2. Left:=Trunc
(Form1. Left +Form1. Width/2 – Form2. Width/2);
Form2. ShowModal;
// Элемент
пользовательского интерфейса
// очистка cells'ов
// в StringGrid1
end;
// ===================
procedure
TForm1.N4Click (Sender: TObject);
begin
// Меню – дублирование
– удаление строки
Button7Click(Sender);
end;
// ===================
procedure
TForm1. FormActivate (Sender: TObject);
begin
// Очистка головы
списка №1 №2 №3
Kp.null;
end;
// ===================
procedure
TForm1. Button3Click (Sender: TObject);
begin
// процедура показа
If
RadioButton1. Checked Then
Kp.XDShow
else if
RadioButton2. Checked Then
Kp.WTKShow
else if
RadioButton3. Checked Then
Kp.BANKShow;
Kp. Free;
end;
// ===================
procedure
TForm1. Button8Click (Sender: TObject);
begin
FormActivate(Sender);
// процедура внесения содержимого StrigGrid в список
If
RadioButton1. Checked Then
Kp.XD(StringGrid1)
else if
RadioButton2. Checked Then
Kp.WTK(StringGrid1)
else if
RadioButton3. Checked Then
Kp.BANK(StringGrid1);
Kp. Free;
end;
// ===================
procedure
TForm1.N6Click (Sender: TObject);
begin
// Поиск-меню-дублирующее
Button4Click(Sender);
end;
// ===================
procedure
TForm1.N7Click (Sender: TObject);
begin
// Сортировка-меню-дублирующее
Button5Click(Sender);
end;
// ===================
end.
Текст модуля класса UnitCl.pas
// ************
//
Created by Kamenev A.I. 417 318 10 var.
// Minsk
MIDO BNTU.
// САОД – КУРСОВОЙ
// ************
unit UnitCl;
interface
uses
SysUtils,
Forms, StdCtrls, Grids, Classes, Dialogs;
type
TKp = class
(TObject)
Private
{Private data}
Public
procedure RowC
(AStringGrid:TStringGrid);
procedure XDGr
(AStringGrid:TStringGrid);
procedure WTKGr
(AStringGrid:TStringGrid);
procedure BANGr
(AStringGrid:TStringGrid);
procedure Clear
(AStringGrid:TStringGrid);
procedure
WriteXD (AStringGrid:TStringGrid);
procedure
WriteWTK (AStringGrid:TStringGrid);
procedure
WriteBAN (AStringGrid:TStringGrid);
procedure
ReadXD (AStringGrid:TStringGrid);
procedure
ReadWTK (AStringGrid:TStringGrid);
procedure
ReadBAN (AStringGrid:TStringGrid);
procedure BANK
(AStringGrid:TStringGrid);
procedure WTK
(AStringGrid:TStringGrid);
procedure XD (AStringGrid:TStringGrid);
procedure
XDShow;
procedure
WTKShow;
procedure
BANKShow;
procedure
null;
procedure
FindXD (AEdit1:TEdit; AStringGrid:TStringGrid);
procedure
FindWTK (AEdit1:TEdit; AStringGrid:TStringGrid);
procedure
FindBANK (AEdit1:TEdit; AStringGrid:TStringGrid);
procedure
MoySort1 (AStringGrid:TStringGrid);
procedure
MoySort2 (AStringGrid:TStringGrid);
procedure
MoySort5 (AStringGrid:TStringGrid);
procedure
MoySort7 (AStringGrid:TStringGrid);
end;
// **********
глобальная переменная
var
kp:TKp;
i, Row, CP:
Integer;
SList:
TStringList;
n: integer; // длина
(кол-во элементов) списка
st: string; //
строковое представление списка
Fil: string;
FirstStr:
string;
// **********
раздел описаний
implementation
type
TPSpisXD=^TSpisXD;
TSpisXD =
record
numb:string[20]; //
номер
datzak:string[20]; //
дата заключения
datzav:string[20]; //
дата завершения
temadog:string[40]; //
тема
namorg:string[20]; //
наименование организации
priznak:string[15]; //
признак
stoimost:string[10]; //
стоимость в тыс руб.
next: TPSpisXD; //
следующий элемент списка
end;
type
TPSpisWTK=^TSpisWTK;
TSpisWTK=record
fam:string[20]; //
фамилия
name:string[20]; //
имя
otc:string[20]; //
отчество
god:string[40]; //
дата рождения
kod:string[20]; //
код договора
prznak:string[15]; //
признак
zarplat:string[20]; //
зарплата
adres:string[20]; //
адрес
banknum:string[20]; //
номер банка
rasschet:string[40]; //
Р/С
next:
TPSpisWTK;
end;
type
TPSpisBAN=^TSpisBAN;
TSpisBAN=record
numotd:string[20]; //
фамилия
gorod:string[20]; //
имя
adress:string[20]; //
отчество
naim:string[40]; //
дата рождения
kod:string[20]; //
код отделения
next:
TPSpisBAN;
end;
var
head1: TPSpisXD; //
начало (голова) списка XD
head2: TPSpisWTK; //
голова списка WTK
head3: TPSpisBAN; //
голова списка BAN
// ===================
procedure TKp.null;
// Обнуление начала
списка
begin
head1:=NIL;
head2:=NIL;
head3:=NIL;
end;
// ===================
procedure TKp.
MoySort1 (AStringGrid:TStringGrid);
// Сортировка по первой
колонке
var
node: TPSpisXD; //
новый узел списка
curr: TPSpisXD; //
текущий узел списка
pre: TPSpisXD; //
предыдущий, относительно curr, узел
i:integer; //
counter
begin
Kp.null;
i:=1;
//repeat
while
(i<11) do
begin
new(node);
node^.numb:=AStringGrid.
Cells [1, i];
node^.datzak:=AStringGrid.
Cells [2, i];
node^.datzav:=AStringGrid.
Cells [3, i];
node^.temadog:=AStringGrid.
Cells [4, i];
node^.namorg:=AStringGrid.
Cells [5, i];
node^.priznak:=AStringGrid.
Cells [6, i];
node^.stoimost:=AStringGrid.
Cells [7, i];
// подходящее место для
узла
curr:=head1;
pre:=NIL;
while (curr
<> NIL) and (node.numb > curr^.numb) do
begin
// введенное
значение больше текущего
pre:= curr;
curr:=curr^.next; //
к следующему узлу
end;
if pre = NIL
then
begin
// новый узел в начало
списка
node^.next:=head1;
head1:=node;
end
else
begin
// новый узел после pre, перед curr
pre^.next:=node;
end;
i:=i+1;
end;
Kp.XDShow;
end;
// ===================
procedure TKp.
MoySort2 (AStringGrid:TStringGrid);
// Сортировка по второй
колонке
var
node: TPSpisXD; //
новый узел списка
curr: TPSpisXD; //
текущий узел списка
pre: TPSpisXD; //
предыдущий, относительно curr, узел
i:integer; //
counter
begin
Kp.null;
i:=1;
//repeat
while
(i<11) do
begin
new(node);
node^.numb:={Edit1.
Text;} AStringGrid. Cells [1, i];
node^.datzak:=
{Edit2. Text;} AStringGrid. Cells [2, i];
node^.datzav:=
{Edit3. Text;} AStringGrid. Cells [3, i];
node^.temadog:=
{Edit4. Text;} AStringGrid. Cells [4, i];
node^.namorg:=
{Edit5. Text;} AStringGrid. Cells [5, i];
node^.priznak:=
{Edit6. Text;} AStringGrid. Cells [6, i];
node^.stoimost:=
{Edit7. Text;} AStringGrid. Cells [7, i];
curr:=head1;
pre:=NIL;
while (curr
<> NIL) and (node.datzak > curr^.datzak) do
begin
// введенное
значение больше текущего
pre:= curr;
curr:=curr^.next; //
к следующему узлу
end;
if pre = NIL
then
begin
// новый узел в начало
списка
node^.next:=head1;
head1:=node;
end
else
begin
// новый узел после pre, перед curr
node^.next:=pre^.next;
pre^.next:=node;
end;
i:=i+1;
end;
Kp.XDShow;
end;
// ===================
procedure TKp.
MoySort5 (AStringGrid:TStringGrid);
// Сортировка по пятой
var
node: TPSpisXD; //
новый узел списка
curr: TPSpisXD; //
текущий узел списка
pre: TPSpisXD; //
предыдущий, относительно curr, узел
i:integer; //
counter
// n:integer; //
длина (кол-во элементов) списка
// st:string; //
строковое представление списка
begin
Kp.null;
i:=1;
//repeat
while
(i<11) do
begin
new(node);
node^.numb:={Edit1.
Text;} AStringGrid. Cells [1, i];
node^.datzak:=
{Edit2. Text;} AStringGrid. Cells [2, i];
node^.datzav:=
{Edit3. Text;} AStringGrid. Cells [3, i];
node^.temadog:=
{Edit4. Text;} AStringGrid. Cells [4, i];
node^.namorg:=
{Edit5. Text;} AStringGrid. Cells [5, i];
node^.priznak:=
{Edit6. Text;} AStringGrid. Cells [6, i];
node^.stoimost:=
{Edit7. Text;} AStringGrid. Cells [7, i];
// подходящее место для узла
curr:=head1;
pre:=NIL;
while (curr
<> NIL) and (node.namorg > curr^.namorg) do
begin
// введенное
значение больше текущего
pre:= curr;
curr:=curr^.next; //
к следующему узлу
end;
if pre = NIL
then
begin
// новый узел в начало
списка
node^.next:=head1;
head1:=node;
end
else
begin
// новый узел после pre, перед curr
node^.next:=pre^.next;
pre^.next:=node;
end;
i:=i+1;
//until
(i<11);
end;
Kp.XDShow;
end;
// ===================
procedure TKp.
MoySort7 (AStringGrid:TStringGrid);
// Сортировка по 7
var
node:
TPSpisXD; // новый узел списка
curr:
TPSpisXD; // текущий узел списка
pre: TPSpisXD; //
предыдущий, относительно curr, узел
i:integer; //
counter
// n:integer; //
длина (кол-во элементов) списка
// st:string; //
строковое представление списка
begin
Kp.null;
i:=1;
//repeat
while
(i<11) do
begin
new(node);
node^.numb:={Edit1.
Text;} AStringGrid. Cells [1, i];
node^.datzak:=
{Edit2. Text;} AStringGrid. Cells [2, i];
node^.datzav:=
{Edit3. Text;} AStringGrid. Cells [3, i];
node^.temadog:=
{Edit4. Text;} AStringGrid. Cells [4, i];
node^.namorg:=
{Edit5. Text;} AStringGrid. Cells [5, i];
node^.priznak:=
{Edit6. Text;} AStringGrid. Cells [6, i];
node^.stoimost:=
{Edit7. Text;} AStringGrid. Cells [7, i];
// подходящее место для узла
curr:=head1;
pre:=NIL;
while (curr
<> NIL) and (node.stoimost > curr^.stoimost) do
begin
// введенное
значение больше текущего
pre:= curr;
curr:=curr^.next; //
к следующему узлу
end;
if pre = NIL
then
begin
// новый узел в начало
списка
node^.next:=head1;
head1:=node;
end
else
begin
// новый узел после pre, перед curr
node^.next:=pre^.next;
pre^.next:=node;
end;
i:=i+1;
//until
(i<11);
end;
Kp.XDShow;
end;
// ===================
procedure
TKp.WTKShow;
var
end
else if Form4.
RadioButton4. Checked Then
begin
Kp. MoySort7 (Form1.
StringGrid1);
end;
Kp. Free;
end;
procedure
TForm4. Button2Click (Sender: TObject);
begin
Form4. Close;
end;
end.