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

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    17,41 Кб
  • Опубликовано:
    2016-02-14
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

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















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

Введение

Данная разработка посвящена созданию программного обеспечения для работы с информационной системой расчетов по договорам. Продукт может использоваться коммерческими научно-производственными организациями (НПО), которые регистрируют хозяйственные договоры (ХД), выполняемые временными трудовыми коллективами (ВТК). В работе предусмотрены следующие моменты:

открытие существующих и создание новых баз (хозяйственных договоров, банков и членов ВТК);

возможно работа с каждой базой в отдельности (просмотр содержимого баз, добавление новой записи, изменение существующих данных и удаление записи из базы);

осуществлен вывод на экран данных о членах ВТК всех незавершенных хозяйственных договоров;

предусмотрена сортировка данных по различным аспектам;

присутствует поиск записей по различным атрибутам, а именно: по имени члена ВТК, по фамилии, отчеству, году рождения, городу, где находится банк и по суме вознаграждения;

сохранение всех измененных данных.

Работа выполнена на языке Object Pascal в среде разработки Delphi 2005. Object Pascal - результат развития языка Турбо Паскаль, который, в свою очередь, развился из языка Паскаль. Паскаль был полностью процедурным языком, Турбо Паскаль, начиная с версии 5.5, добавил в Паскаль объектно-ориентированные свойства, а в Object Pascal - динамическую идентификацию типа данных с возможностью доступа к метаданным классов.

Выбор среды разработки Delphi обусловлен как тем, что это наиболее популярная среда программирования, так и несомненными объективными достоинствами Delphi. Среди этих достоинств:

простой и мощный язык программирования Pascal;

удобная и полная объектная модель;

достаточно удобная среда разработки;

обширная объектная библиотека VCL;

мощные средства разработки приложений баз данных.

1. Состав delphi-проекта

Общая структура Delphi-проекта.

Рисунок 1.1 - Состав проекта

Форма FormBank (модуль UnitBank) предназначена для работы с базой банков.

Рисунок 1.2 - Форма работы с банками

Форма FormClikBAnk (модуль UnitClikBank) предназначена для выбора записи одного из банков.

Рисунок 1.3 - Форма выбора из списка банков

Форма FormClikXD (модуль UnitClikXD) предназначена для выбора записи одного из хозяйственных договоров.

Рисунок 1.4 - Форма выбора записи из списка ХД

Форма FormCreatFile (модуль UnitCreatFile) предназначена создания файлов, которые и будут содержать в себе базы.

Рисунок 1.5 - Форма для создания файлов баз

Форма FormFind (модуль UnitFind) предназначена для выбора критериев поиска и вывод найденых записей в виде таблицы.

Рисунок 1.6 - Форма поиска записей

Форма MainForm (модуль UnitMain) является главной формой программы, откуда производится вызов всех других вспомогательных форм. Также на этой форме производится работа с базовой структурой - список всех членов ВТК незавершенных ХД.

Рисунок 1.7 - Главная форма программы

Форма FormOpenData (модуль UnitOpenData) предназначена открытия файлов, в которых находятся базы.

Рисунок 1.8 - Форма для открытия баз данных

Форма FormWTK (модуль UnitWTK) предназначена для работы с базой ВТК.

Рисунок 1.9 - Форма для работы с членами ВТК

Форма FormMainXD (модуль UnitXD) предназначена для работы с базой хозяйственных договоров.

Рисунок 1.10 - Форма для работы с базой банков

Модуль UnitRecordNfile содержит описание всех глобальных типов данных, методов и объявлений переменных необходимых при работе программы.

Модуль ClassList содержит описание базовой структуры - линейного двусвязного списка, а также класс, в котором реализованы все операции с этим списком.

. Статические данные и структуры

Ниже приводится описание и назначение основных структур и данных, используемых в программе.

Type=record:1..9999;//номер отделения банка:string[50];//город. Где находится отделение

Addres:string[50];//адрес отделения

NameFront:string[50];//название отделения

Cod:1..999;//код отделения (3-хзначное число)

end;=record:string[50];//фамилия члена ВТК:string[50];//имя члена ВТК:string[50];//отчество члена ВТК:integer;//год рождения

Kod:string[10];//код хозяйственного договора

Sign:(Head,Radovo);//должность

SummMany:extended;//вознагрождение за работу

Addres:string[50];//адрес проживания

NumberBank:1..9999;//номер отделения сбербанка:1..9999999;расчетный счет исполнителя

end;

TXD=record

Number:integer;//номер хозяйственного договора

DateCreat:TDateTime;//дата подписания договора

DataFree:TDateTime;//дата завершения договора

Tema:string[50];//тема договора

Customer:string[50];//заказчик работ

PriznakFree:Boolean;//признак готовности

Price:extended;//вознаграждение на каждого члеан ВТК выполнявшие работу

end;: file of TBank;: file of TWTK;: file of TXD;:array of TXD;//массив записей:array of TWTK;//массив записей:array of TBank;//массив записей:string;//имя файла базы банков:string; //имя файла базы ВТК:string; //имя файла базы ХД

Анализ размещения глобальных и локальных данных в памяти (объем занимаемой памяти и указания адресов)

Таблица 1

ТипИмя переменнойРазмер памяти в байтахНачальный адресГлобальные переменныеTBFbank332$49ABA8TWFwtk332$49ACF4TXFXD332$49AE40Array of TXDXD4$49AF8CArray of TWTkBTK4$49AF90Array of TBankBANK4$49AF94integerXD[0].Number4$9D6A24TDateTimeXD[0]. DateCreat8$9D6A2CTDateTimeXD[0]. DataFree8$9D6A34string[50]XD[0]. Tema51$9D6A3Cstring[50]XD[0]. Customer51$9D6A6FBooleanXD[0]. PriznakFree1$9D6AA2extendedXD[0]. Price10$9D6AA41..9999BANK[0]. Number2$9D3FDCstring[50]BANK[0]. City51$9D3FDEstring[50]BANK[0]. Addres51$9D4011string[50]BANK[0]. NameFront51$9D40441..999BANK[0]. Cod2$9D4078string[50]BTK[0]. FamilyName51$9D737Cstring[50]BTK[0]. Name51$9D73AFstring[50]BTK[0]. Patronymic51$9D73E2IntegerBTK[0]. Year4$9D7418string[10]BTK[0]. Kod11$9D741C(Head,Radovo)BTK[0]. Sign1$9D7427ExtendedBTK[0]. SummMany10$9D742Cstring[50]BTK[0]. Addres51$9D74361..9999BTK[0]. NumberBank2$9D746A1..9999999BTK[0]. Account4$9D746CstringNameFbank4$49AF98stringNameFwtk4$49AF9CstringNameFxd4$49AFA0Некоторые локальные переменныеCardinali (procedure TFormBank.ButtonCutBankClick)4$12EC94CardinalN (procedure TFormBank.ButtonDelBankClick)4$12EC98WordYear (procedure TNoFreeXD.FormingList)2$12F606

