Цель
В этом задании вы продолжите моделировать систему кассира супермаркета, используя передовые принципы объектно-ориентированного проектирования (ООП). Вам необходимо применить наследование, полиморфизм, интерфейсы, дженерики и обработку исключений в вашей реализации.Функции системы
В супермаркете продаются разнообразные продукты, разделенные на следующие категории:- Продукты на полках:
Такие продукты как упакованные продукты питания или напитки, имеющие срок годности. Если до истечения срока действия продукта осталось 30 дней или меньше, он продается по цене 30 % от первоначальной цены.
В нашей системе учитывается только дата (а не время). Текущий день не учитывается в расчете. Например, если срок действия товара истекает 10 декабря, а сегодня 9 декабря, до истечения срока действия остается всего 1 день.
- У этих товаров нет срока годности (например, книг, одежды, электронных устройств). Некоторые товары длительного пользования подлежат возврату, тогда как другие (например, интимная одежда) не подлежат возврату.
- Свежие продукты, такие как фрукты, овощи и свежее молоко. На их цену влияет свежесть: если срок годности продукта истёк наполовину, он продается по 50 % от первоначальной цены.
В супермаркете действуют следующие правила:
- Продукты с истекшим сроком годности продаваться не могут.
- Премиум-участники платят только 95 % от общей стоимости.
- Правила возврата:
Продукты длительного пользования могут быть возвращены в течение (≤) 30 дней . - Полка товары могут быть возвращены в течение (≤) 7 дней.
- Скоропортящиеся продукты возврату не подлежат.
Обязательные требования к реализации
Ваша реализация должна включать следующие объектно-ориентированные функции:- Абстрактные классы и методы: определите подходящие места для использования абстрактных классов и абстрактных методов для обеспечения структуры.
- Обобщенные типы: используйте универсальные типы для создания многоразовых и безопасных типов код.
- Интерфейсы: реализуйте два интерфейса:
Возврат → Для продуктов, подлежащих возврату. - Срок годности → Для продуктов со сроком годности.
Книга, Бытовая техника, Молоко, Овощи, Одежда, Упакованная еда, Напитки.
[*]Обработка настраиваемых исключений. Определите собственное исключение ExpiredProductException для обработки случаев, когда клиент случайно пытается приобрести товары с истекшим сроком годности.
Обязательные сценарии (реализованы в вашем основном методе)
Сценарий 1 (S1): 03.03.2026 Премиум-участник совершает покупку, состоящую из:-
1 банка Колы → 8 HKD, до окончания срока годности осталось 20 дней. (Срок годности: 23-03-2026) - 1 книга («Маленький принц») → 100 гонконгских долларов.
- 1 пара носков (возврату не подлежат) → 30 гонконгских долларов.
- 1 бутылка свежего молока (Дата производства: 01.03.2026, Срок годности: 7 дней, Первоначальная цена: 24 гонконгских доллара).
- 1 пакетик картофельных чипсов (с истекшим сроком годности).
Ожидаемый результат (S1):
- Система должна обнаружить и отклонить картофельные чипсы с истекшим сроком годности с сообщением об ошибке (система не должна дать сбой):
"Ошибка: Срок годности картофельных чипсов истек. Вы не можете их купить". - Затем система должна рассчитать и отобразить общую сумму после применения всех соответствующих скидок.
"Общая сумма платежа равна: ??? HKD"
Ожидаемый результат (S2):
Ваша система сначала должна:
- Отклонить возврат средств за носки (не подлежит возврату).
Вывод: «К сожалению, товар [Носок] не подлежит возврату».
- Вывод: «К сожалению, этот товар [Молоко] возврату не подлежит».
- Вывод: «К сожалению, период возврата [Колы] истек».
Затем утвердите возврат средств за другие подходящие продукты (например, книги и товары длительного пользования). бытовая техника).
- Рассчитайте и отобразите общую сумму возврата
(напоминание: поскольку клиент является участником, для возврата необходимо применить сумму со скидкой).
"Общая сумма возврата: ??? HKD"
Оценочные баллы:
- Ваша система может выводить ожидаемый результат
- Ваш код соответствует ПЯТИ обязательным требованиям реализации
- Ваш код соответствует хорошему стилю программирования Java (именование и организация пакетов)
Отправка:
- Отправьте исходный код (вся папка проекта).
- Диаграмма классов UML
Не рукописный, используйте такие инструменты, как draw.io, экспортируйте в формате pdf.
[*]Сжимайте исходный код и PDF-файл UML в zip-файл с именем в следующем формате:
StudentId_YourName_Assignment2.zip (например, 56343732_Chris_Assignment2.zip)