教学目标
熟悉JavaScript的基本语法;
熟悉JavaScript的基本逻辑语句及关键字;
熟悉使用Lo-Dash和moment.js等第三方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)功能。
function printInventory(inputs) { var item; var list=''; var sum=0; var item_list=[]; var cart_list=[]; var barcode_list=[]; var allItems = loadAllItems(); var item_barcode; var Promotion=''; var save=0; _.map(inputs,function(i) { item_barcode=i; inputs=i.length==10?barcode_list.push(item_barcode):barcode_list.push((i.substr(0,10)),(i.substr(0,10))); }); _.map(barcode_list,function(j) { _.map(allItems,function(k) { item=k; if(k.barcode==j) { cart_list.push(item); } }); }); _.map(cart_list,function(l){ item=l; if(item_list.length===0) { item.count=1; item_list.push(item); } else{ for(var m=0;m<item_list.length;m++){ if(l==item_list[m]) { item.count++; } else if(m==item_list.length-1) { item_list.push(item); item.count=0; } } } }); _.map(item_list,function(n) { if(n.count>=3) { Promotion+='\n'+'名称:'+n.name+','+'数量:'+parseInt(n.count/3)+n.unit; save+=parseInt(n.count/3)*n.price; } list=list+'\n'+'名称:'+n.name+','+'数量:'+n.count+n.unit+','+'单价:'+n.price.toFixed(2)+'(元)'+','+'小计:'+((n.count-parseInt(n.count/3))*n.price).toFixed(2)+'(元)'; sum+=(n.count-parseInt(n.count/3))*n.price; }); dateDigitToString = function (num) { return num < 10 ? '0' + num : num; }; var currentDate = new Date(), year = dateDigitToString(currentDate.getFullYear()), month = dateDigitToString(currentDate.getMonth() + 1), date = dateDigitToString(currentDate.getDate()), hour = dateDigitToString(currentDate.getHours()), minute = dateDigitToString(currentDate.getMinutes()), second = dateDigitToString(currentDate.getSeconds()), formattedDateString = year + '年' + month + '月' + date + '日 ' + hour + ':' + minute + ':' + second; list='***<没钱赚商店>购物清单***'+'\n'+'打印时间:'+ formattedDateString+'\n'+'----------------------' +list+'\n'+'----------------------'+'\n'+'挥泪赠送商品:'+Promotion+'\n'+'----------------------'+'\n'+'总计:'+sum.toFixed(2)+'(元)'+'\n'+'节省:'+save.toFixed(2)+'(元)'+'\n'+'**********************'; console.log(list); }
POS收银机 v1.1此题运用了: 1 for循环遍历数组;
2 对象中键所对应的值;
3 拼接字符串;
4 if else 语句;
5 数组的添加 用push;
6 substr截取字符串;
7 parseint所求的商为整数;
8 toFixed()把 Number 四舍五入为指定小数位数的数字;
9 调用函数dateDigitToString的方法;
10 时间格式的转换;
11 用了Lo-Dash;
_.map()代替for循环语句
_.map(item_list,function(n){ n++; }); 等价于for(var n =0; n<item_list.length;n++){ n++;
代替if..if
var a;
if(activities.length){
a = 1;
}
if(!activities.legth){
a = 0;
}
替换以后
var a = activities.length ? 1 : 0;
相关推荐
超市pos收银机系统, 基于linux C
linux c POS 收银机fdssfsdfasdfasfsafdasdfdsaf
首页>实用工具 >服装POS收银台 服装POS收银台 服装POS收银台 分类:实用工具|支持:手机 ( 0次评分 )直接下载 详细信息 软件大小6.74MappID1352223 版本号2.0.0开发者郑州雅威计算机科技有限公司 更新时间2021-04-...
百业通超市POS收银系统“操作简单...要多台电脑或POS收银机联网使用,可以用百业通超市网络版的软件. 【点此查看详细介绍】: http://www.bytsoft.com/jxcpossingle/jxcpossingle.htm<br>【用户问题解答系列】: ...
能够实现超市收银机的全部功能 本系统是基于Linux 平台下的超市收银机,其采用了Oracle数据库对超市商品进行管理,使用了ncurses绘制界面,美观大方,功能方便实用,不过在有些细节方面做的不够,希望有兴趣的爱好者...
基于linux平台和MySQL数据库平台,应用了ncureses界面技术、ProC数据接口技术,实现单机版超市收银系统,十分适合linux入门级技术演练和参考
收银机安装 收银机配置 收银机系统安装流程,收款机配置 收款机配置向导 一. 新机系统设置 二.安装程序 三. 收银机IP设定
超市收银软件和POS收银机选购原则
药店操作手册:POS_操作手册-促销及会员管理方案V1.1.docx
POS机收银系统包含客户端和后台管理系统两部分组成。 客户端功能描述收银台、销售查询、库存查询、库存盘点、商品出库、商品入库、交接班几大模块组成; 1、用户登录模块:识别登陆用户,权限设置 2、收银模块...
适合安装在安卓系统的收银机上收银永久免费使用
Vue实战,pos收银系统Demo。
嵌入式系统下收银系统,完成包括收银,查询,出货,及账户管理等功能
【酷玩配件】ipad变身POS收银机.docx
超市POS收银系统 免费版 第一种支持并口小票打印机的超市软件绿色文件 第二种支持usb接口的各家店扫条码打小票软件
众尚ZM-POS58打印机驱动是一款适用于众尚ZM-POS58打印机驱动软件。安装众尚ZM-POS58打印机驱动之后可以让打印机进行正常工作,它能帮助用户解决打印机不能被电脑识别或者无法正常打印等问题,需要的快来jb51下载吧!...
pos 收银机原代码,机子卡没传完,希望大家共同探讨
百信超市POS收银系统,简单实用,免安装
模拟Pos收银机 1.收银员功能 1) 新增明细(F2 ) 2) 删除明细(F3) 3) 收银(F4) 4) 挂单(F5) 5) 取单(F6) 6) 撤单(F7) 7) 退货(F8) 8) 退出(F9) 2.管理员功能 1) 商品管理 "1:商品查询", "2:库存查询", "3:...