商店里进行购物结算时会使用收银机系统,这台收银机会在结算时根据客户的购物车中的商品和商店正在进行的优惠活动进行结算和打印购物小票。
已知商品信息包含:名称,数量,单位,单价,类别和条形码(伪)。 已知我们可以对收银机进行设置,使之支持各种优惠。
我们需要实现一个名为打印小票的小模块,收银机会将输入的数据转换成一个JSON数据然后一次性传给我们这个小模块,我们将从控制台中输出结算清单的文本。
输入格式(样例):
[
'ITEM000001',
'ITEM000001',
'ITEM000001',
'ITEM000001',
'ITEM000001',
'ITEM000003-2',
'ITEM000005',
'ITEM000005',
'ITEM000005'
]
其中对ITEM000003-2
来说, -
之前的是标准的条形码, -
之后的是数量。
当我们购买需要称量的物品的时候,由称量的机器生成此类条形码,收银机负责识别生成小票。
该商店正在对部分商品进行单品批发价出售
的优惠活动。解释:
“单品批发价出售”是指,当某一商品买进十个以上,一律按照九五折出售。 店员设置该优惠哪些条形码对应的商品可以享受此优惠。
要求写代码支持上述的功能,并根据输入和设置的不同,输出下列小票。
当购买的商品中,有符合“单品批发价出售”优惠条件的商品时:
***<没钱赚商店>购物清单***
名称:可口可乐,数量:11瓶,单价:3.00(元),小计:31.35(元),优惠:1.65(元)
名称:羽毛球,数量:5个,单价:1.00(元),小计:5.00(元)
名称:苹果,数量:2斤,单价:5.50(元),小计:11.00(元)
----------------------
批发价出售商品:
名称:可口可乐,数量:11瓶
----------------------
总计:47.35(元)
节省:1.65(元)
**********************
当购买的商品中,没有符合“单品批发价出售”优惠条件的商品时:
***<没钱赚商店>购物清单***
名称:可口可乐,数量:3瓶,单价:3.00(元),小计:9.00(元)
名称:羽毛球,数量:5个,单价:1.00(元),小计:5.00(元)
名称:苹果,数量:2斤,单价:5.50(元),小计:11.00(元)
----------------------
总计:25.00(元)
**********************
每一个商品对象的结构如下(样例):
{
barcode: 'ITEM000000',
name: '可口可乐',
unit: '瓶',
category: '食品',
subCategory: '碳酸饮料',
price: 3.00
}
促销信息对象的数组格式(样例):
[
{
type: 'BUY_THREE_GET_ONE_FREE',
barcodes: [
'ITEM000000',
'ITEM000001'
]
},
{
type: 'OTHER_PROMOTION',
barcodes: [
'ITEM000003',
'ITEM000004'
]
}
]
- 请完成全部需求,并输出样例格示的小票;
- 请在保证代码可读性的前提下,尽可能用最小的圈复杂度完成作业;
- 良好的抽象
- 写测试
- 用github提交,并且有良好的提交习惯