需求描述
商店里进行购物结算时会使用收银机(POS)系统,这台收银机会在结算时根据客户的购物车(Cart)中的商品(Item)和商店正在进行的优惠活动(Promotion)进行结算和打印购物清单。
已知该商店正在对部分商品进行“买三送一”的优惠活动,即买三件商品其中一件是送的,按照两件商品价格结算。
我们需要实现一个名为printInventory
函数,该函数能够将指定格式的数据作为参数输入,然后在浏览器的控制台中输出结算清单的文本。
输入格式(样例):
javascript
[ 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000003-2', 'ITEM000005', 'ITEM000005', 'ITEM000005' ]
其中对'ITEM000003-2'来说,"-"之前的是标准的条形码,"-"之后的是数量。 当我们购买需要称量的物品的时候,由称量的机器生成此类条形码,收银机负责识别生成小票。 (当点击"保存并提交代码"按钮的时候,我们会调用函数printInventory将上面的数据作为参数(inputs)传入该函数。)
清单内容(样例):
***<没钱赚商店>购物清单*** 名称:可口可乐,数量:3瓶,单价:3.00(元),小计:6.00(元) 名称:羽毛球,数量:5个,单价:1.00(元),小计:4.00(元) 名称:苹果,数量:2斤,单价:5.50(元),小计:11.00(元) ---------------------- 挥泪赠送商品: 名称:可口可乐,数量:1瓶 名称:羽毛球,数量:1个 ---------------------- 总计:21.00(元) 节省:4.00(元) **********************
解决方案:
function printInventory(inputs) { var barcodes=[]; get_barcodes_list(inputs,barcodes); var item_list = []; var allItems = loadAllItems(); get_item_list_result(item_list,barcodes,allItems) var cart_list = []; getCartListCountResult(item_list,cart_list); getCartListFreeResult(item_list,cart_list,Math); var list = getShoppingList(cart_list); console.log(list); }
一.切割inputs数组,判断有无"-"的情况,用get_barcodes对象接收,然后push到barcodes数组里面
function get_barcodes_list(inputs,barcodes) { var count=0; var get_barcodes={}; for(var j=0;j<inputs.length;j++){ if(inputs[j].indexOf('-')!=-1){ get_barcodes.count= inputs[j].substr(inputs[j].indexOf('-')+1,inputs[j].length); get_barcodes.barcode= inputs[j].substr(0,inputs[j].indexOf('-')); } else { get_barcodes.count= 1; get_barcodes.barcode=inputs[j].substr(0,inputs[j].length); } for (var m = 0; m < get_barcodes.count; m ++) { barcodes.push(get_barcodes.barcode); } } }
二.遍历barcodes数组,用allItems获取商品信息并遍历它。判断两者里面的信息是否相同,然后放到item_list数组里面。
function get_item_list_result(item_list,barcodes,allItems){ for(var i=0;i<barcodes.length;i++) { for(var k=0;k<allItems.length;k++) { if(allItems[k].barcode ==barcodes[i]) { item_list.push(allItems[k]) } } } }
三.定义数组cart_list存放商品信息;遍历数组item_list;判断item_list的长度是否为零;把参数放到数组cart_list中。
function getCartListCountResult(item_list,cart_list) { for(var m=0;m<item_list.length;m++) { if(cart_list.length==0){ item_list[m].count=1; cart_list.push(item_list[m]); } else { for(var n=0;n<cart_list.length;n++) { if(cart_list[n].barcode==item_list[m].barcode){ cart_list[n].count++; break; } else if(n==cart_list.length-1){ item_list[m].count=1; cart_list.push(item_list[m]); break; } } } }
四.遍历数组item_list,cart_list.判断里面的barcode是否相同,获得free的信息(向下取余)。
function getCartListFreeResult(item_list,cart_list,Math){ for(var m=0;m<item_list.length;m++) { for(var n=0;n<cart_list.length;n++) { var free=0; if(cart_list[n].barcode==item_list[m].barcode){ cart_list[n].free=Math.floor(cart_list[n].count/3); } } } }
五.最后遍历数组item_list,循环遍历输出,再计算商品的总价格,并且打印输出结果
function getShoppingList(cart_list) { var list = "***<没钱赚商店>购物清单***"; var list_free = "挥泪赠送商品:"; var sum = 0; var save = 0; for(var n=0;n<cart_list.length;n++){ var lists = cart_list[n]; if (cart_list[n].free > 0) { list_free = list_free+"\n"+"名称:"+cart_list[n].name+",数量:"+cart_list[n].free+cart_list[n].unit; } list = list+"\n"+"名称:"+cart_list[n].name+",数量:"+cart_list[n].count+cart_list[n].unit+",单价:"+cart_list[n].price.toFixed(2)+"(元),小计:"+((cart_list[n].count-cart_list[n].free)*cart_list[n].price).toFixed(2)+"(元)"; // list_free = list_free+"\n"+"名称:"+cart_list[n].name+",数量:"+cart_list[n].free+cart_list[n].unit; sum = sum+(cart_list[n].count-cart_list[n].free)*cart_list[n].price; save = save+cart_list[n].free*cart_list[n].price; } list = list+"\n"+"----------------------"+"\n"+list_free+"\n"+"----------------------"+"\n"+"总计:"+sum.toFixed(2)+"(元)"+"\n"+"节省:"+save.toFixed(2)+"(元)"+"\n"+"**********************"; return list }
相关推荐
POS Project v1POS收银机 版本:v1教学目标熟悉JavaScript的基本语法;熟悉JavaScript的基本逻辑语句及关键字;需求描述商店里进行购物结算时会使用收银机(POS)系统,这台收银机会在结算时根据客户的购物车(Cart...
POS Project该项目通过模拟一台POS机(收银机),来锻炼学员JavaScript编程能力。使用方法将该项目Clone到自己的本地电脑上:移除项目文件夹中的.git文件夹;在项目文件夹中使用git init命令重新创建本地Git仓库;...
POS收银机版本:v1 教学目标 熟悉JavaScript的基本语法; 熟悉JavaScript的基本逻辑语句及关键字; 需求描述 商店里进行购物结算时会使用收银机(POS)系统,这台收银机会在结算时根据客户的购物车(购物车)中的...
POS收银机 版本:v1 教学目标 熟悉JavaScript的基本语法; 熟悉JavaScript的基本逻辑语句及关键字; 需求描述 商店里进行购物结算时会使用收银机(POS)系统,这台收银机会在结算时根据客户的购物车(Cart)中的商品...
简单POS :red_heart: :red_heart: :red_heart: :red_heart: 用Flutter编写的移动POS,适用于小型咖啡馆/餐馆,完全脱机。 经测试可在Sunmi V1S设备上打印。 支持: 安卓网络(目前无法打印) 英文和越南文(自动检测...
再者,美萍超市销售管理系统SQL版POS端2012v1.exe是面向收银员的操作界面,其设计简洁直观,易于操作。POS端支持条形码扫描,快速完成结账过程,提高收银效率。此外,它还具备会员管理功能,可以实现会员积分、优惠...
4. **移动支付**:在POS机等移动支付设备中,通过AT命令进行数据加密传输,确保交易安全。 五、开发与调试 开发者在使用Neoway M590E V1模块时,需要熟悉其AT命令集,并通过UART接口与模块进行通信。在调试过程中,...
该项目通过模拟一台POS机(收银机),来锻炼学员JavaScript编程能力。 项目地址请见: https://github.com/iamcoach/pos 作业进度 第一周:pos_v1 (done) 第二周:pos-oop(done) 第三周:pos-tdd-TW (done) 本周我...
2. **终端报文接口**:终端报文接口定义了银行ATM机、POS机或其他智能终端与银联服务器通信的报文格式和协议。包括请求报文和响应报文的结构、字段含义、数据编码方式等,这些规范确保了终端设备能正确发送和接收...
6. 集成化解决方案:美萍餐饮管理系统能够与硬件设备(如POS机、电子菜单、厨房打印机)无缝对接,实现前后台的流畅协作,提高整体运营效率。 7. 安全性与稳定性:系统具备数据备份和恢复功能,确保在突发情况下...
"美萍汽车美容管理系统标准版2010v1.exe"可能是一个包含特定POS小票打印机驱动的软件包,尤其是对于那些需要与汽车美容管理软件集成的商业环境。这种类型的管理系统通常会包括兼容的硬件驱动,以确保打印机能在软件...
- **V1 和 VR 速度**:分别表示起飞决定速度和抬前轮速度,由FMC计算得出,仅在地面显示。 #### 高度指示器与垂直速度指示器 - **气压高度表拨正**:显示当前气压设定值,若不符合标准大气压则以黄色显示提示调整...
- **位置初始化**:通过按下R6线路选择键两次,进入位置初始化页面,再按下POS Init键进入航路页面。 ##### 2. 航线规划 - **航线规划工具**:使用FSX内置的飞行计划工具进行航线规划。 - **航线设置**:设定巡航...
具体的文件包括`train_set.pos`、`train_set.neg`、`test_set.pos`以及`test_set.neg`。这些文件通常包含了正样本和负样本的路径信息。为了确保程序能够正确地读取到这些文件,需要注意以下几点: - **确保文件存在...
6. **安全产品**:自动取款机(ATM)、销售点终端(POS)、考勤系统和SIM卡。 **ARM体系结构的特点** 1. **RISC结构**:简单且功耗低。 2. **固定长度指令**:简化指令解码,利于流水线设计。 3. **装载/保存结构**...
- 集群节点的宕机会导致部分数据不可用,因此需要规划好故障恢复策略。 在"淘淘商城"这样的大型电商平台中,合理地部署和管理Redis集群是至关重要的。它不仅可以提高数据读取速度,还能通过分布式存储来提高系统的...
MT6735是一款由联发科(MediaTek)推出的面向入门级和中低端智能手机和平板电脑的系统级芯片(SoC),它在Android设备中广泛使用,尤其适用于工业控制主板、POS机以及各种移动应用场景。这个资料套装包含了与MT6735...
该ST8034HN 智能卡测试连接器广泛应用于POS,机顶盒,付费电视,身份识别,银行业务和行驶记录仪等市场领域。 主要特征 智能卡测试连接器 标记测试点以访问所有信号 电路板设计允许基本测试的独立操作 连接到MCU模块...