. Логические структуры данных

Основная структура данных проекта - линейный двусвязный список. Атрибутами элементов списка являются имя, фамилия и отчество члена ВТК, год рождения, код ХД, сумма вознаграждения и горо, где находится отделение банка. Кроме того, каждый элемент списка содержит два указателя, один из которых, прямой указатель (direct pointer), адресует следующий справа элемент, а другой, обратный указатель (backward pointer), адресует предыдущий элемент списка.

Ниже представлено описание элемента списка.

= ^TListStore;=record: string[50];//имя :string[50];//фамилия:string[50];//отчество:integer;//год рождения:string[10];//код ХД:extended;//вознаграждение:string[100];//город,Back:TPointer;//указатели ;

Начало и конец такого списка эквивалентны, так как доступ к элементу может быть осуществлен с любого конца. Поэтому вместо терминов «начало» и «конец» списка используют термины «левый конец» и «правый конец». Соответственно называются и указатели:

, Right, Current, G, Sort:TPointer;


. Алгоритмы обработки основных структур

Вся работа со списком определена в классе TNoFreeXD. Ниже рассмотрены все его процедуры (операции над списком).

TNoFreeXD=class(TObject){начало}, Right{конец}, Current, G, Sort{для сортировки}:TPointer;ElementToStringGrid(i:Cardinal;StringGrid:TStringGrid);FormingList;GetList(StringGrid:TStringGrid);ClearList;Sorting(Index:Integer;Increase:Boolean);Replace;Search(Index:Integer;Text:String;StringGrid:TStringGrid);

end;

. Формирование линейного двусвязного списка членов незавершенных ХД.

Производится просмотр всех членов ВТК. Если член ВТК связан с ХД который не завершен, то он заносится в список (заполняются соответствующие поля элемента списка).

procedure TNoFreeXD.FormingList;,j,k:Cardinal;,_strYear:string;: Word;: Word;: Word;;

New(Current);:=Current;//указатель на начало^.Back:=nil;//указатель на предыдущий должен равен быть в начале (nil)

for i:=0 to GetBTKM-1 doj:=0 to GetXDM-1 do(XD[j].DateCreat,Year,Month,Day);

_strYear:=IntToStr(Year);:=IntToStr(XD[j].Number)+'/'+_strYear[3]+_strYear[4];(str=BTK[i].Kod) and (XD[j].PriznakFree=false) then^.Name:=BTK[i].Name;^.FamilyName:=BTK[i].FamilyName;^.Patronymic:=BTK[i].Patronymic;^.Year:=BTK[i].Year;^.Kod:=BTK[i].Kod;^.SummMany:=BTK[i].SummMany;k:=0 to GetBANKM-1 doBANK[k].Number=BTK[k].NumberBank then^.City:=BANK[i].City;;;(Current^.Dir);

Current^.Dir^.Back:= Current;//указатель на данный элемент:=Current^.Dir;//указатель на следующий

end;;;^.Back^.Dir:=nil;

Right:=Current^.Back;//указатель на конец списка(равен предыдущему)(Current);;

Логические схемы операции формирования списка.

После выполнения операторов

(Current); Left:=Current; Current^.Back:=nil;

Рис. 2

Рис. 3 После нахождения первого члена ВТК.

Рис. 4 После завершения просмотра.

После выполнения операторов

Current^.Back^.Dir:=nil; Right:=Current^.Back; Dispose(Current);

Рис. 5

. Просмотр списка и его отображение в таблице StringGrid

Сначала производится очистка таблицы, а затем последовательный просмотр элементов списка, начиная с левого конца.

procedure TNoFreeXD.GetList(StringGrid:TStringGrid);,j:integer;i:=1 to 25 doj:=0 to 8 do.Cells[j,i]:='';:=Left;//получаем указатель на начало

i:=1;Current<> nil do.Cells[0,i]:=IntToStr(i);.Cells[1,i]:=Current^.Name;.Cells[2,i]:=Current^.FamilyName;.Cells[3,i]:=Current^.Patronymic;.Cells[4,i]:=IntToStr(Current^.Year);.Cells[5,i]:=Current^.Kod;.Cells[6,i]:=FloatToStr(Current^.SummMany);.Cells[7,i]:=Current^.City;:=Current^.Dir;//указатель на следующий элемент

Inc(i);

end;

end;

. Поиск элементов по заданному атрибуту в списке

Пользователь задает атрибут поиска и его значение. В процедуре Search производится последовательный просмотр элементов списка в направлении от левого конца к правому. Если элемент удовлетворяет искомому значению, то он помещается в таблицу. По завершении поиска появляется сообщение о количестве найденных элементов.

Procedure TNoFreeXD.Search(Index:Integer;Text:String;StringGrid :TStringGrid);i, j:integer;i:=1 to 250 doj:=0 to 5 do.Cells[j,i]:='';

Current:=Left;//получаем указатель на начало

i:=1;Current<> nil doIndex of

: if Current^.Name=Text(i,StringGrid);(i);;

: if Current^.FamilyName=Text(i,StringGrid);(i);;

: if Current^.Patronymic=Text

then

begin(i,StringGrid);(i);;

: if Current^.Year=StrToInt(Text)(i,StringGrid);(i);;

: if Current^.SummMany=StrToFloat(Text)(i,StringGrid);(i);;

: if Current^.City=Text(i,StringGrid);(i);;;:=Current^.Dir;;('Поиск завершен. Найдено элементов - '+IntToStr(i-1),mtInformation,[mbOk],0);

end;

procedure TNoFreeXD.ElementToStringGrid(i:Cardinal;StringGrid :TStringGrid);.Cells[0,i]:=IntToStr(i);.Cells[1,i]:=Current^.Name;.Cells[2,i]:=Current^.FamilyName;.Cells[3,i]:=Current^.Patronymic;.Cells[4,i]:=IntToStr(Current^.Year);.Cells[5,i]:=Current^.Kod;.Cells[6,i]:=FloatToStr(Current^.SummMany);.Cells[7,i]:=Current^.City;

