这个任务布置有一个周了,之前都没头绪,后来看看博客分析,就明白了各个文件之间的联系。也是第一次接触这种多个文件还有测试内容的项目。刚刚开始都不知道从哪里下手,但是多理解一下过程,也就理解了,算是个小的突破吧。虽然不全是自己的思想,但是也算是学会了怎么去做这类的小项目。
POS收银机 版本:v0.2
教学目标
- 学会把基本描述转换成程序;
- 能够驾驭三个循环;
需求描述
商店里进行购物结算时会使用收银机(POS)系统,这台收银机会在结算时根据客户的购物车(Cart)中的商品(Item)进行结算和打印收据(Receipt)。
我们需要实现一个名为printReceipt
函数,该函数能够将指定格式的数据作为参数输入,然后在浏览器的控制台中输出收据的文本。
输入格式(样例):
[
'ITEM000000',
'ITEM000000',
'ITEM000000',
'ITEM000000',
'ITEM000000',
'ITEM000001',
'ITEM000001',
'ITEM000004'
]
清单内容(样例):
***<没钱赚商店>收据***
名称:可口可乐,5瓶,单价:3.00(元),小计:15.00(元)
名称:雪碧,数量:2瓶,单价:3.00(元),小计:6.00(元)
名称:电池,数量:1个,单价:2.00(元),小计:2.00(元)
----------------------
总计:23.00(元)
**********************
作业要求
- 根据
test/main-test.js
中的测试用例,在main/main.js
文件中编写实现代码并确保测试通过; - 请在保证代码可读性的前提下,尽可能用最少的代码行数完成作业;
- 将清单输出到控制台,使测试通过
实现遇到的关键问题
- 怎么确定选择的商品 ---通过循环寻找,两个测试文件内容的结合比较;
- 怎么计算选择同类商品的个数 ---通过数组存储各类商品的个数,对应的商品++;
- 怎么整合清单 ---字符串链接,注意字符之间的空格及字符的大小写都得与测试文件一致;
- 价钱的小数保留 ---每个价钱后面都得格式化00,所以用到
toFixed(num)
方法,num
为保留的位数;
下面看下代码:
function printReceipt(inputs) {
var kinds = loadAllItems();
// console.log(kinds);
var count = [0,0,0,0,0,0]; //数组存储对应商品的购买数量
for(var i = 0;i <inputs.length;i++){ //买的东西的编码,买的多
for(var j = 0;j<kinds.length;j++){ //东西的种类,种类少
//如果编码一样,对应的数组中商品数量计数加1,用数组存储数量的变化,减少代码,也更加明了
if(inputs[i] == kinds[j].barcode){
count[j]++;
break;
}
}
}
// console.log(count);
var final ="***<没钱赚商店>收据***\n";
var list = ""; //清单
var total =0; //总计
for(var i =0;i< kinds.length ;i++){
if(count[i]!=0){
list = "名称:" + kinds[i].name
+ ",数量:" +count[i]+kinds[i].unit //数量是数组中存储的这类商品的数量加单位
+",单价:"+kinds[i].price.toFixed(2) +"(元),小计:"
+ (count[i]*kinds[i].price).toFixed(2) +"(元)\n"; //小计是数量乘以单价
final += list; //在最后内容中加入清单内容
total += count[i]*kinds[i].price; //总计的价钱
}
}
final += "----------------------\n总计:"
+ total.toFixed(2) + "(元)\n**********************";
console.log(final); //输出清单
}
网友评论