[关闭]
@jtong 2016-05-02T16:35:18.000000Z 字数 1410 阅读 1655

收银机 - G1 - 买二赠一

面试作业


需求描述

商店里进行购物结算时会使用收银机系统,这台收银机会在结算时根据客户的购物车中的商品和商店正在进行的优惠活动进行结算和打印购物小票。

已知商品信息包含:名称,数量单位,单价,类别和条形码(伪)。
已知我们可以对收银机进行设置,使之支持各种优惠。

我们需要实现一个名为打印小票的小模块,收银机会将输入的数据转换成一个JSON数据然后一次性传给我们这个小模块,我们将从控制台中输出结算清单的文本。

输入格式(样例):

  1. [
  2. 'ITEM000001',
  3. 'ITEM000001',
  4. 'ITEM000001',
  5. 'ITEM000001',
  6. 'ITEM000001',
  7. 'ITEM000003-2',
  8. 'ITEM000005',
  9. 'ITEM000005',
  10. 'ITEM000005'
  11. ]

其中对'ITEM000003-2'来说,"-"之前的是标准的条形码,"-"之后的是数量。
当我们购买需要称量的物品的时候,由称量的机器生成此类条形码,收银机负责识别生成小票。

该商店正在对部分商品进行“买二赠一”的优惠活动。解释:

要求写代码支持上述的功能,并根据输入和设置的不同,输出下列小票。

小票内容及格式(样例):

  1. ***<没钱赚商店>购物清单***
  2. 名称:可口可乐(大),数量:5瓶,单价:6.00(元),小计:30.00(元)
  3. 名称:羽毛球拍,数量:2个,单价:78.00(元),小计:156.00(元)
  4. 名称:苹果,数量:2斤,单价:5.50(元),小计:11.00(元)
  5. ----------------------
  6. 买二赠一商品:
  7. 名称:雪碧,数量:2瓶,价值:6.00(元)
  8. 名称:羽毛球(12只装),数量:1个,价值:12.00(元)
  9. ----------------------
  10. 总计:197.00(元)
  11. 节省:18.00(元)
  12. **********************
  1. ***<没钱赚商店>购物清单***
  2. 名称:可口可乐,数量:3瓶,单价:3.00(元),小计:9.00(元)
  3. 名称:羽毛球,数量:5个,单价:1.00(元),小计:5.00(元)
  4. 名称:苹果,数量:2斤,单价:5.50(元),小计:11.00(元)
  5. ----------------------
  6. 总计:25.00(元)
  7. **********************

数据格式

  1. 每一个商品对象的结构如下(样例):

    1. {
    2. barcode: 'ITEM000000',
    3. name: '可口可乐',
    4. unit: '瓶',
    5. category: '食品',
    6. subCategory: '碳酸饮料',
    7. price: 3.00
    8. }
  2. 促销信息对象的数组格式(样例):

    1. [
    2. {
    3. type: 'BUY_THREE_GET_ONE_FREE',
    4. barcodes: [
    5. 'ITEM000000',
    6. 'ITEM000001'
    7. ]
    8. },
    9. {
    10. type: 'OTHER_PROMOTION',
    11. barcodes: [
    12. 'ITEM000003',
    13. 'ITEM000004'
    14. ]
    15. }
    16. ]

作业要求

  1. 请完成全部需求,并输出样例格示的小票;
  2. 请在保证代码可读性的前提下,尽可能用最小的圈复杂度完成作业;

加分项

  1. 良好的抽象
  2. 写测试
  3. 用github提交,并且有良好的提交习惯
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注