docs: rename README to README.md
This commit is contained in:
@@ -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
|
||||
```
|
||||
Reference in New Issue
Block a user