Lab4

1

  1. 收银台子系统:它负责创建账单,完成账本的基础创建,提供商品信息给仓库,保证库存的实时更新,处理销售。该子系统依赖于账本子系统和仓库子系统。
  2. 账本子系统:它负责管理账本,根据收银台子系统发来的账单信息及时更新账本。
  3. 仓库子系统:它负责管理库存,根据收银台子系统发来的商品信息及时更新库存。

2

“处理销售”的功能的视线主要是通过"Cashier"对象提供的服务,不断输入商品并最终交易。具体实现过程见图1-6所描述的用例实现顺序图
首先,Cashier向CashDesk发送消息 startSale() ,CashDesk向Sale发送消息 Sale()
随后,只要还有更多物品,则Cashier向CashDesk发送消息 enterItem(code, qty) 。CashDesk向Store发送消息 find(code, itm)来查找库存, Store向Item发送消息 find(code, itm) 来查找库存;同时,CashDesk向Sale发送消息 addLine(itm, qty),Sale向LineItem发送消息 LineItem(itm, qty),LineItem向Item发送消息 getPrice(code, prc)来货的价格
然后Cashier向CashDesk发送消息 finishSale(),CashDesk向Sale发送消息 getTotal(),Sale向LineItem发送消息getSubTotal(),CashDesk向Sale发送消息 getComplete()。Cashier向CashDesk发送消息 cashPay(a, c),CashDesk向Store发送消息 addSale(sale)更新记录,Store向Item发送消息 update() 更新库存。CashDesk向Sale发送 makePay(a) 来发起支付,Sale向Pay发送消息 makePay(a) 来完成支付

3

(1)精化类间的关系

  1. CashDesk 类与 Sale 类存在组合关系,每个 CashDesk 实例管理一个 Sale 实例(1对1)。
  2. Sale 类与 LineItem 类存在聚合关系(1对多),表示一次销售包含多个商品项。
  3. Payment 类与 Sale 类存在依赖关系,每个 Sale 实例对应一个 Payment 实例。
  4. Store 类与 Item 类存在关联关系,通过 Barcode 查询 Item 信息(1对多)。
  5. Barcode 类作为 Item 类的属性,标识商品唯一性,并存储价格和库存。
    4-8-2.png

(2)精化类属性的设计

  1. Sale 类
    • private double total:销售总金额,初始值为 0.0
    • private boolean complete:标识销售是否完成,初始值为 false
  2. Payment 类(抽象类)
    • protected double amount:支付金额,初始值为 0.0
  3. Item 类
    • private Barcode barcode:商品条形码,类型为 Barcode
    • private int stock:库存数量,初始为 0
  4. LineItem类

(3)精化部分类方法的设计

  1. CashDesk 类
    • startSale():初始化 currentSale 实例,并调用 Sale 的构造函数。
    • enterItem(Barcode barcode, int quantity):调用 Store.find(barcode) 获取 Item,创建 LineItem 并添加到 currentSale
    • cashPay(double received, double total):计算找零,调用 currentSale.setComplete()
  2. Store 类
    • find(Barcode barcode):根据条形码查询并返回 Item 实例,若不存在则返回 null

(4)精化类方法的实现算法设计

  1. CashDesk.cashPay(double received, double total)
if (received >= total) {  
   double change = received - total;  
   payment = new CashPayment(total);  
   payment.makePay(total);  
   currentSale.setComplete();  
   return change;  
} else {  
   throw new InsufficientPaymentException();  
}  

(5)补充 CardPayment 活动图

4-8.png

Built with MDFriday ❤️