Объектно-ориентированное программирование и обработка данных

Утилиты для работы с расписанием занятий

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

Общей частью является формат коллекций mongo, в которой хранится информация о занятиях. Для занятия задаются его координаты (тип недели, день недели, номер пары), предмет, тип занятия (лекция или др.), аудитория, список участвующих (группы, подгруппы, преподаватели).

Утилиты представляют собой небольшие программы, выполняющие в системе отдельную небольшую функцию. Входные данные для этих утилит задаются либо непосредственно в виде аргументов командной строки, либо в файле, имя которого передается в виде аргумента командной строки. Также для всех утилит должен использовать единый конфигурационный файл, в котором указываются данные для подключения к mongo.

Для отдельных курсовых работ можно выбирать темы из следующего списка (выбирать тему можно только если кто-то уже выбрал предыдущую тему):

  1. Утилита для импорта занятий из файла с расписанием групп. Необходимо учитывать, что занятия группы могут уже присутствовать в системе.
  2. Утилита для импорта занятий из файла с расписанием преподавателей кафедры. Необходимо учитывать, что занятия преподавателя могут уже присутствовать в системе.
  3. Утилита для выгрузки занятий по заданным критериям (занятия для группы, преподавателя, аудитории, предмета) в формат html страницы (в виде удобных для просмотра таблиц). Нужно учесть возможность появления нескольких занятий для одной пары, например, если в группе две подгруппы или из-за ошибки при импорте. Рекомендуется использовать библиотеку kotlinx.html.
  4. Утилита поиска возможностей и переноса занятий. В данной утилите должен присутствовать интерактивный режим. При запуске пользователь указывает занятие и критерии для переноса (список возможных аудиторий). Система находит список возможных пар для переноса занятий с учетом ограничений: в аудитории нет других занятий, у группы/подгруппы нет других занятий, у преподавателя нет других занятий, у группы/подгруппы не появляется окна в расписании, перенос на другую неделю (должна быть возможность настроить ограничения во время запроса). Утилита выдает пользователю возможный список пар для переноса, пользователь выбирает вариант переноса или отменяет его.
  5. Утилита для формирования версии для печати кафедрального расписания.