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

Создание баз хозяйственных договоров, банков и членов временных трудовых коллективов в среде разработки Delphi. Логическая структура линейного двусвязного списка. Способ упорядочения и алгоритм сортировки списка. Руководство пользования программой.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 14.02.2016
Размер файла 749,4 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

26

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

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

Введение

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

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

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

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

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

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

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

Работа выполнена на языке 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 содержит описание базовой структуры - линейного двусвязного списка, а также класс, в котором реализованы все операции с этим списком.

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

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

Type

TBank=record

Number:1..9999;//номер отделения банка

City:string[50];//город. Где находится отделение

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

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

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

end;

TWTK=record

FamilyName:string[50];//фамилия члена ВТК

Name:string[50];//имя члена ВТК

Patronymic:string[50];//отчество члена ВТК

Year:integer;//год рождения

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

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

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

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

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

Account:1..9999999;расчетный счет исполнителя

end;

TXD=record

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

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

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

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

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

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

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

end;

var

Fbank: file of TBank;

Fwtk: file of TWTK;

Fxd: file of TXD;

XD:array of TXD;//массив записей

BTK:array of TWTK;//массив записей

BANK:array of TBank;//массив записей

NameFbank:string;//имя файла базы банков

NameFwtk:string; //имя файла базы ВТК

NameFxd:string; //имя файла базы ХД

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

Таблица 1

Тип

Имя переменной

Размер памяти в байтах

Начальный адрес

Глобальные переменные

TB

Fbank

332

$49ABA8

TW

Fwtk

332

$49ACF4

TX

FXD

332

$49AE40

Array of TXD

XD

4

$49AF8C

Array of TWTk

BTK

4

$49AF90

Array of TBank

BANK

4

$49AF94

integer

XD[0].Number

4

$9D6A24

TDateTime

XD[0]. DateCreat

8

$9D6A2C

TDateTime

XD[0]. DataFree

8

$9D6A34

string[50]

XD[0]. Tema

51

$9D6A3C

string[50]

XD[0]. Customer

51

$9D6A6F

Boolean

XD[0]. PriznakFree

1

$9D6AA2

extended

XD[0]. Price

10

$9D6AA4

1..9999

BANK[0]. Number

2

$9D3FDC

string[50]

BANK[0]. City

51

$9D3FDE

string[50]

BANK[0]. Addres

51

$9D4011

string[50]

BANK[0]. NameFront

51

$9D4044

1..999

BANK[0]. Cod

2

$9D4078

string[50]

BTK[0]. FamilyName

51

$9D737C

string[50]

BTK[0]. Name

51

$9D73AF

string[50]

BTK[0]. Patronymic

51

$9D73E2

Integer

BTK[0]. Year

4

$9D7418

string[10]

BTK[0]. Kod

11

$9D741C

(Head,Radovo)

BTK[0]. Sign

1

$9D7427

Extended

BTK[0]. SummMany

10

$9D742C

string[50]

BTK[0]. Addres

51

$9D7436

1..9999

BTK[0]. NumberBank

2

$9D746A

1..9999999

BTK[0]. Account

4

$9D746C

string

NameFbank

4

$49AF98

string

NameFwtk

4

$49AF9C

string

NameFxd

4

$49AFA0

Некоторые локальные переменные

Cardinal

i (procedure TFormBank.ButtonCutBankClick)

4

$12EC94

Cardinal

N (procedure TFormBank.ButtonDelBankClick)

4

$12EC98

Word

Year (procedure TNoFreeXD.FormingList)

2

$12F606

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

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

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

Type

TPointer = ^TListStore;

TListStore=record

Name: string[50];//имя

FamilyName:string[50];//фамилия

Patronymic:string[50];//отчество

Year:integer;//год рождения

Kod:string[10];//код ХД

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

City:string[100];//город

Dir,Back:TPointer;//указатели

end;

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

Var

Left, Right, Current, G, Sort:TPointer;

Рис. 1 Логическая структура списка

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

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

TNoFreeXD=class(TObject)

private

Left{начало}, Right{конец}, Current, G, Sort{для сортировки}:TPointer;

procedure ElementToStringGrid(i:Cardinal;StringGrid:TStringGrid);

public

procedure FormingList;

procedure GetList(StringGrid:TStringGrid);

procedure ClearList;

procedure Sorting(Index:Integer;Increase:Boolean);

procedure Replace;

procedure Search(Index:Integer;Text:String;StringGrid:TStringGrid);

end;

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

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

procedure TNoFreeXD.FormingList;

var

i,j,k:Cardinal;

str,_strYear:string;

Year: Word;

Month: Word;

Day: Word;

begin

ClearList;

New(Current);

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

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

for i:=0 to GetBTKM-1 do

begin

for j:=0 to GetXDM-1 do

begin

DecodeDate(XD[j].DateCreat,Year,Month,Day);

_strYear:=IntToStr(Year);

str:=IntToStr(XD[j].Number)+'/'+_strYear[3]+_strYear[4];

if (str=BTK[i].Kod) and (XD[j].PriznakFree=false) then

begin

Current^.Name:=BTK[i].Name;

Current^.FamilyName:=BTK[i].FamilyName;

Current^.Patronymic:=BTK[i].Patronymic;

Current^.Year:=BTK[i].Year;

Current^.Kod:=BTK[i].Kod;

Current^.SummMany:=BTK[i].SummMany;

for k:=0 to GetBANKM-1 do

begin

if BANK[k].Number=BTK[k].NumberBank then

begin

Current^.City:=BANK[i].City;

end;

end;

New(Current^.Dir);

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

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

end;

end;

end;

Current^.Back^.Dir:=nil;

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

Dispose(Current);

end;

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

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

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

Рис. 2

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

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

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

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

Рис. 5

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

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

procedure TNoFreeXD.GetList(StringGrid:TStringGrid);

var

i,j:integer;

begin

for i:=1 to 25 do

for j:=0 to 8 do

StringGrid.Cells[j,i]:='';

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

i:=1;

while Current<> nil do

begin

StringGrid.Cells[0,i]:=IntToStr(i);

StringGrid.Cells[1,i]:=Current^.Name;

StringGrid.Cells[2,i]:=Current^.FamilyName;

StringGrid.Cells[3,i]:=Current^.Patronymic;

StringGrid.Cells[4,i]:=IntToStr(Current^.Year);

StringGrid.Cells[5,i]:=Current^.Kod;

StringGrid.Cells[6,i]:=FloatToStr(Current^.SummMany);

