POS Project v1
POS收银机 版本:v1
教学目标
- 熟悉JavaScript的基本语法;
- 熟悉JavaScript的基本逻辑语句及关键字;
需求描述
商店里进行购物结算时会使用收银机(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(元)
**********************
作业要求
- 在
main.js
文件中编写实现代码并确保测试通过; - 请在保证代码可读性的前提下,尽可能用最少的代码行数完成作业; 注意:所有的标点符号均为英文符号
作业提示
-
可使用
loadAllItems()
方法获取全部的商品,该方法返回结果为一个包含了商品对象的数组(样例):[ item1, item2, item3, ..., itemN ]
-
每一个商品对象的结构如下(样例):
javascript
{ barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', price: 3.00 }
-
可使用
loadPromotions()
方法获取全部的促销信息,该方法返回结果为一个包含有促销信息对象的数组(样例):javascript
[ { type: 'BUY_TWO_GET_ONE_FREE', barcodes: [ 'ITEM000000', 'ITEM000001' ] }, { type: 'OTHER_PROMOTION', barcodes: [ 'ITEM000003', 'ITEM000004' ] } ]
-
使用console.log输出(仅允许使用一次)
- 应学习并善于使用各种流行浏览器所附带的开发人员工具中的控制台(Console)功能。
- 解题思路:给出的条形码不标准,要想办法将其拆开;连同优惠一起打印的话,加一个键值free,当期为0时不打印即可。
解题步骤:
function printInventory(inputs) { var barcode_list=get_barcode_list(inputs); var shopping_cart=get_shopping_cart(barcode_list); var list_print=get_shopping_lists(shopping_cart); console.log(list_print); } function get_barcode_list(inputs){ var barcodes={}; inputs.forEach(function(input){ if(barcodes[input]||input.indexOf('-')!=-1){ barcodes[input]++; barcodes[input.substr(0,input.indexOf('-'))]=input.substr(input.indexOf('-')+1,input.length); } else { barcodes[input]=1; } }); return barcodes } function get_shopping_cart(barcode_list){ var items=loadAllItems(); var shopping_cart=[]; items.forEach(function(item){ if(barcode_list[item.barcode]){ item.count=barcode_list[item.barcode]; item.free=Math.floor(item.count/3); shopping_cart.push(item); } }); return shopping_cart } function get_shopping_lists(shopping_cart){ var list='***<没钱赚商店>购物清单***'; var list_free='----------------------'+'\n'+'挥泪赠送商品:'; var sum=0; var save=0; shopping_cart.forEach(function(lists){ var subtotal=(lists.count-lists.free)*lists.price list=list+'\n'+'名称:'+lists.name+',数量:'+lists.count+lists.unit+',单价:'+lists.price.toFixed(2)+'(元),小计:'+subtotal.toFixed(2)+'(元)' sum+=subtotal; if(lists.free>0){ list_free=list_free+'\n'+'名称:'+lists.name+',数量:'+lists.free+lists.unit; save+=lists.free*lists.price; } }); list=list+'\n'+list_free+'\n'+'----------------------'+'\n'+'总计:'+sum.toFixed(2)+'(元)'+'\n'+'节省:'+save.toFixed(2)+'(元)'+'\n'+'**********************'; return list }
注意:命名时一定要表现其本体的真实含义,函数用动词,命名要规范。
此题中用到的知识:
(1)||或,当范围不重叠时,可以写在一段条件语句(如if)中。 if(barcodes[input]||input.indexOf('-')!=-1)
(2)indexOf()可以提取字符在字符串中的位置,当值为-1时表示字符不存在。 input.indexOf('-')!=-1
(3)substr(start,length) 方法可在字符串中抽取从 start 下标开始的指定数目的字符。 start表示抽取的起始位置,必填(第一个为0) length表示抽取的长度,当不填时为到达最后一个。
(4)toFixed()括号中为数值,表示保留小数点位数。
(5)Math.floor(item.count/3) Math.floor的作用,向下取整,如5/3得到1.
相关推荐
POS收银机版本:v1 教学目标 熟悉JavaScript的基本语法; 熟悉JavaScript的基本逻辑语句及关键字; 需求描述 商店里进行购物结算时会使用收银机(POS)系统,这台收银机会在结算时根据客户的购物车(购物车)中的...
POS Project该项目通过模拟一台POS机(收银机),来锻炼学员JavaScript编程能力。使用方法将该项目Clone到自己的本地电脑上:移除项目文件夹中的.git文件夹;在项目文件夹中使用git init命令重新创建本地Git仓库;...
POS Project v1POS收银机 版本:v1教学目标熟悉JavaScript的基本语法;熟悉JavaScript的基本逻辑语句及关键字;需求描述商店里进行购物结算时会使用收银机(POS)系统,这台收银机会在结算时根据客户的购物车(Cart...
简单POS :red_heart: :red_heart: :red_heart: :red_heart: 用Flutter编写的移动POS,适用于小型咖啡馆/餐馆,完全脱机。 经测试可在Sunmi V1S设备上打印。 支持: 安卓网络(目前无法打印) 英文和越南文(自动检测...
4. **移动支付**:在POS机等移动支付设备中,通过AT命令进行数据加密传输,确保交易安全。 五、开发与调试 开发者在使用Neoway M590E V1模块时,需要熟悉其AT命令集,并通过UART接口与模块进行通信。在调试过程中,...
再者,美萍超市销售管理系统SQL版POS端2012v1.exe是面向收银员的操作界面,其设计简洁直观,易于操作。POS端支持条形码扫描,快速完成结账过程,提高收银效率。此外,它还具备会员管理功能,可以实现会员积分、优惠...
POS收银机 版本:v1 教学目标 熟悉JavaScript的基本语法; 熟悉JavaScript的基本逻辑语句及关键字; 需求描述 商店里进行购物结算时会使用收银机(POS)系统,这台收银机会在结算时根据客户的购物车(Cart)中的商品...
该项目通过模拟一台POS机(收银机),来锻炼学员JavaScript编程能力。 项目地址请见: https://github.com/iamcoach/pos 作业进度 第一周:pos_v1 (done) 第二周:pos-oop(done) 第三周:pos-tdd-TW (done) 本周我...
6. 集成化解决方案:美萍餐饮管理系统能够与硬件设备(如POS机、电子菜单、厨房打印机)无缝对接,实现前后台的流畅协作,提高整体运营效率。 7. 安全性与稳定性:系统具备数据备份和恢复功能,确保在突发情况下...
"美萍汽车美容管理系统标准版2010v1.exe"可能是一个包含特定POS小票打印机驱动的软件包,尤其是对于那些需要与汽车美容管理软件集成的商业环境。这种类型的管理系统通常会包括兼容的硬件驱动,以确保打印机能在软件...
2. **终端报文接口**:终端报文接口定义了银行ATM机、POS机或其他智能终端与银联服务器通信的报文格式和协议。包括请求报文和响应报文的结构、字段含义、数据编码方式等,这些规范确保了终端设备能正确发送和接收...
MT6735是一款由联发科(MediaTek)推出的面向入门级和中低端智能手机和平板电脑的系统级芯片(SoC),它在Android设备中广泛使用,尤其适用于工业控制主板、POS机以及各种移动应用场景。这个资料套装包含了与MT6735...
- 集群节点的宕机会导致部分数据不可用,因此需要规划好故障恢复策略。 在"淘淘商城"这样的大型电商平台中,合理地部署和管理Redis集群是至关重要的。它不仅可以提高数据读取速度,还能通过分布式存储来提高系统的...
6. **安全产品**:自动取款机(ATM)、销售点终端(POS)、考勤系统和SIM卡。 **ARM体系结构的特点** 1. **RISC结构**:简单且功耗低。 2. **固定长度指令**:简化指令解码,利于流水线设计。 3. **装载/保存结构**...
6. 电磁感应:POS机刷卡原理是利用了电磁感应。当带有磁条的信用卡在检测头的线圈附近快速滑过,磁条上的磁场变化使线圈产生电流,从而读取信息。题目中描述的原理与电磁感应相符。 7. 杠杆平衡:杠杆平衡条件是...
1. **Jakes模型**:基于多径分量的相位随时间的变化,Jakes模型提供了模拟瑞利衰落信道的简单方法。它考虑了接收机速度对多普勒频谱的影响,并且生成的信号具有特定的功率谱密度。 2. **Clark模型**:Clark模型是另...
该ST8034HN 智能卡测试连接器广泛应用于POS,机顶盒,付费电视,身份识别,银行业务和行驶记录仪等市场领域。 主要特征 智能卡测试连接器 标记测试点以访问所有信号 电路板设计允许基本测试的独立操作 连接到MCU模块...
概述:商米打印模块,支持商米主推的智能商用硬件V1(来自个人模块开发者) 5.toBackground 概述:可用于Android App一键进入后台运行模块(来自个人模块开发者) 6.realNetwork 概述:检测手机是否能真正上网,...