Утилиты для работы с расписанием занятий
Задание на разработку утилит для работы с расписанием занятий является заданием для комплексной курсовой работы, которая может выполняться несколькими студентами.
Общей частью является формат коллекций mongo, в которой хранится информация о занятиях. Для занятия задаются его координаты (тип недели, день недели, номер пары), предмет, тип занятия (лекция или др.), аудитория, список участвующих (группы, подгруппы, преподаватели).
Утилиты представляют собой небольшие программы, выполняющие в системе отдельную небольшую функцию. Входные данные для этих утилит задаются либо непосредственно в виде аргументов командной строки, либо в файле, имя которого передается в виде аргумента командной строки. Также для всех утилит должен использовать единый конфигурационный файл, в котором указываются данные для подключения к mongo.
Для отдельных курсовых работ можно выбирать темы из следующего списка (выбирать тему можно только если кто-то уже выбрал предыдущую тему):
- Утилита для импорта занятий из файла с расписанием групп. Необходимо учитывать, что занятия группы могут уже присутствовать в системе.
- Утилита для импорта занятий из файла с расписанием преподавателей кафедры. Необходимо учитывать, что занятия преподавателя могут уже присутствовать в системе.
- Утилита для выгрузки занятий по заданным критериям (занятия для группы, преподавателя, аудитории, предмета) в формат html страницы (в виде удобных для просмотра таблиц). Нужно учесть возможность появления нескольких занятий для одной пары, например, если в группе две подгруппы или из-за ошибки при импорте. Рекомендуется использовать библиотеку kotlinx.html.
- Утилита поиска возможностей и переноса занятий. В данной утилите должен присутствовать интерактивный режим. При запуске пользователь указывает занятие и критерии для переноса (список возможных аудиторий). Система находит список возможных пар для переноса занятий с учетом ограничений: в аудитории нет других занятий, у группы/подгруппы нет других занятий, у преподавателя нет других занятий, у группы/подгруппы не появляется окна в расписании, перенос на другую неделю (должна быть возможность настроить ограничения во время запроса). Утилита выдает пользователю возможный список пар для переноса, пользователь выбирает вариант переноса или отменяет его.
- Утилита для формирования версии для печати кафедрального расписания.