行业动态

当前位置:首页>>新闻中心>>行业动态 发布时间:2017-06-22 06:56:52

基于Android平台的收银秤系统的设计与实现

时间:2017-06-22 06:56:52 来源:本站 点击数:618

针对传统收银秤系统功能简单、操作复杂的问题,研究了在Android开发平台下收银秤系统的设计与 实现。该系统利用Android集成的小型嵌入式数据库SQLite的开发接口、基于Java语言开发完成,实现了收银 秤系统的称重、计价和收银等功能内置了相应的商品资料库,也允许用户导入需要的商品导出相应的统计数 ,并且已经在设备模拟器上测试通过。

0.引言

目前,集称重、打印与收银机管理功能于一体的收银秤已广泛应用于商业流通领域、百货超市、 便利店、酒店、餐饮、快餐连锁等多个领域。

这些品牌的收银秤大都以单片机作为主控CPU, 没有使用操作系统或者使用UCOS系统,功能较 为简单响应速度慢,操作比较复杂,不适合计算 机水平程度较低的操作人员使用。

而使用Wintel系统收银秤单价太高是其难 以取代单片机或ARM的重要原因。一台采用 Intel核心与Microsoft平台的收银秤的到港报价 3000?5000元人民币,终端市场的报价6000? 20000元人民币,对于规模较小的生鲜及食品专 卖店而言是一笔不小的资本负担。

200711月,Google推出基于Linux的操作 系统AndroidAndroid开放了源代码,这给全世 界的应用程序开发人员提供了开放的开发平台, 出现了基于Android平台的各种各样的应用程序, 应用领域广泛、内容丰富,也使得Android很快就 统治了手机、平板电脑等领域。

1.收银秤系统的硬件设计与实现

根据收银秤的功能需求,系统采用三星公司 高性价比的、基于ARM Cortex-A8内核的 S5PV210处理器设计的硬件平台。S5PV210处理 器采用了 32/64位的内部总线结构和最大833 MHz的运算速度。包括强大的硬件加速器,支持多 种格式的硬件编解码等。S5PV210开发平台具有 丰富的硬件资源,包含如下:512MB NAND Flash 512MB DDR2 内存,HDMI 显示接口, USB Host2.0,USB OTG2.0 接口,1  SDIO   (Micro SD卡接口),支持1RS232串口接口 (调试串口)等。整个收银秤系统硬件总体设计 框图如图1。利用该片内的512 MBFlash 512MBRAM分别实现控制程序和上万个商品 PLU信息的存储,外接I/O器件实现USB以太网 无线网络的通讯以及支持7.0177.80mm) 10.1256.54mm)规格的LCD液晶显示。利用 RS232串口外接电子秤器件和常见的LP-50打印 机和内置连续热敏纸打印机接口,内置热敏标签 打印机接口,利用PS2接口连接扫描枪等。

体重1.jpg

2.系统功能和总体架构

按照收银秤系统的功能需求及软件的特点, 本收银秤系统划分为5个功能模块,每个模块有 多个子模块,详细说明如下。

收银模块:包含称重、去皮、清零、付款、折 扣、挂单、取单等功能可接钱箱,进行现金的收支 和管理,可外接扫描枪扫描称重或者非称重商品, 进行收银,可自动计算单品折扣或者总价的比例 折扣。

基础数据模块:包含部门的管理、商品分 组管理、商品类别的管理、商品PLU的管理、商品 批量添加和更新管理、商品折扣的管理、会员管理 和商品库存管理等。

系统设置模块:1)网络设置;)用户权限 的控制:收银员的角色管理,包含销售员、店铺经 理等;收银员的管理;设置收银员的业务操作权限, 包括退货、退款、挂单、取单、取消商品订单和删除 商品订单等;设置商店名称、地址和联系电话等。

打印设置模块:打印机的配置;打印格式 的配置如打印头信息、打印尾信息、打印日期时 间格式和打印字体信息的配置等。

报表设置模块:可以查看各种销售报表, 如实时查看单个商品日销售报表、当日销售报表、 当曰销售明细报表和店员销售统计报表等。能对 销售的各类商品进行销存管理,查看打印商品库 存报表,统计库存量,根据单据来盘点库存扣除 合理的损耗。

如上所述,该收银秤系统基本上实现了市场 上收银秤的所有功能,甚至包含了简单的进销存 和会员管理功能,能够满足大多数客户的需求。

3.系统的关键功能具体实现

3.1商品管理的实现

商品管理包含商品名、商品编码和商品价格 等基本信息的保存修改操作,它是收银秤系统的 基础。对于小型连锁生鲜食品店、休闲食品专卖 店,中小型的商场、超市或商品数量较多的卖场, 商品管理是一个很繁重的任务。用户需要将所有 商品进行编码并逐个录入到收银秤系统中,以备 销售。一个良好的商品管理模块应能够提供用户 录入商品,优化销售报表,方便计算销售利润等。

