基于Springboot的在線訂餐系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)_第1頁(yè)
基于Springboot的在線訂餐系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)_第2頁(yè)
基于Springboot的在線訂餐系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)_第3頁(yè)
基于Springboot的在線訂餐系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)_第4頁(yè)
基于Springboot的在線訂餐系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩39頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Ⅰ基于Springboot的線上訂餐系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)摘要當(dāng)今世界,互聯(lián)網(wǎng)以及和互聯(lián)網(wǎng)有關(guān)的行業(yè)都在不斷的發(fā)展,也在持續(xù)走進(jìn)人們的生活,在此趨勢(shì)下人們對(duì)于通過(guò)互聯(lián)網(wǎng)解決生活問(wèn)題的需求愈來(lái)愈多,本文考慮到了這些情況后做出了該訂餐系統(tǒng)。本系統(tǒng)選擇了MySQL作為主要存儲(chǔ)單元。采用了MyBatis框架技術(shù)優(yōu)化了與系統(tǒng)數(shù)據(jù)庫(kù)有關(guān)功能的開(kāi)發(fā)。并且使用了SpringBoot框架技術(shù)完成了系統(tǒng)的開(kāi)發(fā),從而實(shí)現(xiàn)了本在線訂餐系統(tǒng)的全部功能。通過(guò)本系統(tǒng)員工可以實(shí)現(xiàn)菜品分類(lèi)管理,套餐管理,餐品管理以及訂單管理。用戶可以實(shí)現(xiàn)地址信息管理以及購(gòu)物車(chē)功能。經(jīng)過(guò)測(cè)試后,測(cè)試結(jié)果證明該系統(tǒng)操作易用,簡(jiǎn)單友好,有著較高的使用價(jià)值。關(guān)鍵詞:線上訂餐系統(tǒng);動(dòng)態(tài)數(shù)據(jù)庫(kù)管理;SpringBoot框架技術(shù);MyBatis框架技術(shù)

ⅣⅣ目錄第1章緒論 11.1研究目的和意義 11.2國(guó)內(nèi)外研究現(xiàn)狀 11.3主要研究?jī)?nèi)容 2第2章系統(tǒng)分析 32.1可行性分析 32.2需求分析 5第3章系統(tǒng)設(shè)計(jì) 53.1登錄模塊設(shè)計(jì) 53.2訂餐模塊設(shè)計(jì) 63.3訂餐模塊設(shè)計(jì) 73.4數(shù)據(jù)庫(kù)模塊設(shè)計(jì) 83.5數(shù)據(jù)庫(kù)表設(shè)計(jì) 9第4章系統(tǒng)實(shí)現(xiàn) 154.1登錄模塊設(shè)計(jì) 154.2員工管理模塊 164.3分類(lèi)管理模塊 184.4菜品管理 234.5套餐管理 254.6購(gòu)物車(chē) 284.7訂單管理 304.8用戶信息管理模塊 32第5章系統(tǒng)測(cè)試 35結(jié)論 38參考文獻(xiàn) 39致謝 41保定理工學(xué)院本科畢業(yè)設(shè)計(jì)[1]。系統(tǒng)模塊如圖3.1所示。圖3.1系統(tǒng)模塊3.1登錄模塊設(shè)計(jì)登錄模塊主要完成了用戶以及管理員的登錄,該模塊分為管理員登錄模塊和普通用戶登錄模塊兩種登陸方式,主要是根據(jù)用戶的角色選擇不同的登陸界面進(jìn)行登陸。管理員在前端輸入相應(yīng)的用戶名、密碼。數(shù)據(jù)填寫(xiě)完整之后,首先對(duì)用戶名進(jìn)行驗(yàn)證。如果用戶名查詢失敗,則提示用戶不存在;如果用戶名正確則再進(jìn)行密碼驗(yàn)證,將輸入的密碼和數(shù)據(jù)庫(kù)中保存的密碼進(jìn)行比對(duì),不一致則提示密碼輸入錯(cuò)誤。如果密碼輸入正確則跳轉(zhuǎn)到相應(yīng)的主界面。用戶登錄則在前端輸入手機(jī)號(hào)點(diǎn)擊發(fā)送驗(yàn)證碼后由阿里云服務(wù)器發(fā)送短信進(jìn)行驗(yàn)證?若不存在該用戶則向數(shù)據(jù)庫(kù)中保留該用戶信息若存在則正常進(jìn)行登錄,登錄成功后采用Session存儲(chǔ)信息。登錄流程如圖3.2所示。圖3.2登錄執(zhí)行流程3.2訂餐模塊設(shè)計(jì)3.2.1購(gòu)物車(chē)登錄成功后,用戶進(jìn)入主菜單界面,可以看到根據(jù)菜品分類(lèi)和套餐分類(lèi)顯示的菜品,然后單擊添加按鈕將菜添加到用戶的購(gòu)物車(chē)。同時(shí),當(dāng)用戶查看購(gòu)物車(chē)時(shí),購(gòu)物車(chē)中具有剛剛添加的相應(yīng)菜品。并且可以選擇菜品的口味,當(dāng)點(diǎn)擊購(gòu)物車(chē)中的結(jié)算按鈕時(shí),將購(gòu)物車(chē)中的數(shù)據(jù)提交到后端。之后生成相應(yīng)的訂單。具體的執(zhí)行過(guò)程是在前端單擊按鈕時(shí)執(zhí)行相應(yīng)的Ajax?函數(shù),通過(guò)相應(yīng)的?URL?將數(shù)據(jù)傳送到后臺(tái)的控制器層調(diào)用相應(yīng)的方法,直到相應(yīng)的結(jié)果返回到前端界面REF_Ref132475001\r\h[13]。3.2.2訂單模塊訂單由用戶提交后生成,完成該模塊需要存儲(chǔ)訂單號(hào)、下單時(shí)間、訂單狀態(tài)、商品信息、收貨地址、配送方式、價(jià)格、快遞單號(hào)等信息。本系統(tǒng)可以提供給用戶查看歷史訂單的功能,每個(gè)訂單均有一個(gè)唯一的訂單號(hào)作為標(biāo)識(shí)。管理員可以對(duì)訂單進(jìn)行操作,如選擇完成訂單、選擇派送商品。3.3菜品管理模塊當(dāng)用戶成功登錄進(jìn)入主界面,該界面執(zhí)行?Ajax?函數(shù)以訪問(wèn)后臺(tái)菜單數(shù)據(jù),并在前端顯示菜單結(jié)果。同時(shí)系統(tǒng)將后臺(tái)數(shù)據(jù)發(fā)送到前端。后臺(tái)數(shù)據(jù)主要包括每道菜的詳細(xì)?ID、名稱、價(jià)格、數(shù)量等。該界面顯示所有的菜品以及對(duì)應(yīng)的套餐信息。在后臺(tái)系統(tǒng)中設(shè)置好相應(yīng)的信息后,用戶端才可以看到被設(shè)置后的信息。管理員可以通過(guò)此模塊完成菜品的修改,起售和停售,設(shè)置菜品的口味還有設(shè)置套餐設(shè)置每種套餐包含的菜品同時(shí)管理員可以在此界面完成對(duì)菜品的上架還有下架、添加口味。為菜品添加標(biāo)簽,使用戶更方便地選擇自己需要的菜品,如素菜、葷菜、辣菜等標(biāo)簽。支持員工對(duì)菜品進(jìn)行批量操作,如批量刪除菜品、批量修改菜品等。菜品修改流程如圖3.3所示。圖3.3菜品更新流程3.4數(shù)據(jù)庫(kù)模塊設(shè)計(jì) 數(shù)據(jù)庫(kù)的設(shè)計(jì)流程需先經(jīng)過(guò)需求分析確定用戶,之后再進(jìn)行概念設(shè)計(jì)依據(jù)需求描述得到實(shí)體-聯(lián)系模型,因此得到以下實(shí)體聯(lián)系圖。1、用戶實(shí)體,包括用戶的性別,手機(jī)號(hào),id,姓名,賬號(hào)狀態(tài)。如圖手機(jī)號(hào)賬號(hào)狀態(tài)姓名Id用戶性別3。3所示。手機(jī)號(hào)賬號(hào)狀態(tài)姓名Id用戶性別圖3.3用戶實(shí)體圖員工用戶名密碼手機(jī)號(hào)性別賬號(hào)狀態(tài)2、員工實(shí)體,包括員工的用戶名,密碼,手機(jī)號(hào),性別,賬號(hào)狀態(tài)。如圖3.4所示。員工用戶名密碼手機(jī)號(hào)性別賬號(hào)狀態(tài)圖3.4員工實(shí)體圖

