close

Вход

Забыли?

вход по аккаунту

?

2 реферат

код для вставкиСкачать
 РЕФЕРАТ
Курсовой проект, 50 с.,12 рисунков, 4 источника, 2 приложения.
В работе описан процесс и результаты проектирования и разработки (реализации) информационно-справочной системы " Аэропорт ".
Результат проектирования представлен в виде пояснительной записки к курсовому проекту.
Результат разработки представлен в виде совокупности программных документов, приводимых в приложении к курсовому проекту.
Информационно-справочная система " Аропорт " выполняет следующие основные функции:
* ввод, изменение и удаление данных объектов;
* все изменения сохраняются, и обеспечивается восстановления данных из файла;
Данная информационно-справочная система разработана на основе мультисписка с использованием C++ Builder6.
Работа информационно-справочной системы возможна в операционной системе WINDOWS на компьютерах, совместимых с IBM PC.
Дальнейшее развитие работы возможно в сторону разработки сетевой базы данных, с которой могли бы работать несколько компьютеров, находящихся в разных частях Фирмы. Работа имеет практическую ценность. Расчет экономической эффективности не производился.
ПРОГРАММИРОВАНИЕ, C++BUILDER6, СПИСОК, ФАЙЛ, ОКНО, ВВОД
РЕФЕРАТ
Курсовий проект, 50 с., 12 малюнків, 4 джерела, 2 додатка.
У роботі описані процес і результати проектування і розробки (реалізації) інформаційно-довідкової системи "Аеропорт".
Результат проектування представлений у вигляді пояснювальної записки до курсового проекту.
Результат розробки представлений у вигляді сукупності програмних документів, що наводяться в додатку до курсового проекту.
Інформаційно-довідкова система " Аеропорт " виконує наступні основні функції:
* уведення, заміна і видалення даних про кожен обєкт;
* всі зміни зберігаються , та забезпечується відновлення даних із файла;
Дана інформаційно-довідкова система разроблена на основе мультисписка з використанням С++Builder6.
Робота інформаційно-довідкової системи можлива в операційній системі WІNDOWS на комп'ютерах, сумісних з ІBM PC.
Подальший розвиток роботи можливий у бік розробки мережної бази даних, з якою могли б працювати кілька комп'ютерів, що знаходяться в різних частинах фірми.
Робота має практичну цінність. Розрахунок економічної ефективності не виконувався.
ПРОГРАМУВАННЯ, С++BUILDER6, СПИСОК, ФАЙЛ, ВІКНО, ВВЕДЕННЯ
ABSTRACT
Course project, 50 p.,12 pictures, 4 sourses, 2 applications.
In this work described the process and results of designing and development (realization) information-reference system " Airport ".
The result of designing presented in the manner of explanatory note to course project.
The result of development presented in the manner of collections program documents, brought in exhibit to course project.
Information-reference system " Airport " executes the following main functions:
* entering, changing and removing data about any object;
* the saving multilist in file and open it from file.
This help-desk system was worked up at the base of multilist using the instrumental mean C++Builder6.
The work with information-reference system is possible in operating system WINDOWS on computers, compatible with IBM PC.
The further development of this work possible aside development network database, with which possible to work several computers, situated in different parts of the firm.
Work has practical value. Calculation of economical efficiency was not produce.
PROGRAMMING, C++BUILDER6, LIST, FILE, WINDOW, INPUT
СОДЕРЖАНИЕ
ВВЕДЕНИЕ3
1ПОСТАНОВКА ЗАДАЧИ3
2АНАЛИЗ РЕШАЕМОЙ ЗАДАЧИ3
3МЕТОДЫ ОРГАНИЗАЦИИ ДИНАМИЧЕСКИХ СТРУКТУР ДАННЫХ3
4ОПРЕДЕЛЕНИЕ ПУТЕЙ И МЕТОДОВ РЕШЕНИЯ ЗАДАЧИ3
5ПРОЕКТИРОВАНИЕ ПРОГРАММЫ3
5.1Разработка структуры данных3
5.2Разработка типов данных3
5.2.1 Передача указателей на функции, как параметры функций3
5.2.2 Использование шаблонов класса3
5.2.3 Использование функционального класса3
5.3Описание классов элементов списка3
5.4Разработка интерфейса пользователя3
5.5Алгоритм функционирования системы3
5.5.1Алгоритм поиска элемента3
5.5.2Алгоритм добавления элемента3
5.5.3Алгоритм удаления элемента3
5.5.4Замена элемента массива3
5.5.5Блок-схема программы3
5.6Состав модулей и процедур программы3
5.6.1Модули и библиотеки3
5.6.2Основные процедуры и функции3
ЗАКЛЮЧЕНИЕ3
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ3
ПРИЛОЖЕНИЯ
ПРИЛОЖЕНИЕ А - Текст программы
ПРИЛОЖЕНИЕ Б - Руководство оператора
ВВЕДЕНИЕ
Задание на данную курсовую работу требует разработать программу динамического просмотра и редактирования данных о аэропорте. Значение структуры сохраняется на жестком диске. Предполагается следующая структура: на верхнем уровне список аэропортов, каждый аэропорт имеет список рейсов, а рейс список пассажиров. В программе необходимо реализовать мультисписковую структуру на базе массива не типизированных указателей аэропортов с целью ее редактирования. Также необходимо обеспечить сохранение данных на жестком диске и восстановление в кучу при соответствующем запросе пользователя.
На сегодняшний день на первое место вышла способность компьютера хранить, обеспечивать быстрый доступ и обработку больших объемов данных.
Решение задач обработки данных достигается применением определенных средств организации данных в памяти компьютера, а также создания специальных средств доступа к этим данным.
Массив - является одним из способов хранения информации, который обеспечивает быстрый поиск нужного элемента. Поскольку вся работа состоит в том, что бы найти позицию интересующего нас элемента, то массив гораздо быстрее выполняет этот поиск, т.к. нам не нужно просматривать список от начала до конца, а достаточно использовать метод половинного деления.
Спроектированная система представляет собой базу данных аэропортов. Она обеспечивает ввод, удаление и редактирование данных о каждом элементе аэропорта. Возможны два варианта отображения информации: в виде иерархической структуры уровня (компонент. TreeView) и в виде списка подуровней уровня с полями (компонент ListView). Имеется возможность сохранения данных и восстановления данных с жесткого диска.
При реализации мультисписковой структуры на базе массивов не типизированных указателей использовались предложенные методы. Разработка интерфейса была произведена самостоятельно. Ввод полей элемента при его создании реализовано через поля ввода главного окна.
Программа разработана в среде программирования C++Builder6.
1 ПОСТАНОВКА ЗАДАЧИ
Пассажир имеет следующие сведения о работе аэропорта: номер рейса, дата отправления, время отправления, время прибытия, список пассажиров на каждый рейс. Разработать файловую структуру, поддерживающую в лексикографическом порядке сведения о роботе вокзала.
1. Организовать ввод, замену и удаление сведений о аэропортах, рейсах и пассажирах.
2. По дате отправления определить доступные пункты назначения - конечные и промежуточные, а по пункту назначения возможные даты отправления, номера рейсов и время отправления в этот пункт.
3. Организовать поиск пассажиров по значению одного или нескольких следующих параметров:
* пункт назначения;
* дата и время отправления;
* номер рейса.
4. По указанному пассажиру определить информацию о его отправлении.
5. Разработать программу распечатки всех возможных сведений в пределах:
* дата отправления;
* номер рейса и время отправления.
Взаимодействие со списковой структурой организовать с помощью системы меню и структурированных форм ввода запроса.
Данные, которые вводились в процессе работы с проектом, должны быть сохранены в файл и при необходимости восстановлены из него.
2 АНАЛИЗ РЕШАЕМОЙ ЗАДАЧИ
Данный проект является решением конкретно поставленной задачи и не может быть использован при организации иной информационной структуры.
Реализация программы происходит в динамической памяти, поэтому до начала разработки требуется определить, какими методами будет осуществлена связь между данными, которые вводит пользователь и самой динамической памятью.
Поскольку адресация данных в куче происходит при помощи не типизированных указателей, то саму структуру данных можно организовать на базе массивов не типизированных указателей.
C++ был развит из языка программирования C и за очень немногими исключениями сохраняет C как подмножество. Ключевым понятием С++ является класс. Класс - это определяемый пользователем тип. Классы обеспечивают упрятывание данных, их инициализацию, неявное преобразование пользовательских типов, динамическое задание типов, контролируемое пользователем управление памятью и средства для перегрузки операций. Кроме того, С++ содержит усовершенствования, прямо с классами не связанные: символические константы, функции-подстановки, стандартные значения параметров функций, перегрузка имен функций, операции управления свободной памятью и ссылочный тип. В С++ сохранены все возможности С эффективной работы с основными объектами, отражающими аппаратную "реальность" (разряды, байты, слова, адреса и т.д.). Это позволяет достаточно эффективно реализовывать пользовательские типы.
В ходе написание программ, программист может выделять определённые объекты и их свойства. Поэтому, в С++ удобно объединять эти объекты и свойства в классы, что значительно упрощает работу с текстом программы(особенно при написании больших программ). Таким образом, создав класс, его можно переносить и внедрять в другие программы. Программисту, который позже может внедрить такой класс в свою программу, не надо будет изучать текст программы этого класса, ему достаточно лишь просмотреть названия методов для данного класса.
Для создания универсальных классов (т.е. которые б могли работать с разными типами), возможно использование техники передачи адреса процедуры в качестве параметра, использование шаблонов, а также использование функционального класса.
3 МЕТОДЫ ОРГАНИЗАЦИИ ДИНАМИЧЕСКИХ СТРУКТУР ДАННЫХ
Обработка элементов данных в данном курсовом проекте осуществляется в оперативной памяти. Но при этом мы должны организовать определенную динамическую структуру данных, которая позволит нам без особых усилий осуществлять требуемые манипуляции с теми данными, которые вводит пользователь. Данная работа основана на использовании массивов не типизированных указателей. Основное преимущество массива - простота доступа к отдельному элементу данных и простота реализации массива. Поэтому массивы являются наиболее распространенным типом данных, особенно в вычислительных задачах. Используя метод половинного деления для поиска позиции нужного элемента, мы затрачиваем времени намного меньше, чем при поиске в однонаправленном списке. Для поиска элемента в списке нам в худшем случае требуется просмотреть весь список, а в данном случае число сравнений значительно уменьшается.
Для реализации мультисписковой структуры на базе массивов не типизированных указателей потребуется:
* создания класса динамического массива, который содержит методы по редактирования элементов списка. Класс динамического массива сам определяет: когда ему необходимо увеличить свой размер, а когда уменьшить;
* каждый указатель будет указывать на запись, в которой, помимо информационных полей будет содержатся одно поле, в которое будет помещен указатель на массив указателей на список следующего подуровня;
Также требуется произвести сохранение данных на жестком диске при завершении работы пользователя с программой. Для этого предлагается сохранять данные в бестиповом файле. Использование бестипового файла позволит нам сохранять информацию о трех списках в одном файле, что повышает компактность программы. А правильная организация записи данных в файл позволит нам без особых усилий выводить содержимое в интерфейсные компоненты программы, и пользователь сможет продолжать работу с восстановленными данными.
4 ОПРЕДЕЛЕНИЕ ПУТЕЙ И МЕТОДОВ РЕШЕНИЯ ЗАДАЧИ
Организовать список в памяти можно несколькими способами. Среди них:
1) реализация линейного списка;
2) реализация списка на основе массива указателей.
В данной курсовой работе, мультисписок был сформирован на основе списков, которые реализован по второму методу, так как этого требует задание на курсовой проект. Реализация данного массива указателей легла в основу создания класса динамического массива, который содержит методы по редактирования элементов списка. Класс динамического массива сам определяет: когда ему необходимо увеличить свой размер, а когда уменьшить.
В данном курсовом проекте были решены задачи реализации класса динамического массива на основе бестиповых указателей и передачей адреса функции в качестве параметра.
С помощью использованием методов С++ - шаблонов, можно добиться полного отделения привязанности к типам при создании класса динамического массива. А использование функциональных классов, позволяет не уделять внимание при разработке программы названиям функций класса.
Используя динамический массив указателей, мы можем производить всяческие требуемые в задание операции с мультисписком:
* добавлять элемент;
* удалять элемент;
* изменять информационные поля;
При этом при добавлении элемента в любой список, мы вначале расширим массив указателей, предварительно найдя место для вставки, поместив указатель на выделенное место. Запросим память для размещения записи в динамической памяти. Поместим запись в выделенное место. И наш указатель будет ссылаться на эту запись. Для удаления элемента нам потребуется найти нужный элемент, освободить память, удалить указатель, уменьшить массив.
При замене элемента мы находим элемент, удаляем указатель на него, но не удаляем запись из памяти, а потом новый указатель помещаем в отсортированный массив указателей по полю "имя".
Во всех случаях нам требуется находить либо место для вставки, либо сам элемент. Для этого мы и используем массив, что б ускорить поиск в массиве бестиповых указателей.
5 ПРОЕКТИРОВАНИЕ ПРОГРАММЫ
Идеология построения мультисписка в данном курсовом проекте основывается на концепции классов. Использование такой идеологии структурирует созданную программу. Было разработано ряд процедур для работы с мультисписком на базе массивов бестиповых указателей. При помощи этих процедур осуществляется добавление, удаление и замена элементов списка. Элементы верхней иерархии должны быть связаны с соответствующими элементами нижнего уровня
Формирование интерфейса происходило в процессе разработки проекта. В процессе работы было разработано ряд вспомогательных процедур и функций, при помощи которых существенным образом облегчалась дальнейшая разработка проекта. Все они были вынесены в отдельный модуль, который подключался к тем модулям, где они использовались. В итоге производилась корректировка всего проекта в целом.
Также в проекте реализованы процедуры сохранения данных из оперативной памяти на жесткий диск. Пользователь может долгое время провести за работой с проектом, при этом создать достаточно большую базу данных. Но эта база существует лишь в оперативной памяти, и при выключении питания все данные будут утеряны. Для сохранения всей введенной информации было предложено ряд процедур, которые и обеспечивают полную сохранность данных и восстановления их из файла при соответствующем запросе.
5.1 Разработка структуры данных
На рисунке 5.1 показана реализация мультисписка на основе массивов указателей.
Рисунок 5.1 - Структура данных
Из рисунка видно, что восстаёт вопрос о выборе классов и реализации их методов. Поэтому в данном курсовом проекте были реализованы следующие классы:
1. TCBase - базовый класс, содержащий одинаковые для всех элементов списка поля и указатель на массив указателей; 2. TCArrayPtr- класс динамического массива;
3. TAirport: public TCBase - класс элемента аэропорт;
4. TReise: public TCBase - класс элемента рейс;
5. TPass: public TCBase - класс элемента пассажир;
Рисунок 5.2 - Схема реализации мультисписка
На рисунке 5.2 приведена схема построения мультисписка, которая была реализована в данном курсовом проекте.
Каждый массив указателей должен в себе содержать два поля, один из них указывает на количество элементов в массиве, а другой указывает размер массива. При сохранении структуры аэропортов в файл получим следующее отображение кучи в файле см. рисунок 5.3.
Рисунок 5.3 - Структура файла
Таким образом задача поставлена, теперь уже можно приступить к написанию и самой программы.
5.2 Разработка типов данных
Так как в данном курсовом проекте классом динамического массива используется в трёх уровнях структуры информационно-справочной системы, то необходимо создать такой класс динамического массива, который бы могли использовать элементы этих уровней. Этим классом будет являться базовый класс.
В данном представлении, класс TCBase имеет следующий вид:
class TCBase
{
public:
TCArrayPtr* ArrayElem;
~TCBase(){ if (ArrayElem != NULL) delete ArrayElem;}; // деструктор
virtual AnsiString GetKey() = 0;
// переопределение операторов сравнения
// для добавления и поиска bool operator > (TCBase *Elem) { return GetKey() > Elem->GetKey(); };
bool operator < (TCBase *Elem) { return GetKey() < Elem->GetKey(); };
bool operator > (AnsiString Key) { return GetKey() > Key; };
bool operator < (AnsiString Key) { return GetKey() < Key; };
};
Класс динамического массива указателей:
class TCArrayPtr {
private:
int SizeArr; // размер массива
int CountElem; // количество элементов в массиве
int DeltaArr; // приращение массива
TCBase **ArrPtr; // указатель на массив указателей
void ExpendArray(); // увеличение размера массива указателей
int FindSortElem(TCBase* Elem); // поиск элемента
int FindSortElem(AnsiString key);
public:
TCArrayPtr(); // конструктор (инициализирует массив)
~TCArrayPtr(); // деструктор (удаляет массив)
int GetCountElem(){return CountElem;}; // возвращает колич. элем. в массиве
void AddElem(TCBase *Elem); // добавление элемента
void DelElem(AnsiString key); // удаление элемента
TCBase* ChangeElem(AnsiString key); // удаление элемента
TCBase* operator [] (int i) // перегрузка оператора индексации
{return (ArrPtr[i]);};
TCBase* operator [] (AnsiString key) // перегрузка оператора индексации
{ return ArrPtr[FindSortElem(key)]; };
};
5.2.1 Передача указателей на функции, как параметры функций
Данный метод реализации класса массива указателей основан на использовании бестиповых указателей на элементы списка. Осуществление редактирования элементов списка обычно происходит с помощью функций, указатели на которые передаются в качестве параметра в функцию.
В данном представлении, класс ArrList имеет следующий вид:
class TArrayPtr
{
// описание скрытых элементов
private:
int SizeArr; //размер массива
int CountElem; // количество элементов в массиве
int Delta; // приращение массива
void **ArrPtr; // указатель на массив указателей
void ExpendArray(); // увеличение размера массива указателей
//описание доступных элементов
public:
TArrayPtr(); // конструктор - инициализирует массив ~TArrayPtr(); // деструктор - удаляет массив
void AddElem (void* Elem, int PosElem); // добавление элемента
int FindSortElem(TFuncPtr* FuncPtr, AnsiString Key); //поиск элемента
void DelElem (int PosDelElem); // удаление элемента
void* ChangeElem (int PosDelElem); // изменение элемента
// перегрузка оператора индексации
void* operator [] (int i) { return (ArrPtr[i]); };
};
Основной интерес при рассмотрения данного класса составляет функция int FindSortElem (TFunctPtr *FunctPtr, AnsiString Key). Данная функция содержит одним из передаваемым параметром FunctPtr. Тип TFunctPtr описан как typedef int TFunctPtr(void *, AnsiString key). Т.е. FuncPtr является адресом функции, которая принимает параметры (void*, AnsiString). Рассмотренная функция является примером того, как следует передавать адрес функции в качестве параметра.
При использовании данного метода реализации класса динамического массива, удобно было бы предварительно создать массив указателей на функции, которые бы использовались в программе для передачи их адреса в качестве параметра. Это позволяет отвязаться от имён функций, что значительно упрощает работу с данным методом.
Недостаток данного метода состоит в том, что для того, чтобы добраться к полю класса необходимо произвести растипизацию элемента.
5.2.2 Использование шаблонов класса
Использование шаблонов-классов позволяет определять семейство классов. Это семейство характеризуется общим алгоритмом, который может применяться к данным различных типов. При этом задание конкретного типа данных для очередного варианта шаблонов-классов обеспечивается специальной синтаксической конструкцией, называемой списком параметров шаблона функции.
Имя параметра шаблона в определяемом классе используется в качестве имени типа. С его помощью специализируются формальные параметры, определяется тип возвращаемого значения, определяется тип объектов: членов-класса, функций-класса и их параметров. Имя параметра шаблона скрывает объекты с аналогичным именем в глобальной по отношению к определению шаблонной функции области видимости.
При использовании данного метода, класс ArrList имеет следующий вид:
template <class List>
class TArrayPtr
{
private:
int SizeArr; // размер массива
int CountElem;// количество элементов массива
int Delta;
List **ArrPtr; // указатель на маисв
void ExpendArray();
public:
TArrayPtr();
~TArrayPtr();
int GetSizeArr(){return SizeArr};// получить размер массива
int GetCountElem(){return CountElem};// получить кол. элем. списка
List** GetArrayPtr(){return ArrPtr}; // получить значение головы
void AddElem(List *elem, int PosElem); // добавление элемента int FindSortElem(AnsiString key);
void DelElem(int PosDelElem);
List *ChangeElem(int PosDelElem);
// перегрузка оператора индексации
List *operator [](int i){return(ArrPtr[i]);};
};
Префикс template <class List> указывает, что описывается шаблон типа с параметром List, обозначающим тип, и что это обозначение будет использоваться в последующем описании. После того, как идентификатор List указан в префиксе, его можно использовать как любое другое имя типа. Область видимости List продолжается до конца описания, начавшегося префиксом template<class List >.
Теперь, для создания экземпляра класса TArrayPtr целых чисел, необходимо объявить TArrayPtr <int> Temp, после чего пользоваться переменной Temp как массивом указателей на тип int.
Преимуществом данного метода является то, что при написании шаблона класса, не конкретизируется тип элемента, для которого осуществляется создания элемента. После написания данного класса, его можно использовать для всех типов.
5.2.3 Использование функционального класса
Функциональным классом называется такой класс, который содержит только функции-класса вида <тип> operator()(<список параметров>). В курсовом проекте был реализован следующий функциональный класс:
template <class List>
class TCFunc
{
public:
int operator()(void* Ptr, AnsiString key)
{
if (*((List *)Ptr) > key) return 1;
else
if (*((List *)Ptr) < key) return -1;
else return 0;
};
void operator()(TTreeView *TV, AnsiString key)
{
TV->Items->AddChild(TV->Selected, key);
TV->AlphaSort(true);
TV->Selected->Expand(true);
TV->OnChange(TV, TV->Selected);
};
};
Использование функционального класса удобно тем, что нет необходимости запоминать названия функции класса. Для вызова определённой функции, необходимо обратиться к экземпляру данного класса и в круглых скобках передать параметры. По переданным параметрам определяется функция, которую необходимо вызвать.
5.3 Описание классов элементов списка
Как было указано в пункте 5.1, для каждого уровня мультисписка реализовано классы работы с этими уровнями. Реализация классов этих уровней практически одинакова. Различием являются лишь информационные поля.
class TAirport: public TCBase
{
private:
AnsiString name; // название аэропорта
AnsiString country; // государство
public:
TAirport(){ ArrayElem= new TCArrayPtr;}; //конструктор
void SetKey(AnsiString Str) {name = Str;};
AnsiString GetKey() {return name;};
void SetCountry(AnsiString k) { country = k;};
AnsiString GetCountry() {return country;};
};
Элементы уровней аэропортов и рейсов содержат указатели на экземпляры классов TCArrayPtr для связи с нижними уровнями. Так для аэропортов - это рейсы, а для рейсов - пассажиры.
5.4 Разработка интерфейса пользователя
Разработка интерфейса производилась с расчетом максимально упростить диалог пользователя с программой. Главное окно программы содержит:
* главное меню;
* компоненты TreeView, которые отображают иерархическую структуру мультисписка при открытии файла и работе со списком;
* компонент ListView, который отображает подуровни каждого из элементов списка;
* кнопки быстрого открытия и создания нового файла;
* добавления элементов на каждый уровень предусмотрена с помощью PopUpMenu;
* Удаления элементов производится через вызов команды в компоненте TreeView;
Для восстановления данных используется диалоговое окно OpenDialog. Также используется диалоговое окно SaveDialog для сохранения данных жестком диске.
5.5 Алгоритм функционирования системы
Данная курсовая работа реализована с использованием динамической памяти на базе массивов бестиповых указателей. При этом нам потребуется главный указатель на массив указателей на список аєропортов. Каждая запись аєропорта в сою очередь должна, помимо информационных полей, в себе содержать указатель на массив указателей на список рейсов. Каждая запись рейсов в сою очередь должна, помимо информационных полей, в себе содержать указатель на массив указателей на список своих. 5.5.1 Алгоритм поиска элемента Так как данный курсовой проект создан в четырёх вариантах, то рассмотрим каждый из четырёх вариантов:
1) Поиск с применением передачи адреса функций в качестве параметра.
int TArrayPtr::FindSortElem(TFuncPtr* FuncPtr, AnsiString Key)
Функция в качестве параметров получает элемент и адрес функции.
Поиск производится методом половинного деления. Если список оказывается пустым, то возвращается значение 0. Иначе вводится три вспомогательные переменные:
1. верхняя граница;
2. нижняя граница;
3. середина.
Середине присваивается значение полусуммы верхней и нижней границ. После чего вызывают процедуру FuncPtr, которая сравнивает новый элемент с элементом, который находится на средине. Если он меньше, то верхней границе присваивается значение средины минус 1, если же больше, то нижней границе присваивается значение средины плюс 1. Если равны, то выходим, возвращая номер позиции. Данный алгоритм продолжается до тех пор, пока нижняя граница не станет быть больше верхней.
Выделяемой особенностью является вызов процедуры: FuncPtr(ArrPtr[Middl], Key), где ArrPtr[Middl] -указатель на текущий элемент.
2) Поиск с применением шаблона класса.
int TArrayPtr<List>::FindSortElem(AnsiString key)
Данная функция в качестве параметра получает новый элемент. Поиск производится аналогично предыдущему методу, однако отличие состоит в сравнении элементов:
if (*(ArrPtr[Middl])> key) Hi= Middl-1; else
if (*(ArrPtr[Middl])< key) Low= Middl+1;
else return (Middl);
Сравнение в данной функции производится с помощью использования перегрузок, которые определенны в классах элементов.
3) Поиск с применением функционального класса.
int TArrayPtr<List>::FindSortElem(TCFunc<List> FuncPtr, AnsiString key)
template <class Type> int DynArr<Type>::FindPlace(void* Elem, HClass<Type> *pHC, int key)
Функция принимает в качестве параметров элемент, указатель на функциональный класс.
Отличие от предыдущих методов является методика использования функционального класса для сравнения элементов:
CmpElem = FuncPtr(ArrPtr[Middl], key);.
В функциональном классе определена функция:
int operator()(void* Ptr, AnsiString key) {...........}, которая производит сравнения элементов.
4) Поиск с применением наследования.
int TCArrayPtr::FindSortElem(AnsiString key)
{// Поиск элемента списка методом половинного деления массива индексов
// Процедура имеет двойное назначение - поиск месторасположения
// искомого элемента и поиск вставки добавляемого элемента
int Low= 0; // текущие границы массива - верхняя
int Hi= CountElem-1; // и нижняя
while (Low <= Hi)
{
// средняя граница обрабатываемой части массива
int Middl= (Hi + Low)/2;
if (*(ArrPtr[Middl])> key) Hi= Middl-1; else
if (*(ArrPtr[Middl])< key) Low= Middl+1;
else return (Middl);
}
return (Low); // Перебран вест массив.Определена позиция
// возможной вставки нового элемента
}
5.5.2 Алгоритм добавления элемента
Добавление элемента в отсортированный массив выполняется путём сдвига указателей.
Ведётся поиск места для элемента, после происходит сдвиг элементов от текущей позиции на один и последующая вставка пришедшего элемента. 5.5.3 Алгоритм удаления элемента
Для удаления элемента нам потребуется найти нужный элемент, освободить память, удалить указатель, уменьшить массив.
5.5.4 Замена элемента массива
При замене элемента мы находим элемент, удаляем указатель на него, но не удаляем запись из памяти, а потом новый указатель помещаем в отсортированный массив указателей по полю "имя".
5.5.5 Блок-схема программы
Алгоритм выполнения всех действий программы можно описать с помощью блок-схемы см. рисунок 5.5.
Рисунок 5.4 - Блок-схема программы
5.6 Состав модулей и процедур программы
Здесь представлены только стандартные основные процедуры для поддержания работы класса с мультисписком. Помимо, в программе имеется множество не мене значимых процедур и функций без которых не возможна робота программы.
5.6.1 Модули и библиотеки
При проектировании и разработке программы были использованы такие стандартные модули и библиотеки: #include <string.h>
#include <vcl.h>
#include <StdCtrls.hpp>
#include <ComCtrls.hpp>.
Также были использованы модули, созданные разработчиком. 5.6.2 Основные процедуры и функции
//--- Конструктор ---//
TCArrayPtr::TCArrayPtr()
//--- Деструктор ---//
TCArrayPtr::~TCArrayPtr())
//--- Расширение массива ---//
void TCArrayPtr::ExpendArray()
//--- Добавление элемента ---//
void TCArrayPtr::AddElem(TCBase *Elem)
//--- Удаление элемента ---//
void TCArrayPtr::DelElem(AnsiString key)
//--- Поиск элемента или места для вставки ---//
int TCArrayPtr::FindSortElem(AnsiString key)
ЗАКЛЮЧЕНИЕ
В результате был разработан проект, который соответствует заданию, получено рабочее приложение под Windows, не требующее особых затрат ресурсов. Реализована мультисписковая структура на базе массивов бестиповых указателей.
Получены практические навыки по обработке мультисписков на базе массивов бестиповых указателей, по работе с классами на языке С++, а именно созданием шаблонов классов, функциональных классов, а также передачей адреса функции в функцию в качестве параметра, и использование механизма наследования.
При наличии большего лимита времени, возможно, проект мог быть усовершенствован, в первую очередь в плане интерфейса, а также повышения надёжности работы программы.
В случае усовершенствования проект может быть использован как рабочее приложение в коммерческих структурах. На данном этапе разработка является учебным примером.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. Г.Шилдт "Справочник по С++"
2. С.Липпман "Программирование на С++"
3. Павловский В. И. Динамические структуры данных. Концепции, построение, использование. - Чернигов: ЧГТУ, 2004. - 345 с.
5
3
Документ
Категория
Рефераты
Просмотров
117
Размер файла
202 Кб
Теги
рефераты
1/--страниц
Пожаловаться на содержимое документа