Skip to content

Latest commit

 

History

History
119 lines (90 loc) · 7.25 KB

File metadata and controls

119 lines (90 loc) · 7.25 KB

Car Manager App

Консольное приложение для управления списком автомобилей с поддержкой сортировки, фильтрации, многопоточности и автосохранения.


Мой вклад в проект

В рамках командной разработки я отвечала за следующие модули:

  • Консольное меню — реализация навигации, обработка выбора и ошибок ввода.
  • Ручное добавление машин — пошаговый ввод модели, мощности и года с валидацией.
  • Генерация случайных машин — добавление произвольного количества автомобилей.
  • Вывод списка — нумерация, форматирование и отображение всех машин.
  • Сортировки — по модели, мощности, году выпуска (с использованием стратегий).
  • Расширенная сортировка — выбор алгоритма, поля и режима (чётные/нечётные).
  • Удаление — одной машины по номеру или всех с подтверждением.
  • Работа с файлами — ручное сохранение/загрузка, автосохранение при выходе, запоминание последнего файла.
  • Отмена последнего действия (Undo) — реализована через декоратор UndoCarCollection.
  • Многопоточный поиск — поиск по модели с использованием parallelStream().
  • Валидация ввода — проверка полей через FieldValidator, циклы повторного ввода.
  • Поддержка английской раскладки — ответы да/lf, нет/ytn, yes/no.
  • Тестирование — написаны тесты для класса Car и сортировки по модели.
  • Оформление репозитория — подготовка README.md и структуры проекта.

Архитектура проекта разработана совместно с командой.
Ссылка на исходный репозиторий: danypevzner/CarSorting


Возможности

  • Добавление машин вручную или случайной генерацией
  • Загрузка и сохранение списка в CSV-файл
  • Автосохранение при выходе с запоминанием последнего файла
  • Сортировка по модели, мощности или году
  • Расширенная сортировка с выбором алгоритма
  • Многопоточный поиск по модели
  • Удаление одной или всех машин
  • Отмена последнего действия

Стек технологий

  • Java 17+
  • Maven
  • TestNG
  • Многопоточность (parallelStream)
  • Git / GitHub

Что здесь можно делать?

  • Добавлять машины — вручную или случайной генерацией.
  • Загружать и сохранять файлы с машинами (формат .csv с разделителем ;).
  • Сортировать по модели, мощности или году выпуска.
  • Выбирать алгоритм сортировки — пузырьковая, вставками или выбором.
  • Искать машины по модели в многопоточном режиме (да, это быстро).
  • Удалять одну машину по номеру или все сразу (с подтверждением).
  • Автосохранение при выходе — программа запоминает последний файл и предлагает загрузить его при следующем запуске.

Почему это удобно?

  • Файл запоминается.
    При следующем запуске программа спросит: «Загрузить последний сохранённый файл?» — и если ответить «да», всё подхватится автоматически.
  • Ответы на да/нет работают в обеих раскладках.
    Можно вводить да, yes, lf, нет, no, ytn — программа поймёт.
  • Сортировка с выбором — можно сравнить разные алгоритмы на одном и том же списке.
  • Поиск через несколько потоков — ускорение работы на больших данных.

Как это устроено внутри?

  • Car — это record, который содержит модель, мощность и год выпуска.
  • CarCollection — умная коллекция, умеет сортировать по полям, фильтровать чётные значения и считать вхождения.
  • CliClient — консольный интерфейс, который общается с пользователем и управляет данными.
  • FileUtil — отвечает за чтение и запись файлов, работает с CSV.
  • lastFile.txt — маленький служебный файл, в котором хранится имя последнего сохранённого файла.

Как запустить

git clone https://github.com/AlexaJavaDev/CarManagerApp.git
cd CarManagerApp
mvn compile
mvn exec:java -Dexec.mainClass="App"

Или просто открой в IntelliJ IDEA и запусти App.java.

Формат файла:
Файлы сохраняются в простом текстовом формате:

Model;Power;Year
Tesla;250;2020
BMW;200;2010

Разделитель — точка с запятой, чтобы легко открывалось в Excel.


Почему это стоит попробовать?

  1. Потому что это живой проект, а не сухое упражнение.
  2. Потому что он думает за тебя: запоминает файлы, понимает разные раскладки, не даёт удалить всё случайно.
  3. Потому что здесь есть многопоточность — а это уже не совсем «новичковый» уровень.

Что дальше?

  • Проект можно развивать:
  • Добавить GUI.
  • Добавить базу данных.
  • Расширить поиск по годам и мощности.

Но и в текущем виде это — полноценный инструмент, которым можно пользоваться каждый день.