1.教学目标
学会把基本描述转换成程序;
熟悉循环嵌套的使用;
2.需求描述
商店里进行购物结算时会使用收银机(POS)系统,这台收银机会在结算时根据客户的购物车(Cart)中的商品(Item)进行结算和打印购物清单。
我们需要实现一个名为printInventory函数,该函数能够将指定格式的数据作为参数输入,然后在浏览器的控制台中输出结算清单的文本。
3.输入格式(样例):
[ { barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', price: 3.00 }, { barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', price: 3.00 }, { barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', price: 3.00 }, { barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', price: 3.00 }, { barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', price: 3.00 }, { barcode: 'ITEM000001', name: '雪碧', unit: '瓶', price: 3.00 }, { barcode: 'ITEM000001', name: '雪碧', unit: '瓶', price: 3.00 }, { barcode: 'ITEM000004', name: '电池', unit: '个', price: 2.00 } ]
(当点击"保存并提交代码"按钮的时候,我们会调用函数printInventory将上面的数据作为参数(inputs)传入该函数。)
4.清单内容(样例):
***<没钱赚商店>购物清单***
名称:可口可乐,数量:5瓶,单价:3.00(元),小计:15.00(元)
名称:雪碧,数量:2瓶,单价:3.00(元),小计:6.00(元)
名称:电池,数量:1个,单价:2.00(元),小计:2.00(元)
----------------------
总计:23.00(元)
**********************
5.作业要求
在main.js文件中编写实现代码并确保测试通过;
请在保证代码可读性的前提下,尽可能用最少的代码行数完成作业;
将清单输出到控制台,使测试通过 注意:所有的标点符号均为英文符号
6.作业提示
学习将重复的内容合并再转化成清单
使用console.log输出(仅允许使用一次)
7.答案:
1)定义数组item_list存放商品信息;遍历数组inputs;’判断item_list的长度是否为零;把参数item放到数组 item_list中。
function printInventory(inputs) { var item_list=[]; for(var i=0;i<inputs.length;i++) { var item=inputs[i]; if(item_list.length==0){ item.count=1; item_list.push(item); } else { itemListResultJudgment(inputs,i,item,item_list) } } var list = getItemListResult(item_list); console.log(list); }
2)遍历数组item_list;判断inputs[i]和item_list[j]的barcode是否相等;若相等,则item_list[j]的count加一,最后中断循环,防止数组的长度改变。若不相等,则判断是否为数组的最后一位,即数组的长度减一,然后把参数item放到数组 item_list中,最后中断循环,以防上面的循环继续。
function itemListResultJudgment(inputs , i,item,item_list) { for(var j=0;j<item_list.length;j++) { if(inputs[i].barcode==item_list[j].barcode){ item_list[j].count++; break; } else if(j==item_list.length-1){ item.count=1; item_list.push(item); break; } } }
3)最后遍历数组item_list,循环遍历输出,再计算商品的总价格,并且打印输出结果
function getItemListResult(item_list) { var list='***<没钱赚商店>购物清单***'; var sum=0; for(var n=0;n< item_list.length;n++){ list=list+'\n'+'名称:'+item_list[n].name+','+'数量:'+item_list[n].count+item_list[n].unit+','+'单价:'+item_list[n].price+'.00(元)'+','+'小计:'+item_list[n].count*item_list[n].price+'.00(元)'; sum+=item_list[n].count*item_list[n].price; } list=list+'\n'+'----------------------'+'\n'+'总计:'+sum+'.00(元)'+'\n'+'**********************'; return list; }
详情请点击http://www.codefordream.com/courses/js-pos-boot-camp/sections/section_1/practices/normal/practice_2/items/code进行查看。