Лабораторная работа №1
Лабораторная работа будет выдана на ограниченное время, равное 1 паре. Формат сдачи можно сравнить с обыкновенной контрольной по математическим предметам.
Текст задачи будет размещён на данной странице, а решение необходимо будет предоставить на ресурс moodle.uniyar.ac.ru. Пожалуйста удостоверьтесь, что у вас есть доступ к данному ресурсу.
Результат работы - архив с исходными кодами, который прикрепляется как решение задачи.
Важно. Если у проверяющего возникнет обоснованное предположение о совместном решении, тогда все участники получат оценку.
Проверяемые знания учащихся
- Уровень знакомства с языком Ruby.
- Запуск приложения.
- Описание переменных и методов, их использование.
- Работа с контейнерами, итераторами.
- Описание собственных классов.
- Знание техники наследования классов.
- Использование модулей и примесей.
- Знание деталей работы стандартных классов: чисел, строк.
- Знание деталей вызова методов и указания их аргументов.
- Уровень знакомства с экосистемой языка Ruby
- Установка зависимостей с помощью
gem
- Установка зависимостей с помощью Bundler
- Проверка качества исходного кода с помощью Rubocp
- Установка зависимостей с помощью
Требования к выполнению задания
- Приложение должно реализовать все требования, указанные в задании. Однако, к защите допускаются приложения, реализующие только часть задач.
- Исходный код приложения должен быть проверен с помощью приложения Rubocop с настройками по-умолчанию или с конфигурацией, предложенной на соответствующем занятии. Для каждого нарушения, которое находит Rubocop, должно быть объяснение почему оно не было исправлено. Допускаются аргументы с точки зрения архитектуры приложения, другого рода аргументы не принимаются.
- Все зависимости приложения должны управляться с помощью Bundler, установка зависимостей с помощью
gem
запрещена. Исключением является джемbundler
. - Для разрабатываемого приложения должны быть создан отдельный каталог.
- В корне каталога должны располагаться конфигурационные файлы:
Gemfile
,Gemfile.lock
. - В корне каталога приложения должны находится каталоги
bin
,lib
, в которых должен находиться исходный код приложения. В каталогеbin
находится исполняемый файл, в каталогеlib
находится описание всех собственных классов и модулей.
- В корне каталога должны располагаться конфигурационные файлы:
- Весь код приложения должен быть разбит на модули и классы, запрещается использовать файлы с простым набором методов, которые не пренадлежат какому-либо модулю.
- Необходимо выделить отдельные классы, описывающие предметную область.
- В одном модуле нельзя совмещать логику обработки предметной области и операции ввода-вывода.
- Приложение должно корректно обрабатывать неправильный ввод от пользователя.
- Приложение должно обладать понятным интерфейсом: показывать помощь по использованию, для ввода данных приложение должно показывать приглашение.
Задача
Вам необходимо реализовать интерактивное консольное приложение, предоставляющее справочную информацию о пригородных поездах.
Пример работы меню приложения:
Выберите действие (Use ↑/↓ arrow keys, press Enter to select)
‣ Вывести расписание движения поездов
Вывести список поездов, отсортировав их по количеству реальных остановок
Завершить работу приложения
Расписание движения
Приложение должно позволять пользователям посмотреть расписание движения конкретного поезда. Выбор поезда должен происходить в интерактивном режиме. Пользователю должна быть доступна следующая информация о поезде:
- Номер поезда.
- Станция отправления.
- Станция назначения.
- Время отправления.
- Время прибытия.
Пример работы меню действия:
Выберите действие Вывести расписание движения поездов
Выберите поезд
110: МОСКВА-ПАССАЖИРСКАЯ-КУРСКАЯ(2020-02-01 04:59:00.0) ПЕТУШКИ(2020-02-01 07:20:00.0)
186: МОСКВА-ПАССАЖИРСКАЯ-КУРСКАЯ(2020-02-01 05:39:00.0) БАЛАШИХА(2020-02-01 06:24:00.0)
‣ 916: МОСКВА-ПАССАЖИРСКАЯ-КУРСКАЯ(2020-02-01 06:22:00.0) ПЕТУШКИ(2020-02-01 08:59:00.0)
573: МОСКВА-ПАССАЖИРСКАЯ-КУРСКАЯ(2020-02-01 07:17:00.0) ФРЯЗЕВО(2020-02-01 08:30:00.0)
610: МОСКВА-ПАССАЖИРСКАЯ-КУРСКАЯ(2020-02-01 07:29:00.0) ПЕТУШКИ(2020-02-01 09:58:00.0)
После выбора поезда пользователю необходимо отобразить информацию о движении данного поезда. Для каждой остановки необходимо отобразить:
- Порядковый номер остановки в маршруте.
- Время прибытия на остановку.
- Название станции.
Пример вывода приложения:
Выберите действие Вывести расписание движения поездов
Выберите поезд 916: МОСКВА-ПАССАЖИРСКАЯ-КУРСКАЯ(2020-02-01 06:22:00.0) ПЕТУШКИ(2020-02-01 08:59:00.0)
Расписание движения поезда 916
1: 2020-02-01 06:22:00.0 МОСКВА-ПАССАЖИРСКАЯ-КУРСКАЯ
2: 2020-02-01 06:26:30.0 СЕРП И МОЛОТ
...
36: 2020-02-01 08:55:30.0 ПЕТУШКИ САИПС
37: 2020-02-01 08:59:00.0 ПЕТУШКИ
Просмотр статической информации по поездам
Приложение должно позволять пользователям посмотреть список поездов, отсортированных по количеству реальных остановок. Реальная остановка — остановка с ненулевым временем стоянки.
Для каждого маршрута необходимо выводить следующую информацию:
- Количество остановок.
- Номер поезда.
- Станция отправления.
- Станция назначения.
- Время отправления.
- Время прибытия.
Пример вывода приложения.
Выберите действие Вывести список поездов, отсортировав их по количеству реальных остановок
Список движения поездов, отсортированный по количеству реальных остановок
Остановки: 8 Маршрут: 186: МОСКВА-ПАССАЖИРСКАЯ-КУРСКАЯ(2020-02-01 05:39:00.0) БАЛАШИХА(2020-02-01 06:24:00.0)
Остановки: 19 Маршрут: 573: МОСКВА-ПАССАЖИРСКАЯ-КУРСКАЯ(2020-02-01 07:17:00.0) ФРЯЗЕВО(2020-02-01 08:30:00.0)
Остановки: 34 Маршрут: 610: МОСКВА-ПАССАЖИРСКАЯ-КУРСКАЯ(2020-02-01 07:29:00.0) ПЕТУШКИ(2020-02-01 09:58:00.0)
Остановки: 35 Маршрут: 916: МОСКВА-ПАССАЖИРСКАЯ-КУРСКАЯ(2020-02-01 06:22:00.0) ПЕТУШКИ(2020-02-01 08:59:00.0)
Остановки: 36 Маршрут: 110: МОСКВА-ПАССАЖИРСКАЯ-КУРСКАЯ(2020-02-01 04:59:00.0) ПЕТУШКИ(2020-02-01 07:20:00.0)
Исходные данные
Информация о поездах и остановках хранится в файлах:
- stations.csv - список названий станций.
- stops.csv - информация об остановках поездов.
Формат списка названий станций stations.csv
CODE,TITLE
6118,МОСКВА-ПАССАЖИРСКАЯ-КУРСКАЯ
4980,МОСКВА-КАЛАНЧЕВСКАЯ
7408,РЖЕВСКАЯ
- Столбец
CODE
содержит уникальный номер станции. - Столбец
TITLE
содержит название станции.
Формат списка остановок поездов stops.csv
TRAINID,NUMBER,STATION_CODE,ARRIVAL_TIME,STOP_DURATION,DISTANCE
110,1,6118,2020-02-01 04:59:00.0,0,0
110,2,3713,2020-02-01 05:03:30.0,90,2
110,3,2352,2020-02-01 05:08:30.0,30,6
- Столбец
TRAINID
содержит уникальный номер поезда. - Столбец
NUMBER
содержит внутренний порядковый номер остановки для данного поезда. В номерах могут быть пропуски, но они обязательно идут по возрастанию в файле. - Столбец
STATION
содержит уникальный код станции. - Столбец
ARRIVAL_TIME
содержит время прибытия на станцию. Для первой станции - время отправления. - Столбец
STOP_DURATION
содержит продолжительность стоянки на станции в секундах. - Столбец
DISTANCE
содержит информацию об удалённости данной станции от начала маршрута.