Merge release 1.0.0 into develop

This commit is contained in:
2026-09-02 19:07:35 +04:00
+256
View File
@@ -0,0 +1,256 @@
# Student Management Console Application
Консольное Java-приложение для создания, хранения, сортировки, поиска и сохранения коллекций студентов.
Проект разработан командой в рамках учебного задания и демонстрирует применение ООП, собственных коллекций, алгоритмов сортировки, Stream API, паттернов проектирования, CSV-ввода/вывода и unit-тестирования.
---
## Возможности
Приложение позволяет:
- создавать коллекции студентов вручную;
- генерировать случайные данные;
- загружать студентов из CSV-файла;
- просматривать текущую коллекцию;
- сохранять коллекцию в CSV;
- сортировать студентов по номеру группы, среднему баллу и номеру зачётной книжки;
- выбирать алгоритм сортировки;
- выполнять специальную even-only сортировку;
- искать студентов по нескольким критериям;
- объединять критерии поиска через `И` / `ИЛИ`;
- подсчитывать количество вхождений студента;
- получать индексы найденных элементов.
---
## Архитектура
Основной поток данных:
```text
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>` — поле, по которому сравниваются студенты.
```text
SortStrategy
↓
КАК сортировать
Comparator
↓
ПО КАКОМУ ПОЛЮ сортировать
```
### Search
Поиск поддерживает несколько критериев:
- номер группы;
- средний балл;
- номер зачётной книжки.
Несколько условий могут объединяться через `И` / `ИЛИ`.
Для составных условий используется паттерн **Composite**.
Также реализован поиск количества вхождений студента и индексов найденных элементов.
### CSV
За работу с CSV отвечают:
- `StudentCsvReader`;
- `StudentCsvWriter`.
Загрузка данных:
```text
CSV
↓
StudentCsvReader
↓
Student
↓
MyList<Student>
```
Сохранение:
```text
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.
---
## Документация
### Задания и компоненты
- [Общее задание](TASK.ru.md)
- [Student](docs/tasks/Student.md)
- [Обновление Student](docs/tasks/StudentUpdate.md)
- [Собственная коллекция](docs/tasks/CustomList.md)
- [Сортировка](docs/tasks/Sorting.md)
- [Even-only sorting](docs/tasks/EvenOnlySortStrategy.md)
- [Composite Search](docs/tasks/CompositeStudentSearch.md)
- [Поиск вхождений](docs/tasks/StudentOccurrenceIndexFinder.md)
- [CSV Reader / Writer](docs/tasks/CsvStudentIO.md)
- [Stream и собственная коллекция](docs/tasks/StreamCollection.md)
- [Тестирование](docs/tasks/Testing.md)
### Git и командная разработка
- [Правила создания коммитов](CONTRIBUTING.ru.md)
- [Работа с зависимостями между ветками](GIT_BRANCH_DEPENDENCIES.ru.md)
- [Настройка Git](GIT_CONFIG.ru.md)
- [Восстановление после force-with-lease](GIT_FORCE_WITH_LEASE_RECOVERY.ru.md)
---
## Запуск
`pom.xml` находится в директории `app`.
Перейдите в директорию приложения:
```bash
cd app
```
Соберите проект:
```bash
mvn clean package
```
Запустите собранное приложение:
```bash
java -jar target/app-1.0-SNAPSHOT.jar
```
Основной класс приложения:
```text
ru.project.App
```