Трёхуровневый иерархический список
Данные как непременный атрибут любой программы. Знакомство с особенностями трёхуровневого иерархического списка. Общая характеристика основных компонентов формы MainForm и Correct. Анализ логической структуры данных, рассмотрение способов управления.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 27.05.2013 |
Размер файла | 491,1 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Введение
данный логический управление
Любая программа представляет собой не только набор операторов и ключевых слов, но также и совокупность информационных объектов, имеющих определённую логическую структуру. Причём действия над этими объектами записаны в операторах программы. В курсе «Структуры и алгоритмы обработки данных» рассматриваются теоретические и практические вопросы описания логических структур данных, их физического размещения в памяти ЭВМ, а также алгоритмов обработки таких структур.
Для написания серьёзных программ и разработки алгоритмов обработки данных необходимо знание основных типов структур данных, алгоритмов их обработки, а также специфики их обработки.
Данные - непременный атрибут любой программы. Когда употребляется термин «программа», подразумевают не только последовательность операторов некоторого языка программирования, но и набор различных информационных объектов, над которыми выполняются действия, описанные операторами программы. Такие объекты называют данными.
Структурой данных называется множество данных и отношений между ними. Все связи одного элемента данных с другими образуют элемент отношений. Данные, образующие структуру, называются элементами структуры. Одной из основных операций в структурах является просмотр её элементов. Важным признаком структуры данных является её изменчивость. Под изменчивостью подразумевается способность структуры изменять число образующих её элементов и характер связи между ними. В определение изменчивости не входит способность изменять значения элементов структуры.
В данном курсовом проекте базовой структурой данных является трёхуровневый иерархический список. Это динамическая структура данных, то есть количество элементов в ней может изменяться в процессе выполнения программы. Информационный объект в данной программе - это научно-производственная организация. Соответственно данными для проекта служат записи о договорах, исполнителях, отделений банка и т.д.
Состав Delphi-проекта
Формы, входящие в состав Delphi-проекта:
unitUnitMain; Модуль главной формы программы. Предназначен для организации интерфейса и взаимодействия пользователя с информационными объектами программы. Также модуль обеспечивает связь со всеми остальными, вспомогательными формами в проекте.
Рис.
Основные компоненты формы MainForm:
Компонент TPageControl - страницы вкладок, позволяющие переключаться между информационными таблицами.
Компоненты TStringGrid - таблицы, предназначенные для вывода информации о договорах, исполнителях, банках а также из трёхуровневой иерархической структуры.
Диалоговая компонентаTOpenDialog предназначена для открытия файлов с информацией о хоз. договорах, исполнителях договора и отделений банка.
Компонент TMainMenu- главное меню, с помощью которого осуществляется управление программой (открытие файлов, выход и т.д.)
Компоненты класса TLabel- различные текстовые надписи, предназначенные для информирования пользователя.
Компоненты класса TButton- различные кнопки, предназначенные для работы со структурой (сортировка, корректировка, поиск, формирование) unitUnitCorrect; Вспомогательная форма, позволяющая корректировать данные в иерархической структуре и обеспечивающая правильность введённых данных.
Рис.
Основные компоненты формы Correct:
Компоненты TBitBtn-Кнопки, подтверждающие внесённые изменения в структуру, или отменяющие их.
Компоненты TEditпредназначены для ввода информации о договоре.
unitUnitSearch; Вспомогательная форма, использующаяся для поиска договоров в иерархической структуре по номеру договора.
Рис.
Основные компоненты формы Search:
Компонент TStringGrid-таблица, в которой отображаются найденные договоры.
Компонент TEditслужит для ввода номера договора, по которому будет вестись поиск. Поиск происходит при изменении информации в поле ввода.
Модули, входящие в состав Delphi-проекта:
unitStructures;
Модуль, содержащий описание класса трёхуровневого иерархического спискаTTHierarchList. Это класс инкапсулирует в себе все необходимые по заданию операции по обработке структуры: формирование трёхуровневого иерархического списка; добавление и изменение содержимого элементов; сортировка структуры прямым выбором, а также поиск элементов по заданному ключу и отображение списка на экране.
unitOrganizations;
Модуль, содержащий описание класса организацииTNPO, которая заключает договоры. Этот класс инкапсулирует в себе все операции для работы с данными о договорах, исполнителях и отделений банка; загрузку информации из подготовленных файлов. Также этот класс содержит в себе объект класса TTHierarchList.
Также в проект входят все модули с формами, указанные выше.
Основные процедуры, входящие в состав программных модулей:
Модуль UnitMain.
procedureTMain.FormCreate(Sender: TObject); - Созданиеобъектатипа «НПО», исозданиешапоквсехтаблиц.
procedure TMain.N4Click(Sender: TObject); - Пунктменю»Выход из программы».
procedureTMain.N9Click(Sender: TObject); - Отображение информационного окна «О программе».
procedure TMain.N5Click(Sender: TObject); - ОткрытиефайлаXD.
procedure TMain.N6Click(Sender: TObject);- ОткрытиефайлаWTK.
procedure TMain.N7Click(Sender: TObject);- ОткрытиефайлаBank.
procedureTMain.Button1Click(Sender: TObject);- Формирование трёхуровневого иерархического списка договоров на основании таблиц.
procedureTMain.Button3Click(Sender: TObject);- Сортировка трёхуровневого иерархического списка договоров по стоимости услуг по возрастанию.
procedureTMain.Button4Click(Sender: TObject);- Сортировка трёхуровневого иерархического списка договоров по стоимости услуг по убыванию.
procedureTMain.Button2Click(Sender: TObject);- Вызов вспомогательной формы проекта для поиска договора в иерархической структуре.
procedureTMain.Button5Click(Sender: TObject);- Вызов вспомогательной формы проекта для корректировки договора в иерархической структуре.
МодульUnitSearch.
procedureTSearch.FormCreate(Sender: TObject);- Заполнение шапки таблицы на форме для поиска договоров.
procedureTSearch.Edit1Change(Sender: TObject);- Поиск договора в трёхуровневом иерархическом списке по его номеру.
МодульUnitCorrect.
procedure TCorrect.Button2Click(Sender: TObject);- Кнопка «Отмена». Отменавнесённыхизмененийивыходизформыкорректировки.
procedure TCorrect.Button1Click(Sender: TObject);- Кнопка «Применить». Внесение изменений в трёхуровневую иерархию списка и выход из формы.
procedureTCorrect.Edit1KeyPress(Sender: TObject; varKey: Char);- Ограничение на ввод в поле номера символов. Допускаются только цифры.
МодульStructures.
Класстрёхуровневого иерархического списка договоров с требуемыми атрибутами. Описание его переменных и методов
//Тип - указатель на элемент третьего уровня иерархии
PLevel3 = ^TLevel3;
//Запись - элемент третьего уровня иерархии
TLevel3 = Record
Account: LongWord;//Номеррасчётногосчёта
Next:PLevel3 //Указатель на следующий элемент в третьем уровне структуры
end;
//Тип - указатель на элемент второго уровня иерархии
PLevel2 = ^TLevel2;
//Запись - элемент второго уровня иерархии
TLevel2 = Record
City : String[20]; //Названиегорода
Accounts: PLevel3; //Указатель на третий уровень иерархии
Next: PLevel2 //Указатель на следующий элемент во втором уровне структуры
end;
//Тип - указатель на элемент первого уровня иерархии
PLevel1 = ^TLevel1;
//Запись - элемент первого уровня иерархии
TLevel1 = Record
Number : Word; //Номерхоздоговора
StartDate: String[10]; //Дата заключения
Done : Boolean; //Признак завершения
Price : Word; //Цена работ по договору
Cities : PLevel2; //Указатель на второй уровень иерархии
Next : PLevel1 //Указатель на следующий элемент в первом уровне структуры
end;
//Класс 3-ёх уровневой иерархической структуры
THierarchList = class
private
Head: PLevel1; //Указатель на голову списка (первый уровень)
Current: PLevel1; //Текущий указатель в списке (первый уровень)
Count: Word; //Количество элементов в списке на первом уровне
procedure Swap(P1, P2: PLevel1); //Процедура менят местами два узла первого уровня иерархии (для сортировки)
public
property Counter: Word read Count;
//Добавление члена ВТК в иерархический список
procedure Add(S: String; D: Boolean; N, P: Word;
var City: TCities; Cnt: Byte; var Accounts: TAccounts);
procedure Show(SG: TStringGrid); //Вывод структуры на форму
procedure SortingUp; //Сортировка по возрастанию
procedure SortingDown; //Сортировка по убыванию
function SearchByNumber(N: Word): TLevel1; //Поискдоговорапономеру
function GetByNumber(N: Word): PLevel1; //Получение договора по номеру в списке (для корректировки)
end;
МодульOrganizations.
Описание класса НПО со всеми заданными таблицамии методами для работы с ними.
//Запись - ХозДоговор
TXDogovor = Record
Number : Word; //Номер договора
StartDate : String[10]; //Дата заключения договора
FinishDate : String[10]; //Дата завершения договора
Theme : String[25]; //Тема договора,
Organization: String[25]; //Наименование организации - заказчика работ
Done : Boolean; //Признак завершения
Price : Word //Стоимость договора в тыс. рублей
end;
//Запись - Исполнитель ХД и член ВТК
TMemeberWTK = Record
Surname : String[20]; //Фамилия
Name : String[20]; //Имя
Patronymic: String[20]; //Отчество
BirthYear : String[10]; //Год рождения
CodeXD : String[10]; //Код ХД
IsDirector: Boolean; //Признак руководитель/рядовой член ВТК
Premium : Word; //Причитающаяся по договору сумма
Address : String[20]; //Домашний адрес
BankNumber: Word; //Номер отделения сбербанка
Account : LongWord //Расчетный счет исполнителя
end;
//Запись - Атрибуты отделения сбербанка
TBank = Record
Number : Word; //Номер отделения
City : String[20]; //Город, в котором находится отделение
Address : String[20]; //Адрес без указания города
Partition: String[20]; //Наименование отделения
Code : Word //3-хзначный банковский код отделения
end;
TOrganization = class//Класс НПО - научно-производственная организация
private
XD: Array[1..50] ofTXDogovor; //Массив с договорами
WTK: Array[1..30] ofTMemeberWTK; //Массив и исполнителями
Bank: Array[1..20] ofTBank; //Массив с отделениями банков
XDCount: Integer; //Количество договоров
WTKCount: Integer; //Количество исполнителей
BankCount: Integer; //Количество отделений банка
XDTable: TStringGrid; //StringGrid для ХозДоговоров
WTKTable: TStringGrid; //StringGrid для исполнителей договоров
BankTable: TStringGrid; //StringGrid для отделений банков
functionGetWTKByNumber(N: Word): String; //Получение названия ВТК по номеру договора
functionGetCityByNumber(N: Word): String; //Получение города по номеру отделения банка
public
Struct: THiearchList; //Иерархический список
propertyCountXD: IntegerreadXDCount;//Свойство: Количество договоров
propertyCountWTK: IntegerreadWTKCount; //Свойство: Количество исполнителей
propertyCountBank: IntegerreadBankCount; //Свойство: Количество отделений банка
constructorCreate(SG1, SG2, SG3: TStringGrid); //Конструктор
procedure LoadXD(FileName: String); //Открытие файла хоздоговоров
procedure LoadWTK(FileName: String); //Открытие файла исполнителей
procedure LoadBank(FileName: String); //Открытие файла отделений банка
procedure ShowXD; //Вывод списка хоздоговоров на форму
procedureShowWTK; //Вывод списка исполнителей на форму
procedureShowBank; //Вывод списка отделений банков на форму
procedureCreateList; //Формирование иерархического списка
end;
Статические данные и структуры
Таблица
Имя переменной |
Тип переменной |
Адрес в памяти |
Размер (Б) |
Назначение переменной |
|
Модуль UnitMain.pas |
|||||
NPO |
TNPO |
$B921F0 |
4 |
Ссылка на объект - НПО |
|
Модуль UnitSearch.pas |
|||||
M |
TLevel1 |
$12F1E8 |
25 |
Переменная-буфер для хранения инф. о найденном в структуре договоре |
|
Модуль UnitCorrect.pas |
|||||
P |
PLevel1 |
$12F814 |
4 |
Указатель на корректируемую запись в структуре |
|
Модуль Structures.pas |
|||||
Head |
PLevel1 |
$BBDDD4 |
4 |
Указатель на первый элемент в первом уровне списка |
|
Current |
PLevel1 |
$BBDDD8 |
4 |
Текущий указатель в первом уровне |
|
Count |
Word |
$BBDDDC |
2 |
Количество элементов в списке на первом уровне |
|
I |
Byte |
$12FC2C |
1 |
Переменная для организации циклов |
|
J |
Byte |
$12FC2B |
1 |
Переменная для организации циклов |
|
NewNode |
PLevel1 |
$12F1EC |
4 |
Временный буфер для хранения добавляемого в список элемента |
|
CurC |
PLevel2 |
$12FC44 |
4 |
Текущий указатель в списке второго уровня |
|
CurN |
PLevel3 |
$12FC40 |
4 |
Текущий указатель в списке третьего уровня |
|
NewL2 |
PLevel2 |
$12FBFC |
4 |
Временный буфер для хранения добавляемого на второй уровень элемента |
|
NewL3 |
PLevel3 |
$12FBE8 |
4 |
Временный буфер для хранения добавляемого на третий уровень элемента |
|
Модуль Organizations.pas |
|||||
XD |
Array[1..50] of TXDogovor |
$B6AF34 |
4000 |
Массив для хранения информации о всех договорах |
|
WTK |
Array[1..30] of TMemWTK |
$B6BED4 |
3480 |
Массив для хранения информации о всех исполнителях |
|
Bank |
Array[1..20] of TBank |
$B6CC6C |
1360 |
Массив для хранения информации о всех отделениях банка |
|
XDCount |
Integer |
$B6D1BC |
4 |
Число жильцов |
|
WTKCount |
Integer |
$B6D1C0 |
4 |
Число главных квартиросъёмщиков |
|
BankCount |
Integer |
$B6D1C4 |
4 |
Число квартир |
|
Struct |
THiearchList |
$B6D1D4 |
4 |
Ссылка на объект (трёхуровневый иерархический список) |
|
XDTable |
TStringGrid |
$B6D1C8 |
4 |
Указатель на TStringGrid, в котроый выводися информация о договорах |
|
WTKTable |
TStringGrid |
$B6D1CC |
4 |
Указатель на TStringGrid, в котроый выводися информация о исполнителях |
|
BankTable |
TStringGrid |
$B6D1D0 |
4 |
Указатель на TStringGrid, в котроый выводися информ. об отделениях банка |
|
I |
Byte |
$12FB1E |
1 |
Переменная для организации циклов |
|
J |
Byte |
$12FB1D |
1 |
Переменная для организации циклов |
|
K |
Byte |
$12FB1E |
1 |
Переменная для организации циклов |
Логическая структура данных
В данном курсовом проекте базовой структурой данных является трёхуровневый иерархический список (hierarchical list). В такой структуре каждый элемент (узел) состоит из информационных полей, указателя на список второго уровня и поля для размещения единственного структурного указателя. Элемент второго уровня иерархии содержит информационные поля, указатель на список третьего уровня иерархии и структурный указатель на следующий элемент во втором уровне. Элемент третьего уровня содержит информационное поле и указатель на следующий элемент в третьем уровне иерархии. В нашем случае информационными полями являются данные о договоре, городах и счетах банка.
//Запись - элемент первого уровня иерархии
TLevel1 = Record
Number : Word; //Номерхоздоговора
StartDate: String[10]; //Датазаключения
Done : Boolean; //Признак завершения
Price : Word; //Цена работ по договору
Cities : PLevel2; //Указатель на второй уровень иерархии
Next : PLevel1 //Указатель на следующий элемент
end;
//Запись - элемент второго уровня иерархии
TLevel2 = Record
City : String[20]; //Названиегорода
Accounts: PLevel3; //Указатель на третий уровень иерархии
Next : PLevel2 //Указатель на следующий элемент
end;
//Запись - элемент третьего уровня иерархии
TLevel3 = Record
Account: LongWord; //Номеррасчётногосчёта
Next : PLevel3 //Указатель на следующий элемент
end;
Поле логического указателя элементов всех уровней хранит адрес в памяти следующего элемента списка. Пользуясь указателем, можно получить доступ к элементу списка, а от него к следующему элементу и т. д., пока не будет достигнут последний элемент.Поле указателя последнего элемента списка должно содержать признак пустого указателя (NIL), свидетельствующий о конце списка. Логическая структура трёхуровневого иерархического списка представлена ниже:
Схема
Логические схемы операций в базовой структуре данных
Как уже было сказано выше, данный курсовой проект посвящен освоению работы с трёхуровневым иерархическим списком, его формированию, а также организации основных операций обработки. Ниже рассмотрим более детально основные операции и методы их реализации, а также алгоритм сортировки прямым выбором.
Формирование.
Процесс формирования происходит с помощью операции добавления нового элемента в конец уже имеющегося списка. Операция добавления элемента в трёхуровневый иерархический список требует задания всех нужных информационных полей, а также информации о втором и третьем уровне. В данном проекте это информация передаётся в виде массивов.
//Добавление члена ВТК в иерархический список
procedure THierarchList.Add(S: String; D: Boolean; N, P: Word;
var City: TCities; Cnt: Byte; var Accounts: TAccounts);
var
NewNode: PLevel1;
CurC, NewL2: PLevel2;
CurN, NewL3: PLevel3;
I, J: Byte;
begin
New(NewNode); //Выделяем память под узел первого уровня
with NewNode^ do
begin
Next := NIL; //Заполняемполяпервогоуровня
StartDate := S;
Number := N;
Price := P;
Done := D;
Cities := NIL;
For I := 1 To Cnt do //Начинаемзаполнятьвторойуровень
begin
New(NewL2); //Выделяемпамятьподузелвторогоуровня
if (Cities = NIL) //Вставляем его во второй уровень
then Cities := NewL2
else CurC^.Next := NewL2;
NewL2^.City := City[I]; //Заполняем поле (город)
NewL2^.Next := NIL; //Указатель на следущий - NIL
NewL2^.Accounts := NIL; //Начинаем заполнять третий уровень
For J := 2 to Accounts[I, 1] do
begin
New(NewL3); //Выделяем память под узел третьего уровня
NewL3^.Account := Accounts[I, J];//Заполняемполе (счёт)
NewL3^.Next := NIL; //Указатель на следущий - NIL
if (NewL2^.Accounts = NIL) //Вставляем его на третий уровень
then NewL2^.Accounts := NewL3
else CurN^.Next := NewL3;
CurN := NewL3
end;
CurC := NewL2
end
end;
if (Current = NIL) //Помещаем узел первого уровня в наш список
then Head := NewNode
else Current^.Next := NewNode;
Current := NewNode;
Inc(Count) //Увеличиваем количество элементов в списке
Просмотр трёхуровневого иерархического списка
Процедура просмотра трёхуровневого иерархического списка связана с выполнением над каждым элементом каждого уровня одной и той же операции. Просмотр списка начинается с его головы (Head) и длиться, пока структурный указатель натекущий элемент (Current) не будет равным NIL. Это означает, что предыдущий элемент был последним в списке и просмотр закончен. Просмотр второго и третьего уровня осуществляется аналогично во вложенных циклах. В качестве примера представлена процедура печати информационных полей иерархической структуры в компонент TStringGrid:
//Вывод структуры на форму в StringGrid
procedure THierarchList.Show(SG: TStringGrid);
var
I, J, L: Byte;
CurC: PLevel2;
CurN: PLevel3;
begin
For I := 1 to 30 do //Чистим StringGrid
For J := 0 to 10 do
SG.Cells[J,I] := '';
L := 1;
Current := Head;
For I := 1 to Count do //Проход по первому уровню
begin
SG.Cells[0, L] := IntToStr(Current^.Number);//Выводим поля первого уровня
SG.Cells[1, L] := Current^.StartDate;
if (Current^.Done)
then SG.Cells[2, L] := 'Завершён'
elseSG.Cells[2, L] := 'Незавершён';
SG.Cells[3,L] := IntToStr(Current^.Price);
CurC := Current^.Cities;//Начинаем просматривать второй уровень структуры
While (CurC<>NIL) do
begin
SG.Cells[4,L] := CurC^.City; //Выводим поле узла второго уровня (город)
CurN := CurC^.Accounts; //И начинаем просматривать третий уровень
While (CurN<>NIL) do
begin
//Выводим поле третьего уровня (счёт)
SG.Cells[5,L] := SG.Cells[5,L] + IntToStr(CurN^.Account) + ', ';
CurN := CurN^.Next//И движемся дальше по третьему уровню
end;
Inc(L);
CurC := CurC^.Next//Здесь движемся дальше по второму уровню
end;
Current := Current^.Next //А здесь по первому...
end
end;
Сортировка прямым выбором
Сортировка с помощью прямого выбора основана на следующем алгоритме:
· выбираем (выделяем) элемент с наименьшим (среди всех N элементов) ключом;
· элемент с наименьшим ключом меняется местами с первым элементом.
· Затем выбираем элемент с наименьшим ключом среди всех элементов, кроме первого элемента; меняем его местами со вторым элементом и т. д.
Эти операции затем повторяются с оставшимися N?2 элементами, затем с N?3 элементами, пока не останется только один элемент ? наибольший.
Реализация этого алгоритма в трёхуровневой иерархической структуре приведена ниже:
//Cортировка прямым выбором по возрастанию
procedureTHierarchList.SortingUp;
var
I, J: Word;
Min: PLevel1;
begin
Min := Head;
For I := 1 to Count-1 do
begin
Current := Min^.Next;
For J := 1 to Count - I do
begin //Сравниваем текущий элемент с первым неупорядоченным
if (Min^.Price > Current^.Price) then
Swap(Min, Current); //Меняем их местами если надо
Current := Current^.Next //И движемся дальше по списку
end;
Min := Min^.Next
end
Руководство пользователя
Исполняемым файлом данного курсового проекта является файл «KursWork.exe», после запуска которого на экране появляется главное окно приложения:
Рис.
Управление программой происходит с помощью главного меню и кнопок. Пункт меню Файл содержит 2 пункта:
Рис.
Открыть - открытие подготовленных файлов с данными о хоз. договорах, исполнителях и отделениях банка. При этом вся информация с файла загрузится в таблицы класса TNPO и на экран.
Выход - завершить работу с приложением.
Пункт меню О программе вызывает небольшое диалоговое окно, показывающее краткую информацию о проекте:
Рис.
После того, как будут открыты информационные файлы, станет доступной кнопка на вкладке «3-ёх уровневая иерархия»: Сформировать.
Рис.
По нажатию на эту кнопку происходит формирование трёхуровневого иерархического списка и отображение его на экране. Также после этого станут доступны Несколько других кнопок. Корректировка - изменение информационных полей в узлах первого уровня иерархического спика. При этом появиться следующее окно редактирования:
Рис.
Поиск - поиск в трёхуровневом иерархическом списке договора по его номеру. Форма для поиска будет иметь такой вид:
Рис.
Сортировка - сортировка трёхуровневого иерархического списка прямым выбором по стоимости услуг. Сортировка может производиться как по возрастанию, так и по убыванию. Сразу после сортировки содержимое таблицы на экране обновится.
Заключение
В результате работы была создана информационная модель информационной систем расчёта по договорам. Программа была разработана в визуальной среде BorlandDelphi7.0, работающей под управлением ОС семейства Windows. Программа показала стабильные результаты работы с различными тестовыми примерами.
Была изучена и реализована логическая структура трёхуровневого иерархического списка. Кроме того, был реализован механизм ввода всей информации с внешнего накопителя (файлыXD.dat, WTK.dat, Bank.dat). Наконец, был рассмотрен метод сортировки прямым выбором, тестирование которой показало положительные результаты при работе с различными исходными данными.
Разработанная в ходе курсового проектирования программа удовлетворяет следующим, предусмотренным заданием, требованиям:
1. реализованы операции формирования, просмотра, добавления, корректировки, сортировки и поиска в трёхуровневой иерархической структуре;
2. программа обеспечивает возможность просматривать упорядоченный список как по возрастанию, так и по убыванию требуемого ключа.
3. Трёхуровневый иерархический список реализован в отдельном классе (THirarchList).
Литература
1.Бакнелл Д.М. Фундаментальные алгоритмы и структуры данных в Delphi. ? СПб: ООО «ДиаСофтЮП», 2003. ? 506 с.
2.Вирт Н. Алгоритмы и структуры данных. ? СПб: Невский диалект, 2001. - 352 с.
3.Альфред В. Ахо и др. Структуры данных и алгоритмы. -- М.: Вильямс, 2001.
4.Р. Л. Структуры данных и проектирование программ. - М.: БИНОМ. Лаборатория знаний, 2008. - 765 с.
Приложение
(Исходные тексты всех модулей)
МодульUnitMain.
unit UnitMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, ComCtrls, Menus, Organizations, StdCtrls, XPMan,
UnitSearch, UnitCorrect;
type
TMain = class(TForm)
PageControl1: TPageControl;
MainMenu1: TMainMenu;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
TabSheet3: TTabSheet;
StringGrid1: TStringGrid;
StringGrid2: TStringGrid;
StringGrid3: TStringGrid;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N9: TMenuItem;
OpenDialog1: TOpenDialog;
TabSheet4: TTabSheet;
StringGrid4: TStringGrid;
XPManifest1: TXPManifest;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
procedure FormCreate(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure N9Click(Sender: TObject);
procedure N5Click(Sender: TObject);
procedure N6Click(Sender: TObject);
procedure N7Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
public
NPO: TNPO;
end;
var Main: TMain;
implementation
{$R *.dfm}
//ЗаполняемшапкитаблицисоздаёмНПО
procedure TMain.FormCreate(Sender: TObject);
begin
with StringGrid1 do
begin
Cells[0,0] := ' № дог.';
Cells[1,0] := ' Дата закл.';
Cells[2,0] := ' Дата зав.';
Cells[3,0] := ' Тема';
Cells[4,0] := ' Организация';
Cells[5,0] := ' Признак';
Cells[6,0] := ' Стоимость'
end;
with StringGrid2 do
begin
Cells[0,0] := ' Фамилия';
Cells[1,0] := ' Имя';
Cells[2,0] := ' Отчество';
Cells[3,0] := ' Год рожд';
Cells[4,0] := ' Код XD';
Cells[5,0] := ' Признак';
Cells[6,0] := ' Сумма';
Cells[7,0] := ' Адрес';
Cells[8,0] := ' Банк';
Cells[9,0] := ' Счет'
end;
with StringGrid3 do
begin
Cells[0,0] := ' № отделения';
Cells[1,0] := ' Город';
Cells[2,0] := ' Адрес отделения';
Cells[3,0] := ' Наимен. отделения';
Cells[4,0] := ' Код отделения'
end;
with StringGrid4 do
begin
Cells[0,0] := ' Номер';
Cells[1,0] := ' Дата закл.';
Cells[2,0] := ' Признак';
Cells[3,0] := ' Стоимость';
Cells[4,0] := ' Города';
Cells[5,0] := ' Счета'
end;
NPO := TNPO.Create(StringGrid1, StringGrid2, StringGrid3)
end;
//Пункт меню "Выход"
procedure TMain.N4Click(Sender: TObject);
begin
Close
end;
//Пункт меню "О программе"
procedure TMain.N9Click(Sender: TObject);
begin
MessageBox(Handle, PChar('Курсовой проект' + #13 + 'ст. гр. 107218 Горбачёв П. И.'),
'Информация', MB_ICONINFORMATION)
end;
//Пункт меню "Открыть файл ХозДоговоры"
procedure TMain.N5Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
NPO.LoadXD(OpenDialog1.FileName);
NPO.ShowXD
end
end;
//Пункт меню "Открыть файл Исполнители"
procedure TMain.N6Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
NPO.LoadWTK(OpenDialog1.FileName);
NPO.ShowWTK
end
end;
//Пункт меню "Открыть файл Отделения Банков"
procedure TMain.N7Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
NPO.LoadBank(OpenDialog1.FileName);
NPO.ShowBank
end
end;
//Сформировать список
procedure TMain.Button1Click(Sender: TObject);
begin
if ((NPO.CountXD = 0) or (NPO.CountWTK = 0) or (NPO.CountBank = 0)) then
begin
MessageBox(Handle, 'Не хватате данных', 'Ошибка', MB_ICONERROR);
Exit
end;
//Создём список и выводим его
NPO.CreateList;
NPO.Struct.Show(StringGrid4);
Button1.Enabled := False;
Button2.Enabled := True;
Button3.Enabled := True;
Button4.Enabled := True;
Button5.Enabled := True;
end;
//Кнопка "Сортировать по возрастанию"
procedure TMain.Button3Click(Sender: TObject);
begin
NPO.Struct.SortingUp; //Сортируем иерархический список
NPO.Struct.Show(StringGrid4) //и выводим
end;
//Кнопка "Сортировать по убыванию"
procedure TMain.Button4Click(Sender: TObject);
begin
NPO.Struct.SortingDown; //Сортируем иерархический список
NPO.Struct.Show(StringGrid4) //и выводим
end;
//Кнопка "Поиск"
procedure TMain.Button2Click(Sender: TObject);
begin
Search.ShowModal
end;
//Кнопка "Корректировать"
procedure TMain.Button5Click(Sender: TObject);
begin
Correct.ShowModal;
NPO.Struct.Show(StringGrid4)
end;
end.
МодульUnitSearch.
unit UnitSearch;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, Structures;
type
TSearch = class(TForm)
StringGrid1: TStringGrid;
Label1: TLabel;
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
procedure Edit1Change(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
end;
var Search: TSearch;
implementation
{$R *.dfm}
uses UnitMain;
procedure TSearch.FormCreate(Sender: TObject);
begin
with StringGrid1 do
begin
Cells[0,0] := ' Номер';
Cells[1,0] := ' Дата закл.';
Cells[2,0] := ' Признак';
Cells[3,0] := ' Стоимость';
end;
end;
//Поиск договоров
procedure TSearch.Edit1Change(Sender: TObject);
var
M: TLevel1;
begin
M := Main.NPO.Struct.SearchByNumber(StrToInt(Edit1.Text));//Ищем договор
withStringGrid1 do
begin //И выводим информацию о найденном договоре
Cells[0,1] := IntToStr(M.Number);
Cells[1,1] := M.StartDate;
if (M.Done)
then Cells[2,1] := 'Завершён'
else Cells[2,1] := 'Не завершён';
Cells[3,1] := IntToStr(M.Price)
end;
end;
//Ограничение на ввод букв
procedure TSearch.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Not(Key in ['0'..'9', #8]) then Key := #0
end;
end.
МодульUnitCorrect.
unit UnitCorrect;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Structures;
type
TCorrect = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Label5: TLabel;
Edit5: TEdit;
Button1: TButton;
Button2: TButton;
procedure Button2Click(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure Edit1Change(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
end;
var Correct: TCorrect;
implementation
{$R *.dfm}
uses UnitMain;
Var P: PLevel1;
//Кнопка "Отмена"
procedure TCorrect.Button2Click(Sender: TObject);
begin
Close
end;
//Ограничение на ввод букв
procedure TCorrect.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Not(Key in ['0'..'9', #8]) then Key := #0
end;
//Получаем договор по его номеру в списке
procedure TCorrect.Edit1Change(Sender: TObject);
begin
if (Edit1.Text = '') then Exit;
if (StrToInt(Edit1.Text) > Main.NPO.Struct.Counter) then
Exit;
P := Main.NPO.Struct.GetByNumber(StrToInt(Edit1.Text));
Edit2.Text := IntToStr(P^.Number);
Edit3.Text := P^.StartDate;
if (P^.Done)
then Edit4.Text := 'Завершён'
else Edit4.Text := 'Не завершён';
Edit5.Text := IntToStr(P^.Price)
end;
//Кнопка "Применить"
procedure TCorrect.Button1Click(Sender: TObject);
begin
P^.Number := StrToInt(Edit2.Text);
P^.StartDate := Edit3.Text;
if (Edit4.Text = 'Завершён')
then P^.Done := True
else P^.Done := False;
P^.Price := StrToInt(Edit5.Text);
Close
end;
procedure TCorrect.FormShow(Sender: TObject);
begin
Edit1.Text := '1';
Edit1Change(Sender);
end;
end.
МодульStructures.
unit Structures;
interface
uses
Grids, //Модуль для работы с TStringGrid
SysUtils; //Модуль с функциями StrToInt и т.д.
type
//Типы массивов для передачи информации о втором и первом уровнях иерархии
TCities = Array[1..20] of String[20];
TAccounts = Array[1..20, 1..6] of LongWord;
//Тип - указатель на элемент третьего уровня иерархии
PLevel3 = ^TLevel3;
//Запись - элемент третьего уровня иерархии
TLevel3 = Record
Account: LongWord; //Номер расчётного счёта
Next : PLevel3 //Указатель на следующий элемент в третьем уровне структуры
end;
//Тип - указатель на элемент второго уровня иерархии
PLevel2 = ^TLevel2;
//Запись - элемент второго уровня иерархии
TLevel2 = Record
City : String[20]; //Название города
Accounts: PLevel3; //Указатель на третий уровень иерархии (список номеров отделений банка в городе)
Next : PLevel2 //Указатель на следующий элемент во втором уровне структуры
end;
//Тип - указатель на элемент первого уровня иерархии
PLevel1 = ^TLevel1;
//Запись - элемент первого уровня иерархии
TLevel1 = Record
Number : Word; //Номер хоздоговора
StartDate: String[10]; //Дата заключения
Done : Boolean; //Признак завершения
Price : Word; //Цена работ по договору
Cities : PLevel2; //Указатель на второй уровень иерархии
Next : PLevel1 //Указатель на следующий элемент в первом уровне структуры
end;
//Класс 3-ёх уровневой иерархической структуры
THierarchList = class
private
Head: PLevel1; //Указатель на голову списка (первый уровень)
Current: PLevel1; //Текущий указатель в списке (первый уровень)
Count: Word; //Количество элементов в списке на первом уровне
procedureSwap(P1, P2: PLevel1); //Процедура менят местами два узла первого уровня иерархии (для сортировки)
public
property Counter: Word read Count;
//Добавление члена ВТК в иерархический список (параметры - это все нужные поля в структуре)
procedure Add(S: String; D: Boolean; N, P: Word;
var City: TCities; Cnt: Byte; var Accounts: TAccounts);
procedureShow(SG: TStringGrid); //Вывод структуры на форму
procedureSortingUp; //Сортировка по возрастанию
procedureSortingDown; //Сортировка по убыванию
function SearchByNumber(N: Word): TLevel1; //Поиск договора по номеру
functionGetByNumber(N: Word): PLevel1; //Получение договора по номеру в списке (для корректировки)
end;
implementation
//Добавление члена ВТК в иерархический список
procedure THierarchList.Add(S: String; D: Boolean; N, P: Word;
var City: TCities; Cnt: Byte; var Accounts: TAccounts);
var
NewNode: PLevel1;
CurC, NewL2: PLevel2;
CurN, NewL3: PLevel3;
I, J: Byte;
begin
New(NewNode); //Выделяем память под узел первого уровня
with NewNode^ do
begin
Next := NIL; //Заполняем поля первого уровня
StartDate := S;
Number := N;
Price := P;
Done := D;
Cities := NIL;
For I := 1 To Cnt do //Начинаем заполнять второй уровень
begin
New(NewL2); //Выделяем память под узел второго уровня
if (Cities = NIL) //Вставляем его во второй уровень
then Cities := NewL2
else CurC^.Next := NewL2;
NewL2^.City := City[I]; //Заполняем поле (город)
NewL2^.Next := NIL; //Указатель на следущий - NIL
NewL2^.Accounts := NIL; //Начинаем заполнять третий уровень
For J := 2 to Accounts[I, 1] do
begin
New(NewL3); //Выделяем память под узел третьего уровня
NewL3^.Account := Accounts[I, J]; //Заполняем поле (номер отделения банка)
NewL3^.Next := NIL; //Указатель на следущий - NIL
if (NewL2^.Accounts = NIL) //Вставляем его на третий уровень
then NewL2^.Accounts := NewL3
else CurN^.Next := NewL3;
CurN := NewL3
end;
CurC := NewL2
end
end;
if (Current = NIL) //Помещаем узел первого уровня в наш список
then Head := NewNode
else Current^.Next := NewNode;
Current := NewNode;
Inc(Count) //Увеличиваем количество элементов в списке
end;
//Возвращает указатель на исполнителя по номеру в списке
function THierarchList.GetByNumber(N: Word): PLevel1;
var
I: Word;
begin
Current := Head;
For I := 2 to N do
Current := Current^.Next;
Result := Current
end;
//Поиск по фамилии
function THierarchList.SearchByNumber(N: Word): TLevel1;
begin
Result.Number := 0;
Result.StartDate := '';
Result.Done := False;
Result.Price := 0;
//Начинаем двигаться по списку
Current := Head;
While (Current<>NIL) do
begin //Сравниваем текущую фамилию с заданной
if (Current^.Number = N) then
begin //Если совпадает, то запоминаем результат и выходим
Result := Current^;
Break
end;
Current := Current^.Next //Иначе двигаемся по списку дальше
end
end;
//Вывод структуры на форму в StringGrid
procedure THierarchList.Show(SG: TStringGrid);
var
I, J, L: Byte;
CurC: PLevel2;
CurN: PLevel3;
begin
For I := 1 to 30 do //Чистим StringGrid
For J := 0 to 10 do
SG.Cells[J,I] := '';
L := 1;
Current := Head;
For I := 1 to Count do //Проход по первому уровню
begin
SG.Cells[0, L] := IntToStr(Current^.Number); //Выводим поля узла первого уровня
SG.Cells[1, L] := Current^.StartDate;
if (Current^.Done)
then SG.Cells[2, L] := 'Завершён'
elseSG.Cells[2, L] := 'Не завершён';
SG.Cells[3,L] := IntToStr(Current^.Price);
CurC := Current^.Cities; //Начинаем просматривать второй уровень структуры
While (CurC<>NIL) do
begin
SG.Cells[4,L] := CurC^.City; //Выводим поле узла второго уровня (город)
CurN := CurC^.Accounts; //И начинаем просматривать третий уровень
While (CurN<>NIL) do
Begin//Выводим поле третьего уровня (счёт)
SG.Cells[5,L] := SG.Cells[5,L] + IntToStr(CurN^.Account) + ', ';
CurN := CurN^.Next //И движемся дальше по птрьему уровню
end;
Inc(L);
CurC := CurC^.Next //Здесь движемся дальше по второму уровню
end;
Current := Current^.Next //А здесь по первому...
end
end;
//Cортировка прямым выбором по убыванию
procedure THierarchList.SortingDown;
var
I, J: Word;
Max: PLevel1;
begin
Max := Head;
For I := 1 to Count-1 do
begin
Current := Max^.Next;
For J := 1 to Count - I do
begin //Сравниваем текущий элемент с первым неупорядоченным
if (Max^.Price < Current^.Price) then
Swap(Max, Current); //Меняем их местами если надо
Current := Current^.Next //И движемся дальше по списку
end;
Max := Max^.Next
end
end;
//Cортировка прямым выбором по возрастанию
procedureTHierarchList.SortingUp;
var
I, J: Word;
Min: PLevel1;
begin
Min := Head;
For I := 1 to Count-1 do
begin
Current := Min^.Next;
For J := 1 to Count - I do
begin //Сравниваем текущий элемент с первым неупорядоченным
if (Min^.Price > Current^.Price) then
Swap(Min, Current); //Меняем их местами если надо
Current := Current^.Next //И движемся дальше по списку
end;
Min := Min^.Next
end
end;
//Обмен местами в списке первого уровня
procedure THierarchList.Swap(P1, P2: PLevel1);
var
TempStartDate: String[10];
TempDone: Boolean;
TempNumber: Word;
TempPrice: Word;
TempCities: PLevel2;
begin
//Запомнили первый договор
TempStartDate := P1^.StartDate;
TempDone := P1^.Done;
TempNumber := P1^.Number;
TempPrice := P1^.Price;
TempCities := P1^.Cities;
//Записали в него второй
P1^.StartDate := P2^.StartDate;
P1^.Done := P2^.Done;
P1^.Number := P2^.Number;
P1^.Price := P2^.Price;
P1^.Cities := P2^.Cities;
//А во второй записали сохранённый первый
P2^.StartDate := TempStartDate;
P2^.Done := TempDone;
P2^.Number := TempNumber;
P2^.Price := TempPrice;
P2^.Cities := TempCities;
//В итоге договоры поменялись местами
end;
end.
МодульOrganizations.
unit Organizations;
interface
uses
Grids, //Модуль для работы с TStringGrid
SysUtils, //Модуль с функциями StrToInt и т.д.
Structures; //Модуль с классом 3-ёх уровневой иерархической структуры
type
//Запись - ХозДоговор
TXDogovor = Record
Number : Word; //Номер договора
StartDate : String[10]; //Дата заключения договора
FinishDate : String[10]; //Дата завершения договора
Theme : String[25]; //Тема договора,
Organization: String[25]; //Наименование организации - заказчика работ
Done : Boolean; //Признак завершения
Price : Word //Стоимость договора в тыс. рублей
end;
//Запись - Исполнитель ХД и член ВТК
TMemeberWTK = Record
Surname : String[20]; //Фамилия
Name : String[20]; //Имя
Patronymic: String[20]; //Отчество
BirthYear : String[10]; //Год рождения
CodeXD : String[10]; //Код ХД
IsDirector: Boolean; //Признак руководитель/рядовой член ВТК
Premium : Word; //Причитающаяся по договору сумма вознаграждения
Address : String[20]; //Домашний адрес
BankNumber: Word; //Номер отделения сбербанка
Account : LongWord //Расчетный счет исполнителя
end;
//Запись - Атрибуты отделения сбербанка
TBank = Record
Number : Word; //Номер отделения
City : String[20]; //Город, в котором находится отделение
Address : String[20]; //Адрес без указания города
Partition: String[20]; //Наименование отделения
Code : Word //3-хзначный банковский код отделения
end;
TNPO = class //Класс НПО - научно-производственная организация
private
XD: Array[1..50] ofTXDogovor; //Массив с договорами
WTK: Array[1..30] ofTMemeberWTK; //Массив и исполнителями
Bank: Array[1..20] ofTBank; //Массив с отделениями банков
XDCount: Integer; //Количество договоров
WTKCount: Integer; //Количество исполнителей
BankCount: Integer; //Количество отделений банка
XDTable: TStringGrid; //StringGrid для ХозДоговоров
WTKTable: TStringGrid; //StringGrid для исполнителей договоров
BankTable: TStringGrid; //StringGrid для отделений банков
functionGetCityByNumber(N: Word): String; //ПОлучение города по номеру отделения банка
public
Struct: THierarchList; //Иерархический список
propertyCountXD: IntegerreadXDCount; //Свойство: Количество договоров
propertyCountWTK: IntegerreadWTKCount; //Свойство: Количество исполнителей
propertyCountBank: IntegerreadBankCount; //Свойство: Количество отделений банка
constructorCreate(SG1, SG2, SG3: TStringGrid); //Конструктор
procedure LoadXD(FileName: String); //Открытие файла хоздоговоров
procedure LoadWTK(FileName: String); //Открытие файла исполнителей
procedure LoadBank(FileName: String); //Открытие файла отделений банка
procedure ShowXD; //Вывод списка хоздоговоров на форму
procedureShowWTK; //Вывод списка исполнителей на форму
procedureShowBank; //Вывод списка отделений банков на форму
procedureCreateList; //Формирование иерархического списка
end;
implementation
//Сохраняем StringGrid'ы для всех таблиц
constructor TNPO.Create(SG1, SG2, SG3: TStringGrid);
begin
XDTable := SG1;
WTKTable := SG2;
BankTable := SG3
end;
//Формирование иерархического списка (по условию задания)
procedure TNPO.CreateList;
var
I, J, K: Byte;
P: Boolean;
Cities: TCities; //Массив с городами для 2-ого уровня иерархии
Accounts: TAccounts; //Массив со счетами для 3-его уровня иерархии
CountC: Byte; //Количество городов
begin
Struct := THierarchList.Create; //Создаём структуру
ForI := 1 toXDCountdo //Просматриваем всех договоров
withXD[I] do
begin //Начинаем формировать для него иерархию
FillChar(Accounts, sizeof(Accounts), 0);
CountC := 0; //Сначала количество городов = 0
ForJ := 1 toWTKCountdo //Просматриваем всех исполнителей
if (Number = StrToInt(Copy(WTK[J].CodeXD, 1, 2))) then//И если совпал номер договора
begin
P := False; //То добавляем в структуру город и/или счёт
For K := 1 to CountC do
if (Cities[K] = GetCityByNumber(WTK[J].BankNumber)) then
begin
P := True;
Inc(Accounts[K, 1]);
Accounts[K, Accounts[K, 1]] := WTK[J].Account;
Break
end;
if Not(P) then
begin
Inc(CountC);
Cities[CountC] := GetCityByNumber(WTK[J].BankNumber);
Accounts[CountC, 1] := 2;
Accounts[CountC, 2] := WTK[J].Account
end
end;
Struct.Add(StartDate, Done, Number, Price, Cities, CountC, Accounts) //Добавляем получившуюся информацию в структуру
end
end;
//Возвращает название города по номеру отделения банка
function TNPO.GetCityByNumber(N: Word): String;
var
I: Byte;
begin
Result := '';
For I := 1 to BankCount do
if (Bank[I].Number = N) then
begin
Result := Bank[I].City;
Exit
end
end;
//Открытие файла отделений банка
procedure TNPO.LoadBank(FileName: String);
var
F: File of TBank;
begin
AssignFile(F, FileName);
Reset(F);
BankCount := 0;
While Not(EoF(F)) do
begin
Inc(BankCount);
Read(F, Bank[BankCount])
end;
CloseFile(F)
end;
//Открытие файла исполнителей
procedure TNPO.LoadWTK(FileName: String);
var
F: File of TMemeberWTK;
begin
AssignFile(F, FileName);
Reset(F);
WTKCount := 0;
While Not(EoF(F)) do
begin
Inc(WTKCount);
Read(F, WTK[WTKCount])
end;
CloseFile(F)
end;
//Открытие файла хоздоговоров
procedure TNPO.LoadXD(FileName: String);
var
F: File of TXDogovor;
begin
AssignFile(F, FileName);
Reset(F);
XDCount := 0;
While Not(EoF(F)) do
begin
Inc(XDCount);
Read(F, XD[XDCount])
end;
CloseFile(F)
end;
//Вывод списка отделений банков на форму
procedure TNPO.ShowBank;
var
I: Byte;
begin
For I := 1 to BankCount do
begin
With Bank[I] do
begin
BankTable.Cells[0,I] := IntToStr(Number);
BankTable.Cells[1,I] := City;
BankTable.Cells[2,I] := Address;
BankTable.Cells[3,I] := Partition;
BankTable.Cells[4,I] := IntToStr(Code)
end;
end;
end;
//Вывод списка исполнителей на форму
procedure TNPO.ShowWTK;
var
I: Byte;
begin
For I := 1 to WTKCount do
begin
With WTK[I] do
begin
WTKTable.Cells[0,I] := Surname;
WTKTable.Cells[1,I] := Name;
WTKTable.Cells[2,I] := Patronymic;
WTKTable.Cells[3,I] := BirthYear;
WTKTable.Cells[4,I] := CodeXD;
if (IsDirector)
then WTKTable.Cells[5,I] := 'Руководитель'
else WTKTable.Cells[5,I] := 'Рядовой член';
WTKTable.Cells[6,I] := IntToStr(Premium);
WTKTable.Cells[7,I] := Address;
WTKTable.Cells[8,I] := IntToStr(BankNumber);
WTKTable.Cells[9,I] := IntToStr(Account)
end
end
end;
//Вывод списка договоров на форму
procedure TNPO.ShowXD;
var
I: Byte;
begin
For I := 1 to XDCount do
begin
With XD[I] do
begin
XDTable.Cells[0,I] := IntToStr(Number);
XDTable.Cells[1,I] := StartDate;
XDTable.Cells[2,I] := FinishDate;
XDTable.Cells[3,I] := Theme;
XDTable.Cells[4,I] := Organization;
if (Done)
then XDTable.Cells[5,I] := 'Завершён'
else XDTable.Cells[5,I] := 'Не завершён';
XDTable.Cells[6,I] := IntToStr(Price)
end
end
end;
end.
Размещено на Allbest.ru
Подобные документы
Общая характеристика инфологической модели информационной системы. Знакомство с особенностями проектирования базы данных "Библиотека", анализ основных этапов. Рассмотрение способов составления запросов по выборке информации из таблиц базы данных.
контрольная работа [831,2 K], добавлен 08.12.2013Рассмотрение общей характеристики данных. Исследование особенностей и назначения линейных, табличных и иерархических структур данных, анализ процесса их упорядочения. Рассмотрение основных режимов обработки данных. Описание алгоритма решения задачи.
реферат [27,4 K], добавлен 20.04.2019Изучение и освоение инструментальных средств Excel для управления базами данных. Правила формирования списка на рабочем листе Excel. Простая и многоуровневая сортировка списка. Варианты фильтрации данных в таблице. Вычисляемый критерий и его создание.
лабораторная работа [297,2 K], добавлен 15.11.2010Общая характеристика швейной фабрики "Афродита", анализ учета системы материальных средств на складе. Общая характеристика организационной структуры предприятия. Рассмотрение способов формирования группировочной ведомости, знакомство с особенностями.
контрольная работа [3,0 M], добавлен 08.09.2013Структура записей входного массива. Описание основных типов данных. Алгоритм программы: присвоение начальных значений переменных, чтение списка из файла, вывод данных на экран, выполнение обработки данных, сохранение списка в файл. Листинг программы.
курсовая работа [325,2 K], добавлен 28.12.2012Характеристика сетевой модели данных и ее достоинства. Построение иерархической модель данных по принципу иерархического подчинения типов объектов, приведение ее к виду дерева введением избыточности. Реляционная модель, основанная на теории отношений.
реферат [227,1 K], добавлен 28.11.2011Рассмотрение основ работы в Microsoft Visual Studio 2010 с языком программирования С#. Реализация программы обработки данных авиапассажиров. Выбор метода ввода данных из текстового файла. Создание фильтра для обработки списка по определенным критериям.
курсовая работа [1,4 M], добавлен 17.01.2016Общая характеристика данных. Список как простейшая линейная структура данных. Табличные структуры данных (матрицы). Принцип действия метода дихотомии. Основные режимы обработки данных. Расчет отчислений в фонды по каждому сотруднику с помощью MS Excel.
курсовая работа [1,6 M], добавлен 21.10.2009Написание программы, исходя из конкретных данных. Создание двунаправленного линейного списка. Main - главная программа, содержащая меню. Занесение данных в память списка. Результирующий файл. Значения всех числовых данных из диапазона целого типа данных.
курсовая работа [2,3 M], добавлен 22.12.2010Электронные таблицы как средство формирования табличных баз данных. Структура и формирование списка при помощи формы. Сопоставление наиболее популярных систем управления базами данных. Автоматическое изменение цвета ячейки, основываясь на её значении.
курсовая работа [2,4 M], добавлен 10.01.2017