Files
aston-team-project/README
T

257 lines
8.3 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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
```