StringGrid.Cells[7,i]:=Current^.City;

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

Inc(i);

end;

end;

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

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

Procedure TNoFreeXD.Search(Index:Integer;Text:String;StringGrid :TStringGrid);

var i, j:integer;

begin

for i:=1 to 250 do

for j:=0 to 5 do

StringGrid.Cells[j,i]:='';

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

i:=1;

while Current<> nil do

begin

case Index of

0: if Current^.Name=Text

then

begin

ElementToStringGrid(i,StringGrid);

Inc(i);

end;

1: if Current^.FamilyName=Text

then

begin

ElementToStringGrid(i,StringGrid);

Inc(i);

end;

2: if Current^.Patronymic=Text

then

begin

ElementToStringGrid(i,StringGrid);

Inc(i);

end;

3: if Current^.Year=StrToInt(Text)

then

begin

ElementToStringGrid(i,StringGrid);

Inc(i);

end;

4: if Current^.SummMany=StrToFloat(Text)

then

begin

ElementToStringGrid(i,StringGrid);

Inc(i);

end;

5: if Current^.City=Text

then

begin

ElementToStringGrid(i,StringGrid);

Inc(i);

end;

end;

Current:=Current^.Dir;

end;

MessageDlg('Поиск завершен. Найдено элементов - '+IntToStr(i-1),mtInformation,[mbOk],0);

end;

procedure TNoFreeXD.ElementToStringGrid(i:Cardinal;StringGrid :TStringGrid);

begin

StringGrid.Cells[0,i]:=IntToStr(i);

StringGrid.Cells[1,i]:=Current^.Name;

StringGrid.Cells[2,i]:=Current^.FamilyName;

StringGrid.Cells[3,i]:=Current^.Patronymic;

StringGrid.Cells[4,i]:=IntToStr(Current^.Year);

StringGrid.Cells[5,i]:=Current^.Kod;

StringGrid.Cells[6,i]:=FloatToStr(Current^.SummMany);

StringGrid.Cells[7,i]:=Current^.City;

end;

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

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

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

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

procedure TNoFreeXD.Sorting(Index:Integer;Increase:Boolean);

var

XPointer:TPointer;

begin

if Left=Right then Exit;

XPointer:=Left;

while XPointer^.Dir<>nil do

begin

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

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

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

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

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

begin

case Index of

0: if Increase=True//как сортировать(убыванию или увелечению)

then

begin

if G^.Name<Current^.Name

then G:=Current;

end

else if G^.Name>Current^.Name

then G:=Current;

1: if Increase=True

then

begin

if G^.FamilyName<Current^.FamilyName

then G:=Current;

end

else if G^.FamilyName>Current^.FamilyName

then G:=Current;

2: if Increase=True

then

begin

if G^.Patronymic<Current^.Patronymic

then G:=Current;

end

else if G^.Patronymic>Current^.Patronymic

then G:=Current;

3: if Increase=True

then

begin

if G^.SummMany<Current^.SummMany

then G:=Current;

end

else if G^.SummMany>Current^.SummMany

then G:=Current;

4: if Increase=True

then

begin

if G^.City<Current^.City

then G:=Current;

end

else if G^.City>Current^.City

then G:=Current;

5: if Increase=True

then

begin

if G^.Year<Current^.Year

then G:=Current;

end

else if G^.Year>Current^.Year

then G:=Current;

end;

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

end;

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

if G<>Sort then Replace;

end;

end;

procedure TNoFreeXD.Replace;

begin

if G^.Dir<>nil

then G^.Dir^.Back:=Sort

else Right:=Sort;

if Sort^.Dir<>G

then

begin

Sort^.Dir^.Back:=G;

G^.Back^.Dir:=Sort;

end;

if Sort^.Back<>nil

then Sort^.Back^.Dir:=G

else Left:=G;

Current:=G^.Dir;

if Sort^.Dir=G

then G^.Dir:=Sort

else G^.Dir:=Sort^.Dir;

Sort^.Dir:=Current;

if G^.Back=Sort

then

begin

Current:=Sort^.Back;

Sort^.Back:=G;

G^.Back:=Current;

end

else

begin

Current:=G^.Back;

G^.Back:=Sort^.Back;

Sort^.Back:=Current;

end;

end;

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

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

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

Рис. 6

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

Рис. 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 Преобразование к более привычному виду двусвязного списка.

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

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

Рисунок 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с.

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

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

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

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

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

Приложение

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

unit UnitMain;

interface

uses

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

Dialogs, StdCtrls, Grids, Menus, ExtCtrls, XPMan,UnitRecordNfile,UnitCreatFile,

UnitXD, TeeProcs, TeEngine, Chart, Series,UnitBank,UnitWTK,UnitOpenData;

type

TMainForm = class(TForm)

PanelMainGrid: TPanel;

MainMenu1: TMainMenu;

N1: TMenuItem;

StringGridMain: TStringGrid;

Label1: TLabel;

XPManifest1: TXPManifest;

ButtonOpenBANK: TButton;

GroupBox1: TGroupBox;

ButtonRedBTK: TButton;

ButtonBank: TButton;

ButtonXD: TButton;

GroupBox2: TGroupBox;

ButtonSort: TButton;

ButtonSearch: TButton;

Button1: TButton;

Button2: TButton;

RadioGroupSort: TRadioGroup;

ButtonOtSort: TButton;

RadioGroupMinMax: TRadioGroup;

N2: TMenuItem;

procedure N2Click(Sender: TObject);

procedure ButtonSearchClick(Sender: TObject);

procedure ButtonOtSortClick(Sender: TObject);