end;

4. Сортировка списка прямым выбором

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

Алгоритм этого метода сортировки следующий.

Выбирается (выделяется) элемент с наименьшим (или наибольшим - в зависимости от способа упорядочения: по возрастанию, по убыванию) значением атрибута сортировки. Затем этот элемент меняется местом с первым элементом списка. Среди остальных элементов списка (т.е. среди всех кроме первого) снова выбирается элемент с наименьшим значением атрибута сортировки. Он меняется местом со вторым элементом списка. Далее все повторяется, пока не останется один наибольший элемент списка.

procedure TNoFreeXD.Sorting(Index:Integer;Increase:Boolean);:TPointer;Left=Right then Exit;:=Left;XPointer^.Dir<>nil do

begin:=XPointer;//берем указатель на элемен:=XPointer^.Dir;//перемещаемм указатель на следующий:=Sort;//элемент с которым будем сравнивать:=G^.Dir;//следующий элементCurrent<>nil do//пока не пройдем весь список

beginIndex of

: if Increase=True//как сортировать(убыванию или увелечению)G^.Name<Current^.NameG:=Current;if G^.Name>Current^.NameG:=Current;

: if Increase=TrueG^.FamilyName<Current^.FamilyNameG:=Current;if G^.FamilyName>Current^.FamilyNameG:=Current;

: if Increase=TrueG^.Patronymic<Current^.PatronymicG:=Current;if G^.Patronymic>Current^.PatronymicG:=Current;

: if Increase=True

then

if G^.SummMany<Current^.SummManyG:=Current;if G^.SummMany>Current^.SummManyG:=Current;

: if Increase=TrueG^.City<Current^.CityG:=Current;if G^.City>Current^.CityG:=Current;

: if Increase=TrueG^.Year<Current^.YearG:=Current;if G^.Year>Current^.YearG:=Current;;:=Current^.Dir;//указываем на следующий элемент

end;

//если было изменение(одно из if сработало) то меняем указатели

if G<>Sort then Replace;

end;;

procedure TNoFreeXD.Replace;G^.Dir<>nilG^.Dir^.Back:=SortRight:=Sort;Sort^.Dir<>G^.Dir^.Back:=G;^.Back^.Dir:=Sort;;Sort^.Back<>nilSort^.Back^.Dir:=GLeft:=G;:=G^.Dir;Sort^.Dir=GG^.Dir:=SortG^.Dir:=Sort^.Dir;^.Dir:=Current;G^.Back=Sort:=Sort^.Back;^.Back:=G;^.Back:=Current;:=G^.Back;^.Back:=Sort^.Back;^.Back:=Current;

end;;

Логические схемы операции сортировки

Рассмотрим один из шагов сортировки списка по возрастанию года рождения (первый шаг).

Стартовая структура (часть линейного двусвязного списка). Указатель G ссылается уже на элемент с минимальным значением атрибута. Требуется поменять местами первый элемент, на который указывает Sort, и элемент, на который указывает G.

Рис. 6



Рис. 8 После выполнения Sort^.Dir^.Back:=G; G^.Back^.Dir:=Sort;

Рис. 9 После выполнения Left:=G; Current:=G^.Dir;

Рис. 10 После выполнения G^.Dir:=Sort^.Dir; Sort^.Dir:=Current;

Рис. 11 После выполнения Current:=G^.Back; G^.Back:=Sort^.Back; Sort^.Back:=Current;

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

. Руководство пользования

После запуска программы появится главное окно, в котором вначале пользователю доступны только две функции: Создать файлы и Открыть файлы в которых находятся базы. Также доступна функция «Перегрузить список» (перегрузка списка членов незавершенных ВТК, на данном этапе она выдаст предупреждение, так как базы не заполнены).

Рисунок 13 - Главное окно программы

При выборе первого варианта появляется вспомогательное окно, где пользователь выбирает, какой файл создать.

Рисунок 14 - Создание файлов баз

После создания файлов баз, на главной форме становятся доступны функции : «Работа с базой членов ВТК», «Работа с базой банков» и «Работа с базой ХД».

При выборе второго варианта появляется вспомогательное окно, где пользователь выбирает какие файлы необходимо открыть.

Рисунок 15 - Открытие файлов баз

После открытия файлов баз, на главной форме становятся доступны функции : «Работа с базой членов ВТК», «Работа с базой банков», «Работа с базой ХД», «Сортировка» и «Поиск». Данные из файлов загружаются и таблица «Список членов всех незавершенных договоров» заполняется соответствующими значениями.

При нажатии на «Сортировка» пользователю предоставляется возможность выбора атрибутов сортировки и способа упорядочения, после того, как был произведен вышеуказанный выбор, отсортированный список отобразится в таблице на главной форме.

Рисунок 16 - Заполнение таблицы главной формы

Нажав на «Поиск», Пользователю необходимо задать атрибут поиска и значение атрибута. После нажатия кнопки «Поиск» будет произведен просмотр всех элементов списка. Если найдутся элементы с заданным значением атрибута, то они отобразятся в таблице. После окончания поиска появится соответствующее сообщение.

Рис. 17

Рисунок 18 - Поиск

Работа с базой членов ВТК. Появляется окно, в котором пользователь может просмотреть всех членов разных ВТК, добавить нового члена, изменить информацию о существующих членах ВТК и удалить члена из ВТК. Для удаления записи необходимо нажать в таблице по информации о члене, которого необходимо удалить и нажать «Удалить». Для изменения необходимо нажать в таблице по информации о члене ВТК, информацию о котором необходимо изменить ввести новые данные и нажать «Изменить».

Рисунок 19 - Работа с базой членов ВТК

Работа с базой банков. Появляется окно, в котором пользователь может просмотреть все банки находящиеся в базе, добавить новый банк, изменить информацию о банках и удалить банк. Для удаления записи необходимо нажать в таблице по информации о банке, которого необходимо удалить и нажать «Удалить». Для изменения необходимо нажать в таблице по информации о банке, информацию о котором необходимо изменить ввести новые данные и нажать «Изменить».

Рисунок 20 - Работа с базой банков