菜名菜品價(jià)格在售狀態(tài)圖片備注3、菜品實(shí)體,包括菜品的菜名,圖片備注,在售狀態(tài),價(jià)格。如圖3.5所示。菜名菜品價(jià)格在售狀態(tài)圖片備注圖3.5菜品實(shí)體圖3.5數(shù)據(jù)庫(kù)表設(shè)計(jì) 在根據(jù)以上實(shí)體圖做出分析后依據(jù)實(shí)體聯(lián)系使用框架創(chuàng)建出相應(yīng)的實(shí)體類(lèi),并且根據(jù)在框架中創(chuàng)建的實(shí)體類(lèi)以及在項(xiàng)目中的功能還需要完成數(shù)據(jù)庫(kù)表的創(chuàng)建。在項(xiàng)目中鏈接數(shù)據(jù)庫(kù)并且設(shè)置表,如表3.1所示。表3.1數(shù)據(jù)庫(kù)表序號(hào)表名說(shuō)明1Worker員工表2cg分類(lèi)表3caidan菜品表4Seatmeal套餐表5User用戶表6dizhi地址表7Cart購(gòu)物車(chē)表8Dds訂單表

1、用戶表設(shè)計(jì)用戶表的設(shè)計(jì)需要添加Id,Name,Phone,Sex等。在用戶登錄時(shí)需要后端在數(shù)據(jù)庫(kù)中根據(jù)用戶輸入的信息與數(shù)據(jù)庫(kù)中這些字段進(jìn)行比對(duì)若正確則返回查詢后結(jié)果,同時(shí)還設(shè)置了Status字段,該字段用于判斷賬戶是否為啟用狀態(tài)若為否則用戶已經(jīng)被封禁不能進(jìn)行登錄。同時(shí)有新用戶注冊(cè)時(shí)則會(huì)根據(jù)以上字段在持久層中進(jìn)行相應(yīng)操作將數(shù)據(jù)存入數(shù)據(jù)庫(kù)中保存新用戶信息并且將Status字段設(shè)置為1即為啟用狀態(tài)。字段名稱類(lèi)型長(zhǎng)度字段說(shuō)明是否為空Idbigint20主鍵NOTNULLnamevarchar50姓名NOTNULLphonevarchar100手機(jī)號(hào)NOTNULLsexvarchar2性別NOTNULLid_numbervarchar18身份證號(hào)NULLavatarvarchar500頭像NULLstatusint11狀態(tài)NULL 表3.2用戶表 2、員工表設(shè)計(jì)在管理員表設(shè)計(jì)時(shí)添加了Id,Name,Username,Pwd,Phone,Sex等字段在保存員工的信息時(shí)系統(tǒng)需要將這些信息持久化至數(shù)據(jù)庫(kù)中保存與員工相對(duì)應(yīng)的信息,同時(shí)在員工登錄時(shí)系統(tǒng)需要驗(yàn)證輸入的信息與數(shù)據(jù)庫(kù)中Username,Pwd兩個(gè)字段在系統(tǒng)中是否有對(duì)應(yīng),若錯(cuò)誤則在前端返回結(jié)果,成功則保存信息返回對(duì)應(yīng)結(jié)果使員工正常登陸。同時(shí)還需要設(shè)置Status,Create_Time,Update_Time,Create_User等字段,這些字段將分別記錄員工的啟用狀態(tài),任用時(shí)間,信息更新時(shí)間。字段名稱類(lèi)型長(zhǎng)度字段說(shuō)明是否為空idbigint20主鍵NOTNULLnamevarchar32姓名NOTNULLusernamevarchar32用戶名NOTNULLpwdvarchar64密碼NOTNULLphonevarchar11手機(jī)號(hào)NOTNULLcreate_timedatetime創(chuàng)建時(shí)間NOTNULL表3.3員工表

