Реализация комбинированной структуры данных на основе статического списка упорядоченных двунаправленных динамических списков

Автор работы: Пользователь скрыл имя, 25 Марта 2015 в 16:02, курсовая работа

Описание работы

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

Содержание работы

Введение. 3
1. Постановка задачи 4
2. Теоретическое описание используемых структур данных с алгоритмами реализации основных операций. 5
2.1. Структура данных типа «Список». 5
2.2. Статическая реализация списка. 5
2.3. Динамическая реализация упорядоченного двунаправленного списка. 7
3. Комбинированная структура данных «Статический список динамических упорядоченных двунаправленных списков» 10
4. Руководство для программиста. 11
4.1. Описание структуры проекта. 11
4.2. Описание разработанных структур. 11
4.3. Описание разработанных функций. 12
4.4. Структурные схемы основных функций для работы с главной и присоединенной структурами. 16
5. Руководство для пользователя. 20
5.1. Функции основного меню. 20
5.2 Файл. 29
6.Результаты тестирования. 30
Заключение. 36
Список используемой литературы. 37
Приложение 1. Листинг программы. 38
Приложение 2. Пример заранее предопределенной структуры .TXT файла. 50

Файлы: 1 файл

статического списка упорядоченных двунаправленных динамических списков.docx

— 1.09 Мб (Скачать файл)

int count;                    // счетчик электровозов в депо

Depo depo[SIZE];     // массив депо (стат. список)

 

};

 

struct Depo               //Структура депо

{

int num;          //номер депо

int next;          //индекс в массиве на следующий элемент в списке

Train* head;   // указатель на первый электровоз в депо

};

 

struct Train               // Структура электровозов

{

string model;   //марка электровоза

int regNum;    //регистрационной номер

Train *next;    // указатель на следующий электровоз

Train *prev;    // указатель на предыдущий электровоз

};

    1. Описание разработанных функций.

  1. void InitZD(ZD *lst, string name );

Инициализация заголовка для железной дороги.

  1. bool FullZD(ZD *lst);

Функция проверки полноты списка электропоездов.

 

  1. void InitDepo(ZD *lst, int id, int num);

Инициализация заголовка для статического списка депо. Ссылке на следующий элемент присваивается temp.

 

  1. bool EmptyDepo(ZD *lst, int id);

Функция проверки пустоты списка электропоездов.

  1. void ClearAll(ZD *lst);

Процедура очистки всей структуры (удаление всех депо с существующими в них электровозами).

 

  1. void AddNewDepo(ZD *lst);

Функция добавления в статический список депо.

Входные данные: Dnum – номер депо (вводится с клавиатуры пользователем).

 

  1. bool DelDepo(ZD *lst);

Процедура удаления депо из списка, при этом удаляется прикрепленный динамический упорядоченный двунаправленный  список электровозов.

Входные данные: num – номер депо, который нужно удалить (вводятся с клавиатуры пользователем).

  1. void EditDepo(ZD *lst);

Функция редактирования номера депо.

Входные данные: Входные данные: num – номер депо, в котором находится электровоз (вводится с клавиатуры пользователем).

  1. void AddTrain(ZD *lst);

Процедура добавления электровоза в определенное депо.

Входные данные: Dnum – номер депо, model – марка электровоза, num – регистрационный номер электровоза (вводятся с клавиатуры пользователем).

  1. bool AddForward(Depo *curDepo, int num, string model);

Процедура добавления электровоза перед определенным депо .

  1. bool AddBack(Depo *curDepo, int num, string model);

Процедура добавления электровоза после определенного депо .

  1. void DelTrain(ZD *lst);

Процедура удаления электровозаа из определенного депо.

Входные данные: dNum – номер депо, num – регистрационный номер электровоза (вводятся с клавиатуры пользователем).

  1. void EditTrain(ZD *lst);

Процедура редактирования данных заданного электровоза.

Входные данные: Входные данные: num – номер депо, в котором находится электровоз, newNum – регистрационный номер электровоза, который нужно отредактировать (вводятся с клавиатуры пользователем).

 

  1. Train *SearchTrain(Depo *depo, int num, bool forward = true);

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

