張 璘,李明明,馮陳偉
(廈門理工學(xué)院光電與通信工程學(xué)院,福建 廈門 361024)
?
基于Android的無(wú)線打印點(diǎn)餐系統(tǒng)
張 璘,李明明,馮陳偉
(廈門理工學(xué)院光電與通信工程學(xué)院,福建 廈門 361024)
為實(shí)現(xiàn)客戶點(diǎn)餐與后廚無(wú)縫連接的點(diǎn)餐服務(wù)模式,設(shè)計(jì)了基于Android的無(wú)線打印點(diǎn)餐系統(tǒng),系統(tǒng)共包括客戶端、服務(wù)器端和自主打印3個(gè)模塊.客戶端采用Eclipse開(kāi)發(fā)軟件,服務(wù)器端用JavaWeb+Tomcat+MySQL開(kāi)發(fā)技術(shù),打印模塊采用Android自帶的無(wú)線打印函數(shù),調(diào)用客戶訂單傳輸給打印機(jī)設(shè)備實(shí)現(xiàn)打印,3個(gè)模塊之間通過(guò)無(wú)線路由器連接.具體流程是Android客戶端通過(guò)HTTP協(xié)議向Web服務(wù)器發(fā)出請(qǐng)求,Web服務(wù)器將請(qǐng)求信息提交給相應(yīng)的Servlet進(jìn)行業(yè)務(wù)處理,Servlet通過(guò)JDBC訪問(wèn)遠(yuǎn)程MySQL數(shù)據(jù)庫(kù),將結(jié)果以JSON格式的數(shù)據(jù)返回給Android客戶端,最后調(diào)用無(wú)線打印模塊將數(shù)據(jù)庫(kù)中的訂單直接輸出.
無(wú)線點(diǎn)餐系統(tǒng);安卓系統(tǒng);無(wú)線打印機(jī);Wi-Fi
近年來(lái)隨著人力成本的逐年增加,作為低利潤(rùn)的餐飲業(yè)經(jīng)營(yíng)模式也隨之改變,手機(jī)Android系統(tǒng)的廣泛應(yīng)用與不斷滲透,正在改變傳統(tǒng)餐飲服務(wù)模式.目前市場(chǎng)上已有的點(diǎn)餐系統(tǒng)主要是基于ZigBee傳感網(wǎng)絡(luò)開(kāi)發(fā)的點(diǎn)餐系統(tǒng),服務(wù)員需要配備手持PDA設(shè)備,完成電子下單后發(fā)送到各路由器,進(jìn)而匯總轉(zhuǎn)發(fā)給控制中心[1-2],這種做法不僅需要硬件投入,還需要無(wú)線傳感網(wǎng)絡(luò)的組建,特別是依然需要服務(wù)員的協(xié)助;另外,還有一種常見(jiàn)的外賣點(diǎn)餐模式,即客戶下載Android手機(jī)端APP完成自助下單,服務(wù)員登錄服務(wù)器集中處理后將訂單交由后廚[3-4],這樣能減少傳菜員數(shù)量,但仍存在下單時(shí)延性.為此,本文提出基于Android的無(wú)線打印全自助無(wú)縫點(diǎn)餐系統(tǒng),該系統(tǒng)僅需在手機(jī)或pad上安裝應(yīng)用軟件,就可完成包括客戶端的用戶登陸、點(diǎn)餐、菜單更新、結(jié)賬等功能,服務(wù)器端可實(shí)現(xiàn)用戶管理、菜品管理、餐桌管理、訂單管理等功能;此外,采用Android自帶的無(wú)線打印函數(shù),可以將客戶訂單通過(guò)調(diào)用指令傳輸給打印機(jī)設(shè)備直接打印出來(lái)交給后廚,可節(jié)省傳菜人員,降低餐廳人力成本.
基于Android的無(wú)線點(diǎn)菜系統(tǒng)包括:Android操作系統(tǒng)的智能終端、服務(wù)器、無(wú)線路由器以及打印機(jī)等.其中,帶有Android操作系統(tǒng)的智能終端可以由服務(wù)員幫忙操作使用,也可以由顧客自己進(jìn)行操作使用;服務(wù)器是整個(gè)系統(tǒng)的核心,用戶終端需要通過(guò)無(wú)線路由器與服務(wù)器連接起來(lái)才能夠進(jìn)行正常的點(diǎn)菜操作;無(wú)線路由作為服務(wù)器與點(diǎn)菜終端的橋梁是不可或缺的;打印機(jī)可以置于后廚,實(shí)時(shí)將顧客訂單打印出來(lái).本文擬采用Android平板電腦作為顧客終端,以安裝有Tomcat和Mysql數(shù)據(jù)庫(kù)的PC電腦作為服務(wù)器端,用無(wú)線路由器作為各個(gè)設(shè)備之間數(shù)據(jù)通信的橋梁[3].系統(tǒng)原理如圖1所示.
綜合考慮的C/S和B/S模式的優(yōu)缺點(diǎn),最終決定在安卓客戶端采用C/S模式,Web服務(wù)器端采用B/S模式.整個(gè)系統(tǒng)分為Android客戶端和服務(wù)器端,服務(wù)器端根據(jù)系統(tǒng)的需求以及復(fù)雜程度最終決定采用JavaWeb+Tomcat+MySQL這樣的一個(gè)組合來(lái)完成服務(wù)器端的設(shè)計(jì).其需要對(duì)Android客戶端和MySQL數(shù)據(jù)庫(kù)之間的交互技術(shù)進(jìn)行選擇.主要有以下兩個(gè)方案.
方案一、Android客戶端直接與數(shù)據(jù)庫(kù)連接進(jìn)行相應(yīng)的數(shù)據(jù)庫(kù)操作.
方案二、Android客戶端與Web服務(wù)器端進(jìn)行連接,Web服務(wù)器與數(shù)據(jù)庫(kù)連接從而完成數(shù)據(jù)庫(kù)的相關(guān)操作.
第一種方式從實(shí)現(xiàn)上來(lái)講是比較簡(jiǎn)單的,因?yàn)樗侵苯訉ndroid客戶端與數(shù)據(jù)庫(kù)進(jìn)行連接,而不需要再去開(kāi)發(fā)一個(gè)服務(wù)器端作為中間件連接數(shù)據(jù)庫(kù),直接在Android工程中引入java數(shù)據(jù)庫(kù)連接(javadatabaseconnectivity,簡(jiǎn)稱JDBC)驅(qū)動(dòng),Android客戶端通過(guò)加載驅(qū)動(dòng)與數(shù)據(jù)庫(kù)進(jìn)行連接,從而完成對(duì)數(shù)據(jù)庫(kù)的相關(guān)操作.但是在實(shí)際操作中,該方式主要有以下兩方面的弊端:
1)因?yàn)樵诒鞠到y(tǒng)的具體應(yīng)用中Android客戶端通常是通過(guò)WIFI進(jìn)行通信的,在這種情況下,使用JDBC與MySQL進(jìn)行數(shù)據(jù)交互實(shí)現(xiàn)起來(lái)性能較差,查詢等操作耗時(shí)較長(zhǎng),特別是在有大量客戶端時(shí)更是不可取的.
2)使用JDBC與MySQL直接操作的過(guò)程中無(wú)法保證數(shù)據(jù)的安全性,因此在一些商業(yè)項(xiàng)目中都不會(huì)選擇這種方式.目前大部分Android項(xiàng)目都是采用第二種方案來(lái)實(shí)現(xiàn)Android客戶端和MySQL數(shù)據(jù)庫(kù)之間的交互,即通過(guò)中間件Web服務(wù)器與數(shù)據(jù)庫(kù)連接.
本系統(tǒng)的具體流程是Android客戶端和后臺(tái)管理系統(tǒng),通過(guò)HTTP協(xié)議向Web服務(wù)器發(fā)出請(qǐng)求,Web服務(wù)器將請(qǐng)求信息提交給相應(yīng)的Servlet進(jìn)行業(yè)務(wù)處理,Servlet再通過(guò)JDBC訪問(wèn)遠(yuǎn)程MySQL數(shù)據(jù)庫(kù)[4],再將結(jié)果以JSON格式的數(shù)據(jù)返回給Android客戶端,Android客戶端端再對(duì)返回的JSON格式的數(shù)據(jù)進(jìn)行解析得到結(jié)果.整體框架圖如圖2所示.
3.1 客戶端主程序設(shè)計(jì)
采用Eclipse4.2.0作為開(kāi)發(fā)工具,用JDK1.8.0_20作為編譯工具.圖3給出了客戶端主程序流程圖,包括客戶登陸、點(diǎn)餐、服務(wù)、結(jié)賬幾個(gè)模塊,主選單都是一個(gè)Activity,各個(gè)Activity的跳轉(zhuǎn)可以通過(guò)Intent實(shí)現(xiàn),而Intent完成各個(gè)組件的通信,起著一個(gè)媒體中介的作用,專門提供組件互相調(diào)用的相關(guān)信息,實(shí)現(xiàn)調(diào)用者與被調(diào)用者之間的解耦.
用戶打開(kāi)程序時(shí),是登陸界面,客戶可不必輸入賬號(hào)密碼直接進(jìn)入主菜單界面進(jìn)行點(diǎn)餐,會(huì)員使用自己的會(huì)員名登陸點(diǎn)餐,餐廳工作人員每人都有自己?jiǎn)为?dú)的一個(gè)帳戶用于登錄,可以實(shí)現(xiàn)責(zé)任到人.
登陸成功以后,進(jìn)入主選單(MainActivity),包括二大功能模塊,即點(diǎn)餐(OrderActivity)和結(jié)賬(CheckoutActivity).點(diǎn)餐模塊包括更新菜品和下單點(diǎn)菜:選擇更新菜品,則客戶端通過(guò)http網(wǎng)絡(luò)從服務(wù)器端獲取菜品信息,并將信息存儲(chǔ)至本地的MySQL數(shù)據(jù)庫(kù);選擇點(diǎn)菜,則給出菜品列表,列表分不同樣式,如冷菜、熱菜、酒等,讓用戶點(diǎn)菜;用戶選擇完后,即可提交訂單(包括明細(xì)費(fèi)用),并自動(dòng)返回主選單,提交訂單后通過(guò)WIFI直接傳到服務(wù)器端數(shù)據(jù)庫(kù)MySQL,以方便后面結(jié)賬時(shí)查詢;選擇結(jié)賬,則WaiterCashierActivity接收要結(jié)賬的桌號(hào)調(diào)用OrderService將桌號(hào)傳給服務(wù)器的OrderServlet到數(shù)據(jù)庫(kù)中將這些信息整理好,生成本次用餐的明細(xì)和費(fèi)用,同時(shí)將該結(jié)果反饋給服務(wù)器,服務(wù)員接到通知,將去對(duì)應(yīng)的桌號(hào)完成買單服務(wù).
3.2PC服務(wù)器端設(shè)計(jì)與實(shí)現(xiàn)
利用JavaWeb+MySQL結(jié)構(gòu),采用HTTP協(xié)議實(shí)現(xiàn)手機(jī)客戶端和服務(wù)器的交互;采用Tomcat6.0作為服務(wù)器,MySQL5.6.22作為數(shù)據(jù)庫(kù),MyEclipse2014作為開(kāi)發(fā)工具,采用JDK1.8.0_20作為編譯工具.服務(wù)器端主要根據(jù)客戶端發(fā)送過(guò)來(lái)的請(qǐng)求,調(diào)用相應(yīng)的Servlet進(jìn)行相應(yīng)的業(yè)務(wù)處理[5],以此完成開(kāi)桌、點(diǎn)菜、打印、結(jié)賬等一系列功能.所謂Servlet是由Sun公司制定的服務(wù)器端組件規(guī)范.一般情況下我們自己創(chuàng)建完Servlet后要繼承HttpServlet類(HttpServlet是專門用于響應(yīng)HTTP請(qǐng)求的Servlet)并重寫(xiě)里面的doGet()和doPost()方法實(shí)現(xiàn)我們自己需要的功能.Servlet程序?qū)匆韵虏襟E進(jìn)行:(1)客戶端通過(guò)HTTP提交請(qǐng)求信息.(2)Web服務(wù)器接收客戶端傳過(guò)來(lái)的請(qǐng)求并轉(zhuǎn)給Servlet.(3)Servlet接收請(qǐng)求后進(jìn)行相應(yīng)的業(yè)務(wù)處理.(4)Servlet再將結(jié)果返回給服務(wù)器.(5)Web服務(wù)器再將結(jié)果返回給客戶端.
3.3MySQL數(shù)據(jù)庫(kù)
本系統(tǒng)主要采用MySQL作為數(shù)據(jù)庫(kù),這個(gè)系統(tǒng)需要10張動(dòng)態(tài)表:用戶表,任務(wù)表,預(yù)定表,菜品表,菜品類型表,菜系表,餐桌表,餐桌類別表,訂單表,訂單明細(xì)表.數(shù)據(jù)庫(kù)的訪問(wèn)是通過(guò)JDBC實(shí)現(xiàn)的[6-8].當(dāng)直接使用JDBC時(shí)會(huì)發(fā)現(xiàn)很多代碼是重復(fù)的,因此將重復(fù)代碼提取出來(lái),保存到自定義的工具類DBUtil里,該類包含的方法有數(shù)據(jù)庫(kù)連接的開(kāi)啟和關(guān)閉,再用到數(shù)據(jù)庫(kù)開(kāi)啟關(guān)閉時(shí)就不用寫(xiě)重復(fù)的代碼了,直接調(diào)用DBUtil里代碼就行.為了方便今后數(shù)據(jù)庫(kù)移植,又將相關(guān)的配置信息寫(xiě)在配置文件DBConfig.properties中,這樣要更換數(shù)據(jù)庫(kù)只需修改配置文件里的信息就行了.
//數(shù)據(jù)庫(kù)驅(qū)動(dòng)
driver=com.mysql.jdbc.Drievr
//數(shù)據(jù)庫(kù)連接url
url=jdbc:mysql://localhost/dinner?useUnicode=true&characterEncoding=utf-8
//用戶名程
username=root
//密碼
password=root
JDBC是由sun公司來(lái)定義的一套接口,各大數(shù)據(jù)庫(kù)廠商編寫(xiě)各自驅(qū)動(dòng)來(lái)實(shí)現(xiàn)sun公司的這套接口,應(yīng)用程序也通過(guò)JDBC接口訪問(wèn)數(shù)據(jù)庫(kù),這樣的好處是同一套程序只需簡(jiǎn)單的修改就能實(shí)現(xiàn)數(shù)據(jù)庫(kù)的更換.
應(yīng)用程序是由我們自己來(lái)編寫(xiě)的,代碼要想操作數(shù)據(jù)庫(kù)就需要通過(guò)JDBC,JDBC是JDK標(biāo)準(zhǔn)庫(kù)的一部分,核心部分都是接口,接口是一系列方法的聲明,是一些方法特征的集合,因此一個(gè)接口只有方法的特征沒(méi)有方法的實(shí)現(xiàn)是什么都做不了的,如果想要真正操作數(shù)據(jù)庫(kù)就需要一些實(shí)現(xiàn)的類,這些實(shí)現(xiàn)類就叫做驅(qū)動(dòng)(Driver),每一個(gè)數(shù)據(jù)庫(kù)都有自己的Driver,這些Driver都是實(shí)現(xiàn)JDBC的接口.應(yīng)用程序、JDBCAPI、數(shù)據(jù)庫(kù)驅(qū)動(dòng)及數(shù)據(jù)庫(kù)之間的關(guān)系如圖4所示.
3.4 無(wú)線打印模塊
當(dāng)客戶端點(diǎn)擊打印時(shí),OrderDetailActivity里設(shè)置了打印按鈕的監(jiān)聽(tīng)事件,當(dāng)打印按鈕被點(diǎn)擊就會(huì)調(diào)用OrderDetailService里的print方法向服務(wù)器的OrderDetailServlet發(fā)送打印請(qǐng)求,OrderDetailServlet通過(guò)接收客戶端傳來(lái)的桌號(hào)獲取該桌的訂單明細(xì),然后再調(diào)用PrintLine里的print方法打印該桌訂單.打印流程圖見(jiàn)圖5.
PrintLine打印方法的實(shí)現(xiàn),首先是根據(jù)打印機(jī)的IP地址和端口號(hào)與其建立起連接,接著編寫(xiě)愛(ài)普生指令傳給打印機(jī),完成字體設(shè)置,自動(dòng)走紙等功能.再通過(guò)OutputStreamWriter里的write()方法向打印機(jī)發(fā)送要打印的內(nèi)容進(jìn)行打印.
本文結(jié)合了Android開(kāi)發(fā)技術(shù)、無(wú)線局域網(wǎng)技術(shù)以及JavaWeb開(kāi)發(fā)技術(shù),采用后臺(tái)數(shù)據(jù)庫(kù)通過(guò)JDBC接口訪問(wèn)服務(wù)器端MySQL數(shù)據(jù)庫(kù)存儲(chǔ)點(diǎn)單菜品,調(diào)用無(wú)線打印模塊將數(shù)據(jù)庫(kù)中的訂單直接輸出打印給后廚.但是該系統(tǒng)還存在后續(xù)可以改進(jìn)完善的地方,例如可以通過(guò)在客戶端添加本地?cái)?shù)據(jù)庫(kù)提高多個(gè)客戶并發(fā)訪問(wèn)服務(wù)器的運(yùn)行效率;可以將服務(wù)器端重復(fù)功能調(diào)用的代碼提取出來(lái)寫(xiě)在一個(gè)公共類里.
[1]馬斌,趙遼英.ZigBee無(wú)線傳感器網(wǎng)絡(luò)在點(diǎn)餐系統(tǒng)中的應(yīng)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2010,19(1):119-122.
[2]李泉溪,吳碩.ZigBee無(wú)線點(diǎn)餐系統(tǒng)研究[J].河南科技大學(xué)學(xué)報(bào),2011,32(5):28-32.
[3]陳曉峰,林正浩.基于Android的無(wú)線點(diǎn)餐系統(tǒng)設(shè)計(jì)[J].上海師范大學(xué)學(xué)報(bào)(自然科學(xué)版),2012,41(4):369-373.
[4]陳浩,李本富.基于Android云計(jì)算的移動(dòng)點(diǎn)餐系統(tǒng)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2012,21(8):148-151.
[5]范成臣.淺析在JAVAWEB應(yīng)用程序中使用Servlet技術(shù)[J].?dāng)?shù)字技術(shù)與應(yīng)用,2013,9:121.
[6]郭廣軍,陳代武,胡玉平,等.基于JDBC的數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)的研究[J].南華大學(xué)學(xué)報(bào)(自然科學(xué)版),2005,19(2):50-57.
[7]PATELKJ,PATELU,OBERSNELA.PDA-basedwirelessfoodorderingsystemforhospitalityindustry:Acasestudyofboxhillinstitute[C]//WirelessTelecommunicationsSymposium.Pomona:California,2007:1-8.
[8]郭志宏.Android應(yīng)用開(kāi)發(fā)詳解[M].北京:電子工業(yè)出版社,2011:268-286.
(責(zé)任編輯 宋 靜)
Design of an Android-Based Wireless Ordering System
ZHANG Lin,LI Mingming,FENG Chenwei
(SchoolofOptoelectronic&CommunicationEngineering,XiamenUniversityofTechnology,Xiamen361024,China)
Inordertorealizetheseamlessconnectionbetweencustomerandkitchen,awirelessordering-printingsystembasedonAndroidwasdesigned,whichincludesmodulesofclient,serverandseparatedprintingconnectedbywirelessrouting.TheclientusesEclipsedevelopmentsoftware,theserverusestheJavaWeb+Tomcat+MySQLtechnology,andtheprintinguseswirelessprintingfunctionbasedonAndroidworkingwhenE-ordersreceived.TheprocessofthissystemisthattheclientsendsaHTTPrequesttotheWebserver,theserversubmitstheinformationtothecorrespondingServlet,theServletthenaccessestheremoteMySQLdatabaseusingJDBCandreturnstheresultantdatainJSONformattotheAndroidclient,andawirelessprintersendsoutthedatabaseorder.
wirelessorderingsystem;wirelessprinter;Android;Wi-Fi
2016-05-09
2016-10-09
福建省中青年教師教育科研項(xiàng)目(JA14233)
張璘(1981-),女,講師,碩士,研究方向?yàn)橛?jì)算機(jī)網(wǎng)絡(luò).E-mail:zhanglin603@aliyun.com
TP
A
1673-4432(2016)05-0074-05