procedure ButtonSortClick(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure ButtonRedBTKClick(Sender: TObject);

procedure ButtonBankClick(Sender: TObject);

procedure ButtonXDClick(Sender: TObject);

procedure ButtonOpenBANKClick(Sender: TObject);

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

MainForm: TMainForm;

implementation

uses ClassList,UnitFind;

var NoFreeSotre:TNoFreeXD;

{$R *.dfm}

procedure TMainForm.FormCreate(Sender: TObject);

begin

StringGridMain.Cells[0,0]:='№';

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

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

StringGridMain.Cells[3,0]:='Отчество';

StringGridMain.Cells[4,0]:='Год рождения';

StringGridMain.Cells[5,0]:='Код ХД';

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

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

end;

procedure TMainForm.ButtonOpenBANKClick(Sender: TObject);

begin

Application.CreateForm(TFormCreatFile,FormCreatFile);

FormCreatFile.ShowModal;

end;

procedure TMainForm.ButtonXDClick(Sender: TObject);

begin

Application.CreateForm(TFormMainXD,FormMainXD);

FormMainXD.ShowModal;

end;

procedure TMainForm.ButtonBankClick(Sender: TObject);

begin

Application.CreateForm(TFormBank,FormBank);

FormBank.ShowModal;

end;

procedure TMainForm.ButtonRedBTKClick(Sender: TObject);

begin

Application.CreateForm(TFormWTK,FormWTK);

FormWTK.ShowModal;

end;

procedure TMainForm.Button1Click(Sender: TObject);

begin

Application.CreateForm(TFormOpenData,FormOpenData);

FormOpenData.ShowModal;

Button2Click(Self);

end;

procedure TMainForm.Button2Click(Sender: TObject);

begin

if (XD=Nil) or (BTK=Nil) or (BANK=Nil) then

begin

MessageDlg('Список сформировать нельзя ',mtConfirmation,[mbOK],0);

end

else

begin

if NoFreeSotre<>Nil then

NoFreeSotre.Free;

NoFreeSotre:=TNoFreeXD.Create;

NoFreeSotre.FormingList;

NoFreeSotre.GetList(StringGridMain);

ButtonSearch.Enabled:=true;

ButtonSort.Enabled:=true;

end;

end;

procedure TMainForm.ButtonSortClick(Sender: TObject);

begin

MainForm.Height:=618;

end;

procedure TMainForm.ButtonOtSortClick(Sender: TObject);

var

metka:boolean;

begin

MainForm.Height:=494;

if RadioGroupMinMax.ItemIndex=0 then

metka:=true

else metka:=false;

NoFreeSotre.Sorting(RadioGroupSort.ItemIndex,metka);

NoFreeSotre.GetList(StringGridMain);

end;

procedure TMainForm.ButtonSearchClick(Sender: TObject);

begin

Application.CreateForm(TFormFind,FormFind);

FormFind.NotFreeStor:=NoFreeSotre;

FormFind.ShowModal;

end;

procedure TMainForm.N2Click(Sender: TObject);

begin

MainForm.Close;

end;

end.

unit UnitOpenData;

interface

uses

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

Dialogs, StdCtrls;

type

TFormOpenData = class(TForm)

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

ButtonOpenXD: TButton;

ButtonOpenWTB: TButton;

ButtonOpenBank: TButton;

OpenDialog1: TOpenDialog;

procedure ButtonOpenBankClick(Sender: TObject);

procedure ButtonOpenWTBClick(Sender: TObject);

procedure ButtonOpenXDClick(Sender: TObject);

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

FormOpenData: TFormOpenData;

implementation

uses UnitMain,UnitRecordNfile;

{$R *.dfm}

procedure TFormOpenData.FormCreate(Sender: TObject);

begin

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

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

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

end;

procedure TFormOpenData.ButtonOpenXDClick(Sender: TObject);

begin

if XD<>Nil then

begin

XD:=nil;

end;

OpenDialog1.Title:='Открыть файл';

if OpenDialog1.Execute then

begin

NameFxd:=OpenDialog1.FileName;

AssignFile(Fxd,NameFxd);

Reset(Fxd);

While not EOF(Fxd) do

begin

SetLenXDM;

Read(Fxd, XD[GetXDM-1]);

Label1.Caption:='Файл открыт';

end;

end;

MainForm.ButtonXD.Enabled:=true;

end;

procedure TFormOpenData.ButtonOpenWTBClick(Sender: TObject);

begin

if BTK<>Nil then

begin

BTK:=nil;

end;

OpenDialog1.Title:='Открыть файл';

if OpenDialog1.Execute then

begin

NameFwtk:=OpenDialog1.FileName;

AssignFile(Fwtk,NameFwtk);

Reset(Fwtk);

While not EOF(Fwtk) do

begin

SetLenBTKM;

Read(Fwtk, BTK[GetBTKM-1]);

Label2.Caption:='Файл открыт';

end;

end;

MainForm.ButtonRedBTK.Enabled:=true;

end;

procedure TFormOpenData.ButtonOpenBankClick(Sender: TObject);

begin

if BANK<>Nil then

begin

BANK:=nil;

end;

OpenDialog1.Title:='Открыть файл';

if OpenDialog1.Execute then

begin

NameFbank:=OpenDialog1.FileName;

AssignFile(Fbank,NameFbank);

Reset(Fbank);

While not EOF(Fbank) do

begin

SetLenBANKM;

Read(Fbank, BANK[GetBANKM-1]);

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

end;

end;

MainForm.ButtonBank.Enabled:=true;

end;

end.

unit UnitWTK;

interface

uses

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

Dialogs, Grids, StdCtrls, ExtCtrls, Buttons;

type

TFormWTK = class(TForm)

StringGridWTK: TStringGrid;

Label1: TLabel;

EditFam: TEdit;

Label2: TLabel;

EditName: TEdit;

Label3: TLabel;

EditOct: TEdit;

Label4: TLabel;

EditYear: TEdit;

Label5: TLabel;

Label6: TLabel;

EditAddres: TEdit;

Label7: TLabel;

EditSchet: TEdit;

RadioGroupDol: TRadioGroup;

Label10: TLabel;

EditNumberBank: TEdit;

ButtonAddWTK: TButton;

ButtonDelWTK: TButton;

ButtonChangWTK: TButton;

Label8: TLabel;

EditCod: TEdit;

Label9: TLabel;

EditSum: TEdit;

SpeedButtonXD: TSpeedButton;

SpeedButtonBank: TSpeedButton;

Gr: TGroupBox;

procedure SpeedButtonBankClick(Sender: TObject);

procedure SpeedButtonXDClick(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

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

var CanSelect: Boolean);

procedure ButtonDelWTKClick(Sender: TObject);

procedure ButtonChangWTKClick(Sender: TObject);

procedure ButtonAddWTKClick(Sender: TObject);

procedure FormCreate(Sender: TObject);

private

MetkaChange:boolean;

{ Private declarations }

public

{ Public declarations }

end;

var

FormWTK: TFormWTK;

implementation

uses UnitRecordNfile,UnitClikXD,UnitClikBank;

{$R *.dfm}

procedure GetWTK();

var

i,j:cardinal;

begin

for i:=1 to 15 do

for j:=0 to 16 do

FormWTK.StringGridWTK.Cells[j,i]:='';

if BTK<>Nil then

begin

for i:=0 to GetBTKM-1 do

begin

FormWTK.StringGridWTK.Cells[0,i+1]:=IntToStr(i+1);

FormWTK.StringGridWTK.Cells[1,i+1]:=BTK[i].FamilyName;

FormWTK.StringGridWTK.Cells[2,i+1]:=BTK[i].Name;

FormWTK.StringGridWTK.Cells[3,i+1]:=BTK[i].Patronymic;

FormWTK.StringGridWTK.Cells[4,i+1]:=IntToStr(BTK[i].Year);

case BTK[i].Sign of

Head:FormWTK.StringGridWTK.Cells[5,i+1]:='Руководитель ВТК';

Radovo:FormWTK.StringGridWTK.Cells[5,i+1]:='Рядовой член ВТК';

end;

FormWTK.StringGridWTK.Cells[6,i+1]:=BTK[i].Addres;

FormWTK.StringGridWTK.Cells[7,i+1]:=IntToStr(BTK[i].Account);

FormWTK.StringGridWTK.Cells[8,i+1]:=BTK[i].Kod;

FormWTK.StringGridWTK.Cells[9,i+1]:=FloatToStr(BTK[i].SummMany);

FormWTK.StringGridWTK.Cells[10,i+1]:=IntToStr(BTK[i].NumberBank);

end;

end;

end;

procedure TFormWTK.FormCreate(Sender: TObject);

begin

StringGridWTK.Cells[0,0]:='№';

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

StringGridWTK.Cells[2,0]:='Имя';

StringGridWTK.Cells[3,0]:='Отчество';

StringGridWTK.Cells[4,0]:='Год рождения';

StringGridWTK.Cells[5,0]:='Должность';

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

StringGridWTK.Cells[7,0]:='Расчетный счет';

StringGridWTK.Cells[8,0]:='Код ХД';

StringGridWTK.Cells[9,0]:='Вознаграждение';

StringGridWTK.Cells[10,0]:='Номер отделения банка';

GetWTK;

MetkaChange:=false;

end;

procedure TFormWTK.ButtonAddWTKClick(Sender: TObject);

begin

SetLenBTKM;

BTK[GetBTKM-1].FamilyName:=EditFam.Text;

BTK[GetBTKM-1].Name:=EditName.Text;

BTK[GetBTKM-1].Patronymic:=EditOct.Text;

BTK[GetBTKM-1].Year:=StrToInt(EditYear.Text);

case RadioGroupDol.ItemIndex of

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

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

end;

BTK[GetBTKM-1].Addres:=EditAddres.Text;

BTK[GetBTKM-1].Account:=StrToInt(EditSchet.Text);

BTK[GetBTKM-1].Kod:=EditCod.Text;

BTK[GetBTKM-1].SummMany:=StrToFloat(EditSum.Text);

BTK[GetBTKM-1].NumberBank:=StrToInt(EditNumberBank.Text);

GetWTK;

MetkaChange:=true;

end;

procedure TFormWTK.ButtonChangWTKClick(Sender: TObject);

var

N:Cardinal;

begin

N:=StringGridWTK.Row-1;

BTK[N].FamilyName:=EditFam.Text;

BTK[N].Name:=EditName.Text;

BTK[N].Patronymic:=EditOct.Text;

BTK[N].Year:=StrToInt(EditYear.Text);

case RadioGroupDol.ItemIndex of

0:BTK[N].Sign:=Head;

1:BTK[N].Sign:=Radovo;

end;

BTK[N].Addres:=EditAddres.Text;

BTK[N].Account:=StrToInt(EditSchet.Text);

BTK[N].Kod:=EditCod.Text;

BTK[N].SummMany:=StrToFloat(EditSum.Text);

BTK[N].NumberBank:=StrToInt(EditNumberBank.Text);

GetWTK;

MetkaChange:=true;

end;

procedure TFormWTK.ButtonDelWTKClick(Sender: TObject);

var

i,j,N:Cardinal;

begin

N:=StringGridWTK.Row-1;

for i:=N to GetBTKM-1 do

begin

BTK[i]:=BTK[i+1];

end;

SetLength(BTK,GetBTKM-1);

GetWTK;

MetkaChange:=true;

end;

procedure TFormWTK.StringGridWTKSelectCell(Sender: TObject; ACol, ARow: Integer;

var CanSelect: Boolean);

begin

if ARow-1<GetBTKM then

begin

EditFam.Text:=BTK[ARow-1].FamilyName;

EditName.Text:=BTK[ARow-1].Name;

EditOct.Text:=BTK[ARow-1].Patronymic;

EditYear.Text:=IntToStr(BTK[ARow-1].Year);

case BTK[ARow-1].Sign of

Head:RadioGroupDol.ItemIndex:=0;

Radovo:RadioGroupDol.ItemIndex:=1;

end;

EditAddres.Text:=BTK[ARow-1].Addres;

EditSchet.Text:=IntToStr(BTK[ARow-1].Account);

EditCod.Text:=BTK[ARow-1].Kod;

EditSum.Text:=FloatToStr(BTK[ARow-1].SummMany);

EditNumberBank.Text:=IntToStr(BTK[ARow-1].NumberBank);

end

else

begin

CanSelect:=false;

end;

end;

procedure TFormWTK.FormClose(Sender: TObject; var Action: TCloseAction);

var

i:integer;

begin

if (NameFwtk<>'') and (MetkaChange=true) then

begin

if MessageDlg('Сохранить изменения в файле "'+NameFwtk+'" ?',mtConfirmation,[mbYes,mbNo],0)=mrYes then

begin

Rewrite(Fwtk);

for i:=0 to GetBTKM-1 do

Write(Fwtk,BTK[i]);

end;

end;

end;

procedure TFormWTK.SpeedButtonXDClick(Sender: TObject);

begin

Application.CreateForm(TFormClikXD,FormClikXD);

FormClikXD.ShowModal;

end;

procedure TFormWTK.SpeedButtonBankClick(Sender: TObject);

begin

Application.CreateForm(TFormClikBAnk,FormClikBAnk);

FormClikBAnk.ShowModal;

end;

end.

unit UnitXD;

interface

uses

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

Dialogs, Grids, StdCtrls, ComCtrls;

type

TFormMainXD = class(TForm)

StringGridXD: TStringGrid;

ButtonAddXd: TButton;

ButtonDelXD: TButton;

EditNumber: TEdit;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Label4: TLabel;

Label5: TLabel;

Edit4: TEdit;

Label7: TLabel;

DateTimePickerZakl: TDateTimePicker;

DateTimePickerVkl: TDateTimePicker;

Button1: TButton;

CheckBox1: TCheckBox;

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

var CanSelect: Boolean);

