Трёхуровневый иерархический список

Данные как непременный атрибут любой программы. Знакомство с особенностями трёхуровневого иерархического списка. Общая характеристика основных компонентов формы 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

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