Files
aston-team-project/README.md
T

8.3 KiB

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
     ↓
ПО КАКОМУ ПОЛЮ сортировать

Поиск поддерживает несколько критериев:

  • номер группы;
  • средний балл;
  • номер зачётной книжки.

Несколько условий могут объединяться через И / ИЛИ.

Для составных условий используется паттерн 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.

Документация

Задания и компоненты

Git и командная разработка


Запуск

pom.xml находится в директории app.

Перейдите в директорию приложения:

cd app

Соберите проект:

mvn clean package

Запустите собранное приложение:

java -jar target/app-1.0-SNAPSHOT.jar

Основной класс приложения:

ru.project.App