3.1.1商品表的设计

商品表是整个收银秤系统设计的核心与基 础。通过梳理实际销售业务流程,可分析各个功能 模块所需要存储的数据,整理相互之间的关联, 而设计对应的商品表。根据收银秤系统的需求,设 计了商品管理的数据表如表1

3.1.2表现层设计

商品管理列表界面采用LinearLayout布局, 并使用了自定义翻页列表组件ListViewPage, 组件继承自ListViewListViewAndroid界面设计中比较常用的组件它以列表的形式展示数据 库表中的具体内容,并且能够根据数据的长度和 屏幕的大小自适应显示。ListView本身没有显示 上一页和下一页的按钮,可通过手滑动方式动态 地加载数据,当向下滚动时最下边显示Loading …数据加载结束后,所显示的Loading底栏消 失。本项目因为经常会用到显示上一页和下一页 按钮的分页列表,所以自定义了 ListViewPage ,可以在多个模块的列表中使用。ListViewPage 实现了 onPrevPageonNextPage函数,对应两个 按钮上一页下一页的方法。设置两个变 iPageSize10iPageid默认为1,代表每页只 显示10条记录,默认从第一页开始。

体重2.jpg

商品信息界面采用LinearLayout布局,里面 包含ScrollView支持垂直滚动。使用Tablelayout 类以表格的形式对控件进行管理,有多个行和列 每一行为个TableRow对象,在TableRow下根 据需要添加子控件标签或输入框或单选框或下拉 框做为列,默认情况下,每个子控件占据一列。

3.1.3业务逻辑层设计

针对收银秤系统的硬件内存等资源有限问 题,通过SQLite嵌入式数据库引擎来实现结构 化数据存储,封装了 SQLite提供的API,编写了 DBHelper工具类,进行数据库增删改查和事务处 理的基本操作。在商品添加或者编辑的界面中,使 用产品类别的下拉框。下拉框中的内容通过 DBHelper获取时间放在字符串数组中将字符串 数组与ArrayAdapter连接起来,然后通过 setDropDownViewResource可以设置下拉列表的 风格,最后通过setAdapterAdapter添加到 Spinner,而使用 setOnltemSelectedListener Spinner添加事件监听函数。为自动计算商品在收 银销售主界面的显示位置,定义getShowPosit() 数,函数循环从数据库中的同类商品中查找该类 别商品的页面数及最小的空位置数。

3.1.4商品的批量增加和更新

针对收银秤系统的商品品种较多问题,系统 设计了商品的批量增加和更新的功能,利用常用 .txt或者.csv文件保存商品的基本信息,含商品 的PLU码、类别、名称、价格及计量单位;同时将 商品的图片命名为相应的PLU编码的图片,如商 APLU编码为2201134则其图片名称为 2201134.jpg ;把商品信息和相应的图片存放在同 个目录下,通过网络或U盘将文件夹拷贝到系统 data目录中,就可以实现自动导入和更新数据。

3.2收银功能的实现

收银功能包含以下子模块自动去皮、称重、修 改商品售价、修改商品数量、挂单、取单、会员折扣、 计价、付款、打印、查看日报表和店员销售报表等, 并支持收银员登录和暂时离开时对系统的锁定。

3.2.1表现层设计

收银秤的收银界面比较复杂笔者采用分层 结构,并使用动态生成的方法。最顶层使用 RelativeLayout 布局,设置 Theme.NoTitleBar. Fullscreen风格。让整个应用窗口是不含标题栏并 且全屏的。内部的商品显示界面使用Tab控件,以 实现在同个界面中分别显示不同类别的商品。每 个Tab控件显示一种类别的商品,使用Tab控件 显示时首先使用TabActivtiy里的getTabHsot() 法获取TabHost对象,接着调用tabHost.addTab (TabSpec)方法添加商品类别页[6]TabSpec则是通  TabHost.newTabSpec (Stringtag)类方法来创建的实例实例化后通过setIndicator方法可对其属 性进行设置,设置属性标签页的label (显示的名 字)的值为商品类别的值。另外通过setContent 法是指定的是Tab的内容。内容是使用 FrameLayout来设置商品显示的位置和图片。 FrameLayout 是通过 FragmentManager 来对 Activity 运行时Fragment的添加、删除、替换进行操作,而 不是在XML布局文件中进行定义。

通过FrameLayout动态显示商品的位置和图 片的步骤如下:

通过 Activity  getFragmentManager() 获得 FragmentManager 对象;

  FragmentManager beginFragmentTransaction ()方法获得 FragmentTransaction 对象;

通过 FsragmentTransaction  add()方法来 添加一个Fragment到当前的Activity中;

