摘" 要:隨著互聯(lián)網(wǎng)的飛速發(fā)展,餐飲行業(yè)也逐步融入網(wǎng)絡(luò)技術(shù)。傳統(tǒng)的人工點(diǎn)餐方式已難以滿(mǎn)足現(xiàn)代消費(fèi)者的多樣化需求,因此,用戶(hù)點(diǎn)餐系統(tǒng)應(yīng)運(yùn)而生。文章正是在這一背景下,設(shè)計(jì)了一個(gè)高效便捷的在線點(diǎn)餐平臺(tái),使用戶(hù)能夠通過(guò)互聯(lián)網(wǎng)完成點(diǎn)餐、訂單管理和支付等功能。通過(guò)分析顧客的點(diǎn)餐偏好,餐廳能夠優(yōu)化菜品選擇和推薦,從而更好地進(jìn)行市場(chǎng)分析和決策,提升銷(xiāo)售業(yè)績(jī)。該系統(tǒng)基于Java Web技術(shù)開(kāi)發(fā),數(shù)據(jù)存儲(chǔ)使用MySQL數(shù)據(jù)庫(kù),通過(guò)網(wǎng)絡(luò)平臺(tái)為用戶(hù)提供便捷的點(diǎn)餐服務(wù),提高了點(diǎn)餐效率和用戶(hù)體驗(yàn)。
關(guān)鍵詞:在線點(diǎn)餐;系統(tǒng)性能;Java Web;系統(tǒng)架構(gòu);MySQL
中圖分類(lèi)號(hào):TP311.5 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):2096-4706(2025)03-0096-09
Design and Implementation of a User Ordering System Based on Java Web
ZHANG Shengshai1,2, LI Yunfeng3
(1.School of Information Science and Technology, Sanda University, Shanghai" 201209, China;
2.Business School, University of Shanghai for Science and Technology, Shanghai" 200093, China;
3.School of Electronic and Electrical Engineering, Shanghai University of Engineering Science, Shanghai" 201620, China)
Abstract: With the rapid advancement of Internet, the catering industry gradually integrates network technology. Traditional manual ordering methods have become difficult to meet the diverse needs of modern consumers. Therefore, the user ordering system has emerged. Against this backdrop, this paper designs an efficient and convenient online ordering platform, enabling users to complete functions such as ordering, order management and payment via the Internet. By analyzing customers' ordering preferences, restaurants can optimize their dish selection and recommendation, thereby better conducting market analysis and decision-making and enhancing sales performance. The system is developed based on Java Web technology, and data storage uses the MySQL database. It provides users with convenient ordering service through a network platform, improving both ordering efficiency and the user experience.
Keywords: online ordering; system performance; Java Web; system architecture; MySQL
0" 引" 言
引入點(diǎn)餐系統(tǒng)極大地改善了餐飲業(yè)的運(yùn)營(yíng)流程。顧客現(xiàn)在可以通過(guò)這一系統(tǒng)自行點(diǎn)餐,點(diǎn)餐信息幾乎瞬間傳送至后廚,使得廚房工作人員能夠即時(shí)了解顧客需求,簡(jiǎn)化了整個(gè)流程。對(duì)于餐飲業(yè)而言,點(diǎn)餐系統(tǒng)是提升線下餐廳管理智能化和效率的關(guān)鍵工具之一,它集成了外賣(mài)訂購(gòu)、掃碼點(diǎn)餐、收銀和財(cái)務(wù)管理等功能,有助于實(shí)現(xiàn)餐廳的智能運(yùn)營(yíng)和營(yíng)銷(xiāo)管理。在Web點(diǎn)餐系統(tǒng)的研發(fā)方面,王卉為彭慶福餐廳提供軟件技術(shù)服務(wù)并且打造了一款點(diǎn)餐系統(tǒng)[1],通過(guò)對(duì)菜品和商家管理等多個(gè)方面的優(yōu)化,有效提升了餐廳的服務(wù)水平。李昊設(shè)計(jì)了基于微信小程序的智能推薦點(diǎn)餐系統(tǒng)[2],大大簡(jiǎn)化的用戶(hù)的點(diǎn)餐操作,使得用戶(hù)的點(diǎn)餐過(guò)程變得越來(lái)越便利。與此同時(shí),盒馬生鮮的智能餐廳[3]、海底撈智慧餐廳和未來(lái)餐廳[4]等相繼加入智慧餐廳行列,試點(diǎn)運(yùn)行中的餓了么外賣(mài)機(jī)器人已逐漸推廣,同時(shí),4G和5G移動(dòng)網(wǎng)絡(luò)的覆蓋范圍也在不斷擴(kuò)大[5],不斷涌現(xiàn)著餐飲行業(yè)的點(diǎn)餐創(chuàng)新模式。
從20世紀(jì)80年代開(kāi)始,國(guó)外餐廳率先應(yīng)用電子點(diǎn)餐系統(tǒng),利用電子技術(shù)管理訂單和完成結(jié)算。20世紀(jì)80年代末,隨著移動(dòng)PAD餐廳無(wú)線點(diǎn)餐系統(tǒng)的興起,全球范圍內(nèi)的餐廳開(kāi)始轉(zhuǎn)變傳統(tǒng)的手寫(xiě)菜單和傳菜方式,以提升整體效率并減輕服務(wù)員的工作負(fù)擔(dān)。隨后,互聯(lián)網(wǎng)和智能手機(jī)的普及進(jìn)一步推動(dòng)了餐廳信息化建設(shè),使其邁入全新時(shí)代[6]。
用戶(hù)規(guī)模:由Statista所統(tǒng)計(jì)到的數(shù)據(jù),2021年全球移動(dòng)點(diǎn)餐用戶(hù)數(shù)量已達(dá)到6.05億人。這個(gè)數(shù)字預(yù)計(jì)會(huì)在未來(lái)幾年持續(xù)增長(zhǎng)。
收入規(guī)模:由Grand View Research的報(bào)告可知,全球在線點(diǎn)餐市場(chǎng)的價(jià)值在2020年達(dá)到了682.6億美元。預(yù)計(jì)在2030年,這個(gè)數(shù)字將增至1 077.6億美元,年復(fù)合增長(zhǎng)率為10.7%。
區(qū)域分布:用戶(hù)點(diǎn)餐系統(tǒng)在全球各地都有廣泛的應(yīng)用,但一些地區(qū)和國(guó)家擁有更大的市場(chǎng)份額。例如,在全球市場(chǎng)中,亞太地區(qū),尤其是中國(guó)與印度等大國(guó),占有重要地位。北美地區(qū)和歐洲也是點(diǎn)餐系統(tǒng)市場(chǎng)的重要用戶(hù)。
1" 系統(tǒng)設(shè)計(jì)
運(yùn)用Java Web技術(shù)開(kāi)發(fā)的用戶(hù)點(diǎn)餐系統(tǒng),為用戶(hù)和商家在點(diǎn)餐過(guò)程中提供便捷服務(wù)。通過(guò)對(duì)不同用戶(hù)點(diǎn)餐需求和商家經(jīng)營(yíng)情況進(jìn)行調(diào)研,結(jié)合行業(yè)標(biāo)準(zhǔn)和法規(guī)要求,了解到用戶(hù)點(diǎn)餐系統(tǒng)的相關(guān)功能需求以及系統(tǒng)角色分類(lèi)。該系統(tǒng)主要由普通用戶(hù)、商家用戶(hù)、管理員三類(lèi)角色所構(gòu)成,系統(tǒng)總體框架如圖1所示。
1.1" 功能設(shè)計(jì)
1.1.1" 普通用戶(hù)功能
本系統(tǒng)設(shè)計(jì)的普通用戶(hù)功能主要包括:
1)注冊(cè)登錄。允許用戶(hù)注冊(cè)個(gè)人賬戶(hù)并登錄系統(tǒng)。
2)餐品瀏覽與搜索。用戶(hù)可以查看菜單、搜索菜品,并獲取詳細(xì)信息。
3)購(gòu)物車(chē)管理。用戶(hù)可將心儀的菜品加入進(jìn)購(gòu)物車(chē),隨時(shí)查看、移除已選菜品。
4)下單操作。支持用戶(hù)選擇菜品、確認(rèn)訂單、選擇配送方式等操作。
5)訂單管理。用戶(hù)可以查看以往訂單記錄,訂單當(dāng)前的狀態(tài)等功能。
6)評(píng)價(jià)與反饋。用戶(hù)可以對(duì)購(gòu)買(mǎi)過(guò)的菜品進(jìn)行評(píng)分和反饋,以供其他顧客參考。
7)個(gè)人信息管理。用戶(hù)可查看并編輯個(gè)人信息,包括用戶(hù)名等。
1.1.2" 商家功能
本系統(tǒng)設(shè)計(jì)的商家功能主要有:
1)菜品管理。商家可對(duì)菜品信息進(jìn)行添加、編輯或刪除,涵蓋名稱(chēng)、價(jià)格和描述等內(nèi)容。
2)訂單管理。商家可以查看新訂單、處理訂單、更新訂單狀態(tài)等。
3)庫(kù)存管理。支持商家管理菜品庫(kù)存,及時(shí)更新菜品數(shù)量。
4)數(shù)據(jù)統(tǒng)計(jì)。提供銷(xiāo)售數(shù)據(jù)分析、訂單量統(tǒng)計(jì)等功能,幫助商家了解經(jīng)營(yíng)狀況。
5)回復(fù)評(píng)論。商家可以查看用戶(hù)對(duì)菜品的評(píng)價(jià)內(nèi)容,及時(shí)回復(fù)和處理。
1.1.3" 管理員功能
本系統(tǒng)設(shè)計(jì)的管理員功能主要有:
1)用戶(hù)管理。對(duì)用戶(hù)進(jìn)行刪除等操作。
2)權(quán)限管理。對(duì)用戶(hù)進(jìn)行賬號(hào)封禁操作。
3)訂單查詢(xún)。查詢(xún)所有用戶(hù)訂單。
1.2" 數(shù)據(jù)庫(kù)設(shè)計(jì)
1.2.1" 數(shù)據(jù)庫(kù)概念設(shè)計(jì)
E-R圖是一種概念模型,通過(guò)使用圖形模型來(lái)表示各個(gè)實(shí)體以及屬性之間的聯(lián)系。通過(guò)E-R圖可以將現(xiàn)實(shí)中實(shí)體之間的關(guān)聯(lián)映射成概念模型。
用戶(hù)點(diǎn)餐系統(tǒng)包含管理員用戶(hù)、商家用戶(hù)、普通用戶(hù)、菜品信息、訂單信息、評(píng)論信息、回復(fù)信息、圖片信息、評(píng)分信息、商鋪信息、庫(kù)存信息和類(lèi)別信息12個(gè)實(shí)體。該實(shí)體所存在的系統(tǒng)E-R圖如圖2所示。
1.2.2" 數(shù)據(jù)庫(kù)邏輯設(shè)計(jì)
邏輯設(shè)計(jì)階段的核心任務(wù)是將概念模型轉(zhuǎn)化成邏輯模型。根據(jù)系統(tǒng)E-R圖與關(guān)系模式轉(zhuǎn)換方法可轉(zhuǎn)換為12個(gè)關(guān)系模型。具體如下:
1)管理員(用戶(hù)ID,賬號(hào),密碼,性別,狀態(tài),信用分,是否刪除,用戶(hù)類(lèi)別)。
2)普通用戶(hù)(用戶(hù)ID,賬號(hào),密碼,性別,狀態(tài),信用分,是否刪除,用戶(hù)類(lèi)別)。
3)商家(用戶(hù)ID,賬號(hào),密碼,性別,狀態(tài),信用分,是否刪除,用戶(hù)類(lèi)別)。
4)菜品信息(菜品ID,菜名,類(lèi)別ID,價(jià)格,是否推薦,是否上架,是否刪除)。
5)訂單信息(訂單ID,訂單號(hào),菜品ID,(普通用戶(hù))用戶(hù)ID,訂單時(shí)間,是否支付,是否刪除)。
6)評(píng)分信息(評(píng)分ID,菜品ID,(普通用戶(hù))用戶(hù)ID,評(píng)分)。
7)庫(kù)存信息(庫(kù)存ID,菜品ID,菜名,總庫(kù)存,上架數(shù)量)。
8)評(píng)論信息(評(píng)論ID,訂單編號(hào),(普通用戶(hù))用戶(hù)ID,菜品ID,評(píng)論內(nèi)容,評(píng)論時(shí)間)。
9)回復(fù)消息(回復(fù)ID,回復(fù)對(duì)象ID,回復(fù)者,回復(fù)時(shí)間,回復(fù)內(nèi)容)。
10)商鋪信息(商鋪ID,(普通用戶(hù))用戶(hù)ID,商鋪名)。
11)菜品類(lèi)別信息(類(lèi)別ID,類(lèi)別名)。
12)圖片信息(圖像ID,菜品ID,圖像文件名)。
1.2.3" 數(shù)據(jù)庫(kù)物理設(shè)計(jì)
數(shù)據(jù)庫(kù)的物理設(shè)計(jì)主要是根據(jù)關(guān)系模式設(shè)計(jì)對(duì)應(yīng)的數(shù)據(jù)庫(kù)表。結(jié)合關(guān)系模式可以設(shè)計(jì)的表有:用戶(hù)信息表,菜品信息表,用戶(hù)訂單信息表,評(píng)分信息表,庫(kù)存信息表,評(píng)論信息表、回復(fù)信息表、商鋪信息表、菜品了類(lèi)別信息表、圖片信息表。
1)用戶(hù)信息表。該表字段包括用戶(hù)ID、用戶(hù)登錄名、登錄密碼、性別、狀態(tài)、信用分、是否刪除和用戶(hù)類(lèi)別,如表1所示。
2)菜品信息表。該表字段包括菜品ID、菜名、類(lèi)別ID、價(jià)格、是否推薦、是否上架、是否刪除,如表2所示。
3)訂單信息表。該表字段包括訂單ID、訂單號(hào)、菜品ID、用戶(hù)ID、訂單時(shí)間、是否支付,如表3所示。
4)評(píng)分信息表。該表字段包括評(píng)分ID、菜品ID、用戶(hù)ID、評(píng)分,如表4所示。
5)庫(kù)存信息表。該表字段包括庫(kù)存ID、菜品ID、菜名、總庫(kù)存、上架數(shù)量,如表5所示。
6)評(píng)論信息表。該表字段包括評(píng)論ID、評(píng)論者、訂單ID、用戶(hù)ID、菜品ID、評(píng)價(jià)內(nèi)容、評(píng)價(jià)日期,如表6所示。
7)回復(fù)信息表。該表字段包括回復(fù)ID、訂單編號(hào)、回復(fù)對(duì)象ID、菜品ID、回復(fù)時(shí)間,如表7所示。
8)商鋪信息表。該表字段包括商鋪ID、用戶(hù)ID、商鋪名,如表8所示。
9)菜品類(lèi)別信息表。該表字段包括類(lèi)別ID、類(lèi)別名,如表9所示。
10)圖像信息表。該字段包括菜品ID、圖像ID、圖像文件名,如表10所示。
2" 關(guān)鍵技術(shù)分析
2.1" Druid連接池
Druid連接池是阿里巴巴推出的數(shù)據(jù)庫(kù)連接管理工具,具備高性能、可擴(kuò)展和全面監(jiān)控等特點(diǎn)。除了基本的連接獲取、釋放和超時(shí)檢測(cè)功能外,還提供連接池監(jiān)控、SQL防火墻和慢查詢(xún)?nèi)罩镜葦U(kuò)展功能,有效提升系統(tǒng)穩(wěn)定性和性能表現(xiàn)[7]。
2.2" MySQL數(shù)據(jù)庫(kù)
在眾多關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)中MySQL備受歡迎,在市場(chǎng)上占據(jù)著重要地位。與其他數(shù)據(jù)庫(kù)相比,MySQL不僅擁有更快的速度和更加易用的特點(diǎn),而且具備更強(qiáng)的可移植性,提供了豐富的接口。最重要的是,MySQL能提供免費(fèi)技術(shù)服務(wù),這意味著用戶(hù)可以免費(fèi)獲取并自由修改其源代碼,滿(mǎn)足各種不同項(xiàng)目的需求[8]。
2.3" JSP技術(shù)
JSP是一項(xiàng)Java技術(shù),專(zhuān)門(mén)用于動(dòng)態(tài)Web頁(yè)面的開(kāi)發(fā)。開(kāi)發(fā)過(guò)程中,JSP能將Java代碼與HTML頁(yè)面融合,實(shí)現(xiàn)動(dòng)態(tài)內(nèi)容的生成和交互。與傳統(tǒng)的Servlet開(kāi)發(fā)相比,JSP更易于維護(hù)和開(kāi)發(fā)。開(kāi)發(fā)人員可以直接在HTML頁(yè)面中編寫(xiě)Java代碼,避免了編寫(xiě)大量的Java文件,從而簡(jiǎn)化了開(kāi)發(fā)流程并提高了效率。JSP的核心就是Servlet,在Servlet規(guī)范下用于開(kāi)發(fā)動(dòng)態(tài)網(wǎng)頁(yè)。不同于HTML網(wǎng)頁(yè),JSP頁(yè)面將代碼與頁(yè)面分離,更有利于編寫(xiě)Java代碼以實(shí)現(xiàn)功能[9]。
2.4" IDEA平臺(tái)
IntelliJ IDEA,簡(jiǎn)稱(chēng)為IDEA,是一款專(zhuān)為提升開(kāi)發(fā)人員效率和體驗(yàn)而設(shè)計(jì)的綜合性開(kāi)發(fā)工具。它集成了人體工效學(xué)設(shè)計(jì)和高級(jí)的靜態(tài)代碼分析的功能,使開(kāi)發(fā)過(guò)程更高效、更愉悅。IDEA也是一款多用途的集成開(kāi)發(fā)環(huán)境,主要用于支持多種編程語(yǔ)言,如Python、Java、C++等。它廣泛應(yīng)用于企業(yè)應(yīng)用、移動(dòng)應(yīng)用和Web應(yīng)用的開(kāi)發(fā),并且與目前流行的技術(shù)和框架兼容。一旦源代碼在IDEA中建立索引,它將提供快速智能的開(kāi)發(fā)體驗(yàn)。無(wú)論是即時(shí)智能的代碼完成、動(dòng)態(tài)代碼分析還是可靠的重構(gòu)工具,IDEA都能在每個(gè)上下文中提供相關(guān)的建議[10]。
2.5" JavaScript
JavaScript是一種獨(dú)立于平臺(tái)的解釋型語(yǔ)言。平時(shí)瀏覽的網(wǎng)頁(yè)都是由HTML、CSS和JavaScript組成的,JavaScript能夠?qū)崟r(shí)改變網(wǎng)頁(yè)元素的樣式,實(shí)現(xiàn)與用戶(hù)的交互,比如監(jiān)聽(tīng)鼠標(biāo)點(diǎn)擊或按鍵操作,并能夠添加各種動(dòng)畫(huà)效果。在Web頁(yè)面中,JavaScript技術(shù)的應(yīng)用非常廣泛,可以實(shí)現(xiàn)很多的動(dòng)態(tài)交互效果。例如,狀態(tài)欄、輪播圖、Tab選項(xiàng)卡等效果[11]。
2.6" Tomcat容器
Tomcat是一個(gè)開(kāi)源的Java Servlet容器,它提供對(duì)Java Servlet和JavaServer Pages規(guī)范的支持。目前由Apache進(jìn)行維護(hù)和發(fā)展。作為一個(gè)可靠的服務(wù)器軟件,Tomcat在Web應(yīng)用程序開(kāi)發(fā)和部署中起著重要的作用。它具備靈活性和高性能,并且適用于各種規(guī)模的項(xiàng)目。大部分用戶(hù)會(huì)將Web應(yīng)用部署到Tomcat上。在本地,通常會(huì)配置端口號(hào)8080為T(mén)omcat的訪問(wèn)端口,并通過(guò)添加項(xiàng)目名來(lái)訪問(wèn)。在IDEA中,對(duì)Web項(xiàng)目設(shè)置平臺(tái)自帶插件版本的Tomcat之后,即可將文件部署到服務(wù)器。在項(xiàng)目編碼工作完成之后,啟動(dòng)項(xiàng)目就會(huì)跳轉(zhuǎn)到項(xiàng)目所設(shè)置的啟動(dòng)頁(yè),同樣也可以使用瀏覽器進(jìn)行訪問(wèn)[12]。
3" 主要功能模塊實(shí)現(xiàn)
3.1" 評(píng)論功能
商家和普通用戶(hù)通過(guò)點(diǎn)餐界面可以查看菜品的評(píng)論,但在功能上只有商家用戶(hù)才能回復(fù)評(píng)論和在評(píng)論區(qū)界面評(píng)論,實(shí)現(xiàn)了用戶(hù)之間的交互功能,如圖3所示。
評(píng)論功能的實(shí)現(xiàn)邏輯如下:
1)為了實(shí)現(xiàn)評(píng)論區(qū)的回復(fù)的層級(jí)關(guān)系,需要在每個(gè)ul中嵌套兩個(gè)標(biāo)簽,分別渲染評(píng)論內(nèi)容和回復(fù)內(nèi)容兩部分,回復(fù)內(nèi)容在渲染上只要不與評(píng)論內(nèi)容處于一個(gè)縱線即可直觀區(qū)分們之間的關(guān)系。
2)即點(diǎn)擊查看回復(fù)按鈕就可以實(shí)現(xiàn)樹(shù)狀顯示子數(shù)據(jù),當(dāng)商家回復(fù)多條內(nèi)容時(shí),htmlText將新生成的數(shù)據(jù)進(jìn)行拼接顯示在頁(yè)面上,并將數(shù)據(jù)寫(xiě)入到數(shù)據(jù)庫(kù)表中,此操作能夠很好的保證頁(yè)面加載的流暢性,數(shù)據(jù)傳輸方面采用了Ajax的方式,在不做刷新頁(yè)面的操作下實(shí)現(xiàn)數(shù)據(jù)寫(xiě)入,并且接收后端傳遞過(guò)來(lái)的操作信息,來(lái)反饋回復(fù)是否成功。
3)后端數(shù)據(jù)封裝采用嵌套數(shù)據(jù)結(jié)構(gòu)來(lái)實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ),創(chuàng)建一個(gè)map類(lèi)型的list來(lái)存放整條評(píng)論(包括回復(fù)),接著創(chuàng)建一個(gè)map類(lèi)型的list來(lái)存放一條評(píng)論的回復(fù)列表(可能有多條,所以用一個(gè)列表),最終通過(guò)gson.toJson(jsonData)方法將嵌套數(shù)據(jù)轉(zhuǎn)化為嵌套的JSON格式傳遞給前端。
4)前端則根據(jù)后端傳遞過(guò)來(lái)的嵌套JSON,定義并使用function(commentView,arr)方法進(jìn)行數(shù)據(jù)解析,最后動(dòng)態(tài)渲染到頁(yè)面上。
5)為了打造良好的網(wǎng)絡(luò)環(huán)境,在設(shè)置評(píng)論的過(guò)程中設(shè)置了敏感詞過(guò)濾的功能,定義SensitiveWordFilter類(lèi):包含了一個(gè)私有的成員變量sensitiveWords,這是一個(gè) Setlt;Stringgt;類(lèi)型的集合,用于存儲(chǔ)敏感詞。使用構(gòu)造方法SensitiveWordFilter()初始化敏感詞集合,敏感詞數(shù)據(jù)既可以維護(hù)在對(duì)象的屬性中,也可以維護(hù)在數(shù)據(jù)表中,通過(guò)查詢(xún)獲取。使用filter(String text)方法過(guò)濾文本中的敏感詞,接收一個(gè)待過(guò)濾的文本字符串作為參數(shù),返回過(guò)濾后的文本字符串。getMaskedString(int length)方法用于將敏感詞替換為掩碼,接收一個(gè)敏感詞的長(zhǎng)度作為參數(shù),返回相應(yīng)長(zhǎng)度的掩碼字符串。函數(shù)調(diào)用過(guò)程中,使用filter(String text)方法遍歷敏感詞集合中的每一個(gè)敏感詞。對(duì)于每個(gè)敏感詞,使用 indexOf()方法在文本中查找第一個(gè)出現(xiàn)的位置。如果找到了敏感詞,則使用 replace()方法間接調(diào)用getMaskedString(int length)方法,將敏感詞替換為相應(yīng)長(zhǎng)度的掩碼字符串(*)。繼續(xù)查找下一個(gè)出現(xiàn)的位置,直到?jīng)]有找到為止。關(guān)鍵代碼如下:
function filterSensitiveWords(text, sensitiveWords) {
// 將敏感詞集合轉(zhuǎn)換為正則表達(dá)式
var regex = new RegExp(sensitiveWords.join('|'), 'g');
// 將文本中的敏感詞替換為掩碼
return text.replace(regex, getMaskedString);
}
// 將敏感詞替換為掩碼
function getMaskedString(match) {
var mask = '';
for (var i = 0; i lt; match.length; i++) {
mask += '*';
}
return mask;
}
3.2" 圖片上傳功能
添加圖片功能的實(shí)現(xiàn)邏輯如下:
1)點(diǎn)餐系統(tǒng)中,每個(gè)菜品都有對(duì)應(yīng)的菜品圖片。因此,在添加菜品時(shí),需要為新菜品添加圖片信息,否則菜品表單會(huì)因?yàn)閿?shù)據(jù)填寫(xiě)不完整而無(wú)法進(jìn)行提交。
2)在后端中,通過(guò) request.getPart(\"upload\")獲取名為“upload”的圖片文件部分(Part),該參數(shù)是提交表單中用于上傳圖片文件控件的name屬性。
保存圖片操作中,先創(chuàng)建圖片路徑參數(shù)savePath(設(shè)置為項(xiàng)目中的img文件目錄),在完成文件路徑的定義之后,創(chuàng)建保存圖片文件的路徑(如果不存在的話(huà),可以通Files.createDirectories()方法來(lái)創(chuàng)建目錄),接著使用getInputStream()獲得文件上傳的輸入流,接著使用 FileOutputStream()創(chuàng)建一個(gè)輸出流,指向保存圖片文件的路徑,最終通過(guò)循環(huán)語(yǔ)句來(lái)獲取輸入流中的數(shù)據(jù),并將獲得到的數(shù)據(jù)寫(xiě)進(jìn)輸出流中,完成圖片文件的保存,如圖4所示。關(guān)鍵代碼如下:
// 處理上傳的圖片文件
Part filePart = request.getPart(\"upload\");
String fileName = filePart.getSubmittedFileName();
// 保存圖片文件
String savePath = \"C:\\Users\\asus\\Desktop\\ordering_system\\web\\img\";
Path filePath = Paths.get(savePath, fileName).normalize();
if (!Files.exists(filePath)) { // 如果文件不存在則保存
Files.createDirectories(filePath.getParent());
try (InputStream inputStream = filePart.getInputStream();
OutputStream outputStream = new FileOutputStream(filePath.toFile())) {
byte[] buffer = new byte[1024];
……
outputStream.write(buffer, 0, bytesRead);
3.3" 加入購(gòu)物車(chē)功能
用戶(hù)點(diǎn)餐(加入購(gòu)物車(chē))功能的實(shí)現(xiàn)邏輯如下:
1)頁(yè)面布局采用了表格的形式進(jìn)行數(shù)據(jù)呈現(xiàn),并使用Bootstrap框架來(lái)對(duì)界面進(jìn)行美化。當(dāng)用戶(hù)選擇選擇店鋪之后,點(diǎn)單界面通過(guò)使用JSTL標(biāo)簽庫(kù)循環(huán)渲染界面,展示了菜品信息,每個(gè)菜品包括菜品圖片、名稱(chēng)、類(lèi)別、介紹、單價(jià)、所需積分、評(píng)分等信息,并包含加入購(gòu)物車(chē),查看評(píng)論和兌換按鈕。
2)用戶(hù)按下加入購(gòu)物車(chē)按鈕后,前端使用Ajax與后端通信。通信過(guò)程中,前端將數(shù)據(jù)打包成text的格式進(jìn)行發(fā)送,后端通過(guò)分析前端傳遞過(guò)來(lái)的菜品信息,調(diào)用Service層的方法來(lái)進(jìn)行響應(yīng)操作,接著通過(guò)Dao層的數(shù)據(jù)操作方法進(jìn)行數(shù)據(jù)的寫(xiě)入。
3)當(dāng)后端成功處理加入購(gòu)物車(chē)請(qǐng)求時(shí),會(huì)將相應(yīng)數(shù)據(jù)封裝成JSON格式,并發(fā)送給前端,前端成功接收數(shù)據(jù)后通過(guò)彈窗提示用戶(hù)成功加入購(gòu)物車(chē)。當(dāng)后端處理失敗時(shí),前端通過(guò)AJAX的error回調(diào)函數(shù)分析后臺(tái)返回的錯(cuò)誤信息,并做頁(yè)面操作反饋。此時(shí)如果成功加入購(gòu)物車(chē),系統(tǒng)會(huì)生成一條未支付的訂單數(shù)據(jù),而點(diǎn)單界面會(huì)使用以彈窗的形式給用戶(hù)一個(gè)操作返回,提示加入購(gòu)物車(chē)操作是否成功,如圖5所示。關(guān)鍵代碼如下:
$.ajax({
url: '${pageContext.request.contextPath}/addCart',
type: 'GET',
data: {dishId: dishId}, // 將 dishId 作為參數(shù)傳遞給后臺(tái)
dataType: 'text',
success: function (response) {
// 請(qǐng)求成功后的處理邏輯
var num = JSON.parse(response).num;
……
},
error: function (xhr, status, error) {
// 請(qǐng)求失敗后的處理邏輯
……
3.4" 商家數(shù)據(jù)統(tǒng)計(jì)功能
用戶(hù)點(diǎn)餐(加入購(gòu)物車(chē))功能的實(shí)現(xiàn)邏輯如下。
1)在頁(yè)面布局方面采用了JSP標(biāo)準(zhǔn)標(biāo)簽庫(kù)中的C標(biāo)簽,該標(biāo)簽?zāi)軌蛲ㄟ^(guò)條件判斷來(lái)動(dòng)態(tài)渲染頁(yè)面。test屬性中的${dataCountsByDay == 1}和${dataCountsByMonth == 1}表示按日查詢(xún)和按月兩種不同類(lèi)型的數(shù)據(jù)篩選方式,會(huì)根據(jù)后臺(tái)傳遞的數(shù)據(jù)判斷是否顯示對(duì)應(yīng)的內(nèi)容。
2)若dataCountsByDay等于1,則顯示按日統(tǒng)計(jì)表格;若dataCountsByMonth等于1,則顯示按月統(tǒng)計(jì)表格,下方的篩選按鈕可自選一個(gè)時(shí)間段來(lái)進(jìn)行數(shù)據(jù)查詢(xún),若不選或者選擇當(dāng)天日期都表示查詢(xún)當(dāng)日的數(shù)據(jù)。如果選擇以前的日期,則表示從該日期到目前為止的數(shù)據(jù)情況。
3)圖表顯示方面采用lt;canvasgt;標(biāo)簽,用于繪制圖表。項(xiàng)目中,圖表是通過(guò)使用 Chart.js庫(kù)創(chuàng)建的,其中的popChart1和popChart2分別對(duì)應(yīng)按日統(tǒng)計(jì)和按月統(tǒng)計(jì)的圖表。對(duì)于 JavaScript邏輯實(shí)現(xiàn)部分,首先通過(guò)Chart.js創(chuàng)建了兩個(gè)圖表,分別用于按日統(tǒng)計(jì)和按月統(tǒng)計(jì)。圖6為數(shù)據(jù)統(tǒng)計(jì)功能界面。
4)此圖表的數(shù)據(jù)來(lái)自后端傳遞的dataCountsByDay 和dataCountsByMonth數(shù)據(jù),分別展示菜品名稱(chēng)和訂單數(shù)量的關(guān)系。圖表的樣式和配置在options中設(shè)置。在此表顯示過(guò)程中,為了方便商家用戶(hù)直觀的統(tǒng)計(jì)數(shù)據(jù),在控件的選項(xiàng)設(shè)置中將Y軸起始值為0。關(guān)鍵代碼如下:
var barChart = new Chart(popCanvas2, {//根據(jù)后端數(shù)據(jù)動(dòng)態(tài)生成
type: 'bar',
data: {
labels: dataCountsByMonth.map(function (data) {
return data.dishName;
}),
datasets: [{
…
}]
},
options: {//默認(rèn)最低是0
…
});
3.5" 管理員用戶(hù)管理功能
用戶(hù)管理功能的實(shí)現(xiàn)邏輯如下。
1)后端通過(guò)查詢(xún)用戶(hù)信息表,檢索出系統(tǒng)中的所有用戶(hù),并返回給前端界面。由于用戶(hù)數(shù)據(jù)量龐大,頁(yè)面提供模糊查詢(xún)功能來(lái)協(xié)助管理。
2)前端界面接收到后端返回的數(shù)據(jù)后,以表格的形式進(jìn)行數(shù)據(jù)呈現(xiàn),并且給每條數(shù)據(jù)添加封禁、解封、刪除三個(gè)功能事件,封禁和解封操作公用一個(gè)按鈕。事件的響應(yīng)操作在JS代碼中實(shí)現(xiàn),用戶(hù)數(shù)據(jù)操作則采用Ajax訪問(wèn)響應(yīng)層的Servlet。
3)當(dāng)管理員點(diǎn)擊刪除按鈕之后,后端數(shù)據(jù)處理中則將該用戶(hù)的刪除標(biāo)志置1,從而實(shí)現(xiàn)用戶(hù)刪除的功能。使用邏輯刪除的方式來(lái)實(shí)現(xiàn)用戶(hù)刪除,可以備份刪除的數(shù)據(jù),必要時(shí)可以進(jìn)行數(shù)據(jù)還原,如圖7、圖8所示。
4" 軟件測(cè)試
測(cè)試過(guò)程嚴(yán)格按照測(cè)試用例進(jìn)行執(zhí)行,下面為系統(tǒng)重點(diǎn)模塊的部分測(cè)試用例記錄與分析,如表11所示。
系統(tǒng)通過(guò)了一系列嚴(yán)謹(jǐn)?shù)臏y(cè)試,所有測(cè)試用例均順利通過(guò),并且測(cè)試結(jié)果與預(yù)期結(jié)果完全一致。這表明系統(tǒng)已經(jīng)完全符合設(shè)計(jì)需求,同時(shí)具備了可靠的穩(wěn)定性和功能性,可以安全地投入實(shí)際應(yīng)用中。
在測(cè)試過(guò)程中,每個(gè)測(cè)試用例都經(jīng)過(guò)了詳細(xì)的執(zhí)行和驗(yàn)證,涵蓋了系統(tǒng)的各種功能和場(chǎng)景。通過(guò)對(duì)輸入數(shù)據(jù)的處理和系統(tǒng)輸出結(jié)果的比對(duì),確認(rèn)了系統(tǒng)在不同情況下的表現(xiàn)均符合預(yù)期,具有良好的健壯性和可靠性。
系統(tǒng)經(jīng)過(guò)充分的測(cè)試,證明了其能夠在各種條件下正常工作,并且能夠有效地處理用戶(hù)的需求和操作。這為系統(tǒng)的正式上線提供了堅(jiān)實(shí)的保障,用戶(hù)可以放心地使用系統(tǒng),享受到其提供的便利和功能。
此外,測(cè)試過(guò)程中可能發(fā)現(xiàn)的一些問(wèn)題和異常已經(jīng)得到及時(shí)修復(fù)和處理,確保了系統(tǒng)的穩(wěn)定性。最終的測(cè)試報(bào)告將為系統(tǒng)的進(jìn)一步優(yōu)化和改進(jìn)提供了有益的參考和建議。
5" 結(jié)" 論
本文從對(duì)餐飲市場(chǎng)的深入分析和用戶(hù)需求調(diào)研出發(fā),設(shè)計(jì)并實(shí)現(xiàn)了一款基于Web的點(diǎn)餐系統(tǒng)。通過(guò)前期工作的需求分析和技術(shù)選型,系統(tǒng)已成功完成并通過(guò)了各項(xiàng)測(cè)試,具備了基本功能以滿(mǎn)足用戶(hù)需求。展望未來(lái),系統(tǒng)將持續(xù)優(yōu)化并引入實(shí)時(shí)通信功能,個(gè)性化推薦和優(yōu)惠策略,智能菜品管理和庫(kù)存預(yù)警,以及智能語(yǔ)音點(diǎn)餐助手等功能,以提升服務(wù)水平和用戶(hù)體驗(yàn),促進(jìn)餐飲行業(yè)數(shù)字化智能化發(fā)展。
參考文獻(xiàn):
[1] 王卉.彭慶福餐廳點(diǎn)單系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) [D].南京:南京大學(xué),2020.
[2] 李昊.基于微信小程序的智能推薦點(diǎn)餐系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) [D].南京:南京郵電大學(xué),2020.
[3] 鄒河彬,王妍,王赫男,等.智能機(jī)器人在新零售領(lǐng)域應(yīng)用的思考與研究 [J].軍民兩用技術(shù)與產(chǎn)品,2018(13):35-37.
[4] 蔡藝華,杜海靖,李樹(shù)棟,等.未來(lái)餐廳新模式——智慧餐廳 [J].物聯(lián)網(wǎng)技術(shù),2024,14(2):143-148.
[5] 史嫄嫄,魏彬,李?lèi)?ài)華,等.5G-Advanced核心網(wǎng)運(yùn)行智能架構(gòu)演進(jìn)、關(guān)鍵技術(shù)及應(yīng)用研究 [J].電信科學(xué),2024,40(12):146-162.
[6] 時(shí)庭庭.酒店會(huì)員點(diǎn)餐系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) [D].上海:東華大學(xué),2021.
[7] 王虎.基于B/S模式的信息管理平臺(tái) [D].天津:天津大學(xué),2018.
[8] 宋永鵬.基于MySQL的數(shù)據(jù)庫(kù)查詢(xún)性能優(yōu)化 [J].電子設(shè)計(jì)工程,2021,29(12):43-47.
[9] 黃子豪,李鑫,王心悅.基于JSP+Servlet的商品進(jìn)銷(xiāo)存管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) [J].電子制作,2021(8):39-41.
[10] 王馗,吳勇靈.基于微信小程序的點(diǎn)餐系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) [J].現(xiàn)代信息科技,2023,7(22):30-35+39.
[11] 周春吟.JavaScript技術(shù)在Web前端開(kāi)發(fā)中的應(yīng)用研究 [J].軟件,2024,45(11):175-177.
[12] 孫衛(wèi)琴,李洪成.Tomcat與Java Web開(kāi)發(fā)技術(shù)詳解 [M].北京:電子工業(yè)出版社,2004.
作者簡(jiǎn)介:張圣篩(1991—),男,漢族,江蘇南通人,助教,博士研究生在讀,研究方向:軟件工程、數(shù)據(jù)挖掘;李云峰(2000—),男,漢族,江西南昌人,碩士研究生在讀,研究方向:軟件工程。