續(xù)表3.3員工表字段名稱類(lèi)型長(zhǎng)度字段說(shuō)明是否為空statusint11狀態(tài)NOTNULLsexvarchar2性別NOTNULLupdate_userdatetime修改人NOTNULLcreate_userbigint20創(chuàng)建人NOTNULLupdate_timedatetime更新時(shí)間NOTNULLid_numbevarchar18身份證號(hào)NOTNULL3、菜品表設(shè)計(jì)菜品表的設(shè)計(jì)需要添加Id,Name,Cg_Id,Price等字段在新建菜品時(shí)需要根據(jù)這些字段存入相關(guān)信息并保存到數(shù)據(jù)庫(kù)中。在用戶端顯示菜品時(shí)則需要根據(jù)以上字段在數(shù)據(jù)庫(kù)中進(jìn)行查找并且顯示相關(guān)數(shù)據(jù)。該表中還需要設(shè)置Status,Sort,Create_Time,Update_Time等字段用于記錄菜品的停售與起售狀態(tài),菜品的創(chuàng)建時(shí)間和更新時(shí)間。字段名稱類(lèi)型長(zhǎng)度字段說(shuō)明是否為空idbigint20主鍵NOTNULLnamevarchar64菜品名稱NOTNULLcg_idbigint20菜品分類(lèi)idNOTNULLpricedecimal102菜品價(jià)格NULLcodevarchar64商品碼NOTNULLdescriptionvarchar400描述信息NULLstatusint11起停售狀態(tài)NOTNULLsortint11順序NOTNULLcreate_timedatetime創(chuàng)建時(shí)間NOTNULLupdate_timedatetime更新時(shí)間NOTNULLimagevarchar200圖片NOTNULL表3.4菜品表

4、訂單表設(shè)計(jì)訂單表的設(shè)計(jì)則需要?jiǎng)?chuàng)建Id,Name,Image等字段,在用戶要求顯示訂單時(shí)后端則會(huì)根據(jù)信息在數(shù)據(jù)庫(kù)中查找這些字段顯示相匹配的信息。Number,Amount字段則在購(gòu)物車(chē)中和訂單中要求顯示菜品數(shù)量和金額顯示將對(duì)應(yīng)信息持久化至數(shù)據(jù)庫(kù)中保存訂單信息。表3.5訂單表字段名稱類(lèi)型長(zhǎng)度字段說(shuō)明是否為空idbigint20主鍵NOTNULLnamevarchar50名字NOTNULLimagevarchar100圖片NULLDd_idbigint20訂單idNOTNULLcaidan_idbigint20菜品idNULLsetcp_idbigint20套餐idNULLcaidanflavorvarchar50口味NULLnumberint11數(shù)量NOTNULLamountdecimal10,2金額NOTNULL5、地址表設(shè)計(jì)地址表設(shè)計(jì)需要?jiǎng)?chuàng)建Id,Detail,User_Id等字段,在用戶保存地址信息時(shí)必須遵照這些在數(shù)據(jù)庫(kù)中字段的要求進(jìn)行錄入信息,City_Code,City_Name等字段則會(huì)記錄用戶錄入的詳細(xì)地址信息。表3.6地址表字段名稱類(lèi)型長(zhǎng)度字段說(shuō)明是否為空idbigint20主鍵NOTNULLuser_idbigint20用戶idNOTNULLprovince_codevarchar12省級(jí)區(qū)劃編號(hào)NULLprovince_namevarchar32省級(jí)名稱NULLcity_codevarchar12市級(jí)區(qū)劃編號(hào)NULLcity_namevarchar32市級(jí)名稱NULLdistrict_codevarchar12區(qū)級(jí)區(qū)劃編號(hào)NULL字段名稱類(lèi)型長(zhǎng)度字段說(shuō)明是否為空Detailvarchar200詳細(xì)地址NULLdistrict_namevarchar32區(qū)級(jí)名稱NULL續(xù)表3.6地址表6、分類(lèi)表設(shè)計(jì)該表用于記錄菜品分類(lèi)和套餐分類(lèi)信息。需要?jiǎng)?chuàng)建Id,Type,Name等字段,用于記錄菜品或套餐的名稱類(lèi)型等信息,Create_Time,Update_User等字段的設(shè)置則記錄了分類(lèi)中創(chuàng)建人和修改人的信息,Sort字段則記錄了分類(lèi)的排序在展示時(shí)會(huì)按照該字段信息進(jìn)行排序。表3.7分類(lèi)表字段名稱類(lèi)型長(zhǎng)度字段說(shuō)明是否為空idbigint20主鍵NOTNULLtypeint(11)11類(lèi)型NULLnamevarchar64分類(lèi)名稱NOTNULLsortint(11)11順序NOTNULLcreate_timedatetime創(chuàng)建時(shí)間NOTNULLupdate_timedatetime更新時(shí)間NOTNULLcreate_userbigint20創(chuàng)建人NOTNULLupdate_userbigint20修改人NOTNULL7、套餐表設(shè)計(jì)套餐表的設(shè)計(jì)設(shè)置了套餐的Status字段用于記錄啟停售狀態(tài)以及設(shè)置了Cg_Id字段用于記錄所屬套餐分類(lèi),同時(shí)設(shè)置了Image,Price,Description等字段用于記錄套餐的圖片,價(jià)格,描述等信息。表3.8套餐表字段名稱類(lèi)型長(zhǎng)度字段說(shuō)明是否為空Idbigint20主鍵NOTNULLcg_idbigint20分類(lèi)idNOTNULL

