Автор работы: Пользователь скрыл имя, 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
int count; // счетчик электровозов в депо
Depo depo[SIZE]; // массив депо (стат. список)
};
struct Depo //Структура депо
{
int num; //номер депо
int next; //индекс в массиве на следующий элемент в списке
Train* head; // указатель на первый электровоз в депо
};
struct Train // Структура электровозов
{
string model; //марка электровоза
int regNum; //регистрационной номер
Train *next; // указатель на следующий электровоз
Train *prev; // указатель на предыдущий электровоз
};
Инициализация заголовка для железной дороги.
Функция проверки полноты списка электропоездов.
Инициализация заголовка для статического списка депо. Ссылке на следующий элемент присваивается temp.
Функция проверки пустоты списка электропоездов.
Процедура очистки всей структуры (удаление всех депо с существующими в них электровозами).
Функция добавления в статический список депо.
Входные данные: Dnum – номер депо (вводится с клавиатуры пользователем).
Процедура удаления депо из списка, при этом удаляется прикрепленный динамический упорядоченный двунаправленный список электровозов.
Входные данные: num – номер депо, который нужно удалить (вводятся с клавиатуры пользователем).
Функция редактирования номера депо.
Входные данные: Входные данные: num – номер депо, в котором находится электровоз (вводится с клавиатуры пользователем).
Процедура добавления электровоза в определенное депо.
Входные данные: Dnum – номер депо, model – марка электровоза, num – регистрационный номер электровоза (вводятся с клавиатуры пользователем).
Процедура добавления электровоза перед определенным депо .
Процедура добавления электровоза после определенного депо .
Процедура удаления электровозаа из определенного депо.
Входные данные: dNum – номер депо, num – регистрационный номер электровоза (вводятся с клавиатуры пользователем).
Процедура редактирования данных заданного электровоза.
Входные данные: Входные данные: num – номер депо, в котором находится электровоз, newNum – регистрационный номер электровоза, который нужно отредактировать (вводятся с клавиатуры пользователем).
Процедура поиска электровозов определенной марки.
Входные данные: num – номер депо (вводится с клавиатуры пользователем). Процедура выводит список электровозов определенной марки, указывая при этом регистрационный номер и депо, в котором электровоз был найден. Если электровоза данной марки нет, то выводится сообщение о отсутствии электровозов данной марки.
Функция поиска электровоза по марке в заданном депо, функция используется в функции удаления электровоза, и в редактировании данных электровоза.
Входные данные: num – номер депо (вводится с клавиатуры пользователем), model – марка электровоза (вводится с клавиатуры пользователем).
Функция возвращает ссылку на найденный элемент.
Примечание: функция возвращает ссылку на первый найденный элемент, если в списке есть несколько электровозов одной марки, то будет
возвращена ссылка на первый находящийся электровоз заданной марки, вне зависимости от регистрационного номера.
Процедура вывода всей структуры данных (всех депо с существующими в них электровозами).
Процедура вывода всех электровозов, находящихся депо.
Входные данные: num – номер депо (вводится с клавиатуры пользователем).
Функция поиска электровоза по марке в заданном депо, функция используется в функции удаления электровоза, и в редактировании данных электровоза.
Входные данные: num – номер депо (вводится с клавиатуры пользователем), model – марка электровоза (вводится с клавиатуры пользователем).
Функция возвращает ссылку на найденный элемент.
Процедура сохранения структуры данных в файл расширения .txt .
Входные данные: name– название железной дороги (вводится с клавиатуры).
При записи осуществляется проход по всем элементам структуры, с занесением информационных частей элемента в txt файл, при этом строго соблюдая заранее предопределенную структуру файла.
Процедура загрузки данных из файла (*.txt).
Входные данные: name – ссылка на название ЖД.
Данная процедура взаимодействует с функцией Parse(…), передавая ей считанные данные для обработки.
Функция для преобразования данных считанных из файла (*.txt) в заданный формат программы (ЖД, депо, марка электровоза, регистрационный номер).
Входные данные: input – исходные считанные данные из файла, start– символ начала данных, finish – символ конца данных.
Функция возвращает значение переменной типа string res.
void AddDepo(ZD *lst, int num , int fnum)
void AddTrain(ZD *lst)
void DelTrain(ZD *lst)
bool DelDepo(ZD *lst)
Приложение работает в консоли. Запуск осуществляется через файл CPP.Kursach.exe, находящийся в папке проекта в директории C:\...\ CPP.Kursach\Debug.
Запустив приложение, Вы увидите начальную форму следующего вида:
1. Меню.
При выборе этого действия, программа предложит Вам ввести название новой железной дороги. Настоятельно рекомендуем вводить название без пробелов, во избежание некорректной работы программы.
При выборе этого действия, программа предложит Вам ввести название нового депо. Настоятельно рекомендуем вводить название без пробелов, во избежание некорректной работы программы.
Внимание! Программа предназначена для 20 депо, для увеличения количества депо необходимо внести соответствующие изменения в прогу.
Если в списке еще нет депо, то программа выдаст следующее:
В случае, если данное депо уже существует, программа выведет:
А если же введенное депо уникален и список не пуст, то программа предложить пользователю выбрать, куда добавить депо:
При выборе этого действия, программа удаляет заданное депо, при этом удаляется весь список электровозов, закрепленных за этим депо:
При выборе этого пункта программа предлагает ввести номер депо для изменения:
При выборе пункта 5 программа предложить пользователю ввести номер депо, в которое мы хотим добавить электровоз:
При выборе этого пункта программа попросит пользователя ввести номер депо, из которого мы хотим удалить электровоз, затем регистрационный номер электровоза и предоставит выбор, в каком порядке искать электровоз:
Если же выбрать пункт 7, программа попросит пользователя ввести номер депо, в котором мы хотим редактировать электровоз, затем регистрационный номер электровоза и предоставит выбор, в каком порядке искать электровоз:
При выборе этого пункта, программа предоставить выбор, в каком направлении показать электровозы:
При выборе пункта 9, программа попросить ввести номер депо, в котором пользователь хочет увидеть список электровозов, и предоставить выбор, в каком направлении показать электровозы:
Если выбрать этот пункт, нужно будет ввести модель электровоза для поиска:
Для сохранения списка в файл, программа предложит ввести имя файла с расширением *.txt:
Для загрузки файла, программа предложит ввести имя файла(*.txt):
При выборе этого действия, программа закончит свою работу, после нажатия любой клавиши клавиатуры.
Файл вида .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
Для корректной работы, не следует вводить повторяющиеся депо.
Входные данные:
«Название ЖД»
Любые символы, кроме символов
используемых в текстовом
«Количество депо»
20, но возможно увеличение в коде программы.
«Номер депо»
Только целое число без пробелов. Не должно начинаться с пробелов.
«Максимальное число электровозов»
Ограничено объемом оперативной памяти.
«Марка электровоза»
Любые символы, кроме символов используемых в текстовом файле. Не должно быть пустым или начинаться с пробела или содержать пробелы.
«Регистрационный номер»
Только целое число без пробелов. Не должно начинаться с пробелов.
«Название файла»
Любые символы. Не должно быть пустым или содержать пробелы и начинаться с пробела.
Тест 1. Добавление в статический список депо.
В главном меню выбран пункт 2.
Примечание: Добавление в список и попытка добавления уже добавленного элемента описано в разделе «Функции основного меню».
При попытке добавления депо в уже полный список:
Результат: положительный. При корректном вводе данных программа выполняет поставленную задачу.
Тест 2. Удаление депо из статического списка.
В главном меню выбран пункт 3.
При попытки удаления несуществующего депо:
А если в списке нет депо для удаления, то программа выведет следующее:
Тест 3. Редактирование депо.
В главном меню выбран пункт 4.
Изменение номера депо на тот же номер:
Ну а если введенного депо вообще нету в списке, то:
Тест 4. Добавление электровоза в депо.
В главном меню выбран пункт 5.
Добавление электровоза в несуществующее депо:
Тест 5. Удаление электровоза из депо.
В главном меню выбран пункт 6.
Удаление несуществующего электровоза из депо:
Тест 6. Редактирование электровоза.
В главном меню выбран пункт 7.
Вводе несуществующего номера электровоза:
Тест 7. Вывод списка поездов в указанном депо .
В главном меню выбран пункт 9.
Неправильный ввод номера депо:
Полученная структура обладает всем требуемым функционалом, которое было определено в постановке задачи. Консольное приложение позволяет наглядно продемонстрировать функциональность разработанных структур. Результаты работы предоставлены в виде исходного кода программного комплекса. Таким образом, задачу можно считать полностью выполненной.