本篇文章主要介绍了"JavaScript之POS机面向对象的设计",主要涉及到方面的内容,对于web前端感兴趣的同学可以参考一下:
前情提要商店里进行购物结算时会使用收银机(POS)系统,这台收银机会在结算时根据客户的购物车(Cart)中的商品(Item)和商店正在进行的优惠活动(Promo...
前情提要
商店里进行购物结算时会使用收银机(POS)系统,这台收银机会在结算时根据客户的购物车(Cart)中的商品(Item)和商店正在进行的优惠活动(Promotion)进行结算和打印购物清单。
已知该商店正在对部分商品进行“买二赠一”的优惠活动。
我们需要实现一个名为printInventory
函数,该函数能够将指定格式的数据作为参数输入,然后在浏览器的控制台中输出结算清单的文本。
输入格式(样例):
[
'ITEM000001',
'ITEM000001',
'ITEM000001',
'ITEM000001',
'ITEM000001',
'ITEM000003-2',
'ITEM000005',
'ITEM000005',
'ITEM000005'
]
其中对'ITEM000003-2'来说,"-"之前的是标准的条形码,"-"之后的是数量。 当我们购买需要称量的物品的时候,由称量的机器生成此类条形码,收银机负责识别生成小票。
清单内容(样例,其中的打印时间为打印时的实际时间):
***<没钱赚商店>购物清单***
打印时间:2014年08月04日 08:09:05
----------------------
名称:可口可乐,数量:3瓶,单价:3.00(元),小计:6.00(元)
名称:羽毛球,数量:5个,单价:1.00(元),小计:4.00(元)
名称:苹果,数量:2斤,单价:5.50(元),小计:11.00(元)
----------------------
挥泪赠送商品:
名称:可口可乐,数量:1瓶
名称:羽毛球,数量:1个
----------------------
总计:21.00(元)
节省:4.00(元)
**********************
没钱赚商店>
面向对象设计
根据需求,设立 3 个类:Order、Item 和 Promotion,其中 Item 和 Promotion 类已在模版中给出,下文中会对 Item 进行一定量的扩充。
Order 表示客户的一个订单,其中每一个具体的购买物件为一个 Item 。
在 fixtures.js
中已经给出了 loadAllItems()
接口,通过该函数可获取所有商品的基本信息。同时,通过loadPromotions()
可以获取当前的促销信息。此处,通过这两个接口来初始化购物单(Order):
main.js 中:
function printInventory (inputs) {
var order = new Order(loadAllItems(), loadPromotions(), inputs);
}
Order.js 的构造函数:
function Order (items, promotions, list) {
this.items = {}; //存储已购商品清单
this.total = 0; //存储需付款总价
this.original = 0; //存储优惠前总价
this.initiate(items, promotions, list); //调用初始化函数
}
Order.js 的初始化方法: