Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Техническое задание: Упрощённый симулятор интернет-магазина

Описание проекта

Консольное Java-приложение, имитирующее работу интернет-магазина.
Пользователь может просматривать каталог товаров, добавлять позиции в корзину, применять скидки и получать финальную стоимость заказа.

Проект предназначен для изучения ООП, архитектурных принципов и практики ревью кода.
Изначально проект содержит баги — задача: найти, проанализировать и исправить их, а затем реализовать дополнительную функциональность.


Описание слоёв

1. model/

  • Product

    • Поля: name (название), price (цена)
  • CartItem

    • Поля: Product product, int quantity
    • Методы:
      • getTotalPrice() — возвращает цену * количество
  • Cart

    • Хранит список CartItem
    • Методы:
      • addItem(Product product, int quantity)
      • applyDiscount(double percent)
      • calculateTotal() — итоговая сумма с учётом скидки
      • getItems()

2. service/

  • StoreService
    • Отвечает за:
      • Отображение каталога
      • Добавление товара в корзину
      • Применение скидки
      • Расчёт и вывод содержимого корзины

3. cli/

  • StoreApp
    • CLI-интерфейс с консольным меню:
      • Показать каталог
      • Добавить товар в корзину
      • Применить скидку
      • Показать содержимое корзины
      • Завершить работу

Основная функциональность

  1. Просмотр каталога товаров
  2. Добавление товаров в корзину
  3. Применение скидки в процентах ко всей корзине
  4. Просмотр корзины и финальной суммы
  5. Завершение сессии

Известные баги (нужно исправить)

  1. Добавление товара с отрицательным количеством
    Пользователь может ввести отрицательное число, и товар будет добавлен в корзину.

  2. Итоговая сумма может быть отрицательной
    При больших скидках (больше 100%) calculateTotal() может вернуть отрицательное значение.

  3. В корзине может содержаться 2 одинаковых продукта с разными количеством


Дополнительная функциональность (нужно реализовать)

  • Промокоды
    Добавить поддержку строковых промокодов, например:

    • WELCOME10 — скидка 10%
    • VIP50 — скидка 50%

    Промокод может вводиться один раз и применяется вместо обычной скидки.

    Предусмотреть:

    • Проверку валидности промокода
    • Запрет на повторное применение
    • Возможность легко добавлять новые промокоды (в коде)

Требования

  • Java 17+
  • Использовать только стандартную библиотеку
  • Не использовать static для хранения состояния приложения
  • Следовать принципам ООП и SRP

Цели обучения

  • Практика ревью и отладки кода
  • Работа с базовыми ООП-концепциями: классы, интерфейсы, композиция
  • Слоистая архитектура и её реализация на Java
  • Безопасная работа с пользовательским вводом
  • Расширение готового проекта: добавление новой фичи

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages