Консольное Java-приложение, имитирующее работу интернет-магазина.
Пользователь может просматривать каталог товаров, добавлять позиции в корзину, применять скидки и получать финальную стоимость заказа.
Проект предназначен для изучения ООП, архитектурных принципов и практики ревью кода.
Изначально проект содержит баги — задача: найти, проанализировать и исправить их, а затем реализовать дополнительную функциональность.
-
Product
- Поля:
name(название),price(цена)
- Поля:
-
CartItem
- Поля:
Product product,int quantity - Методы:
getTotalPrice()— возвращает цену * количество
- Поля:
-
Cart
- Хранит список
CartItem - Методы:
addItem(Product product, int quantity)applyDiscount(double percent)calculateTotal()— итоговая сумма с учётом скидкиgetItems()
- Хранит список
- StoreService
- Отвечает за:
- Отображение каталога
- Добавление товара в корзину
- Применение скидки
- Расчёт и вывод содержимого корзины
- Отвечает за:
- StoreApp
- CLI-интерфейс с консольным меню:
- Показать каталог
- Добавить товар в корзину
- Применить скидку
- Показать содержимое корзины
- Завершить работу
- CLI-интерфейс с консольным меню:
- Просмотр каталога товаров
- Добавление товаров в корзину
- Применение скидки в процентах ко всей корзине
- Просмотр корзины и финальной суммы
- Завершение сессии
-
Добавление товара с отрицательным количеством
Пользователь может ввести отрицательное число, и товар будет добавлен в корзину. -
Итоговая сумма может быть отрицательной
При больших скидках (больше 100%)calculateTotal()может вернуть отрицательное значение. -
В корзине может содержаться 2 одинаковых продукта с разными количеством
-
Промокоды
Добавить поддержку строковых промокодов, например:WELCOME10— скидка 10%VIP50— скидка 50%
Промокод может вводиться один раз и применяется вместо обычной скидки.
Предусмотреть:
- Проверку валидности промокода
- Запрет на повторное применение
- Возможность легко добавлять новые промокоды (в коде)
- Java 17+
- Использовать только стандартную библиотеку
- Не использовать
staticдля хранения состояния приложения - Следовать принципам ООП и SRP
- Практика ревью и отладки кода
- Работа с базовыми ООП-концепциями: классы, интерфейсы, композиция
- Слоистая архитектура и её реализация на Java
- Безопасная работа с пользовательским вводом
- Расширение готового проекта: добавление новой фичи