📘 О чем эта работа
Проект посвящён созданию приложения на C++ для автоматического распределения тем курсовых работ среди студентов. Предмет — алгоритмы распределения и объектно-ориентированная реализация; объект — программа, принимающая список тем, список студентов и их предпочтения и выдающая назначение тем. Цель — реализовать надежный и простой инструмент, который учитывает персональные предпочтения и обеспечивает равномерность распределения.
📚 Что внутри
В работе подробно описаны архитектура, алгоритм и тестирование разработанного приложения, а также приведён полный листинг кода. Конкретно включено:
- Описание требований и проектирование: структура данных для студентов и тем, требования к валидации входных данных и ограничения (количество тем ≥ количество студентов, проверка наличия тем и уникальности имён).
- Реализация на C++: использованы стандартные контейнеры vector, string, map, а также библиотеки ctime и cstdlib для случайной генерации.
- Кодовые модули и функции: inputTopics (ввод тем), inputStudents (ввод студентов и парсинг предпочтений через запятую), assignTopics (реализация комбинированного алгоритма — сначала жадное назначение доступных предпочтений, затем случайное распределение оставшихся тем), displayAssignments и main с последовательностью выполнения.
- Тестовый вариант и тесты: набор unit-тестов (testSingleStudentSingleTopic, testMultipleStudentsSingleTopic, testMultipleStudentsMultipleTopics, testNoPreferredTopics, testPreferredAndRandomTopics) с использованием assert для проверки корректности различных сценариев.
- Приложение и листинг: в приложении приведены два варианта кода — рабочий режим и тестовый режим с ассертами; подробно показан разбор строк предпочтений, удаление назначенных тем и работа с вектором remainingTopics.
📊 Для кого подходит
Проект полезен студентам по направлениям прикладная математика и информатика, программирование, ООП; подходит для выполнения курсовых/практических заданий по предметам «Объектно-ориентированное программирование» и «Разработка ПО». Код можно использовать как демонстрацию методов валидации вводимых данных, работы с контейнерами STL и тестирования простых алгоритмов распределения.
✨ Особенности
Главные преимущества проекта: конкретная практическая реализация комбинированного алгоритма (жадный + случайный), готовые функции для ввода и парсинга предпочтений студентов, включённый набор тестов и готовый листинг кода на C++. Хранилище реализовано в памяти (векторы), но архитектура позволяет заменить его на БД при необходимости. Реализована проверка наличия тем в списке и предотвращение дублирования назначений.
❓ Частые вопросы
Подойдет ли для моего ВУЗа?
Структура проекта соответствует общим требованиям курсовых по ООП: введение, задачи, проектирование, реализация, тестирование, заключение и список литературы. Код легко адаптируется под локальные шаблоны отчёта.
Можно адаптировать?
Да. Парсер предпочтений и механизм хранения легко заменяются: можно подключить ввод из CSV/Excel, добавить БД для хранения тем и расширить стратегию распределения (линейное программирование, оптимизация по метрикам).
Технические примечания
- Алгоритм assignTopics: сначала проходит цикл по студентам и их preferredTopics и назначает тему, если она ещё доступна, затем случайно распределяет оставшиеся темы через srand/time.
- Разбор предпочтений: строки с темами разделяются запятыми, проводится проверка наличия темы в перечне topics перед добавлением в preferredTopics.
- Тестовый набор использует assert для проверки сценариев: единственная тема, недостаток тем, все студенты с уникальными предпочтениями, отсутствие предпочтений у части студентов.
Файл включает полный листинг рабочей и тестовой версий на C++, рекомендации по расширению (логирование, GUI/CLI удобства, подключение БД) и подробные примеры входных данных и ожидаемого вывода. Проект даёт готовую основу для внедрения автоматизированного процесса распределения тем в учебных департаментах.