POS收银机 版本:v1

本文介绍如何使用JavaScript编写一个名为printInventory的函数,该函数处理商店收银机的结算逻辑,包括处理'买三送一'的优惠活动。作业要求在main.js文件中实现代码,使用loadAllItems()和loadPromotions()方法获取商品和促销信息,并在控制台输出结算清单。
摘要由CSDN通过智能技术生成

POS收银机 版本:v1

 

教学目标

熟悉JavaScript的基本语法;

熟悉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)功能。

 

 

 

 

 

f

unction 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;
    for(var i=0;i<inputs.length;i++){
    item_barcode=inputs[i];
       if(inputs[i].length == 10){
          barcode_list.push(item_barcode); 
        }
      else{
        
         item_barcode=inputs[i].substr(0,10); 
         barcode_list.push(item_barcode); 
         barcode_list.push(item_barcode); 
        }
    }
      
    for(var j=0;j<barcode_list.length;j++)
    {
        for(var k=0;k<allItems.length;k++){
             item=allItems[k];
            if(allItems[k].barcode==barcode_list[j]){
               cart_list.push(item);
            }
        }  
    }

    for(var l=0;l<cart_list.length;l++){
        item=cart_list[l];
        if(item_list.length===0){
           item.count=1;
           item_list.push(item); 
        }
        else{
            for(var n=0;n<item_list.length;n++){
                if(cart_list[l]==item_list[n]){
                item.count++;
                }
                else if(n==item_list.length-1){
                  item_list.push(item);
                   item.count=0;
                }
            }
        }
    }
    for(var m=0;m<item_list.length;m++)
    {
      
        if(item_list[m].count>=3)
        {
            Promotion+='\n'+'名称:'+item_list[m].name+','+'数量:'+parseInt(item_list[m].count/3)+item_list[m].unit;
      save+=parseInt(item_list[m].count/3)*item_list[m].price;  
    }
 list=list+'\n'+'名称:'+item_list[m].name+','+'数量:'+item_list[m].count+item_list[m].unit+','+'单价:'+item_list[m].price.toFixed(2)+'(元)'+','+'小计:'+(item_list[m].count-parseInt(item_list[m].count/3))*item_list[m].price+'.00(元)';
        
    sum+=(item_list[m].count-parseInt(item_list[m].count/3))*item_list[m].price;    
    }
    list=list+'\n'+'----------------------'+'\n'+Promotion+'\n'+'----------------------'+'\n'+'总计:'+sum.toFixed(2)+'(元)'+'\n'+'节省:'+save.toFixed(2)+'(元)'+'\n'+'**********************';
console.log(list);

 

 

  

     

    

}

POS收银机 v1此题运用了:       1 for循环遍历数组;

                              2 对象中键所对应的值;

                              3 拼接字符串;

                              4 if else 语句;

                              5 数组的添加 用push;

                              6 substr截取字符串;

                              7 parseint所求的商为整数;

                              8 toFixed()把 Number 四舍五入为指定小数位数的数字

substr() 方法可在字符串中抽取从 start 下标开始的指定数目的字符。

语法

stringObject.substr(start,length)

参数 描述

start 必需。要抽取的子串的起始下标。必须是数值。如果是负数,那么该参数声明从字符串的尾部开始算起的位置。也就是说,-1 指字符串中最后一个字符,-2

        倒数第二个字符,以此类推。

length 可选。子串中的字符数。必须是数值。如果省略了该参数,那么返回从 stringObject 的开始位置到结尾的字串。

        返回值

一个新的字符串,包含从 stringObject 的 start(包括 start 所指的字符) 处开始的 length 个字符。如果没有指定 length,那么返回的字符串包含从 start 到 stringObject 的结尾的字符。

 

例子 1:
ar str="Hello world!"
console.log(str.substr(3))

输出:
lo world!

 

例子 2 :
var str="Hello world!"
console.log(str.substr(3,7))
输出:
lo worl

 

 

 

parseint()方法

 

例子:
console.log(parseInt(10/3));
输出:
3

 

 

 

JavaScript toFixed() 方法

 

定义和用法

toFixed() 方法可把 Number 四舍五入为指定小数位数的数字。

语法

NumberObject.toFixed(num)

参数 描述

num 必需。规定小数的位数,是 0 ~ 20 之间的值,包括 0 和 20,有些实现可以支持更大的数值范围。如果省略了该参数,将用 0 代替。

        返回值

返回 NumberObject 的字符串表示,不采用指数计数法,小数点后有固定的 num 位数字。如果必要,该数字会被舍入,也可以用 0 补足,以便它达到指定的长度。如果 num 大于 le+21,则该方法只调用 NumberObject.toString(),返回采用指数计数法表示的字符串。

抛出

当 num 太小或太大时抛出异常 RangeError。0 ~ 20 之间的值不会引发该异常。有些实现支持更大范围或更小范围内的值。

当调用该方法的对象不是 Number 时抛出 TypeError 异常。

实例

在本例中,我们将把数字舍入为仅有一位小数的数字:

 

var num = new Number(13.37);
console.log (num.toFixed(1));
console.log (num.toFixed(2));
输出:
13.37
13.4

 

一、实例 本书的实例共包括版本为PowerBuilder5.0的27个PBL文件。其: 第 八 章:lzdasp.pbl:商品档案; lzdaghs.pbl:供货商档案; spdm.pbl:部门编码; lzdmbm.pbl:商品代码; 第 九 章:djjh.pbl:多级进货; jhuo_rkd.pbl:一次进货; 第 十 章:lzkcckd.pbl:出库管理(外库移库、内库出库); splzkcpdapp.pbl:盘点管理(库存盘点报告单、盘点报告表); 第十一章:lzxsda1.pbl:Plu档案管理; lzxshda.pbl:收款机参数录入、收款员档案管理、管理卡管理、销售汇总; lzxshcx.pbl:单品销售日报、部门销售报表、售货员分析、收款员分析、销售实查询; ryhmx.pbl:日优惠销售明细; splzwjmain.pbl:一些通用函数; tjbb_xs.pbl:销售日报表; xsbb.pbl:销售报表; xsmlqk.pbl:销售毛利情况; zhcx.pbl:综合查询、销售分类查询; 第十二章:dxspjs.pbl:代销商品结算; jxspjs.pbl:经销商品结算; 第十三章:jhgl.pbl:计划管理; 第十四章:bjdgl.pbl:变价单管理; lzwjdjgl.pbl:定价单管理; lzwjtjgl.pbl:调价单管理、物价执行; lzwjwjcx.pbl:物价查询; 第十五章:htgl.pbl:合同管理; 第十七章:da_xtgl.pbl:系统管理; 系统启动:menu.pbl:登录、菜单; 二、数据库文件 本书数据库文件包括: 数据库表结构生成文件:table_sql.txt 表格数据文件:data_sql.txt 存储过程生成文件:proc_sql.txt 三、安装 在ORACLE数据库运行三个数据库文件,建立各数据表、存储过程及相应的数据。 四、运行 1、将各实例文件拷入硬盘,在PowerBuilder5.0下打开各PBL文件查看源程序代码; 2、建立PB与ORACLE数据库的连接; 3、在PB打开menu.pbl的application并运行; 用 户 名输入:0000; 用户口令输入:000000。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值