續(xù)表3.9套餐表字段名稱類(lèi)型長(zhǎng)度字段說(shuō)明是否為空Pricebigint20價(jià)格NOTNULLDescriptionvarchar255描述NOTNULLImagevarchar255圖片NULLNamebigint64名稱NOTNULLstatusint11狀態(tài)NOTNULL8、購(gòu)物車(chē)表Gwc。購(gòu)物車(chē)表設(shè)置了購(gòu)物車(chē)模塊需要的菜品Price,Image,Number等字段用于記錄購(gòu)物車(chē)中商品的詳細(xì)信息。設(shè)置了Name,User_Id等字段用于區(qū)分不同用戶的購(gòu)物車(chē)信息。表3.9購(gòu)物車(chē)表字段名稱類(lèi)型長(zhǎng)度字段說(shuō)明是否為空idbigint20主鍵NOTNULLNamevarchar50訂單名NULLImageint(11)11圖片NULLuser_idbigint20下單用戶NOTNULLNumberInt11數(shù)量NOTNULLPricebigint20價(jià)格NOTNULLCp_idbigint20菜品idNULLTc_idbigit20套餐idNULL

第4章系統(tǒng)實(shí)現(xiàn)4.1登陸模塊設(shè)計(jì)該功能用于處理登錄請(qǐng)求,實(shí)現(xiàn)登錄的方法。在該部分的登錄流程中會(huì)首先由前端頁(yè)面查看填入框內(nèi)信息是否合法如圖4.1所示,系統(tǒng)會(huì)校驗(yàn)用戶名和密碼。在該過(guò)濾器中后端會(huì)攔截所有請(qǐng)求,需要放行后才能登錄,后臺(tái)等頁(yè)面同時(shí)聲明了只有在用戶輸入正確信息時(shí)才能放行并返回相應(yīng)的頁(yè)面,同時(shí)將信息存入Session,當(dāng)頁(yè)面做出改動(dòng)時(shí)需要向該Session驗(yàn)證數(shù)據(jù)是否正確,并且在Session中存取數(shù)據(jù)。由此維護(hù)了系統(tǒng)的安全性以及持久性和可用性。圖4.1登錄校驗(yàn)該部分關(guān)鍵代碼為:publicR<Emp>login(HttpServletRequestrequest,@RequestBodyEmpEmp){Stringpwd=Emp.getpwd();pwd=DigestUtils.md5DigestAsHex(pwd.getBytes());LambdaQueryWrapper<Emp>queryWrapper=newLambdaQueryWrapper<>();queryWrapper.eq(Emp::getUsername,Emp.getUsername());Empemp=EmpService.getOne(queryWrapper);if(emp==null){returnR.error("登陸失敗");}if(!emp.getpwd().equals(pwd)){returnR.error("登陸失敗");}if(emp.getStatus()==0){returnR.error("賬號(hào)禁用");}4.2員工管理模塊在完成登錄后選擇員工模塊時(shí)系統(tǒng)會(huì)校驗(yàn)權(quán)限,若系統(tǒng)在確認(rèn)登陸者為管理員后會(huì)顯示相關(guān)的操作權(quán)限,如編輯和禁用員工。管理員可在此模塊完成編輯員工信息如圖4.2所示,在點(diǎn)擊編輯員工后則會(huì)跳轉(zhuǎn)到編輯員工信息頁(yè)面如圖4.3所示,此時(shí)系統(tǒng)會(huì)驗(yàn)證賬號(hào),姓名,手機(jī)號(hào)等輸入框內(nèi)信息是否完整同時(shí)會(huì)驗(yàn)證身份證輸入框內(nèi)信息是否正確若正確則點(diǎn)擊保存后會(huì)將相關(guān)信息存入數(shù)據(jù)庫(kù)中同時(shí)更新該員工的更新時(shí)間字段。在該模塊中添加員工如圖4.4所示,該頁(yè)面會(huì)驗(yàn)證手機(jī)號(hào)與身份證號(hào)碼是否正確在均為正確后才會(huì)將信息存入數(shù)據(jù)庫(kù)中,若登陸者為普通員工而非管理員,則系統(tǒng)不會(huì)提供禁用其他員工權(quán)限如圖4.5所示。圖4.2管理員工界面圖4.3修改員工圖4.4添加員工圖4.5員工添加成功該部分關(guān)鍵代碼為:publicR<String>update(HttpServletRequestrequest,@RequestBodyempemp){(emp.toString());longid=Thread.currentThread().getId();LongempId=(Long)request.getSession().getAttribute("emp");emp.setUpdateTime(LocalDateTime.now());emp.setUpdateUser(empId);empService.updateById(emp);returnR.succ("信息修改成功");publicR<emp>getById(@PathVariableLongid){("查詢員工信息...");empemp=empService.getById(id);if(emp!=null){returnR.succ(emp);}returnR.error("沒(méi)有查詢到信息");}4.3分類(lèi)管理模塊4.3.1菜品分類(lèi)添加在該訂餐系統(tǒng)的平臺(tái)管理中可以為菜品的分類(lèi)或進(jìn)行信息管理。同時(shí),當(dāng)員工在后臺(tái)系統(tǒng)中在添加一個(gè)菜品時(shí)必須選擇一個(gè)菜品類(lèi)別進(jìn)行添加,并且在添加完成后,系統(tǒng)還會(huì)把數(shù)據(jù)記錄入系統(tǒng),并且保存到數(shù)據(jù)庫(kù)中。添加菜品分類(lèi)如圖4.6所示,添加成功如圖4.7所示,前端顯示如圖4.8所示。圖4.6菜品分類(lèi)添加圖4.7菜品分類(lèi)添加成功圖4.8前端顯示菜品分類(lèi)添加4.3.2套餐分類(lèi)添加當(dāng)員工添加套餐時(shí)必須先選擇套餐分類(lèi),添加完成套餐后,前端也會(huì)在該套餐分類(lèi)中顯示添加的套餐,在添加完成后,系統(tǒng)還會(huì)把數(shù)據(jù)記錄入系統(tǒng),并且保存到數(shù)據(jù)庫(kù)中。套餐分類(lèi)添加如圖4.9所示,添加成功如圖4.10所示,前端顯示如圖4.11所示。圖4.9套餐分類(lèi)添加圖4.10套餐分類(lèi)添加成功圖4.11前端顯示套餐分類(lèi)添加4.3.3分類(lèi)排序在添加時(shí)還需要選擇套餐或者菜品的排序來(lái)進(jìn)行推薦套餐和菜品,而在前端則會(huì)根據(jù)排序依次進(jìn)行展示,被設(shè)定序號(hào)后會(huì)根據(jù)序號(hào)升序展示,當(dāng)本系統(tǒng)的員工或管理員想要進(jìn)行推薦菜品或套餐時(shí)可以修改菜品的序號(hào),或者想要推薦新出的菜品或套餐時(shí)可以將序號(hào)設(shè)置為最小,在設(shè)置完成后,系統(tǒng)將會(huì)在前端頁(yè)面顯示設(shè)置好的套餐和菜品。修改分類(lèi)排序如圖4.12所示,修改成功如圖4.13所示,前端顯示根據(jù)排序推薦如圖4,14所示。圖4.12修改分類(lèi)排序圖4.13修改分類(lèi)排序成功圖4.14根據(jù)排序推薦分類(lèi)該部分關(guān)鍵代碼為:@GetMapping("/page")

publicR<Page>page(intpage,intpageSize){

Page<Cg>pageInfo=newPage<>(page,pageSize);

LambdaQueryWrapper<Category>queryWrapper=newLambdaQueryWrapper<>();

queryWrapper.orderByAsc(Cg::getSort);

cgService.page(pageInfo,queryWrapper);

returnR.succ(pageInfo);}@PutMapping

publicR<String>update(@RequestBodyCgcg){

("修改分類(lèi)信息{}",category);

cgService.updateById(cg);

returnR.succ("修改信息成功");}

4.4菜品管理模塊本菜品模塊需要完成菜品的增刪改查等功能以及完成分頁(yè)查詢,因此還需要?jiǎng)?chuàng)建一個(gè)caidanController用于處理菜品相關(guān)的請(qǐng)求,實(shí)現(xiàn)菜品的添加、修改和刪除等操作如圖4.15所示。本系統(tǒng)允許員工進(jìn)行批量刪除操作,在菜品前勾選要?jiǎng)h除的菜品后,點(diǎn)擊批量刪除后即可將菜品從數(shù)據(jù)庫(kù)中刪除,而在刪除菜品時(shí)系統(tǒng)會(huì)檢查要?jiǎng)h除的菜品是否關(guān)聯(lián)套餐,若無(wú)則可順利刪除,若有套餐中包含此菜品只有將該套餐刪除后才能順利刪除此菜品。同樣的在進(jìn)行完成勾選操作后選擇批量起售則會(huì)將停售的菜品起售,在點(diǎn)擊批量停售后則會(huì)將選中的菜品停售。在菜品添加頁(yè)面中系統(tǒng)會(huì)審核信息是否填寫(xiě)完整,在點(diǎn)擊添加口味選項(xiàng)后則會(huì)彈出數(shù)據(jù)庫(kù)中設(shè)置好的菜品口味字段,之后添加菜品圖片以及菜品描述在添加操作無(wú)誤后則會(huì)將這些數(shù)據(jù)存入數(shù)據(jù)庫(kù)中,添加成功如圖4.16所示。在菜品填入上述信息并且選擇完成該菜品對(duì)應(yīng)的菜品分類(lèi)后,前端頁(yè)面會(huì)在設(shè)置好的菜品分類(lèi)中顯示添加的菜品如圖4.17所示。圖4.15菜品添加

