鹿俊聰
(電子科技大學(xué)信息與軟件工程學(xué)院,四川 成都 610054)
食堂就是一種既能滿足上班族或者師生日常消費,也能達(dá)到良好膳食平衡的時代催產(chǎn)物。食堂有著經(jīng)濟(jì)適用、菜品眾多且方便快捷的特點[1]。然而如今,本該是為了在用餐時間節(jié)約時間的食堂,卻往往因為用餐人數(shù)基數(shù)大、高峰期人數(shù)暴增、食堂餐品質(zhì)量參差不齊的原因,出現(xiàn)單個窗口排隊隊伍長效率低而部分窗口無人問津的情況,造成了極大的資源浪費——無論是時間還是食物[2]。由此可見,食堂缺乏有效的管理和與顧客的溝通。針對這些問題,本文要研發(fā)一個食堂點餐系統(tǒng),在數(shù)據(jù)庫設(shè)計的基礎(chǔ)上,基于Java技術(shù)開發(fā)一款掌上APP,隨時隨地點餐,實時發(fā)表評價,以求從根源上解決資源調(diào)配的問題,做到工作吃飯兩不誤,也能有效督促食堂餐飲業(yè)的管理化[3]。
食堂點餐系統(tǒng),顧名思義,是為了滿足點餐功能的APP。所以本APP的主體功能將圍繞點餐下單出發(fā),在此基礎(chǔ)上衍生出為了提高食堂服務(wù)水平的評價體系。由此,本系統(tǒng)將涉及顧客、食堂商家和系統(tǒng)管理員的角色。
首先是實體商家的角色。該角色注冊成功后還需要在系統(tǒng)中增加食堂商鋪,登錄即可進(jìn)行商鋪管理,即對菜品的增加、刪除、更改和查詢操作。一個商家可以有多家商鋪,就涉及到商鋪的管理,即商鋪的增加、刪除、更改和查詢操作。在顧客下單后,打開訂單管理界面,可以查看、接受訂單。每次的顧客用餐評價都可以在評價界面看到。
其次是實體顧客的角色。角色注冊登錄后,先選擇食堂,之后可以看到熱門菜品推薦和食堂菜品,選擇心儀的菜品下單,此時APP跳轉(zhuǎn)到訂單填寫頁面,可以選擇堂食或者打包,完成下單。下單后,可以查看、修改訂單。在完成訂單后,可以對其進(jìn)行評價,評價時可以選擇為菜品打分,五星制。
最后需要系統(tǒng)管理員,主要職責(zé)是審驗商家的資質(zhì)、用戶權(quán)限管理和用戶信息管理的功能。
概要設(shè)計是數(shù)據(jù)庫設(shè)計的第一步。如圖1所示,是食堂點餐系統(tǒng)的ER圖設(shè)計,該圖可以展示系統(tǒng)的概念設(shè)計。本系統(tǒng)的人物角色主要有顧客、商家和系統(tǒng)管理員三種,顧客主要完成的動作有注冊、登錄、瀏覽、下單和評價等,商家的主要完成動作有注冊、登錄、對菜品的增刪改查和接單等,系統(tǒng)管理員主要是審核商家的資質(zhì)和角色管理等動作。
圖1 食堂點餐系統(tǒng)ER圖
主要角色是一部分實體,還有一部分實體來自于與角色的聯(lián)系?;诖?,設(shè)計出了訂單、菜品、食堂、食堂商鋪和評價實體。
訂單實體與顧客、菜品、商家和評價等實體有關(guān)。顧客主要是需要下單動作產(chǎn)生訂單,而且一個顧客會產(chǎn)生多個訂單,所以顧客和訂單之間是一對多的關(guān)系。而對于訂單和菜品,因為訂單中會包含菜品信息,所以二者之間存在聯(lián)系。當(dāng)對于菜品形成訂單時,因為訂單中有可能包含多個菜品,所以訂單和菜品是多對多的關(guān)系,但是在二者關(guān)系之中,存在多個數(shù)量的相同菜品該如何體現(xiàn)在同一訂單中,所以需要在二者關(guān)系之中增添一個數(shù)量的屬性,這樣即使出現(xiàn)以上問題,也可以很好的解決。在訂單和商家之間,主要是商家要接訂單,并去改變訂單的狀態(tài),以表示商家是否接單或者商家是否完成訂單。在完成訂單后,會有評價的形成,一個訂單只能有一個評價,所以是一對一的關(guān)系。菜品實體與訂單和食堂商鋪有關(guān)。菜單實體與訂單的關(guān)系不再贅述,而與食堂商鋪的關(guān)系則是一對多的關(guān)系。食堂實體主要和食堂商鋪有關(guān),通過食堂可以查找到對應(yīng)的食堂商鋪,然而食堂實體只需要有食堂信息和食堂地址即可。食堂商鋪實體和評價實體、商家實體、食堂實體和菜品實體有關(guān)。食堂商鋪實體可以和評價實體有一對多的關(guān)系,這樣一家商鋪打開就可以看到他的所有評價。商家和商鋪會有一對多的關(guān)系,存在并且允許一個商家開多個商鋪。
進(jìn)一步進(jìn)行邏輯設(shè)計。邏輯設(shè)計主要是完成數(shù)據(jù)庫實體之間的聯(lián)系、實體的主鍵和外鍵的確定、實體的屬性等。關(guān)系數(shù)據(jù)庫設(shè)計,可以遵循第一范式到第六范式,條件越來越嚴(yán)苛,冗余度越來越低。一般認(rèn)為設(shè)計到第三范式或者巴斯-科德范式即可。此處挑選較為重要的訂單和菜品進(jìn)行呈現(xiàn)。Dishes菜品(Dis_id菜品編號,Dis_name菜 品 名稱,Dis_desc菜品 描 述,Dis_pic菜 品 圖 片,Dis_pric菜 品 價 格,Dis_Score菜 品 評 分,Store_id商鋪編號)Order訂單(Ord_id訂單編號,Cus_id顧客編號,Bus_id商家編號Store_id商鋪編號,money總金額,Dis_Ord_id訂單菜品表編號,Is_packet是否打包Generate_order_time生成訂單時間,Pick_food_time預(yù)計取餐時間,Ord_state訂單完成狀態(tài))Order_Dishes訂單菜品(Dis_id菜品編號,Ord_id訂單編號,Num_dis菜品數(shù)量)。
物理設(shè)計就是將以上的實體全部轉(zhuǎn)化為數(shù)據(jù)庫表,實體與實體之間的關(guān)系轉(zhuǎn)化為約束的過程。在此展示最具有代表性的訂單表Order。訂單表主要用于保存顧客訂餐的相關(guān)信息,其中的主要字段包括:Ord_id訂單編號,Cus_id顧客編號,Bus_id商家編號,Store_id商鋪編號,Dishes_id菜品編號,money總金額,Is_packet是否打包,Generate_order_time生成訂單時間,Pick_food_time預(yù)計取餐時間,Ord_state訂單完成狀態(tài)。訂單表結(jié)構(gòu)如表1所示。
表1 訂單表(Order)
食堂點餐系統(tǒng)的核心需求是滿足顧客點餐,商家接單的需求。所以針對核心需求,并在此基礎(chǔ)上完善了售后服務(wù)和熱榜服務(wù),衍生出幾大模塊。該系統(tǒng)分別有瀏覽菜品模塊、點餐模塊、評價模塊、用戶模塊、訂單模塊和商鋪模塊,其中用戶模塊包括注冊和登錄功能。
本系統(tǒng)采用postgreSQL數(shù)據(jù)庫,前臺采用H5技術(shù),后臺采用Java技術(shù),整體采用spring boot框架,用Java語言開發(fā)的移動APP。
圖2是一個顧客已經(jīng)點好菜品,確認(rèn)訂單的界面。
圖2 提交訂單圖
本文主要闡述了食堂點餐系統(tǒng)的數(shù)據(jù)庫部分的設(shè)計以及系統(tǒng)的最終實現(xiàn)。針對食堂在線的點單需求,設(shè)計了以訂單下單接單為主的一系列交互動作,采用postgreSQL數(shù)據(jù)庫使得數(shù)據(jù)庫信息讀取并發(fā)性更高。在經(jīng)過H5和springBoot技術(shù)的實現(xiàn)和系統(tǒng)測試的支持下,該系統(tǒng)能夠解決顧客提前點餐和商家管理店鋪的需求,能解決食堂管理不善和時間物資浪費的問題。在未來的工作中,還會考慮單個APP占取較大內(nèi)存的問題,以及根據(jù)個人喜好推薦菜品的相關(guān)研究。