Лабораторная № 1
Результат работы - архив с исходными кодами приложения, который прикрепляется как решение задачи на Moodle. Результаты работы будет необходимо защитить.
К защите в удалённом формате подготовьте камеру (можно использовать камеру на телефоне) и микрофон. Будут использованы системы Google Meet (https://meet.google.com) и Zoom (https://zoom.us).
Важно. Если у проверяющего возникнет обоснованное предположение о совместном решении, тогда все участники получат неудовлетворительную оценку.
Проверяемые знания учащихся
- Уровень знакомства с языком Ruby:
- Запуск приложения.
- Описание переменных и методов, их использование.
- Работа с контейнерами, итераторами.
- Описание собственных классов.
- Знание деталей работы стандартных классов: чисел, строк.
- Знание деталей вызова методов и указания их аргументов.
- Уровень знакомства с экосистемой языка Ruby:
- Проверка качества исходного кода с помощью Rubocop.
Требования к выполнению задания
- Приложение должно реализовать все требования, указанные в задании. Однако к защите допускаются приложения, реализующие только часть задач.
- К защите не допускается исходный код, который не запускается.
- Исходный код приложения должен быть проверен с помощью приложения Rubocop с настройками по-умолчанию или с конфигурацией, предложенной на соответствующем занятии. Для каждого нарушения, которое находит Rubocop, должно быть объяснение почему оно не было исправлено. Допускаются аргументы с точки зрения архитектуры приложения, другого рода аргументы не принимаются.
- Все зависимости приложения должны управляться с помощью Bundler, установка зависимостей с помощью
gem
запрещена. Исключением является джемbundler
. - Для разрабатываемого приложения должны быть создан отдельный каталог.
- В корне каталога должны располагаться конфигурационные файлы:
Gemfile
,Gemfile.lock
. - В корне каталога приложения должны находится каталоги
bin
,lib
, в которых должен находиться исходный код приложения. В каталогеbin
находится исполняемый файл, в каталогеlib
находится описание всех собственных классов и модулей.
- В корне каталога должны располагаться конфигурационные файлы:
- Весь код приложения должен быть разбит на модули и классы, запрещается использовать файлы с простым набором методов, которые не пренадлежат какому-либо модулю.
- Необходимо выделить отдельные классы, описывающие предметную область.
- В одном модуле нельзя совмещать логику обработки предметной области и операции ввода-вывода.
- Приложение должно корректно обрабатывать неправильный ввод от пользователя.
- Приложение должно обладать понятным интерфейсом: показывать помощь по использованию, для ввода данных приложение должно показывать приглашение.
Задача
Требуется написать приложение, позволяющее анализировать журнал листов нетрудоспособности. Инициализация данных происходит из файла polyclinic_log.csv
, включающего следующие поля:
- Уникальный код больничного, состоящий из четырёх блоков по три цифры
- ФИО нетрудоспособного в формате
Фамилия Имя Отчество
- Пол нетрудоспособного
м
илиж
- Период нетрудоспособности в формате
ГГГГ-ММ-ДД - ГГГГ-ММ-ДД
- Натуральный код причины нетрудоспособности
- Фамилия врача
Скачайте файл polyclinic_log.csv
по данной ссылке.
Расшифровка кодов причины нетрудоспособности:
- Заболевание
- Травма
- Карантин
- Несчастный случай на производстве или его последствия
- Отпуск по беременности и родам
- Протезирование в стационаре
- Профессиональное заболевание или его обострение
- Долечивание в санатории
- Уход за больным членом семьи
- Иное состояние (отравление, проведение манипуляций и др.)
При запуске приложение должно отображать пользовательское меню:
- Случайный пациент
- Список врачей
- Количество пациентов
- Длительность больничного
- Максимальный и минимальный больничный
- Завершить работу
Если пользователь выбрал пункт № 1, на экран должна быть выведена информация о случайно выбранном пациенте в формате ФИО не <имел|имела> возможности посещать свое рабочее место в период с <дата начала> по <дата окончания> по причине <текстовая расшифровка кода>, код листа нетрудоспособности <код>
. Лишние пробелы в ФИО, присутствующие в файле с данными для выравнивания, должны быть удалены.
Если пользователь выбрал пункт № 2, на экран должен быть выведен список врачей из листков нетрудоспособности без повторений, упорядоченный лексикографически.
Если пользователь выбрал пункт № 3, на экран должна быть выведена статистика о количестве пациентов:
- общее количество пациентов
- количество пациентов-мужчин
- количество пациентов-женщин
Если пользователь выбрал пункт № 4, на экран должна быть выведена статистика о длительности больничных:
- средняя длительность больничного в сутках
- средняя длительность больничного, завершившегося в 2020 году
- средняя длительность больничного, завершившегося в 2021 году
Если пользователь выбрал пункт № 5, на экран должна быть выведена информация о самом длинном и самом коротком больничном в том же формате, что для пункта № 1, но расширенном длительностью больничного в сутках. Если подходящих больничных будет несколько, из подходящих больничных выбрать больничный с максимальным кодом листка нетрудоспособности.
Внимание во время решения задачи необходимо пользоваться специфическими итераторами. Решение задачи исключительно с общим итератором each
, тем более с использованием ключевого слова for
не сможет получить максимальной оценки.