圖4.16菜品添加成功圖4.17菜品加入對(duì)應(yīng)分類(lèi)該部分關(guān)鍵代碼為:@PostMapping

publicR<String>save(@RequestBodyCaidanDtocaidanDto){

(dishDto.toString());dishService.saveWithFlavor(caidanDto);

returnR.succ("新增菜品成功");}@GetMapping("/{id}"publicR<CaidanDto>get(@PathVariableLongid)CaidanDtocaidanDto=caidanService.getByIdWithFlavor(id);returnR.succ(caidanDto);}PublicR<String>update(@RequestBodycaidanDtocaidanDto){loginfo(caidanDto.toString());caidanService.updateWithFlavor(caidanDto);returnR.succ("修改菜品成功;}4.5套餐管理模塊在用戶選擇訂購(gòu)套餐時(shí),套餐中會(huì)包含許多菜品,在該線上訂餐系統(tǒng)中,系統(tǒng)還設(shè)置有新增套餐功能,可使用該功能來(lái)進(jìn)行添加套餐。在選擇添加套餐后,就可以點(diǎn)擊套餐中所要加入的菜品,同時(shí)還需要提交套餐照片,在設(shè)置完成后管理端也會(huì)展示一個(gè)設(shè)定好的套餐數(shù)據(jù)。在套餐管理界面,還可以修改套餐數(shù)據(jù),通過(guò)修改頁(yè)面中套餐的信息再將數(shù)據(jù)錄入數(shù)據(jù)庫(kù)中,也可以點(diǎn)擊啟停售選項(xiàng)通過(guò)修改status字段來(lái)修改該套餐的起售或停售,也可以直接刪除套餐。其中套餐添加如圖4.18所示,添加成功如圖4.19所示。圖4.18套餐添加圖4.19套餐添加成功在套餐信息內(nèi)填入對(duì)應(yīng)的分類(lèi)后,系統(tǒng)會(huì)在前端頁(yè)面對(duì)應(yīng)的套餐分類(lèi)中顯示新添加的套餐如圖4.20所示。圖4.20套餐加入對(duì)應(yīng)分類(lèi)該部分關(guān)鍵代碼為:publicR<String>shanchu(@RequestBodysetcpDtosetcpDto){loginfosetcpDto);setcpService.shanchuWithcaidan(setcpDto);returnR.succ("新增套餐成功");}@GetMapping("/yemian")publicR<yemian>yemian(intyemian,intyemianSize,Stringname){yemian<setcp>yemianInfo=newyemian<>(yemian,yemianSize);yemian<setcpDto>dtoyemian=newyemian<>();LambdaQueryWrapper<setcp>queryWrapper=newLambdaQueryWrapper<>();queryWrapper.like(name!=null,setcpgoetName,name);queryWrapper.DdByDesc(setcpgoetUpdateTime);setcpService.yemian(yemianInfo,queryWrapper);BeanUtils.copyProperties(yemianInfo,dtoyemian,"records");List<setcp>records=yemianInfo.getRecords();List<setcpDto>list=records.stream().map((item)->{setcpDtosetcpDto=newsetcpDto();BeanUtils.copyProperties(item,setcpDto);LongcgId=item.getcgId();cgcg=cgService.getById(cgId);if(cg!=null){StringcgName=cg.getName();setcpDto.setcgName(cgName);}returnsetcpDto;}).collect(Collectors.toList());dtoyemian.setRecords(list);returnR.succ(dtoyemian);}@DeleteMappingpublicR<String>delete(@RequestParamList<Long>ids){loginfo("ids:{}",ids);setcpService.removeWithcaidan(ids);returnR.succ("套餐已刪除");}在套餐添加完成后,在套餐頁(yè)面還需要實(shí)現(xiàn)修改功能。在選擇修改功能時(shí)會(huì)彈出修改框回顯套餐信息,為套餐內(nèi)添加菜品則需要點(diǎn)擊添加菜品按鈕,選擇套餐內(nèi)的菜品并繼續(xù)添加。如圖4.21所示。圖4.21套餐內(nèi)菜品修改該部分關(guān)鍵代碼為:@GetMapping("/list")publicR<List<setcp>>listR(setcpsetcp){LambdaQueryWrapper<setcp>queryWrapper=newLambdaQueryWrapper<>();queryWrapper.eq(setcpgoetcgId()!=null,setcpgoetcgId,setcpgoetcgId());queryWrapper.eq(setcpgoetStatus()!=null,setcpgoetStatus,setcpgoetStatus()queryWrapper.DdByDesc(setcpgoetUpdateTime);List<setcp>list=setcpService.list(queryWrapper);returnR.succ(list);}@PutMappingpublicR<String>update(@RequestBodyTaocanDtotaocanDto){taocanService.updateWithDish(taocanDto);returnR.succ("修改套餐成功");}4.6購(gòu)物車(chē)在用戶完成登錄后,首先會(huì)進(jìn)入設(shè)置好的商家首頁(yè),在此頁(yè)面用戶可以看到推薦菜品,同時(shí)頁(yè)面提供去點(diǎn)餐選項(xiàng),在用戶選擇后跳轉(zhuǎn)進(jìn)入購(gòu)物頁(yè)面如圖4.22所示。圖4.22商家推薦頁(yè)面在該模塊中系統(tǒng)還需要實(shí)現(xiàn)購(gòu)物車(chē)功能,該模塊的功能實(shí)現(xiàn)了購(gòu)物車(chē)內(nèi)的套餐添加和商品添加,并且在購(gòu)物車(chē)內(nèi)可以增加和減少菜品的數(shù)目,并且可以清空購(gòu)物車(chē)內(nèi)的菜品。該購(gòu)物車(chē)模塊內(nèi)顯示了用戶選擇菜品的圖片和價(jià)格等信息,并且計(jì)算出菜品的價(jià)格總和,購(gòu)物車(chē)實(shí)現(xiàn)如圖4.23所示。圖4.23購(gòu)物車(chē)該部分關(guān)鍵代碼為:@GetMapping("/list")

publicR<List<GWC>>list(){("查看購(gòu)物車(chē)...");

LambdaQueryWrapper<GWC>queryWrapper=newLambdaQueryWrapper<>();

queryWrapper.eq(GWC::getUserId,BaseContext.getCurrentId());

queryWrapper.orderByAsc(GWC::getCreateTime);

List<GWC>list=GWCService.list(queryWrapper);

returnR.success(list);}

@DeleteMapping("/clean")

publicR<String>clean(){

LambdaQueryWrapper<GWC>queryWrapper=newLambdaQueryWrapper<>();

queryWrapper.eq(GWC::getUserId,BaseContext.getCurrentId());

GWCService.remove(queryWrapper);

returnR.success("清空購(gòu)物車(chē)成功");

4.7訂單管理模塊用戶選擇后中會(huì)顯示該訂單的信息。在這里用戶可以添加備注,選擇/設(shè)置地址,同時(shí)選擇結(jié)算后跳轉(zhuǎn)到結(jié)算頁(yè)面,訂單提交如圖4.24所示。圖4.24訂單提交界面該部分關(guān)鍵代碼為:@GetMapping("/page")

publicR<Page>page(intpage,intpageSize,Stringnumber,StringbeginTime,StringendTime){

Page<Orders>pageInfo=newPage<>(page,pageSize);

LambdaQueryWrapper<Orders>queryWrapper=newLambdaQueryWrapper<>();

queryWrapper.like(number!=null,Orders::getNumber,number)

.gt(StringUtils.isNotEmpty(beginTime),Orders::getOrderTime,beginTime)

.lt(StringUtils.isNotEmpty(endTime),Orders::getOrderTime,endTime);

dingdanService.page(pageInfo,queryWrapper);

returnR.success(pageInfo);}

在用戶選擇完成餐品后,用戶可以查看自己的訂單狀態(tài)。如圖4.25所示。圖4.25訂單狀態(tài)查看在完成上述步驟后,系統(tǒng)后臺(tái)會(huì)生成一份訂單,之后客戶端向后端發(fā)送此次請(qǐng)求,請(qǐng)求向管理端生成具體信息,該份訂單記載了訂單狀態(tài)、價(jià)格等信息,管理員可進(jìn)入后端查看并選擇派送此訂單或確定訂單已完成。如圖4.26所示。圖4.26訂單操作界面該部分關(guān)鍵代碼為:@PutMapping

publicR<String>dingdanStatusChange(@RequestBodyMap<String,String>map){

Stringid=map.get("id");

LongdingdanId=Long.parseLong(id);

Integerstatus=Integer.parseInt(map.get("status"));

if(dingdanId==null||status==null){

returnR.error("傳入信息不合法");}

Dingdansdingdans=dingdanService.getById(dingdanId);

dingdans.setStatus(status);

dingdanService.updateById(dingdans);

returnR.success("訂單狀態(tài)修改成功");}4.8用戶信息管理模塊用戶能夠在該頁(yè)面完成個(gè)人信息配置,用戶可在此界面查看訂單信息,可配置訂單地址在用戶完成訂單時(shí)會(huì)自動(dòng)提交信息,用戶可在個(gè)人信息界面設(shè)置自己的地址,或者查看歷史訂單,在設(shè)置地址時(shí)系統(tǒng)會(huì)檢查框內(nèi)信息是否合法在所有信息無(wú)誤后,系統(tǒng)會(huì)將該信息存入數(shù)據(jù)庫(kù)個(gè)人以及地址信息如圖4.274.28所示,地址信息添加成功如圖4.29所示。圖4.27個(gè)人信息圖4.28地址信息圖4.29地址信息添加成功該部分關(guān)鍵代碼為:@PutMapping("default")//設(shè)置默認(rèn)地址publicR<dizhiMulu>setDefault(@RequestBodydizhiMuludizhiMulu){lgifo("dizhiMulu:{}",dizhiMulu);LambdaUpdateWrapper<dizhiMulu>wrapper=newLambdaUpdateWrapper<>();wrapper.eq(dizhiMulu::getUserId,BaseContext.getCurrentId());wrapper.set(dizhiMulu::getIsDefault,);@GetMapping("/{id}")publicRget(@PathVariableLongid){dizhiMuludizhiMulu=dizhiMuluService.getById(id);if(dizhiMulu!=null){returnR.succ(dizhiMulu);}else{returnR.error("查詢失敗");}@GetMapping("default")PublicR<dizhiMulu>getDefault(){LambdaQueryWrapper<dizhiMulu>queryWrapper=newLambdaQueryWrapper<>;queryWrapper.eq(dizhiMulu::getUserId,BaseContext.getCurrentId());queryWrapper.eq(dizhiMulu::getIsDefault,1)if(null==dizhiMulu){returnR.error("查找錯(cuò)誤");}else{returnR.succ(dizhiMulu);}

第5章系統(tǒng)測(cè)試用戶端測(cè)試用例依據(jù)用戶代表要求進(jìn)行設(shè)計(jì),采用黑盒測(cè)試技術(shù),這里給出登錄測(cè)試用例表,套餐測(cè)試用例表以及訂單管理測(cè)試用例表。1、登錄測(cè)試用例表用戶或員工在登錄時(shí)必須滿足系統(tǒng)設(shè)置的要求,如用戶名正確填寫(xiě)和密碼的正確填寫(xiě)等。如表5.1所示。表5.1登錄測(cè)試用例表測(cè)試編號(hào)測(cè)試目的測(cè)試內(nèi)容預(yù)期結(jié)果實(shí)際結(jié)果001員工登錄測(cè)試輸入用戶名admin密碼123456登錄成功登錄成功002員工登錄測(cè)試輸入用戶名123密碼123456登錄失敗登錄失敗003員工登錄測(cè)試輸入用戶名admin密碼666666登錄失敗登錄失敗004用戶登錄測(cè)試輸入賬證碼1568登陸成功登陸成功005用戶登錄測(cè)試輸入1583139066驗(yàn)證碼6688登錄成功登錄成功006用戶登錄測(cè)試輸入1234驗(yàn)證碼0000登錄失敗登陸失敗2、菜品套餐測(cè)試用例表員工在添加,修改,刪除菜品和套餐時(shí)必須按照系統(tǒng)設(shè)定進(jìn)行相關(guān)操作。如表5.2所示。

表5.2菜品套餐測(cè)試用例表測(cè)試編號(hào)測(cè)試目的測(cè)試內(nèi)容預(yù)期結(jié)果實(shí)際結(jié)果001添加菜品在添加頁(yè)面輸入菜品宮保雞丁,點(diǎn)擊確認(rèn)按鈕添加成功添加成功002修改菜品在修改頁(yè)面將宮保雞丁改為涮羊肉,點(diǎn)擊確認(rèn)按鈕修改成功修改成功003刪除菜品在管理菜品頁(yè)面,選擇涮羊肉點(diǎn)擊刪除按鈕刪除成功刪除成功004添加套餐在添加套餐頁(yè)面輸入火鍋套餐并且添加肉,面,蔬菜等菜品,點(diǎn)擊添加按鈕添加成功添加成功005修改套餐在修改頁(yè)面選擇火鍋套餐修改面為粉,點(diǎn)擊確認(rèn) 修改成功修改成功006添加套餐在管理套餐頁(yè)面,選擇火鍋套餐點(diǎn)擊刪除按鈕刪除成功刪除成功3、訂單管理測(cè)試用例表員工可以在用戶提交訂單時(shí),按照系統(tǒng)設(shè)定查看用戶訂單,通過(guò)更改訂單狀態(tài),選擇配送訂單,完成訂單。如表5.2所示。

表5.3訂單管理測(cè)試用例表測(cè)試編號(hào)測(cè)試目的測(cè)試內(nèi)容預(yù)期結(jié)果實(shí)際結(jié)果001添加訂單在用戶端購(gòu)物車(chē)選擇菜品后完成訂單向管理端發(fā)送訂單添加成功添加成功002派送訂單在管理端點(diǎn)擊派送后將訂單狀態(tài)改為已派送派送完成派送完成003完成訂單在管理端點(diǎn)擊完成訂單將訂單狀態(tài)改為已完成訂單完成訂單完成

結(jié)論在本文中,首先介紹了國(guó)內(nèi)外研究現(xiàn)狀,然后根據(jù)系統(tǒng)面對(duì)的需求進(jìn)行分析同時(shí)確定了系統(tǒng)的可行性,之后對(duì)系統(tǒng)的整體以及數(shù)據(jù)庫(kù)進(jìn)行了設(shè)計(jì),但系統(tǒng)仍有不足,后續(xù)的針對(duì)在線訂餐系統(tǒng)的研究重點(diǎn)包括以下幾個(gè)方面:首先,可以進(jìn)一步完善本系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn),加入更多的功能和特性,以便滿足更廣泛的需要。其次,可以分析系統(tǒng)數(shù)據(jù),挖掘潛在的商業(yè)價(jià)值,設(shè)計(jì)和實(shí)現(xiàn)數(shù)據(jù)分析和挖掘算法。這將有助于提高系統(tǒng)的商業(yè)價(jià)值和競(jìng)爭(zhēng)能力。相信隨著互聯(lián)網(wǎng)和移動(dòng)通信技術(shù)的普及,以及人們生活方式的變化,在線訂餐系統(tǒng)將成為人們生活的重要組成部分。希望本文的研究能夠?yàn)橄嚓P(guān)領(lǐng)域的研究和實(shí)踐提供一些參考和啟示。

參考文獻(xiàn)邱丹萍.應(yīng)用SpringBoot的食堂訂餐管理系統(tǒng)設(shè)計(jì)[J].福建電腦,2020.黃素萍,劉敏娜,聶維.網(wǎng)上訂餐系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù),2017(9X):2.范博杰.基于JavaWeb的網(wǎng)上訂餐系統(tǒng)的設(shè)計(jì)與實(shí)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論