procedure Button1Click(Sender: TObject);

procedure ButtonDelXDClick(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure ButtonAddXdClick(Sender: TObject);

procedure FormCreate(Sender: TObject);

private

MetkaChange:boolean;

procedure GetXD;

{ Private declarations }

public

{ Public declarations }

end;

var

FormMainXD: TFormMainXD;

implementation

uses UnitRecordNfile;

{$R *.dfm}

procedure TFormMainXD.GetXD;

var

i,j:integer;

begin

for i:=1 to 15 do

for j:=0 to 16 do

StringGridXD.Cells[j,i]:='';

if XD<>Nil then

begin

j:=GetXDM-1;

for i:=0 to GetXDM-1 do

begin

StringGridXD.Cells[0,i+1]:=IntToStr(i+1);

StringGridXD.Cells[1,i+1]:=IntToStr(XD[i].Number);

StringGridXD.Cells[2,i+1]:=DateToStr(XD[i].DateCreat);

StringGridXD.Cells[3,i+1]:=DateToStr(XD[i].DataFree);

StringGridXD.Cells[4,i+1]:=XD[i].Tema;

StringGridXD.Cells[5,i+1]:=XD[i].Customer;

if XD[i].PriznakFree=true then

StringGridXD.Cells[6,i+1]:='Завершен'

else StringGridXD.Cells[6,i+1]:='Не завершен';

StringGridXD.Cells[7,i+1]:=FloatToStr(XD[i].Price);

end;

end;

end;

procedure TFormMainXD.FormCreate(Sender: TObject);

begin

StringGridXD.Cells[0,0]:='№';

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

StringGridXD.Cells[2,0]:='Дата заключения договора';

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

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

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

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

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

MetkaChange:=false;

GetXD;

end;

procedure TFormMainXD.ButtonAddXdClick(Sender: TObject);

var

i:integer;

begin

SetLenXDM;

XD[GetXDM-1].Number:=StrToInt(EditNumber.Text);

XD[GetXDM-1].DateCreat:=DateTimePickerZakl.Date;

XD[GetXDM-1].DataFree:=DateTimePickerVkl.Date;

XD[GetXDM-1].Tema:=Edit1.Text;

XD[GetXDM-1].Customer:=Edit2.Text;

XD[GetXDM-1].PriznakFree:= CheckBox1.Checked;

XD[GetXDM-1].Price:=StrToInt(Edit4.Text);

XD[GetXDM-1].NumPeopl:=0;

GetXD;

MetkaChange:=true;

end;

procedure TFormMainXD.FormClose(Sender: TObject; var Action: TCloseAction);

var

i:integer;

begin

if (NameFxd<>'') and (MetkaChange=true) then

begin

if MessageDlg('Сохранить изменения в файле "'+NameFxd+'" ?',mtConfirmation,[mbYes,mbNo],0)=mrYes then

begin

Rewrite(Fxd);

for i:=0 to GetXDM-1 do

Write(Fxd,XD[i]);

end;

end;

end;

procedure TFormMainXD.ButtonDelXDClick(Sender: TObject);

var

i,j,N:Cardinal;

Tmep:TXD;

begin

N:=StringGridXD.Row-1;

for i:=N to GetXDM-1 do

begin

XD[i]:=XD[i+1];

end;

SetLength(XD,GetXDM-1);

GetXD;

MetkaChange:=true;

end;

procedure TFormMainXD.Button1Click(Sender: TObject);

var

N:Cardinal;

begin

N:=StringGridXD.Row-1;

XD[N].Number:=StrToInt(FormMainXD.EditNumber.Text);

XD[N].DateCreat:=FormMainXD.DateTimePickerZakl.Date;

XD[N].DataFree:=FormMainXD.DateTimePickerVkl.Date;

XD[N].Tema:=FormMainXD.Edit1.Text;

XD[N].Customer:=FormMainXD.Edit2.Text;

XD[N].PriznakFree:=CheckBox1.Checked;

XD[N].Price:=StrToInt(FormMainXD.Edit4.Text);

GetXD;

MetkaChange:=true;

end;

procedure TFormMainXD.StringGridXDSelectCell(Sender: TObject; ACol,

ARow: Integer; var CanSelect: Boolean);

begin

if ARow-1<GetXDM then

begin

EditNumber.Text:=IntToStr(XD[ARow-1].Number);

DateTimePickerZakl.DateTime:=XD[ARow-1].DateCreat;

DateTimePickerVkl.DateTime:=XD[ARow-1].DataFree;

Edit1.Text:=XD[ARow-1].Tema;

Edit2.Text:=XD[ARow-1].Customer;

CheckBox1.Checked:=XD[ARow-1].PriznakFree;

Edit4.Text:=FloatToStr(XD[ARow-1].Price);

end

else

begin

CanSelect:=false;

end;

end;

end.

unit UnitBank;

interface

uses

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

Dialogs, Grids, StdCtrls;

type

TFormBank = class(TForm)

StringGridBank: TStringGrid;

EditNum_4: TEdit;

Label1: TLabel;

EditCity: TEdit;

Label2: TLabel;

EditAddres: TEdit;

Label3: TLabel;

EditNameOtdel: TEdit;

Label4: TLabel;

EditCod: TEdit;

Label5: TLabel;

ButtonAddBank: TButton;

ButtonCutBank: TButton;

ButtonDelBank: TButton;

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure ButtonDelBankClick(Sender: TObject);

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

var CanSelect: Boolean);

