POS Project v1

POS收银机 版本:v1

教学目标

  1. 熟悉JavaScript的基本语法;
  2. 熟悉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(元)
**********************

作业要求

  1. main.js文件中编写实现代码并确保测试通过;
  2. 请在保证代码可读性的前提下,尽可能用最少的代码行数完成作业; 注意:所有的标点符号均为英文符号

作业提示

  1. 可使用loadAllItems()方法获取全部的商品,该方法返回结果为一个包含了商品对象的数组(样例):

       [ item1, item2, item3, ..., itemN ]
    
  2. 每一个商品对象的结构如下(样例):

    javascript

       {barcode: 'ITEM000000',name: '可口可乐',unit: '瓶',price: 3.00}
    
  3. 可使用loadPromotions()方法获取全部的促销信息,该方法返回结果为一个包含有促销信息对象的数组(样例):

    javascript

       [{type: 'BUY_TWO_GET_ONE_FREE',barcodes: ['ITEM000000','ITEM000001']},{type: 'OTHER_PROMOTION',barcodes: ['ITEM000003','ITEM000004']}]
    
  4. 使用console.log输出(仅允许使用一次)

  5. 应学习并善于使用各种流行浏览器所附带的开发人员工具中的控制台(Console)功能。
  6. 解题思路:给出的条形码不标准,要想办法将其拆开;连同优惠一起打印的话,加一个键值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.pricelist=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,简单pos机相关推荐

  1. linux查看刷卡pos机_LINUX饭堂收费机/会员LINUX刷卡机/LINUX手持收费机

    LINUX饭堂收费机/会员LINUX刷卡机/LINUX手持收费机 推荐Linux手持收费机,小票打印手持POS刷卡机,会员收费机 GPRS手持收费POS机特点 ¨ 功能强大.齐全,设置功能简单,操作快 ...

  2. 请更换备份电池 pos机_什么pos机刷信用卡最好最安全,不会跳码最稳定

    今天的文章,是回应一位成都网友的问题,我们每一位商家,都想要一台刷信用卡又好又安全,不跳码的稳定的pos机,其实这个要求并不高,但是在当下pos机市场混乱的年代,这样的pos机却是不多. 今天我们来推 ...

  3. php pos机刷卡,pos机怎么刷卡?POS机刷卡详细步骤,POS机应该怎么选?

    pos机怎么刷卡?使用POS机刷卡首先需要开机然后根据需要按功能键.如果您想消费请按消费键然后插入需要刷卡的银行卡或银行卡号.看到卡号正确后按"确认":最后一步是输入你要刷的金额. ...

  4. 棒棒糖-小学数学出题机v1.4.2【更新2019/12/26】

    [推荐]2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 今年儿子刚上一年级,现在每天要做口算题,每次都要打印100题随机题目让他做,网上找了很多出题器,不是操作太繁琐 ...

  5. 印钞机 V1.0(量化选基总结)

    今年的元旦,在家把之前手工的选基方法完全程序化了.这是我的"印钞机" V1.0. 为什么叫印钞机,详细情况可见下文及最后的总结. 量化选基成果 我的主要基金投资方法其实就是量化选基 ...

  6. POP气球机v1.3

    已失效 [v1.3新增功能]: 1:由于pop登录程序有所修改,导致v1.1不能登录,因此升级.   2:新增将软件在最小化时放入托盘的功能,减少在放气球时候占用状态栏空间.   3:新增在重复放气球 ...

  7. 小米android手机怎么刷机,刷机如此简单 小米手机四种刷机方法

    完整包刷机 完整包刷机适用于MIUI的升级.降级,开发版与稳定版的互刷,甚至是刷原生系统或者点心OS,是最灵活也是大家最想得到的刷机方式,这种升级 方式没有其他厂商提供,而用户在其他品牌上选择这种刷机 ...

  8. 磁碟机变种简单分析(lsass.exe、smss.exe、dnsq.dll、NetApi000.sys)

    from: http://bbs.xcdx169.net/redirect.php?tid=56034&goto=lastpost&sid=NrNn1c 磁碟机变种简单分析(lsass ...

  9. 简单抽奖机系统(中午吃什么?)

    简单抽奖机系统(中午吃什么?) html和css部分: #本来是写给我们宿舍的抽奖系统,因为纠结不知道每天中午到底吃什么,哈哈哈,希望大家先点赞收藏再借鉴哦!! html和css部分: <!DO ...

  10. 计算机组成原理简单模型机实验,CPU 与简单模型机设计实验

    计算机科学与技术系 实 验 报 告 专业名称 计算机科学与技术 课程名称 计算机组成原理 项目名称 CPU 与简单模型机设计实验 班 级 学 号 姓 名 同组人员 无 实验日期 2016.6 一.实验 ...

最新文章

  1. 用了这么久的 Python,居然没注意到这个操作
  2. 读书笔记2013第10本:《学得少却考得好Learn More Study Less》
  3. python批量读取根目录下文件内容并保存
  4. 未能正确加载“Microsoft.VisualStudio.Editor.Implementation.EditorPackage”包 - - 博客频道 - CSDN.NET...
  5. python数值运算符也叫内置运算符_Python全栈工程师(数值类型、运算符)
  6. 上海全球“编程一小时”活动记
  7. 力扣—— 224. 基本计算器(困难)
  8. C++的静态联编和动态联编
  9. 信息系统项目管理师视频教程——10 信息系统项目管理基础
  10. 2021-10-08梦笔记
  11. maven项目中:java.io.IOException: java.io.FileNotFoundException--- (文件名、目录名或卷标语法不正确。)
  12. Struts2详细执行流程自己总结
  13. 【性能】【内存】swap解读
  14. JavaSE基础笔记——File概述、方法递归、字符集、IO流
  15. c语言编程矩阵鞍点函数,c语言 任意输入一个3×3的矩阵,用函数实现求上三角矩阵并输出。...
  16. Unity实现远程开关机电脑设置(网络唤醒)
  17. win10怎么设置动态壁纸
  18. JS实现小方块上下移动
  19. beeline执行sql语句_beeline执行sql脚本交易
  20. 第八章、使用matplotlib绘制高级图表

热门文章

  1. CQF笔记M1L2二叉树模型
  2. 2019全国大学生软件测试大赛决赛
  3. 新媒体推广:一篇文章学会全平台信息流优化 !你get到了吗? | 黎想
  4. matlab src,SRC 这是一个利用了稀疏表示方法的MATLAB程序,供大家参考学习。 Special Effects 图形图像处理 256万源代码下载- www.pudn.com...
  5. DHU Matlab Experiment【4】_验证非线性最小二乘拟合lsqcurvefit()函数中的误差平方和
  6. 对象的15位、18位中国大陆身份证号码解析、验证工具
  7. shell脚本的逻辑判断
  8. STM32+ESP8266 AT测试、透传、DHT11、APP操作以及源代码
  9. Oracle PL / SQL – INSTEAD OF触发器示例
  10. mysql数据库锁定和解锁_MySQL数据库如何锁定和解锁数据库表?