
- •Министерство образования и науки, молодежи и спорта Украины Черниговский государственный технологический университет Кафедра информационных и компьютерных систем
- •Техническое задание
- •Шаповал в.Ю. Гр. Ки-111
- •Сохранение данных в двоичном файле и их извлечение.
- •Упаковку данных в архив и извлечение их из архива.
- •Получение справки об использовании системы.
- •Содержание
- •1Постановка задачи
- •Пассажир: ф.И.О., номер паспорта.
- •2Анализ решаемой задачи
- •3Исследование существующих методов организации структур данных
- •4Определение путей и методов решения задачи
- •5Реализована архивация файла, который содержит мультисписокПроектирование программы
- •5.1Разработка структуры данных
- •5.1.1Логическая структура
- •5.1.2Физическое представление структуры данных
- •5.2Разработка типов данных
- •5.3Использование указателей на функции для создания инвариантных подпрограмм
- •5.4Разработка интерфейсов пользователя
- •5.5Алгоритм функционирования системы
- •5.5.1Алгоритм функции добавления элемента в список
- •5.5.2Алгоритм поиска элемента в отсортированном списке
- •5.5.3Алгоритм удаления элемента из списка
- •5.6Состав программы
- •5.6.1Основные функции программы
- •6Использование внешних приложений
- •Список использованных источников
4Определение путей и методов решения задачи
Для организации динамических структур данных можно использовать оперативную память компьютера или дисковую память (работа в файлах – типизированных или бестиповых). Каждый вид представления динамических структур данных имеет свои преимущества и недостатки. К примеру, организация мультисписка в «куче» боле проста и понятна, а организация мультисписка в файлах – более трудоемка. Так как роль динамических структур данных очень велика, то актуальны оба способа представления структур данных, но исходя из задания к курсовому проекту, разрабатываемая программа будет работать в «куче».
Для решения поставленной задачи, реализация мультисписка в «куче», необходимо разработать мультисписковую структуру данных на базе динамических массивов нетипизированых указателей. Для этого необходимо написать функции добавления элементов в список, удаление, поиск, сохранение мультисписка в файл и восстановления его из файла. Для реализации функций необходимо предусмотреть связь уровней списка.
При организации такой структуры данных и решении задачи будут предприняты следующие шаги:
- реализованы функции добавления элементов на все уровни списка и удаления элементов из всех уровней списка;
- реализовано сохранение всего файла в мультисписок и восстановление его из файла.
5Реализована архивация файла, который содержит мультисписокПроектирование программы
5.1Разработка структуры данных
5.1.1Логическая структура
Логическое представление структуры данных отражает внешний (пользовательский) взгляд на обрабатываемые данные.
Структура аэропорта представляет собой мультисписок иерархического типа на базе динамических массивов нетипизированных указателей (рисунок 5.1). Этот мультисписок включает в себя три уровня. Первым уровням является список рейсов, который ссылается на первый элемент подуровня – список дат. В свою очередь список дат ссылается на первый элемент списка пассажиров.
Рисунок 5.1 – Логическая структура мультисписка
5.1.2Физическое представление структуры данных
Физическая структура данных представлена на рисунке 5.2. Структура данных представляет собой мультисписок иерархического типа. Каждый уровень мультисписка содержит динамический массив нетипизированых указателей. Первые два элемента массива – это служебные поля. Первый элемент – размер массива, второй – количество элементов в мультисписке. Каждый следующий элемент массива – это указатель на некоторую структуру данных, которая содержит информацию о элементе мультисписка, а так же указатель на динамический массив нетипизированных указателей подуровня. Элементы последнего уровня мультисписка указателей на подуровни не содержат.
Рисунок 5.2 – Физическая структура мультисписка
5.2Разработка типов данных
Базовым элементом для реализации физической модели в среде программирования Qt Creator в данном проекте была выбрана структура. Причина этого – возможность объединять в себе разнотипные данные, необходимые для формирования элемента списка. Каждая структура включает в себя информационные поля и указатель на массив указателей элементов подуровня данного элемента (в том случае, когда это не элемент самого нижнего уровня).
Объявлены глобальные переменные с целью сокращения кода, а также объявленные некоторые константы.
#define SIZE_AR_FIRST 5 // первоначальный размер массива
#define DELTA 3 // количество элементов, на которое увеличивается массив
#define POS_CNT -1 // индекс в массиве для служебного элемента cnt
#define POS_SZ -2 // индекс в массиве для служебного элемента size
/* Типы для мультисписка*/
typedef
struct{
char number[5];
char city[20];
void** sub_level;
}TReys; //тип для рейсов
typedef
struct{
char time_out[20];
char time_in[20];
void** sub_level;
}TTime; //тип для даты/времени
typedef
struct{
char fio[30];
char pasport_num[20];
}TPas; //тип для пассажирова
//******************************************************
//типы для файла
typedef //рейсы
struct FListR
{
char number[5];
char city[20];
int CountR;
}TFListR;
typedef //даты
struct FListT
{
char time_out[20];
char time_in[20];
int CountTm;
}TFListTm;
typedef //пассажиры
struct FListP
{
char fio[30];
char pasport_num[20];
int CountP;
}TFListP;
typedef FILE* TFile;
//******************************************************