演習問題6(レジ)


演習問題6-3 (Memento)

レジで会計しているときに、買い忘れを思い出すこともあると思います。だからといって、レジの会計を止めて(後に並んでいる人を待たせて)買い忘れを取りに行ってくるということはできません。

そのため、レジの処理を一時中断して、後の人の会計を先に済ませて、その後レジの処理を再開できるようにします。

そこで、一時中断したレジの処理を保存(store メソッド)し、再開後その続きができるように保存した情報を復元(restore メソッド)できるように Register クラスを修正してください。また、保存する仕組みとして Memento クラスも作成してください。


実行結果
お買い上げ日時 2020-09-23 12:30:00
合計金額  2,560円


お買い上げ日時 2020-09-23 12:30:00
大根 125円 1個
豚肉 245円 250g
レタス 147円 1個
トマト 276円 4個
鶏肉 156円 200g
合計金額  949円


コード

Enshu603.java
public class Enshu603 { public static void main(String[] args) { Register reg = new Register(); Cart cart1 = new Cart(); cart1.add(new Vegetable("大根", 125, 1)); cart1.add(new Meat("豚肉", 98, 250)); cart1.add(new Vegetable("レタス", 147, 1)); cart1.add(new Vegetable("トマト", 69, 4)); reg.accept(cart1); reg.append(new CmdPurchaseTime()); reg.append(new CmdAccount()); reg.append(new CmdTotalPrice()); Memento mm = reg.store(); // 処理中断 -------------------- // 別処理 Cart cart2 = new Cart(); cart2.add(new Meat("牛肉", 395, 400)); cart2.add(new Vegetable("じゃがいも", 98, 10)); reg.accept(cart2); reg.append(new CmdPurchaseTime()); reg.append(new CmdTotalPrice()); reg.execute(); // 会計(表示) // 処理再開 -------------------- reg.restore(mm); cart1.add(new Meat("鶏肉", 78, 200)); // 買い忘れ 購入 reg.execute(); // 会計(表示) } }






演習問題6-3 (Memento)