針對傳統(tǒng)收銀秤系統(tǒng)功能簡單、操作復雜的問題,研究了在Android開發(fā)平臺下收銀秤系統(tǒng)的設計與 實現(xiàn)。該系統(tǒng)利用Android集成的小型嵌入式數(shù)據(jù)庫SQLite的開發(fā)接口、基于Java語言開發(fā)完成,實現(xiàn)了收銀 秤系統(tǒng)的稱重、計價和收銀等功能,內置了相應的商品資料庫,也允許用戶導入需要的商品,導出相應的統(tǒng)計數(shù) 據(jù),并且已經在設備模擬器上測試通過。
0.引言
目前,集稱重、打印與收銀機管理功能于一體的收銀秤已廣泛應用于商業(yè)流通領域、百貨超市、 便利店、酒店、餐飲、快餐連鎖等多個領域。
這些品牌的收銀秤大都以單片機作為主控CPU, 沒有使用操作系統(tǒng)或者使用UCOS系統(tǒng),功能較 為簡單,響應速度慢,操作比較復雜,不適合計算 機水平程度較低的操作人員使用。
而使用Wintel系統(tǒng)收銀秤單價太高,是其難 以取代單片機或ARM的重要原因。一臺采用 Intel核心與Microsoft平臺的收銀秤的到港報價 3000?5000元人民幣,終端市場的報價6000? 20000元人民幣,對于規(guī)模較小的生鮮及食品專 賣店而言是一筆不小的資本負擔。
2007年11月,Google推出基于Linux的操作 系統(tǒng)Android。Android開放了源代碼,這給全世 界的應用程序開發(fā)人員提供了開放的開發(fā)平臺, 出現(xiàn)了基于Android平臺的各種各樣的應用程序, 應用領域廣泛、內容豐富,也使得Android很快就 統(tǒng)治了手機、平板電腦等領域。
1.收銀秤系統(tǒng)的硬件設計與實現(xiàn)
根據(jù)收銀秤的功能需求,系統(tǒng)采用三星公司 高性價比的、基于ARM Cortex-A8內核的 S5PV210處理器設計的硬件平臺。S5PV210處理 器采用了 32/64位的內部總線結構和最大833 MHz的運算速度。包括強大的硬件加速器,支持多 種格式的硬件編解碼等。S5PV210開發(fā)平臺具有 豐富的硬件資源,包含如下:512MB NAND Flash, 512MB DDR2 內存,HDMI 顯示接口,1 個 USB Host2.0,USB OTG2.0 接口,1 個 SDIO 接 口 (Micro SD卡接口),支持1路RS232串口接口 (調試串口)等。整個收銀秤系統(tǒng)硬件總體設計 框圖如圖1。利用該片內的512 MB的Flash和 512MB的RAM分別實現(xiàn)控制程序和上萬個商品 PLU信息的存儲,外接I/O器件實現(xiàn)USB以太網 無線網絡的通訊以及支持7.0吋(177.80mm)和 10.1吋(256.54mm)規(guī)格的LCD液晶顯示。利用 RS232串口外接電子秤器件和常見的LP-50打印 機和內置連續(xù)熱敏紙打印機接口,內置熱敏標簽 打印機接口,利用PS2接口連接掃描槍等。
2.系統(tǒng)功能和總體架構
按照收銀秤系統(tǒng)的功能需求及軟件的特點, 本收銀秤系統(tǒng)劃分為5個功能模塊,每個模塊有 多個子模塊,詳細說明如下。
收銀模塊:包含稱重、去皮、清零、付款、折 扣、掛單、取單等功能,可接錢箱,進行現(xiàn)金的收支 和管理,可外接掃描槍掃描稱重或者非稱重商品, 進行收銀,可自動計算單品折扣或者總價的比例 折扣。
基礎數(shù)據(jù)模塊:包含部門的管理、商品分 組管理、商品類別的管理、商品PLU的管理、商品 批量添加和更新管理、商品折扣的管理、會員管理 和商品庫存管理等。
系統(tǒng)設置模塊:1)網絡設置;)用戶權限 的控制:收銀員的角色管理,包含銷售員、店鋪經 理等;收銀員的管理;設置收銀員的業(yè)務操作權限, 包括退貨、退款、掛單、取單、取消商品訂單和刪除 商品訂單等;設置商店名稱、地址和聯(lián)系電話等。
打印設置模塊:打印機的配置;打印格式 的配置,如打印頭信息、打印尾信息、打印日期時 間格式和打印字體信息的配置等。
報表設置模塊:可以查看各種銷售報表, 如實時查看單個商品日銷售報表、當日銷售報表、 當曰銷售明細報表和店員銷售統(tǒng)計報表等。能對 銷售的各類商品進行銷存管理,查看打印商品庫 存報表,統(tǒng)計庫存量,根據(jù)單據(jù)來盤點庫存,扣除 合理的損耗。
如上所述,該收銀秤系統(tǒng)基本上實現(xiàn)了市場 上收銀秤的所有功能,甚至包含了簡單的進銷存 和會員管理功能,能夠滿足大多數(shù)客戶的需求。
3.系統(tǒng)的關鍵功能具體實現(xiàn)
3.1商品管理的實現(xiàn)
商品管理包含商品名、商品編碼和商品價格 等基本信息的保存修改操作,它是收銀秤系統(tǒng)的 基礎。對于小型連鎖生鮮食品店、休閑食品專賣 店,中小型的商場、超市或商品數(shù)量較多的賣場, 商品管理是一個很繁重的任務。用戶需要將所有 商品進行編碼并逐個錄入到收銀秤系統(tǒng)中,以備 銷售。一個良好的商品管理模塊應能夠提供用戶 錄入商品,優(yōu)化銷售報表,方便計算銷售利潤等。
3.1.1商品表的設計
商品表是整個收銀秤系統(tǒng)設計的核心與基 礎。通過梳理實際銷售業(yè)務流程,可分析各個功能 模塊所需要存儲的數(shù)據(jù),整理相互之間的關聯(lián),從 而設計對應的商品表。根據(jù)收銀秤系統(tǒng)的需求,設 計了商品管理的數(shù)據(jù)表如表1。
3.1.2表現(xiàn)層設計
商品管理列表界面采用LinearLayout布局, 并使用了自定義翻頁列表組件ListViewPage,該 組件繼承自ListView。ListView是Android界面設計中比較常用的組件,它以列表的形式展示數(shù)據(jù) 庫表中的具體內容,并且能夠根據(jù)數(shù)據(jù)的長度和 屏幕的大小自適應顯示。ListView本身沒有顯示 上一頁和下一頁的按鈕,可通過手滑動方式動態(tài) 地加載數(shù)據(jù),當向下滾動時,最下邊顯示Loading …,數(shù)據(jù)加載結束后,所顯示的Loading底欄消 失。本項目因為經常會用到顯示上一頁和下一頁 按鈕的分頁列表,所以自定義了 ListViewPage組 件,可以在多個模塊的列表中使用。ListViewPage 實現(xiàn)了 onPrevPage和onNextPage函數(shù),對應兩個 按鈕“上一頁”和“下一頁”的方法。設置兩個變 量iPageSize為10、iPageid默認為1,代表每頁只 顯示10條記錄,默認從第一頁開始。
商品信息界面采用LinearLayout布局,里面 包含ScrollView支持垂直滾動。使用Tablelayout 類以表格的形式對控件進行管理,有多個行和列, 每一行為個TableRow對象,在TableRow下根 據(jù)需要添加子控件標簽或輸入框或單選框或下拉 框做為列,默認情況下,每個子控件占據(jù)一列。
3.1.3業(yè)務邏輯層設計
針對收銀秤系統(tǒng)的硬件內存等資源有限問 題,通過SQLite嵌入式數(shù)據(jù)庫引擎來實現(xiàn)結構 化數(shù)據(jù)存儲,封裝了 SQLite提供的API,編寫了 DBHelper工具類,進行數(shù)據(jù)庫增刪改查和事務處 理的基本操作。在商品添加或者編輯的界面中,使 用產品類別的下拉框。下拉框中的內容通過 DBHelper獲取時間放在字符串數(shù)組中,將字符串 數(shù)組與ArrayAdapter連接起來,然后通過 setDropDownViewResource可以設置下拉列表的 風格,最后通過setAdapter將Adapter添加到 Spinner,而使用 setOnltemSelectedListener 為 Spinner添加事件監(jiān)聽函數(shù)。為自動計算商品在收 銀銷售主界面的顯示位置,定義getShowPosit()函 數(shù),函數(shù)循環(huán)從數(shù)據(jù)庫中的同類商品中查找該類 別商品的頁面數(shù)及最小的空位置數(shù)。
3.1.4商品的批量增加和更新
針對收銀秤系統(tǒng)的商品品種較多問題,系統(tǒng) 設計了商品的批量增加和更新的功能,利用常用 的.txt或者.csv文件保存商品的基本信息,含商品 的PLU碼、類別、名稱、價格及計量單位;同時將 商品的圖片命名為相應的PLU編碼的圖片,如商 品A的PLU編碼為2201134則其圖片名稱為 2201134.jpg ;把商品信息和相應的圖片存放在同 個目錄下,通過網絡或U盤將文件夾拷貝到系統(tǒng) 的data目錄中,就可以實現(xiàn)自動導入和更新數(shù)據(jù)。
3.2收銀功能的實現(xiàn)
收銀功能包含以下子模塊自動去皮、稱重、修 改商品售價、修改商品數(shù)量、掛單、取單、會員折扣、 計價、付款、打印、查看日報表和店員銷售報表等, 并支持收銀員登錄和暫時離開時對系統(tǒng)的鎖定。
3.2.1表現(xiàn)層設計
收銀秤的收銀界面比較復雜,筆者采用分層 結構,并使用動態(tài)生成的方法。最頂層使用 RelativeLayout 布局,設置 Theme.NoTitleBar. Fullscreen風格。讓整個應用窗口是不含標題欄并 且全屏的。內部的商品顯示界面使用Tab控件,以 實現(xiàn)在同個界面中分別顯示不同類別的商品。每 個Tab控件顯示一種類別的商品,使用Tab控件 顯示時首先使用TabActivtiy里的getTabHsot()方 法獲取TabHost對象,接著調用tabHost.addTab (TabSpec)方法添加商品類別頁[6]。TabSpec則是通 過 TabHost.newTabSpec (Stringtag)類方法來創(chuàng)建的實例,實例化后通過setIndicator方法可對其屬 性進行設置,設置屬性標簽頁的label (顯示的名 字)的值為商品類別的值。另外通過setContent方 法是指定的是Tab的內容。內容是使用 FrameLayout來設置商品顯示的位置和圖片。 FrameLayout 是通過 FragmentManager 來對 Activity 運行時Fragment的添加、刪除、替換進行操作,而 不是在XML布局文件中進行定義。
通過FrameLayout動態(tài)顯示商品的位置和圖 片的步驟如下:
通過 Activity 的 getFragmentManager()來 獲得 FragmentManager 對象;
通 過 FragmentManager 的 beginFragmentTransaction ()方法獲得一個 FragmentTransaction 對象;
通過 FsragmentTransaction 的 add()方法來 添加一個Fragment到當前的Activity中;
通過 FragmentTransaction 的 commit()方 法來提交保存一個Fragment到當前Activity中。
3.2.2業(yè)務邏輯層設計
收銀功能是核心功能。包含許多子模塊:稱 重、計價、修改價格、會員折扣、掛單、取單和收款 等。稱重功能是通過創(chuàng)建電子秤監(jiān)聽服務類 ScaleService 來實現(xiàn),ScaleService 繼承自 Service 類。在Android中Service服務類類似于Linux下 的后臺進程,是用來進行后臺數(shù)據(jù)處理的進程,該 進程能夠對用戶的行動進行跟蹤,收銀秤系統(tǒng)要 不斷采集電子秤發(fā)送過來的稱重信息,就需要編 寫 ScaleServicec 自定義的ScaleService繼承自系 統(tǒng)的Service類,然后重載其中的OnCreate ()、 OnStart ()、OnDestroy ()三個方法,并需要在 AndroidManifest.xml 中注冊。
Activity 通過 Intent 啟動 ScaleService,如果 ScaleService還沒有運行,則Android先調用 onCreate ()方法然后調用OnStart ()方法;如果 ScaleService 已經運行,則只調用OnStart(),所以 一個ScaleService的OnStart()方法可能會重復調 用多次。收銀秤系統(tǒng)關閉后則調用stopService()方 法就會觸發(fā)ScaleService的OnDestroy()方法。
在自定義的 ScaleService 中不能直接訪問數(shù) 據(jù)庫,只能通過ContentResolver訪問[8],實現(xiàn)步驟
如下:
創(chuàng)建 myContentProvider 繼承自ContentProvider 類;
在AndroidManifest.xml中添加對應權限 并且注冊;
通過 Activity 的 getContentResolver()返回 的ContentResolver實例對應的query函數(shù)獲得返 回為Cursor對象的數(shù)據(jù)集,利用Cursor對象操作 數(shù)據(jù)庫;
ContentResolver實例提供的類似數(shù)據(jù)庫的 增刪改查的基本操作,分別對應insert()、delete()、 update()和 query()函數(shù)。
4.仿真結果和測試
4.1仿真結果
在 ADT (Android Developer Tools)開發(fā)環(huán)境 下,使用Java語言,設計和實現(xiàn)了基于Android平 臺的收銀秤系統(tǒng),并在開發(fā)板上測試了各項功能, 均按要求輸出了預期的結果,采用的開發(fā)板平臺 是Android4.1。圖2所示為程序在模擬器上運行 時的功能主界面,當用戶登錄后,可以選擇進去某 個模塊。圖3為收銀秤的收銀操作界面,具有計 價、稱重等功能。
4.2易用性測試
易用性測試的目的在于讓用戶容易接受使用 軟件。因為易用性是非功能性需求,有很多的主觀 成分無法量化。筆者使用B/T 16260.2-2006/ ISO/IEC 9126-2:2001軟件工程產品質量(第2 部)外部度量”9]中的兩個指標:功能學習的難易 性(用戶要用多長時間學習使用一項功能)及操 作規(guī)程的減少(用戶能否減少操作規(guī)程)。測試對 象選擇CS2(LH51)收銀秤和RM-60 收銀秤在功能學習的難易性和的操作規(guī)程的減少 兩個指標上進行比較。選擇的功能集中在常用的 功能,含單個商品銷售、多個商品銷售、掛單、取 單、會員打折、修改價格、單品作廢、交易作廢和退 貨操作。收銀員的培訓時間測試情況如下:CS2 (LH51), 16h ,RM-60,16h ;Android CRS,2h。培訓 時間從原來的16h大幅縮短為2h主要是由于智 能手機的廣泛使用,收銀員對于Android系統(tǒng)的使 用有著親切感,對于收銀秤系統(tǒng)更容易上手操作。
根據(jù)《CS2(LH51)收銀秤銷售操作 使用說明手冊》和《 RM-60操作培訓手冊》,估算出收銀秤的在8種 常用的功能上的操作按鍵次數(shù)如表2。
從表2可以看出對于常用的功能操作,按鍵 次數(shù)減少,可以大幅減少操作員的工作強度,提高 工作效率。由于界面更直觀,還能減少錯誤。
4.3響應時間測試
由于收銀秤的工作特性,在商品數(shù)量達到1 萬個時,需要收銀秤的響應時間不超過1s。筆者對 收銀秤系統(tǒng)的最常用的3個操作:定位商品、計 價、計重進行響應時間測試。每個操作分別在100、 1000和10000個商品的情況下進行30次的操 作,分別取其平均響應時間,結果見表3。
從測試結果可以獲知,由于稱重過程需要與 外部串口通信,所以響應時間相對定位商品和計價較多,但是總體上滿足收銀秤操作響應時間不 超過1s的要求。
5.結束語
傳統(tǒng)的收銀秤系統(tǒng)一般采用單片機作為主控 核心,沒有采用操作系統(tǒng),內存容量少,操作不方 便。筆者根據(jù)收銀秤的應用需求,采用基于ARM Cortex-A8為內核的S5PV210開發(fā)板,設計了基于 Android的收銀秤硬件系統(tǒng),并實現(xiàn)了大屏幕、可 視化、易操作的收銀秤軟件系統(tǒng),并已開發(fā)出樣 機。經過整體測試證明了提供的設計方法的可用 性和可靠性。此外,由于需求的不斷豐富和更新, 有些功能仍需完善,如銀聯(lián)卡刷卡消費和會員積 分卡管理等。此外,考慮提高系統(tǒng)的可擴展性以滿 足不同的應用場景,整個收銀界面的操作按鍵應 該是可配置的。