请在student-name.txt
中,写上你的名字,以便老师识别。
没有写名字的,直接视为不通过。
另外提交作业时,通过pull request的方式提交到该repo。在pull request的标题上,也写上你的名字以方便老师查看。
- 考察使用tasking方式整理思路的能力
- 考察TDD能力
- 考察html/css/javascript的掌握程度
某快餐品牌推出了它独家的外卖应用,用户可以在手机上直接下单。该应用会根据用户选择的菜品(Item)、数量(Count)和优惠方式(Promotion)进行计算,告诉用户需要支付的金额(Charge)。
优惠活动有多种形式。假设用户一次只能使用一种优惠,那么使用哪种优惠省钱最多就会是一个让用户头疼的问题。所以该外卖应用为了方便用户,在用户下单时,会自动选择最优惠的方式并计算出最终金额让用户确认。
我们需要实现一个名为bestCharge
的函数,它能够接收用户选择的菜品和数量(以特定格式呈现)作为输入,然后返回计算后的汇总信息。
已知:
- 该店的菜品每一个都有一个唯一的id
- 当前的优惠方式有:
- 满30减6元
- 指定菜品半价
- 除菜品外没有其它收费(如送餐费、餐盒费等)
- 如果两种优惠方式省钱一样多,则使用前一种优惠方式
["ITEM0001 x 1", "ITEM0013 x 2", "ITEM0022 x 1"]
============= 订餐明细 =============
黄焖鸡 x 1 = 18元
肉夹馍 x 2 = 12元
凉皮 x 1 = 8元
-----------------------------------
使用优惠:
指定菜品半价(黄焖鸡,凉皮),省13元
-----------------------------------
总计:25元
===================================
或者:
============= 订餐明细 =============
肉夹馍 x 4 = 24元
凉皮 x 1 = 8元
-----------------------------------
使用优惠:
满30减6元,省6元
-----------------------------------
总计:26元
===================================
如果没有优惠可享受,则:
============= 订餐明细 =============
肉夹馍 x 4 = 24元
-----------------------------------
总计:24元
===================================
- 相关代码在
src
目录下 - 实现
best-charge.js
中的bestCharge
函数 - 写代码前先使用tasking整理思路并画出管道图
- 先写测试再写实现,代码须跟管道图匹配
- 代码整洁、函数粒度合适、命名有意义
基于html/css/javascript实现一个可让用户选菜并结算的页面:
- 相关代码在
public
目录下,已经提供若干基础代码和提示 - 在html上动态加载菜品,用户可以输入数量
- 在页面上动态加载并显示优惠信息
- 用户点击“结算”按钮时,会在页面上某处显示计算最优价格后的汇总信息(即前面的字符串形式的“输出样例”)
- 用户点击“清除”按钮时,会清除所有数量以及汇总信息
- 通过使用合适的html标签和css,让页面美观好用
- 对输入的数量进行检查,如果不是正整数,则提示“数量错误,请输入一个正整数”
- 可使用原生的javascript dom api,也可以使用
jquery
等库 - 页面上已有代码仅为参考,可完全自由发挥,只要能满足需求即可
- 可使用
loadAllItems()
方法获取全部的菜品 - 可使用
loadPromotions()
方法获取全部的优惠方式
可使用浏览器打开run-specs.html
文件运行测试
首先使用node -v
命令确定你的node
版本为6.x
。
如果你安装了nvm
,可通过如下方式切换:
nvm use 6
node -v
然后进入本项目根目录:
npm install
npm test
就可以看到在命令行中运行测试并输出报告。