`
qiannianhua
  • 浏览: 17897 次
社区版块
存档分类
最新评论

JS pos机- V0.2

 
阅读更多

商店里进行购物结算时会使用收银机(POS)系统,这台收银机会在结算时根据客户的购物车(Cart)中的商品(Item)进行结算和打印购物清单。

我们需要实现一个名为printInventory函数,该函数能够将指定格式的数据作为参数输入,然后在浏览器的控制台中输出结算清单的文本。

输入格式(样例):

[
    'ITEM000000',
    'ITEM000000',
    'ITEM000000',
    'ITEM000000',
    'ITEM000000',
    'ITEM000001',
    'ITEM000001',
    'ITEM000004'
]

(当点击"保存并提交代码"按钮的时候,我们会调用函数printInventory将上面的数据作为参数(inputs)传入该函数。)

清单内容(样例):

***<没钱赚商店>购物清单***
名称:可口可乐,数量:5瓶,单价:3.00(元),小计:15.00(元)
名称:雪碧,数量:2瓶,单价:3.00(元),小计:6.00(元)
名称:电池,数量:1个,单价:2.00(元),小计:2.00(元)
----------------------
总计:23.00(元)
**********************

 

function loadAllItems() {
    return [
        {
            barcode: 'ITEM000000',
            name: '可口可乐',
            unit: '瓶',
            price: 3.00
        },
        {
            barcode: 'ITEM000001',
            name: '雪碧',
            unit: '瓶',
            price: 3.00
        },
        {
            barcode: 'ITEM000002',
            name: '苹果',
            unit: '斤',
            price: 5.50
        },
        {
            barcode: 'ITEM000003',
            name: '荔枝',
            unit: '斤',
            price: 15.00
        },
        {
            barcode: 'ITEM000004',
            name: '电池',
            unit: '个',
            price: 2.00
        },
        {
            barcode: 'ITEM000005',
            name: '方便面',
            unit: '袋',
            price: 4.50
        }
    ];
}

 

describe('practice-1-3', function () {
    var allItems;
    var inputs;

    beforeEach(function () {
        allItems = loadAllItems();
        inputs = [
            'ITEM000000',
            'ITEM000000',
            'ITEM000000',
            'ITEM000000',
            'ITEM000000',
            'ITEM000001',
            'ITEM000001',
            'ITEM000004'
        ];
    });

    it('should print correct text', function () {

        printInventory(inputs);

        var expectText =
                '***<没钱赚商店>购物清单***\n' +
                '名称:可口可乐,数量:5瓶,单价:3.00(元),小计:15.00(元)\n' +
                '名称:雪碧,数量:2瓶,单价:3.00(元),小计:6.00(元)\n' +
                '名称:电池,数量:1个,单价:2.00(元),小计:2.00(元)\n' +
                '----------------------\n' +
                '总计:23.00(元)\n' +
                '**********************';

          expect(logs[0]).toBe(expectText);
    });
});

   答案:

1)定义求和变量sum、count、item,并赋值sum、count为零;定义数组cart_list和item_list存放商品信息:

var sum=0;
    var cart_list=[];
    var item;
    var item_list=[];
    var count=0;

 

 2)把loadAllItems()函数赋给变量allItems:

var allItems=loadAllItems();

 

 3)遍历inputs数组,再遍历allitems,然后判断它们的barcode是否相等,把参数allitem放到数组cart_list中:

inputs.forEach(function(input){                           
        allItems.forEach(function(allitem){ 
            if(allitem.barcode == input)   
            {
                cart_list.push(allitem);  
            }
         })
     })

 

 4) 遍历car_list数组,把carts赋值给item,再判断数组长度是否为零:

cart_list.forEach(function(carts){  
                item=carts;
                if(item_list.length === 0)   
                {
                  
                }

 

 5)如果遍历的参数的barcode在item数组里有,则把该参数的数量加1,然后跳出本次循环:

if(items.barcode == item.barcode)
                        {
                            items.count++;
                            return;  
                        }

 

 6)判断是否已经遍历到最后一个对象了,如果数组里面没存有该对象,则把该参数放到数组里,并赋值为1:

else if(index == item_list.length-1)   //判断是否已遍历到最后一个对象
                        {
                            item.count=1;
                            item_list.push(item);
                        }             

 

 7)最后遍历数组item_list,循环遍历输出,再计算商品的总价格,并且打印输出结果:

item_list.forEach(function(allitems){
        list=list+'\n'+'名称:'+allitems.name+',数量:'+allitems.count+allitems.unit+',单价:'+allitems.price+'.00(元)'+',小计:'+allitems.count*allitems.price+'.00(元)';
         sum += allitems.count*allitems.price;    //计算总价格
    })
console.log(list+'\n'+'----------------------'+'\n'+'总计:'+sum+'.00(元)'+'\n'+'**********************');

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics