
- •Задание.
- •Анализ задачи.
- •Структура графа.
- •Ограничения на исходные данные.
- •Исходные данные.
- •Интерфейс в режиме работы администратора.
- •Интерфейс в режиме работы пользователя.
- •Структура файла расписания. Стандартный файл расписания Time.Txt
- •Описание алгоритмов.
- •Используемые типы.
- •Спецификация процедур.
- •Взаимосвязь процедур и функций.
- •Исключительные ситуации.
Задание.
Информационная система железнодорожной сети. Некоторая железнодорожная компания обслуживает n станций. Клиент набирает название своей станции и станции назначения, и ему должна выдаться схема расписаний поездов с минимальным общим временем поездки. Если клиент указывает сумму денег, которой он хотел бы ограничиться, решается та же задача, но с учетом финансовых возможностей клиента.
Разработайте программу для вычисления нужной информации. Пусть расписание (представляющее собой ваш банк данных) изображается соответствующей структурой данных, содержащей времена отправления и прибытия всех имеющихся поездов, а также стоимость проезда на них. Разумеется, не все станции связаны прямым сообщением.
Анализ задачи.
Железнодорожную сеть можно представить в виде графа. Станциям соответствуют вершины графа, отрезкам дороги между станциями – ребра. Предполагается, что если есть прямой маршрут из А в Б, то существует также и прямой маршрут из Б в А. Из данного предположения следует, что граф железнодорожной сети является ненаправленным.
Для хранения графа в памяти используются списки смежности, что обосновано тем, что каждая станция имеет прямое сообщение лишь с малым числом других станций по отношению к их общему количеству.
Участок дороги между соседними станциями далее будем называть ребром.
Для каждого ребра задано расписание движения поездов, организованное в виде линейных списков. Строку этого расписания характеризуют следующие параметры: время отправления с одной станции, время прибытия на другую станцию и стоимость билета.
Структура графа.
Граф (Graph) состоит из массива вершин (Vertices[1..n]), каждая из которых характеризуется именем (Name) и указателем на список смежности, а также служебным полем (VertexLabel), необходимым для реализации алгоритма поиска кратчайшего пути. Также хранится число вершин в графе (Number).
Элемент списка смежности представляет собой запись, состоящую из следующих полей: индекс смежной вершины (Where), указателем на таблицу расписания ветви (TimeTable) и указателем на следующий элемент списка смежности (NextStation).
Таблица расписания ветви представляет собой список из элементов следующей структуры: время отправления со станции под номером i(DepTime), время прибытия на станцию под номеромwhere(ArrTime), стоимостью билета (Price), указатель на следующую строку в таблице расписания (Next).
Время отправления и прибытия хранится в минутах, но отображается в удобном для пользователя формате ЧЧ:ММ.
Ограничения на исходные данные.
Число станций ограничено двадцатью.
Название станции – строка не более 25 символов.
Таблица расписания не более 10 строк.
Стоимость билета ограничена диапазоном целых чисел (0..65000).
Время обязательно вводить в форме ЧЧ:ММ, причем числа должны быть дополнены, если необходимо, нулем слева до 2-х символов (например 02:10)
Ограничения 1)-3) нужны для упрощения редактирования данных внутри программы. Большие значения потребовали бы организации прокручивающихся списков, грамотная реализация которых составляет отдельную задачу. Эти ограничения связаны только со сложностью визуального оформления данных и не влияют на сущность программы.