Top.Mail.Ru

Шаги решения:

1. Создать классы `Item` (товар), `Receipt` (чек) и `CashRegister` (кассовый аппарат).
2. В классе `Item` создать поля для хранения наименования товара и его цены.
3. В классе `Receipt` создать поле для хранения списка товаров, проданных в чеке.
4. В классе `CashRegister` создать поле для хранения списка всех чеков и поля для подсчета общей статистики (количества проданных товаров, суммарной выручки).
5. В классе `CashRegister` создать метод `addNewReceipt`, который будет добавлять новый чек в список чеков.
6. В методе `addNewReceipt` добавить возможность добавления позиций в чек с помощью ввода пользователем.
7. В классе `CashRegister` создать метод `getStatistics`, который будет выводить статистику на экран (количество проданных товаров, количество проданных товаров по наименованиям, суммарная выручка).
8. В классе `CashRegister` добавить метод `undoLastOperation`, который будет отменять последнюю операцию – удаление последнего чека из списка.
9. Реализовать консольное меню с четырьмя пунктами: “Новый чек”, “Просмотр статистики”, “Отмена операции” и “Выход”.
10. В зависимости от выбранного пункта меню вызвать соответствующий метод класса `CashRegister`.

Паттерн Снимок (Memento) здесь используется для хранения списка чеков при вызове метода `undoLastOperation`. При каждом вызове метода `addNewReceipt` создается снимок текущего состояния списка чеков, который может быть восстановлен в случае отмены последней операции.

Таким образом, приложение реализует имитацию работы кассового аппарата, позволяя пользователю добавлять новые чеки, просматривать статистику и отменять последнюю операцию.

   
[metform form_id="1136"]