【难题求解】做出来有ThoughtWorks大神带你结对编程
给你一次机会,轻松进入全球顶尖IT咨询公司ThoughtWorks,跟着技术大牛、男神女神们一起学习编程,你愿意吗?
亲临全球顶尖IT公司参加OpenDay,感受真实办公场景!
体验自由Geek氛围,与男神女神深入交流!
零距离接触技术大牛,学习最前沿编程技能!
经历四期编程实践,一月内创造完美代码!
活动期间,各种礼品,礼包,奖金等你拿!
只需两步,轻松报名
带着编程的都有哪些大牛?
报名需要什么条件?
活动的时间是?
结对编程的形式是?
终极PK是指什么?
收银机 - G1 - 买三免一
面试作业
需求描述
商店里进行购物结算时会使用收银机系统,这台收银机会在结算时根据客户的购物车中的商品和商店正在进行的优惠活动进行结算和打印购物小票。
已知商品信息包含:名称,数量单位,单价,类别和条形码(伪),数据结构如下:
javascript { barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', category: '食品', subCategory: '碳酸饮料', price: 3.00 }
已知我们可以对收银机进行设置,使之支持各种优惠。
我们需要实现一个名为打印小票的小模块,收银机会将输入的数据转换成一个JSON数据然后一次性传给我们这个小模块,我们将从控制台中输出结算清单的文本。
输入格式(样例):
javascript [ 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000003-2', 'ITEM000005', 'ITEM000005', 'ITEM000005' ]
其中对'ITEM000003-2'来说,"-"之前的是标准的条形码,"-"之后的是商品数量。 当我们购买需要称量的物品的时候,由称量的机器生成此类条形码,收银机负责识别生成小票。
该商店正在对部分商品进行“买三免一”的优惠活动。解释:
“买三免一”是指,每当某一商品买进三个,就有一个免单。 店员设置该优惠哪些条形码对应的商品可以享受此优惠。 要求写代码支持上述的功能,并根据输入和设置的不同,输出下列小票。
小票内容及格式(样例):
当购买的商品中,有符合“买三免一”优惠条件的商品时:
``` <没钱赚商店>购物清单 名称:可口可乐,数量:3瓶,单价:3.00(元),小计:6.00(元) 名称:羽毛球,数量:5个,单价:1.00(元),小计:4.00(元)
名称:苹果,数量:2斤,单价:5.50(元),小计:11.00(元)
买三免一商品: 名称:可口可乐,数量:1瓶
名称:羽毛球,数量:1个
总计:21.00(元) 节省:4.00(元)
```
当购买的商品中,没有符合“买三免一”优惠条件的商品时:
总计:25.00(元)
```
数据格式
每一个商品对象的结构如下(样例):
javascript { barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', category: '食品', subCategory: '碳酸饮料', price: 3.00 }
促销信息对象的数组格式(样例):
javascript [ { type: 'BUY_THREE_GET_ONE_FREE', barcodes: [ 'ITEM000000', 'ITEM000001' ] } ]注意:type和barcodes是促销信息对象的主体结构,也可以适当扩展其它属性,以适应程序的扩展性。
作业要求
请完成全部需求,并输出样例格示的小票; 程序实现语言(JavaScript、C#、Java、Scala等)和实现形式(Console、Web、Desktop、APP等)不限; 请在保证实现代码的同时,尽量保持代码的整洁性、可读性、易于扩展和维护性等;
加分项
满足以下的条件(但并不仅限于这些条件),将会成为你的加分项:
良好的抽象和设计; 完善的测试,TDD开发; git小步提交; 良好的构建和编码规范;
2、收银机 - G1 - 打折
需求描述
商店里进行购物结算时会使用收银机系统,这台收银机会在结算时根据客户的购物车中的商品和商店正在进行的优惠活动进行结算和打印购物小票。
已知的信息:
-
商品信息,包含:条形码(伪),名称,数量单位,单价和类别。
javascript { barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', category: '食品', subCategory: '碳酸饮料', price: 3.00 }
-
我们可以对收银机进行设置,使之支持各种优惠。
我们需要实现一个名为打印小票的小模块,收银机会将输入的数据转换成一个JSON数据,然后一次性传给我们这个小模块,我们将从控制台中输出结算清单的文本。
输入格式(样例):
javascript [ 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000003-2', 'ITEM000005', 'ITEM000005', 'ITEM000005' ]
其中对'ITEM000003-2'来说,"-"之前的是标准的条形码,"-"之后的是数量。 当我们购买需要称量的物品的时候,由称量的机器生成此类条形码,收银机负责识别生成小票。
该商店正在对部分商品进行“单品打折”的优惠活动。对于“单品打折”的解释:
- “单品打折”是指,某一商品的总价会打完折再收取。
- 店员设置该优惠,设置哪些条形码对应的商品可以享受此优惠以及折扣的比例。
要求写代码支持上述的功能,并根据输入和设置的不同,输出下列小票。
小票内容及格式(样例):
- 当购买的商品中,有符合“单品打折”优惠条件的商品时:
单品打折商品: 名称:可口可乐,折扣:九五折 名称:羽毛球,折扣:九折
总计:24.05(元) 节省:0.95(元)
`
- 当购买的商品中,没有符合“单品打折”优惠条件的商品时:
总计:25.00(元)
`
数据格式
-
每一个商品对象的结构如下(样例),学生可以参照以下结构生成更多不同的商品:
javascript { barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', category: '食品', subCategory: '碳酸饮料', price: 3.00 }
-
促销信息对象的数组格式(样例):
javascript [ { type: 'FIVE_PERCENT_DISCOUNT', barcodes: [ 'ITEM000000' ], }, { type: 'TEN_PERCENT_DISCOUNT', barcodes: [ 'ITEM000001' ], } ]
作业要求
- 请完成全部需求,并输出样例格示的小票;
- 程序实现语言(JavaScript、C#、Java、Scala等)和实现形式(Console、Web、Desktop、APP等)不限;
- 请在保证实现代码的同时,尽量保持代码的整洁性、可读性、易于扩展和维护性等;
加分项
满足以下的条件(但并不仅限于这些条件),将会成为你的加分项:
- 良好的抽象和设计;
- 完善的测试,TDD开发;
- git小步提交;
- 良好的构建和编码规范;
3、收银机 - G1 - 单品满100减10块
需求描述
商店里进行购物结算时会使用收银机系统,这台收银机会在结算时根据客户的购物车中的商品和商店正在进行的优惠活动进行结算和打印购物小票。
-
已知商品信息包含:名称,数量单位,单价,类别和条形码(伪)。以下是单个商品对象的结构:
javascript { barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', category: '食品', subCategory: '碳酸饮料', price: 3.00 }
-
已知我们可以对收银机进行设置,使之支持各种优惠。
我们需要实现一个名为打印小票的小模块,收银机会将输入的数据转换成一个JSON数据然后一次性传给我们这个小模块,我们将从控制台中输出结算清单的文本。
输入格式(样例):
javascript [ 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000003-2', 'ITEM000005', 'ITEM000005', 'ITEM000005' ]
其中对'ITEM000003-2'来说,"-"之前的是标准的条形码,"-"之后的是商品数量。 当我们购买需要称量的物品的时候,由称量的机器生成此类条形码,收银机负责识别生成小票。
该商店正在对部分商品进行“单品满100减10块”的优惠活动。解释:
- “单品满100减10块”是指,每当某一款商品算完小计之后,如果满100,则减去10元再收取,可累计优惠。
- 店员设置该优惠哪些条形码对应的商品可以享受此优惠。
要求写代码支持上述的功能,并根据输入和设置的不同,输出下列小票。
小票内容及格式(样例):
- 当购买的商品符合“单品满100减10块”优惠条件的商品时:
单品满100减10块商品: 篮球,原价:186.00(元),优惠: 10.00(元)
总计:201.00(元) 节省:10.00(元)
`
- 当购买的商品没有符合“单品满100减10块”优惠条件的商品时:
总计:25.00(元)
`
数据格式
-
每一个商品对象的结构如下(样例):
javascript { barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', category: '食品', subCategory: '碳酸饮料', price: 3.00 }
-
促销信息对象的数组格式(样例):
javascript [ { type: 'SINGLE_ITEM_BUY_HUNDRED_DISCOUNT_TEN', barcodes: [ 'ITEM000000', 'ITEM000001' ] } ]
注意: type和barcodes是促销信息对象的主体结构,也可以适当扩展其它属性,以适应程序的扩展性。
作业要求
- 请完成全部需求,并输出样例格示的小票;
- 程序实现语言(JavaScript、C#、Java、Scala等)和实现形式(Console、Web、Desktop、APP等)不限;
- 请在保证实现代码的同时,尽量保持代码的整洁性、可读性、易于扩展和维护性等;
加分项
满足以下的条件(但并不仅限于这些条件),将会成为你的加分项:
- 良好的抽象和设计;
- 完善的测试,TDD开发;
- git小步提交;
- 良好的构建和编码规范;
4、收银机 - G1 - 单品批发价出售
需求描述
商店里进行购物结算时会使用收银机系统,这台收银机会在结算时根据客户的购物车中的商品和商店正在进行的优惠活动进行结算和打印购物小票。
- 已知商品信息包含:名称,数量单位,单价,类别和条形码(伪)。以下是单个商品对象的结构:
javascript { barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', category: '食品', subCategory: '碳酸饮料', price: 3.00 }
- 已知我们可以对收银机进行设置,使之支持各种优惠。
我们需要实现一个名为打印小票的小模块,收银机会将输入的数据转换成一个JSON数据然后一次性传给我们这个小模块,我们将从控制台中输出结算清单的文本。
输入格式(样例):
javascript [ 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000003-2', 'ITEM000005', 'ITEM000005', 'ITEM000005' ]
其中对'ITEM000003-2'来说,"-"之前的是标准的条形码,"-"之后的是数量。 当我们购买需要称量的物品的时候,由称量的机器生成此类条形码,收银机负责识别生成小票。
该商店正在对部分商品进行“单品批发价出售”的优惠活动。解释:
- “单品批发价出售”是指,当某一商品买进十个及以上,一律按照九五折出售。
- 店员设置该优惠哪些条形码对应的商品可以享受此优惠。
要求写代码支持上述的功能,并根据输入和设置的不同,输出下列小票。
小票内容及格式(样例):
- 当购买的商品中,有符合“单品批发价出售”优惠条件的商品时:
批发价出售商品: 名称:可口可乐,数量:11瓶
总计:47.35(元) 节省:1.65(元)
`
- 当购买的商品中,没有符合“单品批发价出售”优惠条件的商品时:
总计:25.00(元)
`
数据格式
-
每一个商品对象的结构如下(样例):
javascript { barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', category: '食品', subCategory: '碳酸饮料', price: 3.00 }
-
促销信息对象的数组格式(样例,只包含了主结构,可以根据需求自行扩展):
javascript [ { type: 'Discount', barcodes: [ 'ITEM000000', 'ITEM000001' ] } ]
作业要求
- 请完成全部需求,并输出样例格示的小票;
- 程序实现语言(JavaScript、C#、Java、Scala等)和实现形式(Console、Web、Desktop、APP等)不限;
- 请在保证实现代码的同时,尽量保持代码的整洁性、可读性、易于扩展和维护性等;
加分项
满足以下的条件(但并不仅限于这些条件),将会成为你的加分项:
- 良好的抽象和设计;
- 完善的测试,TDD开发;
- git小步提交;
- 良好的构建和编码规范;
5、收银机 - G1 - 第二个半价
面试作业
需求描述
商店里进行购物结算时会使用收银机系统,这台收银机会在结算时根据客户的购物车中的商品和商店正在进行的优惠活动进行结算和打印购物小票。
已知商品信息包含:名称,数量单位,单价,类别和条形码(伪)。
{ barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', category: '食品', subCategory: '碳酸饮料', price: 3.00 }已知我们可以对收银机进行设置,使之支持各种优惠。
我们需要实现一个名为打印小票的小模块,收银机会将输入的数据转换成一个JSON数据, 然后一次性传给我们这个小模块,我们将从控制台中输出结算清单的文本。
输入格式(样例):
[ 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000003-2', 'ITEM000005', 'ITEM000005', 'ITEM000005' ]其中对“ITEM000003-2”来说,“-”之前的是标准的条形码,“-”之后的是数量。 当我们购买需要称量的物品的时候,由称量的机器生成此类条形码,收银机负责识别生成小票。
该商店正在对部分商品进行“第二个半价”的优惠活动。解释:
“第二个半价”是指,每当某一商品买进两个,就有一个半价。 店员设置该优惠哪些条形码对应的商品可以享受此优惠。 要求:写代码支持上述的功能,并根据输入和设置的不同,输出下列小票。
小票内容及格式(样例):
第二个半价商品: 名称:可口可乐,数量:1瓶 名称:羽毛球,数量:2个 名称:苹果,数量1斤
总计:19.75(元) 节省:5.25(元)
总计:25.00(元)
`
数据格式
每一个商品对象的结构如下(样例):
{ barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', category: '食品', subCategory: '碳酸饮料', price: 3.00 }
促销信息对象的数组格式(样例):
[ { type: 'BUY_SECOND_GET_HALF_PRICE', barcodes: [ 'ITEM000000', 'ITEM000001' ] } ]注意:type和barcodes是促销信息对象的主体结构,也可以适当扩展其它属性,以适应程序的扩展性。
作业要求
- 请完成全部需求,并输出样例格式的小票;
- 程序实现语言(JavaScript、C#、Java、Scala等)和实现形式(Console、Web、Desktop、APP等)不限;
- 请在保证实现代码的同时,尽量保持代码的整洁性、可读性、易于扩展和维护性等;
加分项
满足以下的条件(但并不仅限于这些条件),将会成为你的加分项:
- 良好的抽象和设计;
- 完善的测试,TDD开发;
- git小步提交;
- 良好的构建和编码规范;
6、收银机 - G1 - 买二赠一
标签(空格分隔): 面试作业
需求描述
商店里进行购物结算时会使用收银机系统,这台收银机会在结算时根据客户的购物车中的商品和商店正在进行的优惠活动进行结算和打印购物小票。
-
已知商品信息包含:名称,数量单位,单价,类别和条形码(伪)。以下是单个商品对象的结构:
javascript { barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', category: '食品', subCategory: '碳酸饮料', price: 3.00 }
-
已知我们可以对收银机进行设置,使之支持各种优惠。
我们需要实现一个名为打印小票的小模块,收银机会将输入的数据转换成一个JSON数据然后一次性传给我们这个小模块,我们将从控制台中输出结算清单的文本。
输入格式(样例):
javascript [ 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000003-2', 'ITEM000005', 'ITEM000005', 'ITEM000005' ]
其中对'ITEM000003-2'来说,"-"之前的是标准的条形码,"-"之后的是数量。 当我们购买需要称量的物品的时候,由称量的机器生成此类条形码,收银机负责识别生成小票。 该商店正在对部分商品进行“买二赠一”的优惠活动。解释:
“买二赠一”是指,每当某一商品买进两个,就赠送数量为1的另外一款商品。 店员设置该优惠哪些条形码对应的商品可以享受此优惠,赠送的是哪些商品。 要求写代码支持上述的功能,并根据输入和设置的不同,输出下列小票。
小票内容及格式(样例):
- 当购买的商品中,有符合“买二赠一”优惠条件的商品时:
买二赠一商品: 名称:雪碧,数量:2瓶,价值:6.00(元) 名称:羽毛球(12只装),数量:1个,价值:12.00(元)
总计:197.00(元) 节省:18.00(元)
`
当购买的商品中,没有符合“买二赠一”优惠条件的商品时:
总计:25.00(元)
`
数据格式
-
每一个商品对象的结构如下(样例):
javascript { barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', category: '食品', subCategory: '碳酸饮料', price: 3.00 }
-
促销信息对象的数组格式(样例,只包含了主结构,可以根据需求自行扩展):
javascript [ { type: 'FREE_GOODS_OFFER', barcodes: [ 'ITEM000000', 'ITEM000001' ] }, { type: 'OTHER_PROMOTION', barcodes: [ 'ITEM000004' ] } ]
作业要求
- 请完成全部需求,并输出样例格示的小票;
- 程序实现语言(JavaScript、C#、Java、Scala等)和实现形式(Console、Web、Desktop、APP等)不限;
- 请在保证实现代码的同时,尽量保持代码的整洁性、可读性、易于扩展和维护性等;
加分项
满足以下的条件(但并不仅限于这些条件),将会成为你的加分项:
- 良好的抽象和设计;
- 完善的测试,TDD开发;
- git小步提交;
- 良好的构建和编码规范;
7、收银机 - G1 - 买三免一
面试作业
需求描述
商店里进行购物结算时会使用收银机系统,这台收银机会在结算时根据客户的购物车中的商品和商店正在进行的优惠活动进行结算和打印购物小票。
已知商品信息包含:名称,数量单位,单价,类别和条形码(伪),数据结构如下:
javascript { barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', category: '食品', subCategory: '碳酸饮料', price: 3.00 }
已知我们可以对收银机进行设置,使之支持各种优惠。
我们需要实现一个名为打印小票的小模块,收银机会将输入的数据转换成一个JSON数据然后一次性传给我们这个小模块,我们将从控制台中输出结算清单的文本。
输入格式(样例):
javascript [ 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000003-2', 'ITEM000005', 'ITEM000005', 'ITEM000005' ]
其中对'ITEM000003-2'来说,"-"之前的是标准的条形码,"-"之后的是商品数量。 当我们购买需要称量的物品的时候,由称量的机器生成此类条形码,收银机负责识别生成小票。
该商店正在对部分商品进行“买三免一”的优惠活动。解释:
“买三免一”是指,每当某一商品买进三个,就有一个免单。 店员设置该优惠哪些条形码对应的商品可以享受此优惠。 要求写代码支持上述的功能,并根据输入和设置的不同,输出下列小票。
小票内容及格式(样例):
当购买的商品中,有符合“买三免一”优惠条件的商品时:
买三免一商品: 名称:可口可乐,数量:1瓶 名称:羽毛球,数量:1个
总计:21.00(元) 节省:4.00(元)
`
当购买的商品中,没有符合“买三免一”优惠条件的商品时:
总计:25.00(元)
`
数据格式
每一个商品对象的结构如下(样例):
javascript { barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', category: '食品', subCategory: '碳酸饮料', price: 3.00 }
促销信息对象的数组格式(样例):
javascript [ { type: 'BUY_THREE_GET_ONE_FREE', barcodes: [ 'ITEM000000', 'ITEM000001' ] } ]注意:type和barcodes是促销信息对象的主体结构,也可以适当扩展其它属性,以适应程序的扩展性。
作业要求
请完成全部需求,并输出样例格示的小票; 程序实现语言(JavaScript、C#、Java、Scala等)和实现形式(Console、Web、Desktop、APP等)不限; 请在保证实现代码的同时,尽量保持代码的整洁性、可读性、易于扩展和维护性等;
加分项
满足以下的条件(但并不仅限于这些条件),将会成为你的加分项:
良好的抽象和设计; 完善的测试,TDD开发; git小步提交; 良好的构建和编码规范;
8、收银机 - G1 - 满100加一元赠送商品
需求描述
商店里进行购物结算时会使用收银机系统,这台收银机会在结算时根据客户的购物车中的商品和商店正在进行的优惠活动进行结算和打印购物小票。 已知商品信息包含:名称,数量单位,单价,类别和条形码(伪)。javascript { barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', category: '食品', subCategory: '碳酸饮料', price: 3.00 }
已知我们可以对收银机进行设置,使之支持各种优惠。 我们需要实现一个名为打印小票的小模块,该小模块接受指定格式输入,根据优惠策略计算价格,并输出指定格式的结算清单。
输入格式(样例):
javascript [ 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000003-2', 'ITEM000005', 'ITEM000005', 'ITEM000005' ]
其中对 'ITEM000001' 来说,标准的条形码是 'ITEM000001',数量是 1。 其中对 'ITEM000003-2' 来说, '-' 之前的是标准的条形码, '-' 之后的是数量。 当我们购买需要称量的物品的时候,由称量的机器生成此类条形码,收银机负责识别生成小票。
该商店正在对部分商品进行“满100加一元换购”的优惠活动。解释: “满100加一元换购”是指,当整单商品每满100元,就可以加1元,购买指定商品. 假定满足优惠条件的情况下,消费者一定会参与优惠活动。
要求写代码支持上述的功能,并根据输入和设置的不同,输出以下格式的结算清单。
满100加一元换购商品: 名称:可口可乐,数量:1个
总计:107.00(元) 节省:2.00(元)
`
总计:25.00(元)
`
促销信息对象的格式(样例):javascript
{
type: 'FULL_100_PRESENT_1_PRODUCT',
present: 'ITEM000000'
}
注意:type是促销信息对象的主体结构,也可以适当扩展其它属性,以适应程序的扩展性。
作业要求
请完成全部需求,并输出样例格示的小票; 程序实现语言(JavaScript、C#、Java、Scala等)和实现形式(Console、Web、Desktop、APP等)不限; 请在保证实现代码的同时,尽量保持代码的整洁性、可读性、易于扩展和维护性等;
加分项
满足以下的条件(但并不仅限于这些条件),将会成为你的加分项:
良好的抽象和设计; 完善的测试,TDD开发; git小步提交; 良好的构建和编码规范;
收银机 - G1 - 全单满100减10块
面试作业
需求描述
商店里进行购物结算时会使用收银机系统,这台收银机会在结算时根据客户的购物车中的商品和商店正在进行的优惠活动进行结算和打印购物小票。
已知商品信息包含:名称,数量单位,单价,类别和条形码(伪)。数据结构如下:
javascript { barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', category: '食品', subCategory: '碳酸饮料', price: 3.00 }
已知我们可以对收银机进行设置,使之支持各种优惠。 我们需要实现一个名为打印小票的小模块,收银机会将输入的数据转换成一个JSON数据然后一次性传给我们这个小模块,我们将从控制台中输出结算清单的文本。
输入格式(样例):
javascript [ 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000003-2', 'ITEM000005', 'ITEM000005', 'ITEM000005' ]
其中对'ITEM000003-2'来说,"-"之前的是标准的条形码,"-"之后的是数量。 当我们购买需要称量的物品的时候,由称量的机器生成此类条形码,收银机负责识别生成小票。
该商店正在对部分商品进行“全单满100减10块”的优惠活动。解释: “全单满100减10块”是指,每当整单算完之后,如果满100,则减去10元再收取,如果满200,则减去20元再收取。以此类推。 店员设置该优惠哪些条形码对应的商品参与此优惠,哪些条形码对应的商品不参与此优惠。享受此优惠的商品价格才能参与优惠价格计算,不享受此优惠的商品价格不参与优惠价格计算。
促销信息对象的数组格式(样例):
javascript [ { type: 'FULL_ONE_HUNDRED_MINUS_TEN', barcodes: [ 'ITEM000000', 'ITEM000001' ] } ]
注意:type和barcodes是促销信息对象的主体结构,也可以适当扩展其它属性,以适应程序的扩展性。
要求写代码支持上述的功能,并根据以上输入和设置的不同,输出下列小票。 小票内容及格式(样例):
不参与优惠商品: 名称: 苹果,价格: 11.00(元) 参与优惠总价:102.00(元),优惠:10.00(元)
总计:113.00(元) 节省:10.00(元)
总计:25.00(元)
作业要求
请完成全部需求,并输出样例格示的小票; 程序实现语言(JavaScript、C#、Java、Scala等)和实现形式(Console、Web、Desktop、APP等)不限; 请在保证实现代码的同时,尽量保持代码的整洁性、可读性、易于扩展和维护性等;
加分项
满足以下的条件(但并不仅限于这些条件),将会成为你的加分项:
良好的抽象和设计; 完善的测试,TDD开发; git小步提交; 良好的构建和编码规范;
9、收银机 - G1 - 晚8点后打八折
需求描述
商店里进行购物结算时会使用收银机系统,这台收银机会在结算时根据客户的购物车中的商品和商店正在进行的优惠活动进行结算和打印购物小票。
-
已知商品信息包含:名称,数量单位,单价,类别和条形码(伪)。以下是单个商品对象的结构:
javascript { barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', category: '食品', subCategory: '碳酸饮料', price: 3.00 }
-
已知我们可以对收银机进行设置,使之支持各种优惠。
我们需要实现一个名为打印小票的小模块,收银机会将输入的数据转换成一个JSON数据然后一次性传给我们这个小模块,我们将从控制台中输出结算清单的文本。
输入格式(样例):
javascript [ 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000003-2', 'ITEM000005', 'ITEM000005', 'ITEM000005' ]
其中对'ITEM000003-2'来说,"-"之前的是标准的条形码,"-"之后的是数量。 当我们购买需要称量的物品的时候,由称量的机器生成此类条形码,收银机负责识别生成小票。
该商店正在对部分商品进行“晚8点后打八折”的优惠活动。解释:
- “晚8点后打八折”是指,子类型为“蔬菜”的商品在结账时,如果结账时间在8点和当晚12点之间(含8点整和12点整),那么总价会打完八折再收取。
- 店员设置该优惠的商品条码和折扣的比例。
要求写代码支持上述的功能,并根据输入和设置的不同,输出下列小票。
小票内容及格式(样例):
- 当购买的商品中,有符合“单品打折”优惠条件的商品时:
晚8点后打八折优惠商品: 名称:油麦菜,折扣:八折
总计:32.20(元) 节省:1.80(元)
`
数据格式
-
每一个商品对象的结构如下(样例):
javascript { barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', category: '食品', subCategory: '碳酸饮料', price: 3.00 }
-
促销信息对象的数组格式(样例,只包含了主结构,可以根据需求自行扩展):
javascript [ { type: 'Discount', barcodes: [ 'ITEM000000', 'ITEM000001' ] } ]
作业要求
- 请完成全部需求,并输出样例格示的小票;
- 程序实现语言(JavaScript、C#、Java、Scala等)和实现形式(Console、Web、Desktop、APP等)不限;
- 请在保证实现代码的同时,尽量保持代码的整洁性、可读性、易于扩展和维护性等;
加分项
满足以下的条件(但并不仅限于这些条件),将会成为你的加分项:
- 良好的抽象和设计;
- 完善的测试,TDD开发;
- git小步提交;
- 良好的构建和编码规范;
10、收银机 - G1 - 全单满100减10块
需求描述
商店里进行购物结算时会使用收银机系统,这台收银机会在结算时根据客户的购物车中的商品和商店正在进行的优惠活动进行结算和打印购物小票。
已知商品信息包含:名称,数量单位,单价,类别和条形码(伪)。数据结构如下:
javascript { barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', category: '食品', subCategory: '碳酸饮料', price: 3.00 }
已知我们可以对收银机进行设置,使之支持各种优惠。 我们需要实现一个名为打印小票的小模块,收银机会将输入的数据转换成一个JSON数据然后一次性传给我们这个小模块,我们将从控制台中输出结算清单的文本。
输入格式(样例):
javascript [ 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000003-2', 'ITEM000005', 'ITEM000005', 'ITEM000005' ]
其中对'ITEM000003-2'来说,"-"之前的是标准的条形码,"-"之后的是数量。 当我们购买需要称量的物品的时候,由称量的机器生成此类条形码,收银机负责识别生成小票。
该商店正在对部分商品进行“全单满100减10块”的优惠活动。解释: “全单满100减10块”是指,每当整单算完之后,如果满100,则减去10元再收取,如果满200,则减去20元再收取。以此类推。 店员设置该优惠哪些条形码对应的商品参与此优惠,哪些条形码对应的商品不参与此优惠。享受此优惠的商品价格才能参与优惠价格计算,不享受此优惠的商品价格不参与优惠价格计算。
促销信息对象的数组格式(样例):
javascript [ { type: 'FULL_ONE_HUNDRED_MINUS_TEN', barcodes: [ 'ITEM000000', 'ITEM000001' ] } ]
注意:type和barcodes是促销信息对象的主体结构,也可以适当扩展其它属性,以适应程序的扩展性。
要求写代码支持上述的功能,并根据以上输入和设置的不同,输出下列小票。 小票内容及格式(样例):
不参与优惠商品: 名称: 苹果,价格: 11.00(元) 参与优惠总价:102.00(元),优惠:10.00(元)
总计:113.00(元) 节省:10.00(元)
总计:25.00(元)
作业要求
请完成全部需求,并输出样例格示的小票; 程序实现语言(JavaScript、C#、Java、Scala等)和实现形式(Console、Web、Desktop、APP等)不限; 请在保证实现代码的同时,尽量保持代码的整洁性、可读性、易于扩展和维护性等;
加分项
满足以下的条件(但并不仅限于这些条件),将会成为你的加分项:
良好的抽象和设计; 完善的测试,TDD开发; git小步提交; 良好的构建和编码规范;