procedure ButtonCutBankClick(Sender: TObject);

procedure ButtonAddBankClick(Sender: TObject);

procedure FormCreate(Sender: TObject);

private

MetkaChange:boolean;

{ Private declarations }

public

{ Public declarations }

end;

var

FormBank: TFormBank;

implementation

uses UnitRecordNfile;

{$R *.dfm}

procedure GetStrinGrid();

var

i,j:integer;

begin

for i:=1 to 15 do

for j:=0 to 16 do

FormBank.StringGridBank.Cells[j,i]:='';

if BANK<>Nil then

begin

for i:=0 to GetBANKM-1 do

begin

FormBank.StringGridBank.Cells[0,i+1]:=IntToStr(i+1);

FormBank.StringGridBank.Cells[1,i+1]:=IntToStr(Bank[i].Number);

FormBank.StringGridBank.Cells[2,i+1]:=BANK[i].City;

FormBank.StringGridBank.Cells[3,i+1]:=BANK[i].Addres;

FormBank.StringGridBank.Cells[4,i+1]:=BANK[i].NameFront;

FormBank.StringGridBank.Cells[5,i+1]:=IntToStr(BANK[i].Cod);

end;

end;

end;

procedure TFormBank.FormCreate(Sender: TObject);

begin

StringGridBank.Cells[0,0]:='№';

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

StringGridBank.Cells[2,0]:='Город';

StringGridBank.Cells[3,0]:='Адрес';

StringGridBank.Cells[4,0]:='Название отделения';

StringGridBank.Cells[5,0]:='Код отделения';

MetkaChange:=false;

GetStrinGrid;

end;

procedure TFormBank.ButtonAddBankClick(Sender: TObject);

begin

SetLenBANKM;

BANK[GetBANKM-1].Number:=StrToInt(EditNum_4.Text);

BANK[GetBANKM-1].City:=EditCity.Text;

BANK[GetBANKM-1].Addres:=EditAddres.Text;

BANK[GetBANKM-1].NameFront:=EditNameOtdel.Text;

BANK[GetBANKM-1].Cod:=StrToInt(EditCod.Text);

MetkaChange:=true;

GetStrinGrid;

end;

procedure TFormBank.ButtonCutBankClick(Sender: TObject);

var

i,j,N:Cardinal;

begin

N:=StringGridBank.Row-1;

BANK[N].Number:=StrToInt(EditNum_4.Text);

BANK[N].City:=EditCity.Text;

BANK[N].Addres:=EditAddres.Text;

BANK[N].NameFront:=EditNameOtdel.Text;

BANK[N].Cod:=StrToInt(EditCod.Text);

GetStrinGrid;

MetkaChange:=true;

end;

procedure TFormBank.StringGridBankSelectCell(Sender: TObject; ACol,

ARow: Integer; var CanSelect: Boolean);

begin

if ARow-1<GetBANKM then

begin

EditNum_4.Text:=IntToStr(Bank[ARow-1].Number);

EditCity.Text:=BANK[ARow-1].City;

EditAddres.Text:=BANK[ARow-1].Addres;

EditNameOtdel.Text:=BANK[ARow-1].NameFront;

EditCod.Text:=IntToStr(BANK[ARow-1].Cod);

end

else

begin

CanSelect:=false;

end;

end;

procedure TFormBank.ButtonDelBankClick(Sender: TObject);

var

i,N:Cardinal;

begin

if GetBANKM-1<>0 then

begin

N:=StringGridBank.Row-1;

for i:=N to GetBANKM-1 do

begin

BANK[i]:=BANK[i+1];

end;

SetLength(BANK,GetBANKM-1);

GetStrinGrid;

MetkaChange:=true;

end

else if GetBANKM-1=0 then

begin

MessageDlg('База пуста',mtInformation,[mbOK],0);

end;

end;

procedure TFormBank.FormClose(Sender: TObject; var Action: TCloseAction);

var

i:integer;

begin

if (NameFbank<>'') and(MetkaChange=true) then

begin

if MessageDlg('Сохранить изменения в файле "'+NameFbank+'" ?',mtConfirmation,[mbYes,mbNo],0)=mrYes then

begin

Rewrite(Fbank);

for i:=0 to GetBANKM-1 do

Write(Fbank,BANK[i]);

end;

end;

end;

end.

unit UnitClikBank;

interface

uses

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

Dialogs, Grids, StdCtrls;

type

TFormClikBAnk = class(TForm)

StringGridClikBank: TStringGrid;

ButtonOK: TButton;

procedure ButtonOKClick(Sender: TObject);

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

var CanSelect: Boolean);

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

FormClikBAnk: TFormClikBAnk;

implementation

uses UnitWTK,UnitRecordNfile;

{$R *.dfm}

procedure TFormClikBAnk.FormCreate(Sender: TObject);

var

i,j:integer;

begin

for i:=1 to 15 do

for j:=0 to 16 do

StringGridClikBank.Cells[j,i]:='';

if BANK<>Nil then

begin

for i:=0 to GetBANKM-1 do

begin

StringGridClikBank.Cells[0,i+1]:=IntToStr(i+1);

StringGridClikBank.Cells[1,i+1]:=IntToStr(Bank[i].Number);

StringGridClikBank.Cells[2,i+1]:=BANK[i].City;

StringGridClikBank.Cells[3,i+1]:=BANK[i].Addres;

StringGridClikBank.Cells[4,i+1]:=BANK[i].NameFront;

StringGridClikBank.Cells[5,i+1]:=IntToStr(BANK[i].Cod);

end;

end;

StringGridClikBank.Cells[0,0]:='№';

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

StringGridClikBank.Cells[2,0]:='Город';

StringGridClikBank.Cells[3,0]:='Адрес';

StringGridClikBank.Cells[4,0]:='Название отделения';

StringGridClikBank.Cells[5,0]:='Код отделения';

end;

procedure TFormClikBAnk.StringGridClikBankSelectCell(Sender: TObject; ACol,

ARow: Integer; var CanSelect: Boolean);

begin

if ARow-1>GetBANKM then

begin

CanSelect:=false;

end;

end;

procedure TFormClikBAnk.ButtonOKClick(Sender: TObject);

var

N:cardinal;

begin

N:=StringGridClikBank.Row-1;

FormWTK.EditNumberBank.Text:=IntToStr(Bank[N].Number);

FormClikBAnk.Close;

end;

end.

unit UnitClikXD;

interface

uses

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

Dialogs, Grids,StdCtrls,UnitRecordNfile;

type

TFormClikXD = class(TForm)

StringGridClikXD: TStringGrid;

ButtonOK: TButton;

procedure ButtonOKClick(Sender: TObject);

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

var CanSelect: Boolean);

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

FormClikXD: TFormClikXD;

implementation

uses UnitWTK;

{$R *.dfm}

procedure TFormClikXD.FormCreate(Sender: TObject);

var

i,j:cardinal;

begin

for i:=1 to 15 do

for j:=0 to 16 do

StringGridClikXD.Cells[j,i]:='';

StringGridClikXD.Cells[0,0]:='№';

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

StringGridClikXD.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 then

begin

for i:=0 to GetXDM-1 do

begin

StringGridClikXD.Cells[0,i+1]:=IntToStr(i+1);

