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 
}

猜你喜欢

转载自1445060302.iteye.com/blog/2418767
v1