`
Baby真卑鄙
  • 浏览: 9724 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

POS机-V1

 
阅读更多

需求描述

商店里进行购物结算时会使用收银机(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-v1-node-work

    POS Project v1POS收银机 版本:v1教学目标熟悉JavaScript的基本语法;熟悉JavaScript的基本逻辑语句及关键字;需求描述商店里进行购物结算时会使用收银机(POS)系统,这台收银机会在结算时根据客户的购物车(Cart...

    pos:POS Project - 该项目通过模拟一台POS机(收银机),来锻炼学员JavaScript编程能力

    POS Project该项目通过模拟一台POS机(收银机),来锻炼学员JavaScript编程能力。使用方法将该项目Clone到自己的本地电脑上:移除项目文件夹中的.git文件夹;在项目文件夹中使用git init命令重新创建本地Git仓库;...

    pos_v1-2019-6-13-7-40-25-697

    POS收银机版本:v1 教学目标 熟悉JavaScript的基本语法; 熟悉JavaScript的基本逻辑语句及关键字; 需求描述 商店里进行购物结算时会使用收银机(POS)系统,这台收银机会在结算时根据客户的购物车(购物车)中的...

    pos-v-jQuery

    POS收银机 版本:v1 教学目标 熟悉JavaScript的基本语法; 熟悉JavaScript的基本逻辑语句及关键字; 需求描述 商店里进行购物结算时会使用收银机(POS)系统,这台收银机会在结算时根据客户的购物车(Cart)中的商品...

    flutter-pos:用Flutter,兼容的Sunmi设备编写的移动POS应用

    简单POS :red_heart: :red_heart: :red_heart: :red_heart: 用Flutter编写的移动POS,适用于小型咖啡馆/餐馆,完全脱机。 经测试可在Sunmi V1S设备上打印。 支持: 安卓网络(目前无法打印) 英文和越南文(自动检测...

    美萍超市管理2012V1网络版

    再者,美萍超市销售管理系统SQL版POS端2012v1.exe是面向收银员的操作界面,其设计简洁直观,易于操作。POS端支持条形码扫描,快速完成结账过程,提高收银效率。此外,它还具备会员管理功能,可以实现会员积分、优惠...

    Neoway_M590E_V1_GSM_Module_AT_Command_Set_V1_0_m950_atcommands_n

    4. **移动支付**:在POS机等移动支付设备中,通过AT命令进行数据加密传输,确保交易安全。 五、开发与调试 开发者在使用Neoway M590E V1模块时,需要熟悉其AT命令集,并通过UART接口与模块进行通信。在调试过程中,...

    pos:POS Project 学员版

    该项目通过模拟一台POS机(收银机),来锻炼学员JavaScript编程能力。 项目地址请见: https://github.com/iamcoach/pos 作业进度 第一周:pos_v1 (done) 第二周:pos-oop(done) 第三周:pos-tdd-TW (done) 本周我...

    银联所有接口规范文档,非常全面

    2. **终端报文接口**:终端报文接口定义了银行ATM机、POS机或其他智能终端与银联服务器通信的报文格式和协议。包括请求报文和响应报文的结构、字段含义、数据编码方式等,这些规范确保了终端设备能正确发送和接收...

    美萍餐饮管理系统SQL黄金版2011v1.zip

    6. 集成化解决方案:美萍餐饮管理系统能够与硬件设备(如POS机、电子菜单、厨房打印机)无缝对接,实现前后台的流畅协作,提高整体运营效率。 7. 安全性与稳定性:系统具备数据备份和恢复功能,确保在突发情况下...

    POS小票打印机驱动大全

    "美萍汽车美容管理系统标准版2010v1.exe"可能是一个包含特定POS小票打印机驱动的软件包,尤其是对于那些需要与汽车美容管理软件集成的商业环境。这种类型的管理系统通常会包括兼容的硬件驱动,以确保打印机能在软件...

    波音747中文操作手册

    - **V1 和 VR 速度**:分别表示起飞决定速度和抬前轮速度,由FMC计算得出,仅在地面显示。 #### 高度指示器与垂直速度指示器 - **气压高度表拨正**:显示当前气压设定值,若不符合标准大气压则以黄色显示提示调整...

    FSX cs757教程

    - **位置初始化**:通过按下R6线路选择键两次,进入位置初始化页面,再按下POS Init键进入航路页面。 ##### 2. 航线规划 - **航线规划工具**:使用FSX内置的飞行计划工具进行航线规划。 - **航线设置**:设定巡航...

    HMAX编译踩过的坑.docx

    具体的文件包括`train_set.pos`、`train_set.neg`、`test_set.pos`以及`test_set.neg`。这些文件通常包含了正样本和负样本的路径信息。为了确保程序能够正确地读取到这些文件,需要注意以下几点: - **确保文件存在...

    微处理器系统结构与嵌入式系统PPT学习教案.pptx

    6. **安全产品**:自动取款机(ATM)、销售点终端(POS)、考勤系统和SIM卡。 **ARM体系结构的特点** 1. **RISC结构**:简单且功耗低。 2. **固定长度指令**:简化指令解码,利于流水线设计。 3. **装载/保存结构**...

    淘淘商城redis集群安装下载

    - 集群节点的宕机会导致部分数据不可用,因此需要规划好故障恢复策略。 在"淘淘商城"这样的大型电商平台中,合理地部署和管理Redis集群是至关重要的。它不仅可以提高数据读取速度,还能通过分布式存储来提高系统的...

    MT6735资料全套

    MT6735是一款由联发科(MediaTek)推出的面向入门级和中低端智能手机和平板电脑的系统级芯片(SoC),它在Android设备中广泛使用,尤其适用于工业控制主板、POS机以及各种移动应用场景。这个资料套装包含了与MT6735...

    ST8034HN 智能卡测试连接器设计-电路方案

    该ST8034HN 智能卡测试连接器广泛应用于POS,机顶盒,付费电视,身份识别,银行业务和行驶记录仪等市场领域。 主要特征 智能卡测试连接器 标记测试点以访问所有信号 电路板设计允许基本测试的独立操作 连接到MCU模块...

Global site tag (gtag.js) - Google Analytics