Работа с базой хозяйственных договоров. Появляется окно, в котором пользователь может просмотреть все хозяйственные договоры, добавить новый ХД, изменить информацию о существующих ХД и удалить ХД. Для удаления записи необходимо нажать в таблице по информации о ХД, которого необходимо удалить и нажать «Удалить». Для изменения необходимо нажать в таблице по информации о ХД, информацию о котором необходимо изменить ввести новые данные и нажать «Изменить».

Рисунок 21 - Работа с базой ХД

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

Рисунок 22 - Запрос о сохранении

Все произведенные изменения баз отражаются в таблице на главной форме при нажатии «Перегрузить список». Вообще проект имеет достаточно удобный пользовательский интерфейс и во многих случаях исключает вероятность ввода ошибочных данных пользователем.

Заключение

В рамках курсовой работы, язык Object Pascal - среда разработки Delphi 2005, был выбран платформой для реализации поставленной передо мной задачи (разработка информационной системы расчетов по договорам) так, как данный язык является удобным средством создания визуального приложения для работы с базами данными (хотя возможно было также воспользоваться языком C# - среда разработки MSVS 2011). Хранить всю информацию базы в Object Pascal возможно в файле типа .dat, который хорошо подходит для этой цели.

Тестирование программы показало, что данный продукт может использоваться коммерческими научно-производственными организациями (НПО), которые регистрируют хозяйственные договоры (ХД), выполняемые временными трудовыми коллективами (ВТК). В программе предусмотрены следующие моменты: добавление, удаление, изменение баз данных (членов ВТК, ХД и банков), поиск, сортировка записей по различным аспектам, просмотр записей в виде таблицы, создание новых баз или перезапись существующих.

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

Также следует заметить, что при необходимости данную программу можно дополнить и усовершенствовать (например, создать новые функции, которые будут зависеть от новых поставленных задач).

delphi список алгоритм программа

Литература

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

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

.Гудрич М.Т. Структуры данных и алгоритмы в Java. / М.Т. Гудрич, Р. Тамассия. - Мн.: Новое знание, 2003. - 671 с.

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

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

.Седжвик Р. Фундаментальные алгоритмы на С. Части 1-4: Анализ/Структуры данных/Сортировка/Поиск. - К.: Издательство «ДиаСофт», 2012. - 672 с.

.Седжвик Р. Фундаментальные алгоритмы на С. Часть 5: Алгоритмы на графах. - К.: Издательство «ДиаСофт», 2011. - 496 с.

Приложение

Исходные тексты всех модулей

unit UnitMain;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, Grids, Menus, ExtCtrls, XPMan,UnitRecordNfile,UnitCreatFile,, TeeProcs, TeEngine, Chart, Series,UnitBank,UnitWTK,UnitOpenData;= class(TForm): TPanel;: TMainMenu;: TMenuItem;: TStringGrid;: TLabel;: TXPManifest;: TButton;: TGroupBox;: TButton;: TButton;: TButton;: TGroupBox;: TButton;: TButton;: TButton;: TButton;: TRadioGroup;: TButton;: TRadioGroup;: TMenuItem;N2Click(Sender: TObject);ButtonSearchClick(Sender: TObject);ButtonOtSortClick(Sender: TObject);ButtonSortClick(Sender: TObject);Button2Click(Sender: TObject);Button1Click(Sender: TObject);ButtonRedBTKClick(Sender: TObject);ButtonBankClick(Sender: TObject);ButtonXDClick(Sender: TObject);ButtonOpenBANKClick(Sender: TObject);FormCreate(Sender: TObject);

{ Private declarations }

{ Public declarations };: TMainForm;ClassList,UnitFind;NoFreeSotre:TNoFreeXD;

{$R *.dfm}TMainForm.FormCreate(Sender: TObject);.Cells[0,0]:='№';.Cells[1,0]:='Имя';.Cells[2,0]:='Фамилия';.Cells[3,0]:='Отчество';.Cells[4,0]:='Год рождения';.Cells[5,0]:='Код ХД';.Cells[6,0]:='Сумма вознаграждения';

StringGridMain.Cells[7,0]:='Город нахождения банка';

end;TMainForm.ButtonOpenBANKClick(Sender: TObject);.CreateForm(TFormCreatFile,FormCreatFile);.ShowModal;;TMainForm.ButtonXDClick(Sender: TObject);.CreateForm(TFormMainXD,FormMainXD);.ShowModal;;TMainForm.ButtonBankClick(Sender: TObject);.CreateForm(TFormBank,FormBank);.ShowModal;;TMainForm.ButtonRedBTKClick(Sender: TObject);.CreateForm(TFormWTK,FormWTK);.ShowModal;;TMainForm.Button1Click(Sender: TObject);.CreateForm(TFormOpenData,FormOpenData);.ShowModal;Click(Self);;TMainForm.Button2Click(Sender: TObject);(XD=Nil) or (BTK=Nil) or (BANK=Nil) then('Список сформировать нельзя ',mtConfirmation,[mbOK],0);NoFreeSotre<>Nil then.Free;:=TNoFreeXD.Create;.FormingList;.GetList(StringGridMain);.Enabled:=true;.Enabled:=true;;;TMainForm.ButtonSortClick(Sender: TObject);.Height:=618;;TMainForm.ButtonOtSortClick(Sender: TObject);:boolean;.Height:=494;RadioGroupMinMax.ItemIndex=0 then:=truemetka:=false;.Sorting(RadioGroupSort.ItemIndex,metka);.GetList(StringGridMain);;TMainForm.ButtonSearchClick(Sender: TObject);.CreateForm(TFormFind,FormFind);.NotFreeStor:=NoFreeSotre;.ShowModal;;TMainForm.N2Click(Sender: TObject);

begin.Close;;.UnitOpenData;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls;= class(TForm): TLabel;: TLabel;: TLabel;: TButton;: TButton;: TButton;: TOpenDialog;ButtonOpenBankClick(Sender: TObject);ButtonOpenWTBClick(Sender: TObject);ButtonOpenXDClick(Sender: TObject);FormCreate(Sender: TObject);

{ Private declarations }

{ Public declarations };: TFormOpenData;UnitMain,UnitRecordNfile;

{$R *.dfm}TFormOpenData.FormCreate(Sender: TObject);.Caption:=' Файл не открыт';2.Caption:=' Файл не открыт';

Label3.Caption:=' Файл не открыт';

end;TFormOpenData.ButtonOpenXDClick(Sender: TObject);XD<>Nil then:=nil;;.Title:='Открыть файл';OpenDialog1.Execute then:=OpenDialog1.FileName;(Fxd,NameFxd);(Fxd);not EOF(Fxd) do;(Fxd, XD[GetXDM-1]);.Caption:='Файл открыт';;;.ButtonXD.Enabled:=true;;TFormOpenData.ButtonOpenWTBClick(Sender: TObject);BTK<>Nil then:=nil;;.Title:='Открыть файл';OpenDialog1.Execute then:=OpenDialog1.FileName;(Fwtk,NameFwtk);(Fwtk);not EOF(Fwtk) do;(Fwtk, BTK[GetBTKM-1]);.Caption:='Файл открыт';;;.ButtonRedBTK.Enabled:=true;;TFormOpenData.ButtonOpenBankClick(Sender: TObject);BANK<>Nil then:=nil;;.Title:='Открыть файл';OpenDialog1.Execute then:=OpenDialog1.FileName;(Fbank,NameFbank);(Fbank);not EOF(Fbank) do;(Fbank, BANK[GetBANKM-1]);.Caption:='Файл открыт';;;.ButtonBank.Enabled:=true;;.UnitWTK;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, Grids, StdCtrls, ExtCtrls, Buttons;= class(TForm): TStringGrid;: TLabel;: TEdit;: TLabel;: TEdit;: TLabel;: TEdit;: TLabel;: TEdit;: TLabel;: TLabel;: TEdit;: TLabel;: TEdit;: TRadioGroup;: TLabel;: TEdit;: TButton;: TButton;: TButton;: TLabel;: TEdit;: TLabel;: TEdit;: TSpeedButton;: TSpeedButton;: TGroupBox;SpeedButtonBankClick(Sender: TObject);SpeedButtonXDClick(Sender: TObject);FormClose(Sender: TObject; var Action: TCloseAction);StringGridWTKSelectCell(Sender: TObject; ACol, ARow: Integer;CanSelect: Boolean);ButtonDelWTKClick(Sender: TObject);ButtonChangWTKClick(Sender: TObject);ButtonAddWTKClick(Sender: TObject);FormCreate(Sender: TObject);:boolean;

{ Private declarations }

{ Public declarations };: TFormWTK;UnitRecordNfile,UnitClikXD,UnitClikBank;

{$R *.dfm}GetWTK();,j:cardinal;i:=1 to 15 doj:=0 to 16 do.StringGridWTK.Cells[j,i]:='';BTK<>Nil theni:=0 to GetBTKM-1 do.StringGridWTK.Cells[0,i+1]:=IntToStr(i+1);.StringGridWTK.Cells[1,i+1]:=BTK[i].FamilyName;.StringGridWTK.Cells[2,i+1]:=BTK[i].Name;.StringGridWTK.Cells[3,i+1]:=BTK[i].Patronymic;.StringGridWTK.Cells[4,i+1]:=IntToStr(BTK[i].Year);BTK[i].Sign of:FormWTK.StringGridWTK.Cells[5,i+1]:='Руководитель ВТК';:FormWTK.StringGridWTK.Cells[5,i+1]:='Рядовой член ВТК';;.StringGridWTK.Cells[6,i+1]:=BTK[i].Addres;.StringGridWTK.Cells[7,i+1]:=IntToStr(BTK[i].Account);.StringGridWTK.Cells[8,i+1]:=BTK[i].Kod;.StringGridWTK.Cells[9,i+1]:=FloatToStr(BTK[i].SummMany);.StringGridWTK.Cells[10,i+1]:=IntToStr(BTK[i].NumberBank);;;;TFormWTK.FormCreate(Sender: TObject);.Cells[0,0]:='№';.Cells[1,0]:='Фамилия';.Cells[2,0]:='Имя';.Cells[3,0]:='Отчество';.Cells[4,0]:='Год рождения';.Cells[5,0]:='Должность';.Cells[6,0]:='Домашний адрес';.Cells[7,0]:='Расчетный счет';.Cells[8,0]:='Код ХД';.Cells[9,0]:='Вознаграждение';.Cells[10,0]:='Номер отделения банка';;:=false;;TFormWTK.ButtonAddWTKClick(Sender: TObject);;[GetBTKM-1].FamilyName:=EditFam.Text;[GetBTKM-1].Name:=EditName.Text;[GetBTKM-1].Patronymic:=EditOct.Text;[GetBTKM-1].Year:=StrToInt(EditYear.Text);RadioGroupDol.ItemIndex of

:BTK[GetBTKM-1].Sign:=Head;

:BTK[GetBTKM-1].Sign:=Radovo;;[GetBTKM-1].Addres:=EditAddres.Text;[GetBTKM-1].Account:=StrToInt(EditSchet.Text);[GetBTKM-1].Kod:=EditCod.Text;[GetBTKM-1].SummMany:=StrToFloat(EditSum.Text);[GetBTKM-1].NumberBank:=StrToInt(EditNumberBank.Text);;:=true;;TFormWTK.ButtonChangWTKClick(Sender: TObject);:Cardinal;:=StringGridWTK.Row-1;[N].FamilyName:=EditFam.Text;[N].Name:=EditName.Text;[N].Patronymic:=EditOct.Text;[N].Year:=StrToInt(EditYear.Text);RadioGroupDol.ItemIndex of

:BTK[N].Sign:=Head;

:BTK[N].Sign:=Radovo;;[N].Addres:=EditAddres.Text;[N].Account:=StrToInt(EditSchet.Text);[N].Kod:=EditCod.Text;[N].SummMany:=StrToFloat(EditSum.Text);[N].NumberBank:=StrToInt(EditNumberBank.Text);;:=true;;TFormWTK.ButtonDelWTKClick(Sender: TObject);,j,N:Cardinal;:=StringGridWTK.Row-1;i:=N to GetBTKM-1 do[i]:=BTK[i+1];;(BTK,GetBTKM-1);;:=true;;TFormWTK.StringGridWTKSelectCell(Sender: TObject; ACol, ARow: Integer;CanSelect: Boolean);ARow-1<GetBTKM then.Text:=BTK[ARow-1].FamilyName;.Text:=BTK[ARow-1].Name;.Text:=BTK[ARow-1].Patronymic;.Text:=IntToStr(BTK[ARow-1].Year);BTK[ARow-1].Sign of:RadioGroupDol.ItemIndex:=0;:RadioGroupDol.ItemIndex:=1;;.Text:=BTK[ARow-1].Addres;.Text:=IntToStr(BTK[ARow-1].Account);.Text:=BTK[ARow-1].Kod;.Text:=FloatToStr(BTK[ARow-1].SummMany);.Text:=IntToStr(BTK[ARow-1].NumberBank);:=false;;;TFormWTK.FormClose(Sender: TObject; var Action: TCloseAction);:integer;(NameFwtk<>'') and (MetkaChange=true) thenMessageDlg('Сохранить изменения в файле "'+NameFwtk+'" ?',mtConfirmation,[mbYes,mbNo],0)=mrYes then(Fwtk);i:=0 to GetBTKM-1 do(Fwtk,BTK[i]);;;;TFormWTK.SpeedButtonXDClick(Sender: TObject);.CreateForm(TFormClikXD,FormClikXD);.ShowModal;;TFormWTK.SpeedButtonBankClick(Sender: TObject);.CreateForm(TFormClikBAnk,FormClikBAnk);.ShowModal;;.UnitXD;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, Grids, StdCtrls, ComCtrls;= class(TForm): TStringGrid;: TButton;: TButton;: TEdit;: TLabel;: TLabel;: TLabel;: TEdit;: TEdit;: TLabel;: TLabel;: TEdit;: TLabel;: TDateTimePicker;: TDateTimePicker;: TButton;: TCheckBox;StringGridXDSelectCell(Sender: TObject; ACol, ARow: Integer;CanSelect: Boolean);Button1Click(Sender: TObject);ButtonDelXDClick(Sender: TObject);FormClose(Sender: TObject; var Action: TCloseAction);ButtonAddXdClick(Sender: TObject);FormCreate(Sender: TObject);:boolean;GetXD;

{ Private declarations }

{ Public declarations };: TFormMainXD;UnitRecordNfile;

{$R *.dfm}TFormMainXD.GetXD;,j:integer;i:=1 to 15 doj:=0 to 16 do.Cells[j,i]:='';XD<>Nil then:=GetXDM-1;i:=0 to GetXDM-1 do.Cells[0,i+1]:=IntToStr(i+1);.Cells[1,i+1]:=IntToStr(XD[i].Number);.Cells[2,i+1]:=DateToStr(XD[i].DateCreat);.Cells[3,i+1]:=DateToStr(XD[i].DataFree);.Cells[4,i+1]:=XD[i].Tema;.Cells[5,i+1]:=XD[i].Customer;XD[i].PriznakFree=true then.Cells[6,i+1]:='Завершен'StringGridXD.Cells[6,i+1]:='Не завершен';.Cells[7,i+1]:=FloatToStr(XD[i].Price);;;;TFormMainXD.FormCreate(Sender: TObject);.Cells[0,0]:='№';.Cells[1,0]:='Номер договора';.Cells[2,0]:='Дата заключения договора';.Cells[3,0]:='Дата завершения договора';

StringGridXD.Cells[4,0]:='Тема договора';

StringGridXD.Cells[5,0]:='Заказчик работ';

StringGridXD.Cells[6,0]:='Признак завершения';

StringGridXD.Cells[7,0]:='Стоимость договора';

{ Private declarations }

{ Public declarations };: TFormBank;UnitRecordNfile;

{$R *.dfm}GetStrinGrid();,j:integer;i:=1 to 15 doj:=0 to 16 do.StringGridBank.Cells[j,i]:='';BANK<>Nil theni:=0 to GetBANKM-1 do.StringGridBank.Cells[0,i+1]:=IntToStr(i+1);.StringGridBank.Cells[1,i+1]:=IntToStr(Bank[i].Number);.StringGridBank.Cells[2,i+1]:=BANK[i].City;.StringGridBank.Cells[3,i+1]:=BANK[i].Addres;.StringGridBank.Cells[4,i+1]:=BANK[i].NameFront;.StringGridBank.Cells[5,i+1]:=IntToStr(BANK[i].Cod);;;;TFormBank.FormCreate(Sender: TObject);.Cells[0,0]:='№';.Cells[1,0]:='Номер отделения';.Cells[2,0]:='Город';.Cells[3,0]:='Адрес';.Cells[4,0]:='Название отделения';.Cells[5,0]:='Код отделения';:=false;;;TFormBank.ButtonAddBankClick(Sender: TObject);;[GetBANKM-1].Number:=StrToInt(EditNum_4.Text);[GetBANKM-1].City:=EditCity.Text;[GetBANKM-1].Addres:=EditAddres.Text;[GetBANKM-1].NameFront:=EditNameOtdel.Text;[GetBANKM-1].Cod:=StrToInt(EditCod.Text);:=true;;;TFormBank.ButtonCutBankClick(Sender: TObject);,j,N:Cardinal;:=StringGridBank.Row-1;[N].Number:=StrToInt(EditNum_4.Text);[N].City:=EditCity.Text;[N].Addres:=EditAddres.Text;[N].NameFront:=EditNameOtdel.Text;[N].Cod:=StrToInt(EditCod.Text);;:=true;;TFormBank.StringGridBankSelectCell(Sender: TObject; ACol,: Integer; var CanSelect: Boolean);ARow-1<GetBANKM then_4.Text:=IntToStr(Bank[ARow-1].Number);.Text:=BANK[ARow-1].City;.Text:=BANK[ARow-1].Addres;.Text:=BANK[ARow-1].NameFront;.Text:=IntToStr(BANK[ARow-1].Cod);:=false;;;TFormBank.ButtonDelBankClick(Sender: TObject);,N:Cardinal;GetBANKM-1<>0 then:=StringGridBank.Row-1;i:=N to GetBANKM-1 do[i]:=BANK[i+1];;(BANK,GetBANKM-1);;:=true;if GetBANKM-1=0 then('База пуста',mtInformation,[mbOK],0);;;TFormBank.FormClose(Sender: TObject; var Action: TCloseAction);:integer;(NameFbank<>'') and(MetkaChange=true) thenMessageDlg('Сохранить изменения в файле "'+NameFbank+'" ?',mtConfirmation,[mbYes,mbNo],0)=mrYes then(Fbank);i:=0 to GetBANKM-1 do(Fbank,BANK[i]);;;;.UnitClikBank;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, Grids, StdCtrls;= class(TForm): TStringGrid;: TButton;ButtonOKClick(Sender: TObject);StringGridClikBankSelectCell(Sender: TObject; ACol, ARow: Integer;CanSelect: Boolean);FormCreate(Sender: TObject);

{ Private declarations }

{ Public declarations };: TFormClikBAnk;UnitWTK,UnitRecordNfile;

{$R *.dfm}TFormClikBAnk.FormCreate(Sender: TObject);,j:integer;i:=1 to 15 doj:=0 to 16 do.Cells[j,i]:='';BANK<>Nil theni:=0 to GetBANKM-1 do.Cells[0,i+1]:=IntToStr(i+1);.Cells[1,i+1]:=IntToStr(Bank[i].Number);.Cells[2,i+1]:=BANK[i].City;.Cells[3,i+1]:=BANK[i].Addres;.Cells[4,i+1]:=BANK[i].NameFront;.Cells[5,i+1]:=IntToStr(BANK[i].Cod);;;.Cells[0,0]:='№';.Cells[1,0]:='Номер отделения';.Cells[2,0]:='Город';.Cells[3,0]:='Адрес';.Cells[4,0]:='Название отделения';.Cells[5,0]:='Код отделения';;TFormClikBAnk.StringGridClikBankSelectCell(Sender: TObject; ACol,: Integer; var CanSelect: Boolean);ARow-1>GetBANKM then:=false;;;TFormClikBAnk.ButtonOKClick(Sender: TObject);:cardinal;:=StringGridClikBank.Row-1;.EditNumberBank.Text:=IntToStr(Bank[N].Number);.Close;;.UnitClikXD;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, Grids,StdCtrls,UnitRecordNfile;= class(TForm): TStringGrid;: TButton;ButtonOKClick(Sender: TObject);StringGridClikXDSelectCell(Sender: TObject; ACol, ARow: Integer;CanSelect: Boolean);FormCreate(Sender: TObject);

{ Private declarations }

{ Public declarations };: TFormClikXD;UnitWTK;

{$R *.dfm}TFormClikXD.FormCreate(Sender: TObject);,j:cardinal;i:=1 to 15 doj:=0 to 16 do.Cells[j,i]:='';.Cells[0,0]:='№';.Cells[1,0]:='Номер договора';.Cells[2,0]:='Дата заключения договора';

StringGridClikXD.Cells[3,0]:='Дата завершения договора';

StringGridClikXD.Cells[4,0]:='Тема договора';

StringGridClikXD.Cells[5,0]:='Заказчик работ';

StringGridClikXD.Cells[6,0]:='Признак завершения';

StringGridClikXD.Cells[7,0]:='Стоимость договора';

if XD<>Nil theni:=0 to GetXDM-1 do.Cells[0,i+1]:=IntToStr(i+1);.Cells[1,i+1]:=IntToStr(XD[i].Number);.Cells[2,i+1]:=DateToStr(XD[i].DateCreat);.Cells[3,i+1]:=DateToStr(XD[i].DataFree);.Cells[4,i+1]:=XD[i].Tema;.Cells[5,i+1]:=XD[i].Customer;XD[i].PriznakFree=true then.Cells[6,i+1]:='Завершен'StringGridClikXD.Cells[6,i+1]:='Не завершен';.Cells[7,i+1]:=FloatToStr(XD[i].Price);;;;TFormClikXD.StringGridClikXDSelectCell(Sender: TObject; ACol,: Integer; var CanSelect: Boolean);ARow-1>GetXDM then:=false;;;TFormClikXD.ButtonOKClick(Sender: TObject);:Cardinal;,_strYear:string;: Word;: Word;: Word;:=StringGridClikXD.Row-1;[N].NumPeopl:=XD[N].NumPeopl+1;.EditSum.Text:=FloatToStr(XD[N].Price);(XD[N].DateCreat,Year,Month,Day);

_strYear:=IntToStr(Year);:=IntToStr(XD[N].Number)+'/'+_strYear[3]+_strYear[4];.EditCod.Text:=str;.Close;;.UnitCreatFile;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls,UnitRecordNfile;= class(TForm): TButton;: TButton;: TButton;: TLabel;: TLabel;: TLabel;: TSaveDialog;ButtonCreatBankClick(Sender: TObject);ButtonCreatWTBClick(Sender: TObject);FormCreate(Sender: TObject);ButtonCreatXDClick(Sender: TObject);

{ Private declarations }

{ Public declarations };: TFormCreatFile;UnitMain;

{$R *.dfm}TFormCreatFile.ButtonCreatXDClick(Sender: TObject);.Title:=' Создать базу';SaveDialogCreatFile.Execute then:=SaveDialogCreatFile.FileName;(Fxd,NameFxd);(Fxd);.Caption:=' Файл создан';.ButtonXD.Enabled:=true;;;TFormCreatFile.FormCreate(Sender: TObject);.Caption:=' Файл не создан';2.Caption:=' Файл не создан';

Label3.Caption:=' Файл не создан';

end;TFormCreatFile.ButtonCreatWTBClick(Sender: TObject);.Title:=' Создать базу';SaveDialogCreatFile.Execute then:=SaveDialogCreatFile.FileName;(Fwtk,NameFwtk);(Fwtk);.Caption:=' Файл создан';.ButtonRedBTK.Enabled:=true;;;TFormCreatFile.ButtonCreatBankClick(Sender: TObject);.Title:=' Создать базу';SaveDialogCreatFile.Execute then:=SaveDialogCreatFile.FileName;(Fbank,NameFbank);(Fbank);.Caption:=' Файл создан';.ButtonBank.Enabled:=true;;;.UnitFind;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, ExtCtrls, Grids,ClassList,UnitMain;= class(TForm): TRadioGroup;: TStringGrid;: TLabel;: TEdit;: TButton;ButtonSeachClick(Sender: TObject);RadioGroupfindClick(Sender: TObject);FormCreate(Sender: TObject);

{ Private declarations }:TNoFreeXD;

{ Public declarations };: TFormFind;

{$R *.dfm}TFormFind.FormCreate(Sender: TObject);.Cells[0,0]:='№';.Cells[1,0]:='Имя';.Cells[2,0]:='Фамилия';.Cells[3,0]:='Отчество';.Cells[4,0]:='Год рождения';.Cells[5,0]:='Код ХД';.Cells[6,0]:='Сумма вознаграждения';.Cells[7,0]:='Город нахождения банка';

end;TFormFind.RadioGroupfindClick(Sender: TObject);RadioGroupfind.ItemIndex of

:begin.Caption:='Имя члена ВТК';;

:begin.Caption:='Фамилия члена ВТК';;

:begin.Caption:='Отчество члена ВТК';;

:begin.Caption:='Год рождения члена ВТК';;

:begin

Label1.Caption:='Вознаграждение за работу';

end;

:begin

Label1.Caption:='Город банка где находится расчетный счет';

end;;;TFormFind.ButtonSeachClick(Sender: TObject);.Search(RadioGroupfind.ItemIndex,Edit1.Text,StringGridFind);;.ClassList;Grids, SysUtils, Dialogs;

//двусвязный список= ^TListStore;=record: string[50];:string[50];:string[50];:integer;:string[10];:extended;:string[100];,Back:TPointer; //Указатели на следующий и предыдущий элементы;=class(TObject){начало}, Right{конец}, Current, G, Sort{для сортировки}:TPointer;ElementToStringGrid(i:Cardinal;StringGrid:TStringGrid);FormingList;GetList(StringGrid:TStringGrid);ClearList;Sorting(Index:Integer;Increase:Boolean);Replace;Search(Index:Integer;Text:String;StringGrid:TStringGrid);;UnitRecordNfile;TNoFreeXD.FormingList;,j,k:Cardinal;,_strYear:string;: Word;: Word;: Word;(Current);:=Current;//указатель на начало

Current^.Back:=nil;//указатель на предыдущий должен равен быть в начале (nil)

for i:=0 to GetBTKM-1 doj:=0 to GetXDM-1 do(XD[j].DateCreat,Year,Month,Day);

_strYear:=IntToStr(Year);:=IntToStr(XD[j].Number)+'/'+_strYear[3]+_strYear[4];(str=BTK[i].Kod) and (XD[j].PriznakFree=false) then^.Name:=BTK[i].Name;^.FamilyName:=BTK[i].FamilyName;^.Patronymic:=BTK[i].Patronymic;^.Year:=BTK[i].Year;^.Kod:=BTK[i].Kod;^.SummMany:=BTK[i].SummMany;k:=0 to GetBANKM-1 doBANK[k].Number=BTK[i].NumberBank then^.City:=BANK[k].City;;;(Current^.Dir);^.Dir^.Back:= Current;//указатель на данный элемент

Current:=Current^.Dir;//указатель на следующий

end;;;^.Back^.Dir:=nil;:=Current^.Back;//указатель на конец списка(равен предыдущему)

Dispose(Current);;TNoFreeXD.GetList(StringGrid:TStringGrid);,j:integer;i:=1 to 25 doj:=0 to 8 do.Cells[j,i]:='';:=Left;//получаем указатель на начало

i:=1;Current<> nil do.Cells[0,i]:=IntToStr(i);.Cells[1,i]:=Current^.Name;.Cells[2,i]:=Current^.FamilyName;.Cells[3,i]:=Current^.Patronymic;.Cells[4,i]:=IntToStr(Current^.Year);.Cells[5,i]:=Current^.Kod;.Cells[6,i]:=FloatToStr(Current^.SummMany);.Cells[7,i]:=Current^.City;:=Current^.Dir;//указатель на следующий элемент

Inc(i);;;TNoFreeXD.ClearList;(Left);(Right);(Current);;TNoFreeXD.Sorting(Index:Integer;Increase:Boolean);:TPointer;Left=Right then Exit;:=Left;XPointer^.Dir<>nil do

Sort:=XPointer;//берем указатель на элемен

XPointer:=XPointer^.Dir;//перемещаемм указатель на следующий

G:=Sort;//элемент с которым будем сравнивать

Current:=G^.Dir;//следующий элемент

while Current<>nil do//пока не пройдем весь список

beginIndex of

: if Increase=True//как сортировать(убыванию или увелечению)G^.Name<Current^.NameG:=Current;if G^.Name>Current^.NameG:=Current;

: if Increase=TrueG^.FamilyName<Current^.FamilyNameG:=Current;if G^.FamilyName>Current^.FamilyNameG:=Current;

: if Increase=TrueG^.Patronymic<Current^.PatronymicG:=Current;if G^.Patronymic>Current^.PatronymicG:=Current;

: if Increase=TrueG^.SummMany<Current^.SummManyG:=Current;if G^.SummMany>Current^.SummManyG:=Current;

: if Increase=TrueG^.City<Current^.CityG:=Current;if G^.City>Current^.CityG:=Current;

: if Increase=TrueG^.Year<Current^.YearG:=Current;if G^.Year>Current^.YearG:=Current;;:=Current^.Dir;//указываем на следующий элемент;

//если было найдено наименьшое значение (то меняем указатели)

if G<>Sort then Replace;;;TNoFreeXD.Replace;G^.Dir<>nilG^.Dir^.Back:=SortRight:=Sort;Sort^.Dir<>G^.Dir^.Back:=G;^.Back^.Dir:=Sort;;Sort^.Back<>nilSort^.Back^.Dir:=GLeft:=G;:=G^.Dir;Sort^.Dir=GG^.Dir:=SortG^.Dir:=Sort^.Dir;^.Dir:=Current;G^.Back=Sort:=Sort^.Back;^.Back:=G;^.Back:=Current;:=G^.Back;^.Back:=Sort^.Back;^.Back:=Current;;;TNoFreeXD.ElementToStringGrid(i:Cardinal;StringGrid:TStringGrid);.Cells[0,i]:=IntToStr(i);.Cells[1,i]:=Current^.Name;.Cells[2,i]:=Current^.FamilyName;.Cells[3,i]:=Current^.Patronymic;.Cells[4,i]:=IntToStr(Current^.Year);.Cells[5,i]:=Current^.Kod;.Cells[6,i]:=FloatToStr(Current^.SummMany);.Cells[7,i]:=Current^.City;;TNoFreeXD.Search(Index:Integer;Text:String;StringGrid:TStringGrid);i, j:integer;i:=1 to 250 doj:=0 to 5 do.Cells[j,i]:='';:=Left;//получаем указатель на начало

i:=1;Current<> nil doIndex of

: if Current^.Name=Text(i,StringGrid);(i);;

: if Current^.FamilyName=Text(i,StringGrid);(i);;

: if Current^.Patronymic=Text(i,StringGrid);(i);;

: if Current^.Year=StrToInt(Text)(i,StringGrid);(i);;

: if Current^.SummMany=StrToFloat(Text)(i,StringGrid);(i);;

: if Current^.City=Text(i,StringGrid);(i);;;:=Current^.Dir;;('Поиск завершен. Найдено элементов - '+IntToStr(i-1),mtInformation,[mbOk],0);;.

Похожие работы на - Создание программного обеспечения для работы с информационной системой расчетов по договорам

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!