1
- 收银台子系统:它负责创建账单,完成账本的基础创建,提供商品信息给仓库,保证库存的实时更新,处理销售。该子系统依赖于账本子系统和仓库子系统。
- 账本子系统:它负责管理账本,根据收银台子系统发来的账单信息及时更新账本。
- 仓库子系统:它负责管理库存,根据收银台子系统发来的商品信息及时更新库存。
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)精化类间的关系
- CashDesk 类与 Sale 类存在组合关系,每个
CashDesk实例管理一个Sale实例(1对1)。 - Sale 类与 LineItem 类存在聚合关系(1对多),表示一次销售包含多个商品项。
- Payment 类与 Sale 类存在依赖关系,每个
Sale实例对应一个Payment实例。 - Store 类与 Item 类存在关联关系,通过
Barcode查询Item信息(1对多)。 - Barcode 类作为 Item 类的属性,标识商品唯一性,并存储价格和库存。
(2)精化类属性的设计
- Sale 类
private double total:销售总金额,初始值为0.0。private boolean complete:标识销售是否完成,初始值为false。
- Payment 类(抽象类)
protected double amount:支付金额,初始值为0.0。
- Item 类
private Barcode barcode:商品条形码,类型为Barcode。private int stock:库存数量,初始为0。
- LineItem类
(3)精化部分类方法的设计
- CashDesk 类
startSale():初始化currentSale实例,并调用Sale的构造函数。enterItem(Barcode barcode, int quantity):调用Store.find(barcode)获取Item,创建LineItem并添加到currentSale。cashPay(double received, double total):计算找零,调用currentSale.setComplete()。
- Store 类
find(Barcode barcode):根据条形码查询并返回Item实例,若不存在则返回null。
(4)精化类方法的实现算法设计
- 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 活动图