Входные данные: num – номер депо (вводится с клавиатуры пользователем). Процедура выводит список электровозов определенной марки, указывая при этом регистрационный номер и депо, в котором электровоз был найден. Если электровоза данной марки нет, то выводится сообщение о отсутствии электровозов данной марки.

  1. void SearchTrainByModel(Depo *depo, string model, bool &found, bool forward = true);

Функция поиска электровоза по марке в заданном депо, функция используется в функции удаления электровоза, и в редактировании данных электровоза.

Входные данные: num – номер депо (вводится с клавиатуры пользователем), model – марка электровоза (вводится с клавиатуры пользователем).

Функция возвращает ссылку на найденный элемент.

Примечание: функция возвращает ссылку на первый найденный элемент, если в списке есть несколько электровозов одной марки, то будет

 

 

 

возвращена ссылка на первый находящийся электровоз заданной марки, вне зависимости от регистрационного номера.

 

  1. void ShowAll(ZD* lst);

Процедура вывода всей структуры данных (всех депо с существующими в них электровозами).

  1. void ShowByDepo(ZD* lst);

Процедура вывода всех электровозов, находящихся депо.

Входные данные: num – номер депо (вводится с клавиатуры пользователем).

  1. void SearchTrainsByModel(ZD *lst);

Функция поиска электровоза по марке в заданном депо, функция используется в функции удаления электровоза, и в редактировании данных электровоза.

Входные данные: num – номер депо (вводится с клавиатуры пользователем), model – марка электровоза (вводится с клавиатуры пользователем).

Функция возвращает ссылку на найденный элемент.

 

  1. void SaveZD(ZD *lst);

Процедура сохранения структуры данных в файл расширения .txt .

Входные данные: name– название железной дороги (вводится с клавиатуры).

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

 

  1. void LoadFile(ZD *lst);

Процедура загрузки данных из файла (*.txt).

Входные данные: name – ссылка на название ЖД.

Данная процедура взаимодействует с функцией Parse(…), передавая ей считанные данные для обработки.

 

  1. string Parse(string input, string start, string finish)

Функция для преобразования данных считанных из файла (*.txt) в заданный формат программы (ЖД, депо, марка электровоза, регистрационный номер).

Входные данные: input – исходные считанные данные из файла, start– символ начала данных, finish – символ конца данных.

Функция возвращает значение переменной типа string res.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

    1. Структурные схемы основных функций для работы с главной и присоединенной структурами.

void AddDepo(ZD *lst, int num , int fnum)

 

 

 

 

 

void AddTrain(ZD *lst)

 

 

 

 

 

 

void DelTrain(ZD *lst)

 

 

 

 

bool DelDepo(ZD *lst)

 

 

  1. Руководство для пользователя.

Приложение работает в консоли. Запуск осуществляется через файл CPP.Kursach.exe, находящийся в папке проекта в директории C:\...\ CPP.Kursach\Debug.

Запустив приложение, Вы увидите начальную форму следующего вида:

1. Меню.

    1. Функции основного меню.

  1. Ввести имя железной дороги.

При выборе этого действия, программа предложит Вам ввести название новой железной дороги. Настоятельно рекомендуем вводить название без пробелов, во избежание некорректной работы программы.

  1. Добавить депо.

При выборе этого действия, программа предложит Вам ввести название нового депо. Настоятельно рекомендуем вводить название без пробелов, во избежание некорректной работы программы.

Внимание! Программа предназначена для 20 депо,  для увеличения количества депо необходимо внести соответствующие изменения в прогу.

Если в списке еще нет депо, то программа выдаст следующее:

В случае, если данное депо уже существует, программа выведет:

А если же введенное депо уникален и список не пуст, то программа предложить пользователю выбрать, куда добавить депо:

 

 

 

 

  1. Удалить депо.

При выборе этого действия, программа удаляет заданное депо, при этом удаляется весь список электровозов, закрепленных за этим депо:

  1. Редактировать депо

При выборе этого пункта программа предлагает ввести номер депо для изменения:

 

  1. Добавить поезд в депо

При выборе пункта 5 программа предложить пользователю ввести номер депо, в которое мы хотим добавить электровоз:

  1. Удалить поезд из депо

При выборе этого пункта программа попросит пользователя ввести номер депо, из которого мы хотим удалить электровоз, затем регистрационный номер электровоза и предоставит выбор, в каком порядке искать электровоз:

  1. Редактировать поезд

Если же выбрать пункт 7, программа попросит пользователя ввести номер депо, в котором мы хотим редактировать электровоз, затем регистрационный номер электровоза и предоставит выбор, в каком порядке искать электровоз:

  1. Вывод всех поездов во всех депо

При выборе этого пункта, программа предоставить выбор, в каком направлении показать электровозы:

  1. Вывод списка поездов в указанном депо

При выборе пункта 9, программа попросить ввести номер депо, в котором пользователь хочет увидеть список электровозов, и предоставить выбор, в каком направлении показать электровозы:

  1. Поиск поездов по модели

Если выбрать этот  пункт, нужно будет ввести модель электровоза для поиска:

 

  1. Сохранить список в файл

Для сохранения списка в файл, программа предложит ввести имя файла с расширением *.txt:

  1. Загрузить файл

Для загрузки файла, программа предложит ввести имя файла(*.txt):

 

  1. Выход.

При выборе этого действия, программа закончит свою работу, после нажатия любой клавиши клавиатуры.

 

 

 

 

 

 

 

 

 

5.2Файл.

Файл вида .txt должен иметь следующую структуру:

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

Пример:

name:ЖД:name

depo:11.

#45:model:cool.

:endOfDepo

depo:12.

#103:model:cool.

#134:model:cool.

:endOfDepo

depo:13.

#65:model:smart.

#8900:model:nilson.

:endOfDepo

depo:14.

:endOfDepo

:endOfFile

Для корректной работы, не следует вводить повторяющиеся депо.

6.Результаты тестирования.

Входные данные:

 

«Название ЖД»

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

 

«Количество депо»

20, но возможно увеличение в коде программы.

 

«Номер депо»

Только целое число без пробелов. Не должно начинаться с пробелов.

 

«Максимальное число электровозов»

Ограничено объемом оперативной памяти.

 

«Марка электровоза»

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

 

«Регистрационный номер»

Только целое число без пробелов. Не должно начинаться с пробелов.

 

«Название файла»

Любые символы. Не должно быть пустым или содержать пробелы и начинаться с пробела.

 

 

 

 

 

 

 

 

 

Тест 1. Добавление в статический список депо.

В главном меню выбран пункт 2.

Примечание: Добавление в список и попытка добавления уже добавленного элемента описано в разделе «Функции основного меню».

При попытке добавления депо в уже полный список:

Результат: положительный. При корректном вводе данных программа выполняет поставленную задачу.

 

 

 

 

 

 

 

 

 

Тест 2. Удаление депо из статического списка.

В главном меню выбран пункт 3.

При попытки удаления несуществующего депо:

А если в списке нет депо для удаления, то программа выведет следующее:

 

 

Тест 3. Редактирование депо.

В главном меню выбран пункт 4.

 Изменение номера депо на  тот же номер:

Ну а если введенного депо вообще нету в списке, то:

 

 

Тест 4. Добавление электровоза в депо.

В главном меню выбран пункт 5.

Добавление электровоза в несуществующее депо:

Тест 5. Удаление электровоза из депо.

В главном меню выбран пункт 6.

Удаление несуществующего электровоза из депо:

Тест 6. Редактирование электровоза.

В главном меню выбран пункт 7.

Вводе несуществующего номера электровоза:

Тест 7. Вывод списка поездов в указанном депо .

В главном меню выбран пункт 9.

Неправильный ввод номера депо:

Заключение.

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

Информация о работе Реализация комбинированной структуры данных на основе статического списка упорядоченных двунаправленных динамических списков