Student Management Console Application
Консольное Java-приложение для создания, хранения, сортировки, поиска и сохранения коллекций студентов.
Проект разработан командой в рамках учебного задания и демонстрирует применение ООП, собственных коллекций, алгоритмов сортировки, Stream API, паттернов проектирования, CSV-ввода/вывода и unit-тестирования.
Возможности
Приложение позволяет:
- создавать коллекции студентов вручную;
- генерировать случайные данные;
- загружать студентов из CSV-файла;
- просматривать текущую коллекцию;
- сохранять коллекцию в CSV;
- сортировать студентов по номеру группы, среднему баллу и номеру зачётной книжки;
- выбирать алгоритм сортировки;
- выполнять специальную even-only сортировку;
- искать студентов по нескольким критериям;
- объединять критерии поиска через
И/ИЛИ; - подсчитывать количество вхождений студента;
- получать индексы найденных элементов.
Архитектура
Основной поток данных:
Manual / CSV / Random
↓
Student
↓
MyList<Student>
↓
┌─────┴─────┐
↓ ↓
Sorting Search
│ │
└─────┬─────┘
↓
Console / CSV
Логика приложения разделена на отдельные функциональные области: модель данных, создание коллекции, хранение, сортировка, поиск, CSV-ввод/вывод и пользовательский интерфейс.
Основные компоненты
Student
Student — основная модель данных приложения.
Модель содержит данные студента, выполняет валидацию входных значений и определяет правила сравнения объектов через equals() и hashCode().
Для пошагового создания объектов используется StudentBuilder.
Custom Collection
Для хранения студентов используются собственные:
MyList<T>;MyLinkedList<T>.
Коллекция поддерживает основные операции работы с данными и интеграцию со Stream API.
Для сбора результатов Stream обратно в MyList реализован собственный MyListCollector.
Sorting
Система сортировки построена на паттерне Strategy.
Доступны:
- Merge Sort;
- Bubble Sort;
- even-only sorting.
SortStrategy определяет алгоритм сортировки, а Comparator<Student> — поле, по которому сравниваются студенты.
SortStrategy
↓
КАК сортировать
Comparator
↓
ПО КАКОМУ ПОЛЮ сортировать
Search
Поиск поддерживает несколько критериев:
- номер группы;
- средний балл;
- номер зачётной книжки.
Несколько условий могут объединяться через И / ИЛИ.
Для составных условий используется паттерн Composite.
Также реализован поиск количества вхождений студента и индексов найденных элементов.
CSV
За работу с CSV отвечают:
StudentCsvReader;StudentCsvWriter.
Загрузка данных:
CSV
↓
StudentCsvReader
↓
Student
↓
MyList<Student>
Сохранение:
MyList<Student>
↓
StudentCsvWriter
↓
CSV
Создание коллекции
Поддерживаются разные способы заполнения коллекции:
- ручной ввод;
- случайная генерация;
- загрузка из файла.
Для этого используются отдельные стратегии заполнения.
Использованные паттерны и подходы
| Паттерн / подход | Использование |
|---|---|
| Builder | создание объектов Student |
| Strategy | выбор алгоритма сортировки и способа заполнения коллекции |
| Composite | объединение критериев поиска |
| Custom Collector | преобразование Stream в MyList |
Технологии
- Java 21
- Maven
- JUnit 5
- Apache Commons CSV
- Java Stream API
- Git
- GitHub
Команда
| Участник | GitHub | Основная зона ответственности |
|---|---|---|
| Володин Герман | — | архитектура приложения, Console UI, интеграция компонентов |
| Артющик Анастасия | AnastasiArchi |
Student, StudentBuilder, even-only sorting |
| Дюрягин Данил | — | сортировка, Comparator, Composite Search |
| Гаджикурбанов Темирлан | t1-f |
собственная коллекция, Collector, Random Generator, поиск вхождений |
| Ершов Владислав | Vladislav-E-N |
CSV Reader/Writer, DataSource, обработка файлов |
Компоненты проекта разрабатывались параллельно и в ходе интеграции дорабатывались несколькими участниками. В таблице указаны основные зоны ответственности.
Тестирование
Основные компоненты проекта покрыты unit-тестами с использованием JUnit 5.
Проверяются:
- модель
Studentи валидация; equals()/hashCode();- алгоритмы сортировки;
- even-only sorting;
- собственная коллекция;
- Custom Collector;
- поиск;
- генерация данных;
- CSV Reader/Writer.
Документация
Задания и компоненты
- Общее задание
- Student
- Обновление Student
- Собственная коллекция
- Сортировка
- Even-only sorting
- Composite Search
- Поиск вхождений
- CSV Reader / Writer
- Stream и собственная коллекция
- Тестирование
Git и командная разработка
- Правила создания коммитов
- Работа с зависимостями между ветками
- Настройка Git
- Восстановление после force-with-lease
Запуск
pom.xml находится в директории app.
Перейдите в директорию приложения:
cd app
Соберите проект:
mvn clean package
Запустите собранное приложение:
java -jar target/app-1.0-SNAPSHOT.jar
Основной класс приложения:
ru.project.App
Особенности сборки и запуска приложения под Windows
В pom.xml добавить:
Соберите проект:
mvn clean package
Запустите собранное приложение:
javaw -jar target/app-1.0-SNAPSHOT.jar
MyList / MyLinkedList, Java Stream API и собственные стратегии и алгоритмы обработки коллекций.