通过 FragmentTransaction  commit() 法来提交保存一个Fragment到当前Activity中。

3.2.2业务逻辑层设计

收银功能是核心功能。包含许多子模块:称 重、计价、修改价格、会员折扣、挂单、取单和收款 等。称重功能是通过创建电子秤监听服务类 ScaleService 来实现,ScaleService 继承自 Service 类。在AndroidService服务类类似于Linux 的后台进程,是用来进行后台数据处理的进程,该 进程能够对用户的行动进行跟踪,收银秤系统要 不断采集电子秤发送过来的称重信息,就需要编 写 ScaleServicec 自定义的ScaleService继承自系 统的Service类,然后重载其中的OnCreate ()OnStart ()OnDestroy ()三个方法,并需要在 AndroidManifest.xml 中注册。

Activity 通过 Intent 启动 ScaleService,如果 ScaleService还没有运行,则Android先调用 onCreate ()方法然后调用OnStart ()方法;如果 ScaleService 已经运行,则只调用OnStart(),所以 一个ScaleServiceOnStart()方法可能会重复调 用多次。收银秤系统关闭后则调用stopService() 法就会触发ScaleServiceOnDestroy()方法。

在自定义的 ScaleService 中不能直接访问数 据库,只能通过ContentResolver访问[8],实现步骤

如下:

创建 myContentProvider 继承自ContentProvider 类;

AndroidManifest.xml中添加对应权限 并且注册;

通过 Activity  getContentResolver()返回 ContentResolver实例对应的query函数获得返 回为Cursor对象的数据集利用Cursor对象操作 数据库;

ContentResolver实例提供的类似数据库的 增删改查的基本操作,分别对应insert()delete()update() query()函数。

4.仿真结果和测试

4.1仿真结果

 ADT (Android Developer Tools)开发环境 ,使用Java语言,设计和实现了基于Android 台的收银秤系统,并在开发板上测试了各项功能, 均按要求输出了预期的结果,采用的开发板平台 Android4.12所示为程序在模拟器上运行 时的功能主界面,当用户登录后可以选择进去某 个模块。图3为收银秤的收银操作界面,具有计 价、称重等功能。

体重3.jpg

4.2易用性测试

易用性测试的目的在于让用户容易接受使用 软件。因为易用性是非功能性需求,有很多的主观 成分无法量化。笔者使用B/T 16260.2-2006/ ISO/IEC 9126-2:2001软件工程产品质量(第2 )外部度量”9]中的两个指标:功能学习的难易 性(用户要用多长时间学习使用一项功能)及操 作规程的减少(用户能否减少操作规程)。测试对 象选择CS2(LH51)收银秤和RM-60 收银秤在功能学习的难易性和的操作规程的减少 两个指标上进行比较。选择的功能集中在常用的 功能,含单个商品销售、多个商品销售、挂单、取 单、会员打折、修改价格、单品作废、交易作废和退 货操作。收银员的培训时间测试情况如下:CS2 (LH51), 16h ,RM-60,16h ;Android CRS,2h培训 时间从原来的16h大幅缩短为2h主要是由于智 能手机的广泛使用,收银员对于Android系统的使 用有着亲切感,对于收银秤系统更容易上手操作。

根据《CS2(LH51)收银秤销售操作 使用说明手册》和《 RM-60操作培训手册》,估算出收银秤的在8 常用的功能上的操作按键次数如表2

体重4.jpg

从表2可以看出对于常用的功能操作,按键 次数减少,可以大幅减少操作员的工作强度,提高 工作效率。由于界面更直观,还能减少错误。

4.3响应时间测试

由于收银秤的工作特性,在商品数量达到1 万个时,需要收银秤的响应时间不超过1s笔者对 收银秤系统的最常用的3个操作:定位商品、计 价、计重进行响应时间测试。每个操作分别在100 100010000个商品的情况下进行30次的操 ,分别取其平均响应时间,结果见表3

体重5.jpg

从测试结果可以获知由于称重过程需要与 外部串口通信所以响应时间相对定位商品和计价较多但是总体上满足收银秤操作响应时间不 超过1s的要求。

5.结束语

传统的收银秤系统一般采用单片机作为主控 核心,没有采用操作系统,内存容量少,操作不方 便。笔者根据收银秤的应用需求,采用基于ARM Cortex-A8为内核的S5PV210开发板,设计了基于 Android的收银秤硬件系统,并实现了大屏幕、可 视化、易操作的收银秤软件系统,并已开发出样 机。经过整体测试证明了提供的设计方法的可用 性和可靠性。此外,由于需求的不断丰富和更新 有些功能仍需完善,如银联卡刷卡消费和会员积 分卡管理等。此外,考虑提高系统的可扩展性以满 足不同的应用场景,整个收银界面的操作按键应 该是可配置的。