楊廷發(fā) 丁川蕓 蘭全祥
摘要:為了提高餐廳食客的點(diǎn)餐效率和餐廳的工作效率,為用戶提供更好的就餐體驗(yàn),設(shè)計(jì)并實(shí)現(xiàn)了基于SSH的線上點(diǎn)餐系統(tǒng)。對(duì)系統(tǒng)進(jìn)行了需求分析和數(shù)據(jù)庫設(shè)計(jì),并選用Spring, SpringMVC, Hibernate作為開發(fā)框架,Mysql作為數(shù)據(jù)庫,Tomcat作為服務(wù)器,實(shí)現(xiàn)了商家店鋪信息維護(hù)、商家菜品信息管理、訂單管理等模塊,并為用戶提供了二維碼點(diǎn)餐及在線結(jié)算等功能,解決了菜品信息的實(shí)時(shí)性、點(diǎn)餐的快捷性、結(jié)算的便捷性等問題。
關(guān)鍵詞:SSH;線上點(diǎn)餐;網(wǎng)站設(shè)計(jì);二維碼
中圖分類號(hào):TP393 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2018)30-0084-03
1 背景
隨著現(xiàn)代科技的進(jìn)步,互聯(lián)網(wǎng)的應(yīng)用和普及日益豐富著人們的生活。雖然網(wǎng)上訂餐因其便捷性受到眾多用戶青睞,但更多人在工作之余、親友聚餐時(shí)更愿意選擇到餐廳直接消費(fèi)。然而,傳統(tǒng)點(diǎn)餐、結(jié)賬等環(huán)節(jié)極大地降低了用戶體驗(yàn)。因此,開發(fā)一款通過二維碼進(jìn)行在線點(diǎn)餐、在線結(jié)算的線上點(diǎn)餐系統(tǒng)將能極好的提高餐廳的管理效率以及用戶體驗(yàn)。
2 技術(shù)選型
基于SSH的二維碼點(diǎn)餐系統(tǒng)采用Apache Tomcat+ Java+ Mysql的黃金組合方式進(jìn)行開發(fā)[1], Apache Tomcat作為Web服務(wù)器,Java作為主要開發(fā)語言,Mysql作為數(shù)據(jù)庫存儲(chǔ)數(shù)據(jù)。系統(tǒng)使用SSH(Spring+ SpringMVC+ Hibernate)框架搭建系統(tǒng)結(jié)構(gòu),完成系統(tǒng)的請(qǐng)求處理、對(duì)象管理以及持久化操作。用戶通過二維碼訪問點(diǎn)餐系統(tǒng),完成菜品查看并創(chuàng)建訂單,最終實(shí)現(xiàn)點(diǎn)餐和結(jié)算。
SSH框架由Spring,SpringMVC和Hibernate組成。Spring相對(duì)于JavaEE中的EJB而言,是一款輕量級(jí)的框架,也是是非侵入式的,基于Spring系統(tǒng)應(yīng)用中代碼沒有過多的依賴,并且不局限于服務(wù)器端的開發(fā)[2]。
SpringMVC是一種基于Java,實(shí)現(xiàn)了Web MVC設(shè)計(jì)模式的請(qǐng)求驅(qū)動(dòng)類型的輕量級(jí)WEB框架,即使用了MVC架構(gòu)模式的思想,將WEB層職責(zé)解耦,也將控制器、模擬器對(duì)象、分派器以及處理對(duì)象的角色進(jìn)行分離,實(shí)現(xiàn)了Spring的IoC思想[3]。
Hibernate是一個(gè)優(yōu)秀的持久層框架,同時(shí)也是一個(gè)主流的ORM工具,可以讓開發(fā)人員以對(duì)象思維操作關(guān)系型數(shù)據(jù)庫,并且Hibernate對(duì)JDBC進(jìn)行了輕量級(jí)的對(duì)象封裝,其讓編碼過程變得更加簡(jiǎn)潔、高效[4]。
3 系統(tǒng)分析
3.1 需求分析
基于SSH的二維碼點(diǎn)餐系統(tǒng)主要是為商家提供商品信息管理、消費(fèi)額統(tǒng)計(jì)等,并為用戶提供二維碼點(diǎn)餐、在線結(jié)算、消費(fèi)查詢等功能,其面向的主要用戶群體為店鋪商家和普通消費(fèi)者。經(jīng)過調(diào)查研究發(fā)現(xiàn),線上點(diǎn)餐系統(tǒng)需求分析按功能性需求和非功能性需求可歸納為以下幾點(diǎn)。
功能性需求主要包括以下功能:
1) 商家登錄。商家可以在系統(tǒng)后臺(tái)管理界面進(jìn)行登錄,商家沒有登錄將無法進(jìn)行后臺(tái)管理操作。
2) 信息維護(hù)。商家可以通過后臺(tái)管理程序維護(hù)商家店鋪信息以及菜品信息等,保證信息的時(shí)效性與正確性。
3) 訂單管理與統(tǒng)計(jì)。商家可以在后臺(tái)管理程序中對(duì)訂單進(jìn)行管理、營(yíng)業(yè)額統(tǒng)計(jì)以及餐桌和訂單二維碼信息管理。
4) 下單與結(jié)算。用戶可以通過二維碼進(jìn)入點(diǎn)餐界面,然后查看菜品、加入購物車并下單,最后可直接通過二維碼進(jìn)行結(jié)賬付款。
非功能性需求主要包括以下幾點(diǎn):
1) 便捷性。用戶可直接通過掃描二維碼進(jìn)入餐廳點(diǎn)餐并下單;后臺(tái)管理能夠及時(shí)查看用戶訂單,對(duì)訂單進(jìn)行處理并生成相應(yīng)的訂單信息。
2) 友好性。系統(tǒng)頁面美觀且友好,用戶操作需簡(jiǎn)單便捷,用戶使用門檻低。
3) 安全性。商家后臺(tái)登錄模塊要求保障用戶數(shù)據(jù)安全,防止用戶信息被竊取,同時(shí)對(duì)用戶訪問權(quán)限進(jìn)行控制,確保系統(tǒng)安全。
4) 完整性。用戶訂單數(shù)據(jù)要確保其完整性,以便商家進(jìn)行銷售分類統(tǒng)計(jì)。
3.2 系統(tǒng)功能模塊設(shè)計(jì)
點(diǎn)餐系統(tǒng)從層次上可劃分為用戶前臺(tái)應(yīng)用和商家后臺(tái)管理程序。前臺(tái)應(yīng)用主要包括菜品查詢、購物車和訂單查看三個(gè)功能模塊組成;后臺(tái)功能主要包括餐廳訂單管理、菜品信息管理以及商家信息管理三個(gè)功能模塊,系統(tǒng)功能結(jié)構(gòu)如圖1所示。
3.2.1用戶前臺(tái)應(yīng)用
前臺(tái)主要用于向用戶展示餐廳菜品,用戶可通過掃描二維碼直接進(jìn)入點(diǎn)餐界面,實(shí)現(xiàn)查看菜品、加入購物車、下單以及在線結(jié)賬等功能。用戶所請(qǐng)求的資源如果已經(jīng)存儲(chǔ)在服務(wù)器中,則由服務(wù)器直接將資源推送至客戶端;如果所請(qǐng)求的資源為動(dòng)態(tài)資源(需與持久化層交互數(shù)據(jù)),則交由后臺(tái)處理程序進(jìn)行處理。
3.2.2 后臺(tái)管理模塊
商家可通過后臺(tái)管理程序?qū)Σ蛷d基本信息進(jìn)行維護(hù),保障菜品信息的正確性和時(shí)效性。商家可以添加、更新和刪除菜品,創(chuàng)建和刪除菜品類別,且可以對(duì)餐廳桌位進(jìn)行管理。除此,商家還可以進(jìn)行餐廳訂單管理以及銷售統(tǒng)計(jì)。
3.3 數(shù)據(jù)庫設(shè)計(jì)
數(shù)據(jù)庫設(shè)計(jì)是信息系統(tǒng)需求分析到系統(tǒng)實(shí)現(xiàn)中的一個(gè)關(guān)鍵環(huán)節(jié)。經(jīng)過需求調(diào)研,設(shè)計(jì)系統(tǒng)的概念結(jié)構(gòu)并得出數(shù)據(jù)庫邏輯結(jié)構(gòu),然后對(duì)設(shè)計(jì)后的E-R圖進(jìn)行轉(zhuǎn)換,使其邏輯結(jié)構(gòu)符合DBMS商品支持的數(shù)據(jù)模型。系統(tǒng)采用Mysql作為系統(tǒng)數(shù)據(jù)持久化的工具,通過對(duì)系統(tǒng)的功能分析主要包括商家、菜系、餐桌、菜品、系統(tǒng)管理員、訂單、分類等系統(tǒng)E-R圖如圖2所示。
4 系統(tǒng)實(shí)現(xiàn)
基于SSH線上點(diǎn)餐系統(tǒng)主要是為商家和用戶提供便利的在消費(fèi)服務(wù)點(diǎn)餐服務(wù)。該文主要介紹商家登錄、菜品信息維護(hù)、用戶二維碼點(diǎn)餐以及結(jié)算等功能。
4.1 商家登錄
線上訂餐系統(tǒng)需要商家登錄才能進(jìn)行后臺(tái)數(shù)據(jù)管理,普通用戶只需掃描二維碼便可訪問系統(tǒng)。登錄模塊在前端采用JavaScript對(duì)用戶輸入數(shù)據(jù)進(jìn)行初步驗(yàn)證,后端采用Struts2驗(yàn)證框架二次驗(yàn)證,當(dāng)輸入錯(cuò)誤時(shí)將給出友好提示。另外,登錄界面還采用隨機(jī)函數(shù)生成驗(yàn)證碼并采用MD5對(duì)用戶密碼進(jìn)行加密,提高系統(tǒng)安全性。另外,還使用了過濾器或者攔截器對(duì)用戶訪問進(jìn)行控制和攔截[5]。以下為登錄驗(yàn)證模塊代碼和商家登錄代碼。
數(shù)據(jù)驗(yàn)證XML編碼如下:
商家登錄部分代碼如下:
business.setPassword(Conver2MD5.getMD5(business.getPassword()));
if (new BusinessDaoImp().selectUsername(business)) {return SUCCESS;}else{
return ERROR;}
4.2 菜品信息維護(hù)
商家可以通過后臺(tái)管理程序?qū)Ξ?dāng)前的餐廳菜品信息進(jìn)行維護(hù)。商家可以刪除過時(shí)的菜品或者添加新的菜品,也可以為菜品上傳最新圖片。
添加菜品代碼如下:
public ModelAndView insert(@RequestParam("src") MultipartFile pictureFile, Dishes dishes) {
ModelAndView mod;
mod = serviceImp.insert(pictureFile,dishes);
mod.setViewName("saveFood");
return mod;
}
商家在進(jìn)行其他數(shù)據(jù)操作時(shí),若填寫信息不正確,會(huì)提示輸入不合法,無法完成對(duì)數(shù)據(jù)庫的持久化操作。
4.3 二維碼點(diǎn)餐和結(jié)算
用戶可以通過二維碼直接進(jìn)入餐廳進(jìn)行點(diǎn)餐,在就餐結(jié)束之后可掃描系統(tǒng)生成的二維碼進(jìn)行結(jié)賬。該系統(tǒng)采用QRCode生成二維碼,生產(chǎn)二維碼代碼如下:
Qrcode qrcode = new Qrcode();
qrcode.setQrcodeErrorCorrect('M');
qrcode.setQrcodeEncodeMode('B');
qrcode.setQrcodeVersion(7);
byte[] bytes = data.getBytes(StandardCharsets.UTF_8);
BufferedImage image= new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);
Graphics2D g = image.createGraphics();
g.setBackground(Color.white);
g.clearRect(0, 0, 139, 139);
g.setColor(Color.blue);
if (bytes.length > 0 && bytes.length < 128) {
boolean[][] b = qrcode.calQrcode(bytes);
for (int i = 0; i < b.length; i++) {
for (int j = 0; j < b.length; j++) {
if (b[i][j]) {
g.fillRect(j * 3 + 2, i * 3 + 2, 3, 3);
}}}}
系統(tǒng)后臺(tái)二維碼收款效果圖如圖4所示。
4.4 購物車管理
購物車管理可以實(shí)現(xiàn)菜品的添加和移除,并實(shí)時(shí)計(jì)算商品金額,關(guān)鍵代碼如下。
Map
Dishes onedishes = (Dishes) request.getSession().getAttribute("onedishes");
Map
double price = userDishesService.countPrice(dishesMap);
double mprice = userDishesService.countMPrice(dishesMap);
5 結(jié)束語
基于SSH的線上點(diǎn)餐系統(tǒng)為商家管理餐廳菜品信息以及用戶點(diǎn)餐、結(jié)賬提供了極大的便利。系統(tǒng)采用SSH框架,實(shí)現(xiàn)了商家登錄、菜品信息維護(hù)、用戶二維碼點(diǎn)餐以及結(jié)算等功能,有效地解決了菜品信息的實(shí)時(shí)性、點(diǎn)餐的快捷性、結(jié)算的便捷性等問題。
參考文獻(xiàn):
[1] 趙曉華. 基于PHP技術(shù)的中小企業(yè)網(wǎng)站開發(fā)[J]. 自動(dòng)化與儀器儀表, 2017(10): 158-160.
[2] 黃俊勇. 基于Spring框架的研究與設(shè)計(jì)[J]. 電腦知識(shí)與技術(shù), 2018, 14(3): 116-117, 120.
[3] 黃秀娟. 基于SpringMVC+Hibernate+Extjs框架的Web系統(tǒng)應(yīng)用研究[J]. 電腦知識(shí)與技術(shù), 2015, 11(16): 63-65.
[4] 溫立輝. Hibernate框架持久化應(yīng)用及原理探析[J]. 科技創(chuàng)新與應(yīng)用, 2017(3): 97.
[5] 姚添譯, 楊廷發(fā), 蘭全祥. Java EE中Filter技術(shù)的研究與應(yīng)用[J]. 電腦知識(shí)與技術(shù), 2018, 14(18): 47-50.
【通聯(lián)編輯:謝媛媛】