鹿俊聰
(電子科技大學信息與軟件工程學院,四川 成都 610054)
食堂就是一種既能滿足上班族或者師生日常消費,也能達到良好膳食平衡的時代催產物。食堂有著經濟適用、菜品眾多且方便快捷的特點[1]。然而如今,本該是為了在用餐時間節約時間的食堂,卻往往因為用餐人數基數大、高峰期人數暴增、食堂餐品質量參差不齊的原因,出現單個窗口排隊隊伍長效率低而部分窗口無人問津的情況,造成了極大的資源浪費——無論是時間還是食物[2]。由此可見,食堂缺乏有效的管理和與顧客的溝通。針對這些問題,本文要研發一個食堂點餐系統,在數據庫設計的基礎上,基于Java技術開發一款掌上APP,隨時隨地點餐,實時發表評價,以求從根源上解決資源調配的問題,做到工作吃飯兩不誤,也能有效督促食堂餐飲業的管理化[3]。
食堂點餐系統,顧名思義,是為了滿足點餐功能的APP。所以本APP的主體功能將圍繞點餐下單出發,在此基礎上衍生出為了提高食堂服務水平的評價體系。由此,本系統將涉及顧客、食堂商家和系統管理員的角色。
首先是實體商家的角色。該角色注冊成功后還需要在系統中增加食堂商鋪,登錄即可進行商鋪管理,即對菜品的增加、刪除、更改和查詢操作。一個商家可以有多家商鋪,就涉及到商鋪的管理,即商鋪的增加、刪除、更改和查詢操作。在顧客下單后,打開訂單管理界面,可以查看、接受訂單。每次的顧客用餐評價都可以在評價界面看到。
其次是實體顧客的角色。角色注冊登錄后,先選擇食堂,之后可以看到熱門菜品推薦和食堂菜品,選擇心儀的菜品下單,此時APP跳轉到訂單填寫頁面,可以選擇堂食或者打包,完成下單。下單后,可以查看、修改訂單。在完成訂單后,可以對其進行評價,評價時可以選擇為菜品打分,五星制。
最后需要系統管理員,主要職責是審驗商家的資質、用戶權限管理和用戶信息管理的功能。
概要設計是數據庫設計的第一步。如圖1所示,是食堂點餐系統的ER圖設計,該圖可以展示系統的概念設計。本系統的人物角色主要有顧客、商家和系統管理員三種,顧客主要完成的動作有注冊、登錄、瀏覽、下單和評價等,商家的主要完成動作有注冊、登錄、對菜品的增刪改查和接單等,系統管理員主要是審核商家的資質和角色管理等動作。

圖1 食堂點餐系統ER圖
主要角色是一部分實體,還有一部分實體來自于與角色的聯系。基于此,設計出了訂單、菜品、食堂、食堂商鋪和評價實體。
訂單實體與顧客、菜品、商家和評價等實體有關。顧客主要是需要下單動作產生訂單,而且一個顧客會產生多個訂單,所以顧客和訂單之間是一對多的關系。而對于訂單和菜品,因為訂單中會包含菜品信息,所以二者之間存在聯系。當對于菜品形成訂單時,因為訂單中有可能包含多個菜品,所以訂單和菜品是多對多的關系,但是在二者關系之中,存在多個數量的相同菜品該如何體現在同一訂單中,所以需要在二者關系之中增添一個數量的屬性,這樣即使出現以上問題,也可以很好的解決。在訂單和商家之間,主要是商家要接訂單,并去改變訂單的狀態,以表示商家是否接單或者商家是否完成訂單。在完成訂單后,會有評價的形成,一個訂單只能有一個評價,所以是一對一的關系。菜品實體與訂單和食堂商鋪有關。菜單實體與訂單的關系不再贅述,而與食堂商鋪的關系則是一對多的關系。食堂實體主要和食堂商鋪有關,通過食堂可以查找到對應的食堂商鋪,然而食堂實體只需要有食堂信息和食堂地址即可。食堂商鋪實體和評價實體、商家實體、食堂實體和菜品實體有關。食堂商鋪實體可以和評價實體有一對多的關系,這樣一家商鋪打開就可以看到他的所有評價。商家和商鋪會有一對多的關系,存在并且允許一個商家開多個商鋪。
進一步進行邏輯設計。邏輯設計主要是完成數據庫實體之間的聯系、實體的主鍵和外鍵的確定、實體的屬性等。關系數據庫設計,可以遵循第一范式到第六范式,條件越來越嚴苛,冗余度越來越低。一般認為設計到第三范式或者巴斯-科德范式即可。此處挑選較為重要的訂單和菜品進行呈現。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預計取餐時間,Ord_state訂單完成狀態)Order_Dishes訂單菜品(Dis_id菜品編號,Ord_id訂單編號,Num_dis菜品數量)。
物理設計就是將以上的實體全部轉化為數據庫表,實體與實體之間的關系轉化為約束的過程。在此展示最具有代表性的訂單表Order。訂單表主要用于保存顧客訂餐的相關信息,其中的主要字段包括:Ord_id訂單編號,Cus_id顧客編號,Bus_id商家編號,Store_id商鋪編號,Dishes_id菜品編號,money總金額,Is_packet是否打包,Generate_order_time生成訂單時間,Pick_food_time預計取餐時間,Ord_state訂單完成狀態。訂單表結構如表1所示。

表1 訂單表(Order)
食堂點餐系統的核心需求是滿足顧客點餐,商家接單的需求。所以針對核心需求,并在此基礎上完善了售后服務和熱榜服務,衍生出幾大模塊。該系統分別有瀏覽菜品模塊、點餐模塊、評價模塊、用戶模塊、訂單模塊和商鋪模塊,其中用戶模塊包括注冊和登錄功能。
本系統采用postgreSQL數據庫,前臺采用H5技術,后臺采用Java技術,整體采用spring boot框架,用Java語言開發的移動APP。
圖2是一個顧客已經點好菜品,確認訂單的界面。

圖2 提交訂單圖
本文主要闡述了食堂點餐系統的數據庫部分的設計以及系統的最終實現。針對食堂在線的點單需求,設計了以訂單下單接單為主的一系列交互動作,采用postgreSQL數據庫使得數據庫信息讀取并發性更高。在經過H5和springBoot技術的實現和系統測試的支持下,該系統能夠解決顧客提前點餐和商家管理店鋪的需求,能解決食堂管理不善和時間物資浪費的問題。在未來的工作中,還會考慮單個APP占取較大內存的問題,以及根據個人喜好推薦菜品的相關研究。