商店里进行购物结算时会使用收银机(POS)系统,这台收银机会在结算时根据客户的购物车(Cart)中的商品(Item)进行结算和打印购物清单。
我们需要实现一个名为printInventory
函数,该函数能够将指定格式的数据作为参数输入,然后在浏览器的控制台中输出结算清单的文本。
输入格式(样例):
[
'ITEM000000',
'ITEM000000',
'ITEM000000',
'ITEM000000',
'ITEM000000',
'ITEM000001',
'ITEM000001',
'ITEM000004'
]
(当点击"保存并提交代码"按钮的时候,我们会调用函数printInventory将上面的数据作为参数(inputs)传入该函数。)
清单内容(样例):
***<没钱赚商店>购物清单***
名称:可口可乐,数量:5瓶,单价:3.00(元),小计:15.00(元)
名称:雪碧,数量:2瓶,单价:3.00(元),小计:6.00(元)
名称:电池,数量:1个,单价:2.00(元),小计:2.00(元)
----------------------
总计:23.00(元)
**********************
function loadAllItems() { return [ { barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', price: 3.00 }, { barcode: 'ITEM000001', name: '雪碧', unit: '瓶', price: 3.00 }, { barcode: 'ITEM000002', name: '苹果', unit: '斤', price: 5.50 }, { barcode: 'ITEM000003', name: '荔枝', unit: '斤', price: 15.00 }, { barcode: 'ITEM000004', name: '电池', unit: '个', price: 2.00 }, { barcode: 'ITEM000005', name: '方便面', unit: '袋', price: 4.50 } ]; }
describe('practice-1-3', function () { var allItems; var inputs; beforeEach(function () { allItems = loadAllItems(); inputs = [ 'ITEM000000', 'ITEM000000', 'ITEM000000', 'ITEM000000', 'ITEM000000', 'ITEM000001', 'ITEM000001', 'ITEM000004' ]; }); it('should print correct text', function () { printInventory(inputs); var expectText = '***<没钱赚商店>购物清单***\n' + '名称:可口可乐,数量:5瓶,单价:3.00(元),小计:15.00(元)\n' + '名称:雪碧,数量:2瓶,单价:3.00(元),小计:6.00(元)\n' + '名称:电池,数量:1个,单价:2.00(元),小计:2.00(元)\n' + '----------------------\n' + '总计:23.00(元)\n' + '**********************'; expect(logs[0]).toBe(expectText); }); });
答案:
1)定义求和变量sum、count、item,并赋值sum、count为零;定义数组cart_list和item_list存放商品信息:
var sum=0; var cart_list=[]; var item; var item_list=[]; var count=0;
2)把loadAllItems()函数赋给变量allItems:
var allItems=loadAllItems();
3)遍历inputs数组,再遍历allitems,然后判断它们的barcode是否相等,把参数allitem放到数组cart_list中:
inputs.forEach(function(input){ allItems.forEach(function(allitem){ if(allitem.barcode == input) { cart_list.push(allitem); } }) })
4) 遍历car_list数组,把carts赋值给item,再判断数组长度是否为零:
cart_list.forEach(function(carts){ item=carts; if(item_list.length === 0) { }
5)如果遍历的参数的barcode在item数组里有,则把该参数的数量加1,然后跳出本次循环:
if(items.barcode == item.barcode) { items.count++; return; }
6)判断是否已经遍历到最后一个对象了,如果数组里面没存有该对象,则把该参数放到数组里,并赋值为1:
else if(index == item_list.length-1) //判断是否已遍历到最后一个对象 { item.count=1; item_list.push(item); }
7)最后遍历数组item_list,循环遍历输出,再计算商品的总价格,并且打印输出结果:
item_list.forEach(function(allitems){ list=list+'\n'+'名称:'+allitems.name+',数量:'+allitems.count+allitems.unit+',单价:'+allitems.price+'.00(元)'+',小计:'+allitems.count*allitems.price+'.00(元)'; sum += allitems.count*allitems.price; //计算总价格 }) console.log(list+'\n'+'----------------------'+'\n'+'总计:'+sum+'.00(元)'+'\n'+'**********************');
相关推荐
电子-POSV0.2.zip,单片机/嵌入式ARM7/ARM9/ARM11
escpos是一个nodejs的window POS机打印程序
联迪pos机驱动联迪E550移动pos机 - 移动pos机,银联pos机,
POS58驱动-小票机驱动程序适合于POS58的小票打印机
FX-TRN-POS日文版---三菱教学软件: 电机定位控制教学软件日文版---三菱学习小软件+方便快捷+初学者的最佳帮手
15企业流程管理之聪明整合[教材]---加油站POS系统--信.pptx
15企业流程管理之聪明整合[教材]---加油站POS系统--信息化建设(ppt文档).ppt
飞达商贸有限公司POS系统--开发系统源代码
公达pos1200驱动是由公达官方为该型号的POS打印机打造的一款驱动程序,用户安装了驱动程序以后,就可以让打印机与电脑顺利的进行连接,轻松完成日常的打印工作,欢迎有需要的朋友下载使用!使用说明P代表并口LPTU...
03481 飞达商贸有限公司POS系统--JavaEE 项目开发培训视频(PPT 27页).ppt
电子正版打印机电子打印机插件,当前支持58mm,需要电子> = 4.xx安装$ npm install electron-pos-printer$ yarn add electron-pos-printer用法在主要过程中const { PosPrinter } = require ( "electron-pos-printer...
POS机行业2022年发展概况分析及未来十年POS机行业数据趋势预测.docx
本系统是参照PBOC2.0、EMV4.2、ISO7816、中国银联POS入网联机等规范开发的针对从事当前EMV迁移工作的人员使用的金融IC(PBOC2.0 EMV 借贷记,M/qPBOC,m/qVSDC,M/Chip,电子现金,电子钱包存折)终端系统,可用于卡片...
运动鞋专卖连锁店销售管理系统 pos shoes -01 由于文件比较大,分成11个RAR文件,下载后合成在一文件夹中就行!
中国农业银行企业标准----销售点终端(POS)应用规范----第一部分.PDF 中国农业银行企业标准----销售点终端(POS)应用规范----第二部分.PDF 中国农业银行企业标准----销售点终端(POS)应用规范----第四部分.PDF
华北工控嵌入式工业主板POS-7713说明书pdf,华北工控嵌入式工业主板POS-7713说明书:POS-7713是一款Pentium 4级专为POS行业设计的高性能主板,采用Intel 845GV芯片组,支持Socket478封装的Northwood /prescott核芯的...
ADVANTECH Pentium级POS控制板 POS-563/F产品样本pdf,ADVANTECH Pentium级POS控制板 POS-563/F产品样本
pos机系统pos机系统pos机系统pos机系统pos机系统pos机系统