|
Информационная система расчетов по договорам
Информационная система расчетов по договорам
КУРСОВОЙ ПРОЕКТТема:«Информационная система расчетов по договорам»Минск 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); - процедура сортировки списка ХД по атр. 1procedure MoySort2 (AStringGrid:TStringGrid); - процедура сортировки списка ХД по атр. 2procedure MoySort5 (AStringGrid:TStringGrid); - процедура сортировки списка ХД по атр. 5procedure MoySort7 (AStringGrid:TStringGrid); - процедура сортировки списка ХД по атр. 72. Статические данные и структурыЗапись линейного односвязного списка для данных хозяйственных договоров. В данной записи все поля являются строковыми, строковое поле имеет размер памяти 8 байт, следовательно, запись ХД будет иметь размер 56 байт. Поле Next во всех трех структурах означает адрес следующего элемента в списке. Поскольку в задании предлагался линейный односвязный список то переход от одного элемента к другому возможен только вперед, в отличие от двухсвязного списка, где можно перемещаться как вперед так и назад. В квадратных скобках указано количество символов, которое может входить в строку данного поля.typeTPSpisXD=^TSpisXD;TSpisXD = recordnumb: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 байт.typeTPSpisWTK=^TSpisWTK;TSpisWTK=recordfam: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 байт.typeTPSpisBAN=^TSpisBAN;TSpisBAN=recordnumotd:string[20]; // фамилияgorod:string[20]; // имяadress:string[20]; // отчествоnaim:string[40]; // дата рожденияkod:string[20]; // код отделенияnext: TPSpisBAN;end;глобальные переменные, содержащие адреса головы списка для трех разных структур.varhead1: TPSpisXD; // начало (голова) списка XDhead2: TPSpisWTK; // голова списка WTKhead3: TPSpisBAN; // голова списка BANНиже приведены глобальные переменные различных типов данных, которые использует весь модуль класса.kp:TKp;i, Row, CP: Integer;SList: TStringList;n: integer; // длина (кол-во элементов) спискаst: string; // строковое представление спискаFil: string;FirstStr: string;3. Логическая структура данныхИспользуемая, в проекте структура линейный односвязный список приведена для всех трех записей поэтому ниже приведена схема структуры реализованной в проекте для записи хозяйственные договоры.typeTPSpisXD=^TSpisXD;TSpisXD = recordnumb: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); // Сортировка по первой колонкеvarnode: TPSpisXD; // новый узел спискаcurr: TPSpisXD; // текущий узел спискаpre: TPSpisXD; // предыдущий, относительно curr, узелi:integer; // counterbeginKp.null;i:=1; //repeatwhile (i<11) dobeginnew(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) dobegin // введенное значение больше текущегоpre:= curr;curr:=curr^.next; // к следующему узлуend;if pre = NILthenbegin // новый узел в начало спискаnode^.next:=head1;head1:=node;endelsebegin // новый узел после pre, перед currnode^.next:=pre^.next;pre^.next:=node;end;i:=i+1;end;Kp.XDShow;end;procedure TKp.XDShow;varcurr: TPSpisXD; // текущий элемент списка //n:integer; // длина (кол-во элементов) списка // st:string; // строковое представление спискаbeginn:=0;st:='';curr:=head1;while curr <> NIL dobeginn:=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 <> 0then ShowMessage ('Список:'+#13+#13+st)else ShowMessage ('В списке нет элементов.');end;procedure TKp.XD (AStringGrid:TStringGrid);varnode: TPSpisXD; // новый узел спискаcurr: TPSpisXD; // текущий узел спискаpre: TPSpisXD; // предыдущий, относительно curr, узелi:integer; // counter // n:integer; // длина (кол-во элементов) списка // st:string; // строковое представление спискаbegini:=1; //repeatwhile (i<11) dobeginnew(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) dobegin // введенное значение больше текущегоpre:= curr;curr:=curr^.next; // к следующему узлуend;if pre = NILthenbegin // новый узел в начало спискаnode^.next:=head1;head1:=node;endelsebegin // новый узел после pre, перед currnode^.next:=pre^.next;pre^.next:=node;end;i:=i+1; //until (i<11);end;ShowMessage (' ГОТОВО - СПИСОК ХД!');end;procedure TKp. FindXD (AEdit1:TEdit; AStringGrid:TStringGrid);varcurr:TPSpisXD; // текущий, проверяемый узелpre: TPSpisXD; // предыдущий узелfound:boolean; // TRUE - узел, который надо удалить // st:string; // a:integer;beginif head1 = NIL thenbeginMessageDlg ('Список пустой!', mtError, [mbOk], 0);Exit;end;curr:=head1; // текущий узел - первый узелpre:=NIL; // предыдущего узла нетfound:=FALSE; // найти узел =======while (curr <> NIL) and (not found) dobeginif (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 // к следующему узлуbeginpre:=curr;curr:=curr^.next;end;=======end;if found thenbeginKp. 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;endelse // если искомого в списке нет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. Седжвик Р. Фундаментальные алгоритмы на С. Части 14: Анализ / Структуры данных / Сортировка / Поиск. К.: Издательство «ДиаСофт», 2003. 672 с.ПриложениеТекст главного модуля Unit1.pas // ============== // Created by Kamenev A.I. // gr 417318 // Minsk 2010 MIDO BNTU // ===================unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, ExtCtrls, Grids, XPMan, UnitCl, Menus, Unit2;typeTForm1 = 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 Button7Click (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;varForm1: TForm1;implementationuses 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 // Дублир XDFormCreate(Sender);Button8Click(Sender);end; // ===================procedure TForm1. RadioButton2Click (Sender: TObject);begin // Открытие WTK автоматом из файлаKp. Clear(StringGrid1); // Очистка грида // инициал формы WTKKp.WTKGr(StringGrid1);Kp. RowC(StringGrid1);Kp. ReadWTK(StringGrid1);Kp. Free;Button8Click(Sender);end;procedure TForm1. RadioButton3Click (Sender: TObject);begin // Открытие файла BANKKp. Clear(StringGrid1); // Очистка грида // Инициал формы BankKp.BANGr(StringGrid1);Kp. RowC(StringGrid1);Kp. ReadBAN(StringGrid1);Kp. Free;Button8Click(Sender);end; // ===================procedure TForm1. CheckBox1Click (Sender: TObject);begin // запрет на редактир снять - поставитьIf CheckBox1. Checked ThenStringGrid1. Options:=[goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goRowSizing, goColSizing]elseStringGrid1. 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);endelse if RadioButton2. Checked ThenbeginKp.WTKGr(StringGrid1);Kp. RowC(StringGrid1);endelse if RadioButton3. Checked ThenbeginKp.BANGr(StringGrid1);Kp. RowC(StringGrid1);end;Kp. Free;end; // = О ПРОГРАММЕ =====procedure TForm1.N2Click (Sender: TObject);beginShowMessage('КУРСОВОЙ ПРОЕКТ'+#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); // сортировка грида в польз. сообщенийbeginForm4. 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); // Запись в файлbeginIf RadioButton1. Checked ThenKp. WriteXD(StringGrid1)else if RadioButton2. Checked ThenKp. WriteWTK(StringGrid1)else if RadioButton3. Checked ThenKp. WriteBAN(StringGrid1);ShowMessage ('Данные записаны в файл!');Kp. Free;end; // ===================procedure TForm1.N3Click (Sender: TObject);begin // меню дублирButton2Click(Sender);end; // =================== // Удаление строки из гридаprocedure TForm1. Button7Click (Sender: TObject);beginForm2. Top:=Trunc (Form1. Top + Form1. Height/2 - Form2. Height/2);Form2. Left:=Trunc (Form1. Left +Form1. Width/2 - Form2. Width/2);Form2. ShowModal; // Элемент пользовательского интерфейса // очистка cells'ов // в StringGrid1end; // ===================procedure TForm1.N4Click (Sender: TObject);begin // Меню - дублирование - удаление строкиButton7Click(Sender);end; // ===================procedure TForm1. FormActivate (Sender: TObject);begin // Очистка головы списка №1 №2 №3Kp.null;end; // ===================procedure TForm1. Button3Click (Sender: TObject);begin // процедура показаIf RadioButton1. Checked ThenKp.XDShowelse if RadioButton2. Checked ThenKp.WTKShowelse if RadioButton3. Checked ThenKp.BANKShow;Kp. Free;end; // ===================procedure TForm1. Button8Click (Sender: TObject);beginFormActivate(Sender); // процедура внесения содержимого StrigGrid в списокIf RadioButton1. Checked ThenKp.XD(StringGrid1)else if RadioButton2. Checked ThenKp.WTK(StringGrid1)else if RadioButton3. Checked ThenKp.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;interfaceusesSysUtils, Forms, StdCtrls, Grids, Classes, Dialogs;typeTKp = class (TObject)Private{Private data}Publicprocedure 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; // ********** глобальная переменнаяvarkp:TKp;i, Row, CP: Integer;SList: TStringList;n: integer; // длина (кол-во элементов) спискаst: string; // строковое представление спискаFil: string;FirstStr: string; // ********** раздел описанийimplementationtypeTPSpisXD=^TSpisXD;TSpisXD = recordnumb:string[20]; // номерdatzak:string[20]; // дата заключенияdatzav:string[20]; // дата завершенияtemadog:string[40]; // темаnamorg:string[20]; // наименование организацииpriznak:string[15]; // признакstoimost:string[10]; // стоимость в тыс руб.next: TPSpisXD; // следующий элемент спискаend;typeTPSpisWTK=^TSpisWTK;TSpisWTK=recordfam: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;typeTPSpisBAN=^TSpisBAN;TSpisBAN=recordnumotd:string[20]; // фамилияgorod:string[20]; // имяadress:string[20]; // отчествоnaim:string[40]; // дата рожденияkod:string[20]; // код отделенияnext: TPSpisBAN;end;varhead1: TPSpisXD; // начало (голова) списка XDhead2: TPSpisWTK; // голова списка WTKhead3: TPSpisBAN; // голова списка BAN // ===================procedure TKp.null; // Обнуление начала спискаbeginhead1:=NIL;head2:=NIL;head3:=NIL;end; // ===================procedure TKp. MoySort1 (AStringGrid:TStringGrid); // Сортировка по первой колонкеvarnode: TPSpisXD; // новый узел спискаcurr: TPSpisXD; // текущий узел спискаpre: TPSpisXD; // предыдущий, относительно curr, узелi:integer; // counterbeginKp.null;i:=1; //repeatwhile (i<11) dobeginnew(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) dobegin // введенное значение больше текущегоpre:= curr;curr:=curr^.next; // к следующему узлуend;if pre = NILthenbegin // новый узел в начало спискаnode^.next:=head1;head1:=node;endelsebegin // новый узел после pre, перед currnode^.next:=pre^.next;pre^.next:=node;end;i:=i+1;end;Kp.XDShow;end; // ===================procedure TKp. MoySort2 (AStringGrid:TStringGrid); // Сортировка по второй колонкеvarnode: TPSpisXD; // новый узел спискаcurr: TPSpisXD; // текущий узел спискаpre: TPSpisXD; // предыдущий, относительно curr, узелi:integer; // counterbeginKp.null;i:=1; //repeatwhile (i<11) dobeginnew(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) dobegin // введенное значение больше текущегоpre:= curr;curr:=curr^.next; // к следующему узлуend;if pre = NILthenbegin // новый узел в начало спискаnode^.next:=head1;head1:=node;endelsebegin // новый узел после pre, перед currnode^.next:=pre^.next;pre^.next:=node;end;i:=i+1;end;Kp.XDShow;end; // ===================procedure TKp. MoySort5 (AStringGrid:TStringGrid); // Сортировка по пятойvarnode: TPSpisXD; // новый узел спискаcurr: TPSpisXD; // текущий узел спискаpre: TPSpisXD; // предыдущий, относительно curr, узелi:integer; // counter // n:integer; // длина (кол-во элементов) списка // st:string; // строковое представление спискаbeginKp.null;i:=1; //repeatwhile (i<11) dobeginnew(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) dobegin // введенное значение больше текущегоpre:= curr;curr:=curr^.next; // к следующему узлуend;if pre = NILthenbegin // новый узел в начало спискаnode^.next:=head1;head1:=node;endelsebegin // новый узел после pre, перед currnode^.next:=pre^.next;pre^.next:=node;end;i:=i+1; //until (i<11);end;Kp.XDShow;end; // ===================procedure TKp. MoySort7 (AStringGrid:TStringGrid); // Сортировка по 7varnode: TPSpisXD; // новый узел спискаcurr: TPSpisXD; // текущий узел спискаpre: TPSpisXD; // предыдущий, относительно curr, узелi:integer; // counter // n:integer; // длина (кол-во элементов) списка // st:string; // строковое представление спискаbeginKp.null;i:=1; //repeatwhile (i<11) dobeginnew(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) dobegin // введенное значение больше текущегоpre:= curr;curr:=curr^.next; // к следующему узлуend;if pre = NILthenbegin // новый узел в начало спискаnode^.next:=head1;head1:=node;endelsebegin // новый узел после pre, перед currnode^.next:=pre^.next;pre^.next:=node;end;i:=i+1; //until (i<11);end;Kp.XDShow;end; // ===================procedure TKp.WTKShow;varendelse if Form4. RadioButton4. Checked ThenbeginKp. MoySort7 (Form1. StringGrid1);end;Kp. Free;end;procedure TForm4. Button2Click (Sender: TObject);beginForm4. Close;end;end.
|
|