StringGridClikXD.Cells[1,i+1]:=IntToStr(XD[i].Number);

StringGridClikXD.Cells[2,i+1]:=DateToStr(XD[i].DateCreat);

StringGridClikXD.Cells[3,i+1]:=DateToStr(XD[i].DataFree);

StringGridClikXD.Cells[4,i+1]:=XD[i].Tema;

StringGridClikXD.Cells[5,i+1]:=XD[i].Customer;

if XD[i].PriznakFree=true then

StringGridClikXD.Cells[6,i+1]:='Завершен'

else StringGridClikXD.Cells[6,i+1]:='Не завершен';

StringGridClikXD.Cells[7,i+1]:=FloatToStr(XD[i].Price);

end;

end;

end;

procedure TFormClikXD.StringGridClikXDSelectCell(Sender: TObject; ACol,

ARow: Integer; var CanSelect: Boolean);

begin

if ARow-1>GetXDM then

begin

CanSelect:=false;

end;

end;

procedure TFormClikXD.ButtonOKClick(Sender: TObject);

var

N:Cardinal;

str,_strYear:string;

Year: Word;

Month: Word;

Day: Word;

begin

N:=StringGridClikXD.Row-1;

XD[N].NumPeopl:=XD[N].NumPeopl+1;

FormWTK.EditSum.Text:=FloatToStr(XD[N].Price);

DecodeDate(XD[N].DateCreat,Year,Month,Day);

_strYear:=IntToStr(Year);

str:=IntToStr(XD[N].Number)+'/'+_strYear[3]+_strYear[4];

FormWTK.EditCod.Text:=str;

FormClikXD.Close;

end;

end.

unit UnitCreatFile;

interface

uses

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

Dialogs, StdCtrls,UnitRecordNfile;

type

TFormCreatFile = class(TForm)

ButtonCreatXD: TButton;

ButtonCreatWTB: TButton;

ButtonCreatBank: TButton;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

SaveDialogCreatFile: TSaveDialog;

procedure ButtonCreatBankClick(Sender: TObject);

procedure ButtonCreatWTBClick(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure ButtonCreatXDClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

FormCreatFile: TFormCreatFile;

implementation

uses UnitMain;

{$R *.dfm}

procedure TFormCreatFile.ButtonCreatXDClick(Sender: TObject);

begin

SaveDialogCreatFile.Title:=' Создать базу';

if SaveDialogCreatFile.Execute then

begin

NameFxd:=SaveDialogCreatFile.FileName;

AssignFile(Fxd,NameFxd);

Rewrite(Fxd);

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

MainForm.ButtonXD.Enabled:=true;

end;

end;

procedure TFormCreatFile.FormCreate(Sender: TObject);

begin

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

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

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

end;

procedure TFormCreatFile.ButtonCreatWTBClick(Sender: TObject);

begin

SaveDialogCreatFile.Title:=' Создать базу';

if SaveDialogCreatFile.Execute then

begin

NameFwtk:=SaveDialogCreatFile.FileName;

AssignFile(Fwtk,NameFwtk);

Rewrite(Fwtk);

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

MainForm.ButtonRedBTK.Enabled:=true;

end;

end;

procedure TFormCreatFile.ButtonCreatBankClick(Sender: TObject);

begin

SaveDialogCreatFile.Title:=' Создать базу';

if SaveDialogCreatFile.Execute then

begin

NameFbank:=SaveDialogCreatFile.FileName;

AssignFile(Fbank,NameFbank);

Rewrite(Fbank);

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

MainForm.ButtonBank.Enabled:=true;

end;

end;

end.

unit UnitFind;

interface

uses

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

Dialogs, StdCtrls, ExtCtrls, Grids,ClassList,UnitMain;

type

TFormFind = class(TForm)

RadioGroupfind: TRadioGroup;

StringGridFind: TStringGrid;

Label1: TLabel;

Edit1: TEdit;

ButtonSeach: TButton;

procedure ButtonSeachClick(Sender: TObject);

procedure RadioGroupfindClick(Sender: TObject);

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

public

NotFreeStor:TNoFreeXD;

{ Public declarations }

end;

var

FormFind: TFormFind;

implementation

{$R *.dfm}

procedure TFormFind.FormCreate(Sender: TObject);

begin

StringGridFind.Cells[0,0]:='№';

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

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

StringGridFind.Cells[3,0]:='Отчество';

StringGridFind.Cells[4,0]:='Год рождения';

StringGridFind.Cells[5,0]:='Код ХД';

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

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

end;

procedure TFormFind.RadioGroupfindClick(Sender: TObject);

begin

case RadioGroupfind.ItemIndex of

0:begin

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

end;

1:begin

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

end;

2:begin

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

end;

3:begin

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

end;

4:begin

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

end;

5:begin

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

end;

end;

end;

procedure TFormFind.ButtonSeachClick(Sender: TObject);

begin

NotFreeStor.Search(RadioGroupfind.ItemIndex,Edit1.Text,StringGridFind);

end;

end.

unit ClassList;

interface

uses Grids, SysUtils, Dialogs;

//двусвязный список

Type

TPointer = ^TListStore;

TListStore=record

Name: string[50];

FamilyName:string[50];

Patronymic:string[50];

Year:integer;

Kod:string[10];

SummMany:extended;

City:string[100];

Dir,Back:TPointer; //Указатели на следующий и предыдущий элементы

end;

TNoFreeXD=class(TObject)

private

Left{начало}, Right{конец}, Current, G, Sort{для сортировки}:TPointer;

procedure ElementToStringGrid(i:Cardinal;StringGrid:TStringGrid);

public

procedure FormingList;

procedure GetList(StringGrid:TStringGrid);

procedure ClearList;

procedure Sorting(Index:Integer;Increase:Boolean);

procedure Replace;

procedure Search(Index:Integer;Text:String;StringGrid:TStringGrid);

end;

implementation

uses UnitRecordNfile;

procedure TNoFreeXD.FormingList;

var

i,j,k:Cardinal;

str,_strYear:string;

Year: Word;

Month: Word;

Day: Word;

begin

New(Current);

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

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

for i:=0 to GetBTKM-1 do

begin

for j:=0 to GetXDM-1 do

begin

DecodeDate(XD[j].DateCreat,Year,Month,Day);

_strYear:=IntToStr(Year);

str:=IntToStr(XD[j].Number)+'/'+_strYear[3]+_strYear[4];

if (str=BTK[i].Kod) and (XD[j].PriznakFree=false) then

begin

Current^.Name:=BTK[i].Name;

Current^.FamilyName:=BTK[i].FamilyName;

Current^.Patronymic:=BTK[i].Patronymic;

Current^.Year:=BTK[i].Year;

Current^.Kod:=BTK[i].Kod;

Current^.SummMany:=BTK[i].SummMany;

for k:=0 to GetBANKM-1 do

begin

if BANK[k].Number=BTK[i].NumberBank then

begin

Current^.City:=BANK[k].City;

end;

end;

New(Current^.Dir);

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

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

end;

end;

end;

Current^.Back^.Dir:=nil;

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

Dispose(Current);

end;

procedure TNoFreeXD.GetList(StringGrid:TStringGrid);

var

i,j:integer;

begin

for i:=1 to 25 do

for j:=0 to 8 do

StringGrid.Cells[j,i]:='';

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

i:=1;

while Current<> nil do

begin

StringGrid.Cells[0,i]:=IntToStr(i);

StringGrid.Cells[1,i]:=Current^.Name;

StringGrid.Cells[2,i]:=Current^.FamilyName;

StringGrid.Cells[3,i]:=Current^.Patronymic;

StringGrid.Cells[4,i]:=IntToStr(Current^.Year);

StringGrid.Cells[5,i]:=Current^.Kod;

StringGrid.Cells[6,i]:=FloatToStr(Current^.SummMany);

StringGrid.Cells[7,i]:=Current^.City;

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

Inc(i);

end;

end;

procedure TNoFreeXD.ClearList;

begin

Dispose(Left);

Dispose(Right);

Dispose(Current);

end;

procedure TNoFreeXD.Sorting(Index:Integer;Increase:Boolean);

var

XPointer:TPointer;

begin

if Left=Right then Exit;

XPointer:=Left;

while XPointer^.Dir<>nil do

begin

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

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

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

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

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

begin

case Index of

0: if Increase=True//как сортировать(убыванию или увелечению)

then

begin

if G^.Name<Current^.Name

then G:=Current;

end

else if G^.Name>Current^.Name

then G:=Current;

1: if Increase=True

then

begin

if G^.FamilyName<Current^.FamilyName

then G:=Current;

end

else if G^.FamilyName>Current^.FamilyName

then G:=Current;

2: if Increase=True

then

begin

if G^.Patronymic<Current^.Patronymic

then G:=Current;

end

else if G^.Patronymic>Current^.Patronymic

then G:=Current;

3: if Increase=True

then

begin

if G^.SummMany<Current^.SummMany

then G:=Current;

end

else if G^.SummMany>Current^.SummMany

then G:=Current;

4: if Increase=True

then

begin

if G^.City<Current^.City

then G:=Current;

end

else if G^.City>Current^.City

then G:=Current;

5: if Increase=True

then

begin

if G^.Year<Current^.Year

then G:=Current;

end

else if G^.Year>Current^.Year

then G:=Current;

end;

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

end;

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

if G<>Sort then Replace;

end;

end;

procedure TNoFreeXD.Replace;

begin

if G^.Dir<>nil

then G^.Dir^.Back:=Sort

else Right:=Sort;

if Sort^.Dir<>G

then

begin

Sort^.Dir^.Back:=G;

G^.Back^.Dir:=Sort;

end;

if Sort^.Back<>nil

then Sort^.Back^.Dir:=G

else Left:=G;

Current:=G^.Dir;

if Sort^.Dir=G

then G^.Dir:=Sort

else G^.Dir:=Sort^.Dir;

Sort^.Dir:=Current;

if G^.Back=Sort


Подобные документы

  • Расположение элементов списка в памяти. Информация о полях структуры TMember. Логическая структура двусвязного кольцевого списка. Логические схемы наиболее важных операций со списками. Алгоритмы обработки основных структур. Руководство пользователя.

    курсовая работа [2,3 M], добавлен 27.08.2012

  • Исследование программного средства для управления базой данных с информацией о фильмах. Составление алгоритма удаления и добавления элемента в указанное место двунаправленного списка. Характеристика поиска, вывода на экран и сортировки элементов списка.

    курсовая работа [94,5 K], добавлен 23.09.2011

  • Представление (построение, создание) списка данных в виде линейного однонаправленного списка. Формирование массива данных. Вывод данных на экран. Алгоритм удаления, перемещения данных. Сортировка методом вставки. Алгоритм загрузки данных из файла.

    курсовая работа [2,1 M], добавлен 16.05.2015

  • Общая характеристика Delphi как интегрированной среды разработки программного обеспечения. СУБД Access, ее возможности. Создание базы данных в Access для комиссионного букинистического магазина. Создание запросов и фильтров. Описание работы программы.

    курсовая работа [3,1 M], добавлен 25.05.2015

  • Структура программы в среде Delphi в процессе проектирования приложения, ее модульный принцип. Объявление списка используемых модулей и нескольких операторов. Размещение на форме компонентов и изменение их свойств. Создание кода - обработчика события.

    лабораторная работа [19,1 K], добавлен 15.07.2009

  • Правила формирования списка на рабочем листе. Что понимается под структурой списка. Как осуществляется ввод данных. Простая сортировка списка. Интерфейс и функции приложения PowerPoint. Создание, редактирование и форматирование текстового документа.

    лабораторная работа [25,1 K], добавлен 16.01.2015

  • Теоретическое описание линейного списка с алгоритмами реализации основных операций. Понятия, механизмы объектно-ориентированного программирования. Возможности проектируемого контейнера пользователей, его реализация на основе линейного списка с заголовком.

    курсовая работа [475,2 K], добавлен 26.02.2015

  • Разработка программного приложения в среде Delphi. Создание таблиц и их заполнение. Форма редактирования записи. Реализация SQL запросов и поиска. Создание отчётов по БД. Руководство пользователя. Требования к составу и параметрам технических средств.

    курсовая работа [1,3 M], добавлен 03.11.2014

  • Особенности алгоритмов, критерии качества. Создание и применение программного продукта на языке Delphi. Тип операционной системы. Внутренняя структура программного продукта. Руководство пользователя и программиста, расчет себестоимости и цены программы.

    дипломная работа [1,5 M], добавлен 12.06.2009

  • Приложение для организации и контроля разработки программного обеспечения, сокращающее сроки проектирования программных продуктов и оптимизирующее данный процесс. Технологии создания приложений на платформе .NET. Алгоритм получения и обновления списка.

    дипломная работа [861,9 K], добавлен 27.11.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.