springboot+食堂预约订餐小程序 毕业设计-附源码221554
小程序springboot食堂預約訂餐系統
摘 ?要
信息化社會內需要與之針對性的信息獲取途徑,但是途徑的擴展基本上為人們所努力的方向,由于站在的角度存在偏差,人們經常能夠獲得不同類型信息,這也是技術最為難以攻克的課題。針對食堂預約訂餐系統等問題,對食堂預約訂餐系統進行研究分析,然后開發設計出食堂預約訂餐系統以解決問題。
食堂預約訂餐系統小程序的設計主要是對系統所要實現的功能進行詳細考慮,確定所要實現的功能后進行界面的設計,在這中間還要考慮如何可以更好的將功能及頁面進行很好的結合,方便用戶可以很容易明了的找到自己所需要的信息,還有系統平臺后期的可操作性,通過對信息內容的詳細了解進行技術的開發。
食堂預約訂餐系統小程序的開發利用現有的成熟技術參考,以源代碼為模板,分析功能調整與食堂預約訂餐系統小程序管理的實際需求相結合,討論了基于食堂預約訂餐系統小程序管理的使用。?
關鍵詞:食堂預約訂餐系統小程序;springboot?
Small program SPRINGBOOT canteen reservation ordering system?
Abstract
In the information society, there is a need for targeted access to information, but the expansion of access is basically the direction that people are striving for. Because of the deviation from the perspective, people can often obtain different types of information, which is also the most difficult task for technology to overcome. Aiming at the problems of canteen reservation system, this paper studies and analyzes the canteen reservation system, and then develops and designs the canteen reservation system to solve the problems.
The design of the small program of the dining room reservation and ordering system is mainly to consider the functions to be realized in detail, and then design the interface after determining the functions to be realized. In this process, we should also consider how to better combine the functions and pages, so that users can easily and clearly find the information they need, as well as the operability of the later stage of the system platform, and develop the technology through a detailed understanding of the information content.
The development of the canteen booking system applet utilizes the existing mature technical reference, takes the source code as a template, analyzes the combination of function adjustment and the actual requirements of the canteen booking system applet management, and discusses the use of the canteen booking system applet management.
Key words:?Canteen reservation ordering system applet; springboot
目 ?錄
摘??要
Abstract
第一章?緒?論
1.1選題背景
1.2國內外研究概況
1.3研究內容
第二章 開發工具及關鍵技術介紹
2.1微信開發者工具
2.2小程序框架以及目錄結構介紹
2.3 Spring Boot框架
2.4 ?Mysql數據庫
第三章?系統分析
3.1需求分析
3.2可行性分析
3.2.1技術可行性:技術背景
3.2.2經濟可行性
3.2.3操作可行性:
3.3性能分析
3.4系統操作流程
3.4.1用戶登錄流程
3.4.2信息添加流程
3.4.3信息刪除流程
第四章?系統設計與實現
4.1系統架構設計
4.2開發流程設計
4.3數據庫設計
4.3.1實體ER圖
4.3.2數據表
第五章?系統實現
5.1用戶前臺功能前臺(前端)
5.2管理員功能模塊(后端) 29
第六章??系統的測試 33
6.1 測試目的 33
6.2 測試方案設計 33
6.2.1 測試策略 33
6.2.2 測試分析 33
6.3 測試結果 34
結??論 35
參考文獻 36
致??謝 38
第一章 緒 論
1.1選題背景與意義
隨著網絡時代的到來,互聯網的優勢和普及時刻影響并改變著人們的生活方式。在信息技術迅速發展的今天,計算機技術已經遍及全球,使社會發生了巨大的變革。
為了不受時間和地點的限制,智能手機用戶可以通過移動網絡訪問網站和處理各種業務和互聯網,這是一個有效的將應用系統的功能擴展到手機終端的方法。現今各種智能手機層出不窮,各類基于手機平臺的軟件應運而生,其中,在眾多交流軟件中,微信備受人們青睞。近年來,微信發展規模越來越大,越來越多的人開始使用微信,目前隨著智能手機系統的普及,人人手機上基本都有了微信。
所以,微信推出小程序廣告支持公眾號關注,而這就意味著小程序跟公眾號之間的通道被徹底打通了。本論文食堂預約訂餐系統小程序主要牽扯到的程序,數據庫與計算機技術等。覆蓋知識面大,可以大大的提高系統人員工作效率。
微信小程序的食堂預約訂餐系統是計算機技術與座位管理相結合的產物,通過微信小程序的食堂預約訂餐系統實現了對食堂的高效管理。隨著計算機技術的不斷提高,計算機已經深入到社會生活的各個角落.而采用人工找食堂訂餐的方法,不僅效率低,易出錯,手續繁瑣,而且耗費大量人力。為了滿足微信小程序的食堂預約訂餐高效的管理,在工作人員的具備一定的計算機操作能力的前提下,特編此微信小程序的食堂預約訂餐系統軟件以提高食堂預約訂餐的管理效率。
1.2國內外研究概況
隨著高新科技的不斷發展,信息化水平的日益提高,越來越多的餐飲企業開始意識到餐飲信息化的重要性,也在積極的考慮如何將信息化技術融入到自己的餐飲管理中。通過創新,餐飲業主不僅可以降低成本,為客戶提供更好的服務并獲得額外的經濟效益。顧客也會感到更加滿意。后面我們所看到的類似于手機的一 些餐飲服務系統、餐飲管理系統也逐漸開發成功并且慢慢的投入到新興的餐飲行業中,給國內的餐飲業帶來了新機。它節省了時間,使用掌上終端或者是平板,服務員不必離開桌子把點菜單給到廚房或者是酒水區,便可直接準確無誤的下單至后廚。服務員也不需要利用紙筆手寫菜單,節省了餐廳日常開支,提高了點菜速度,減少了顧客的等待時間,提高了服務質量和翻單率,增加了客戶的滿意度和好評率。而且服務員可以服務多個餐桌,大大提高了服務效率,節約了人力成本。
在30年的發展進程中,餐飲業作為我國第三產業中的一一個傳統服務性行業,始終保持著旺盛的發展勢頭。據中國烹飪協會提供的資料顯示在改革開放前夕的1978年,全國餐飲業的經營網點不足12萬個,員工,104.4萬,零售額54.8億元。自1991年以來,全國餐飲業的經營網點已突破800萬個,員工已突破9000萬,銷售額年平均550億元以上。2006年全國餐飲業零售額突破1萬億元大關,達到10345.5億元、同比增長16. 4%,拉動社會消費品零售總額增長2.2個百分點。2007年,隨著人民生活水平和餐飲社會化程度的逐步提高,我國餐飲產業再創佳績,餐飲消費持續快速增長,餐飲業經營網點數量的增長速度在我國第三產業中攀升至第一。
隨著市場競爭的加劇,許多酒店、餐廳也開始著手利用高科技來改變餐飲服務模式和經營模式,無線點菜系統應運而生。傳統餐飲行業與互聯網商圈這一現代化工具的結合早就如火如荼地展開了,餐飲020也已成為赤手可熱的名詞,很多餐廳、酒店都已開始走上020之路。微博營銷、微信公眾平臺、APP客戶端、020交易平臺,各種工具、手段全面利用;推廣營銷、外賣外送、線下打折促銷活動、優惠券發放等各項服務線上線下雙管齊下。如今,搶客戶、爭流量大戰已進入白熱化階段,在互聯網商圈掀起了一陣融資注資熱潮。
歐美等西方發達國家信息技術起步早,各個行業的信息化變革出現較|早。相比較國內,歐美國家餐廳建設電子化點餐平臺的起步較早。例如化完成。顧客可以通過店內的計算機設備完成菜品瀏覽、點餐與結算。德國在07年出現了世界第一一個無人餐廳,餐廳中所有服務均由機器自動無人餐廳秩序良好,效率高效,及時在用餐高峰期也沒有出現顧客長時間排隊、等待等問題,顧客對用餐環境非常滿意。這種完全將餐廳服務的自動化餐廳的出現與良好運營,向大家展示了信息技術對餐飲行業的變革作用。日本- -家餐廳在德國無人餐廳的基礎上,適應目前移動互聯網的發展趨勢,將點餐系統移植到智能終端。顧客可以通過餐廳APP提前預約點菜,可以節約顧客的等待時間,進一 步向人們展示出了信息時代智能點餐系統給人們生活帶來的便捷。從歷史發展來看,歐美餐飲行業的信息化變革分以下幾個階段:
1、餐廳內有線點餐系統餐飲行業傳統人工點餐方式中,菜品的記錄與訂單管理的介質都是紙質的,容易出現下單錯誤的問題。從80年代開始,隨著計算機技術的迅速普及與各種信息管理系統的發展,餐廳開始建立自身的訂單管理系統, 借助計算機技術完成下單、結算等業務的電子化。在這一階段,點餐系統的終端往往是PC端。
2、餐廳內無線點餐系統從80年代末開始,隨著嵌入式技術的發展與無線局域網的出現,基于移動PAD的餐廳內無線點餐系統開始出現。借助該系統,服務員可以通過手持的PAD完成下單。該方式的出現很大程度上提高了餐廳業務效率。
3、基于互聯網的無線點餐系統從90年代開始,隨著互聯網與智能手機的迅速普及,餐廳的信息化建設步入一一個全新的時代。目前,眾多餐廳定制研發了手機應用程序,顧客可以通過餐廳的手機端應用在線進行各種瀏覽與操作。例如,法國巴黎的Storific是一 款典型的移動端點餐應用,顧客無需服務員無需到店都可以瀏覽菜品、預約下單、在線支付。
餐飲020日益滲透到我們的日常生活中,消費者的消費習慣和消費觀念也發生了重大變化。消費者已更多的去關注點評類網站,微博、微信公眾平臺等,根據餐飲消費調查,這些平臺對消費者做出餐飲消費選擇的影響明顯加強。而且,當前消費者對020的應用不止集中在預訂,還逐漸向點餐、支付等綜合功能深入擴展。例如,直接在APP客戶端進行點餐,支持前臺付款、快速擔保及信用卡預付等。
1.3研究內容
微信小程序的食堂預約訂餐系統的開發及實現,所需要的工作內容:
(1)首先是確定選題,確定好所要做的系統,并對系統的背景及現在面臨的一些問題等進行系統的初步確認。
(2)系統確認完成后,結合系統開發的需求進行確認系統開發所使用的技術,食堂預約訂餐系統小程序的開發使用SPRINGBOOT技術,數據庫進行平臺的搭建開發,確認好使用的技術進行技術分析,所使用的技術是否可以完成食堂預約訂餐系統小程序的實現。
(3)確定好系統使用的技術,進行在線確認系統所劃分的用戶角色,并且根據用戶角色劃分確定所要設計的功能模塊,對于食堂預約訂餐系統小程序系統的設計主要劃分別為管理員和用戶角色,并所使用的功能模塊也相應不同,但是系統的數據庫實現的內容是交互的,用戶可以隨時根據自己的需求進行查看,對于系統工作人員可以根據自己的分管內容進行在線信息的處理及操作,管理員獲取到所有用戶的詳細數據信息,并根據需求進行第一時間處理解決。
(4)系統的功能模塊確認完成后進行程序及界面的設計,設計完成后,并且通過測試來判斷程序是否完善,對于系統測試,需要不同的用戶進行不同的內容編輯及提交,及使用不同的測試方式找出程序中存在的漏洞,并對程序出現的漏洞問題進行在線解決處理,如果測試系統沒有任何問題時,可以將系統上傳進行正式操作使用。
- 開發工具及關鍵技術介紹
2.1微信開發者工具
微信開發者工具現在已經被小程序開發團隊開發運行,目前微信開發者工具任然在不斷的完善中,在開發小程序時經常要不斷的更新。可以使用微信掃碼登陸開發者工具,開發者工具將使用這個微信帳號的信息進行小程序的開發和調試。
機型選擇:小程序以智能手機的屏幕尺寸為設計標準,進行切圖。
預覽界面:寫好視圖布局后點擊編譯,用來刷新視圖界面。
控制臺:方便調試打印輸出信息。
上傳代碼:上傳到騰訊服務器,提交審核必經步驟。上傳代碼時可以填寫版本號和備注信息。
資源文件:一般可以在資源文件進行對應項目的文件目錄的斷點調試。
顯示遠程調試:手機端和PC端開發工具聯調對用戶而言是非常實用的。
本地數據存儲:顯示的是本地存儲的數據。
視圖調試:標組件以子父層級結構呈現,方便調試。
微信限制在2M 以內的代碼體積;開發中一般不校驗合法域名信息;小程序后臺要做配置服務器域名。
以上就是在開發過程中微信開發者工具常用到的功能,微信開發者工具也在不斷的完善。
2.2小程序框架以及目錄結構介紹
整個小程序框架系統分為兩部分:邏輯層和視圖層。小程序開發框架的目標是通過盡可能簡單、高效的方式讓開發者可以在微信中開發具有原生小程序體驗的服務。小程序在視圖層與邏輯層間提供了數據傳輸和事件系統,提供了自己的視圖層以及邏輯層框架,讓開發者能夠專注于數據與邏輯。框架的核心是一個響應的數據綁定系統,可以讓數據與視圖非常簡單地保持同步。在邏輯層做數據修改,在視圖層就會做相應的更新。框架提供了一套基礎的組件,這些組件自帶微信風格的樣式以及特殊的邏輯,開發者可以通過組合基礎組件,創建出強大的微信小程序 。
2.3 Spring Boot框架
Spring框架是Java平臺上的一種開源應用框架,提供具有控制反轉特性的容器。盡管Spring框架自身對編程模型沒有限制,但其在Java應用中的頻繁使用讓它備受青睞,以至于后來讓它作為EJB(EnterpriseJavaBeans)模型的補充,甚至是替補。Spring框架為開發提供了一系列的解決方案,比如利用控制反轉的核心特性,并通過依賴注入實現控制反轉來實現管理對象生命周期容器化,利用面向切面編程進行聲明式的事務管理,整合多種持久化技術管理數據訪問,提供大量優秀的Web框架方便開發等等。Spring框架具有控制反轉(IOC)特性,IOC旨在方便項目維護和測試,它提供了一種通過Java的反射機制對Java對象進行統一的配置和管理的方法。Spring框架利用容器管理對象的生命周期,容器可以通過掃描XML文件或類上特定Java注解來配置對象,開發者可以通過依賴查找或依賴注入來獲得對象。Spring框架具有面向切面編程(AOP)框架,SpringAOP框架基于代理模式,同時運行時可配置;AOP框架主要針對模塊之間的交叉關注點進行模塊化。Spring框架的AOP框架僅提供基本的AOP特性,雖無法與AspectJ框架相比,但通過與AspectJ的集成,也可以滿足基本需求。Spring框架下的事務管理、遠程訪問等功能均可以通過使用SpringAOP技術實現。Spring的事務管理框架為Java平臺帶來了一種抽象機制,使本地和全局事務以及嵌套事務能夠與保存點一起工作,并且幾乎可以在Java平臺的任何環境中工作。
2.4 ?Mysql數據庫
數據庫是系統開發過程中不可或缺的一部分。 在WEB應用方面,MySQL AB開發了一個具有很大優勢的MySQL關系數據庫管理系統。 MySQL可以將數據存儲在不同的表中,這非常靈活,并且還可以提高系統在實際應用中的速度。 數據庫訪問最常用于標準SQL語言,MySQL用于SQL語言,因此它具有高度兼容性。數據庫的操作是必不可少的,包括對數據庫表的增加、刪除、修改、查詢等功能。現如今,數據庫可以分為關系型數據庫和非關系型數據庫,Mysql屬于關系性數據庫,Mysql數據庫是一款小型的關系型數據庫,它以其自身特點:體積小、速度快、成本低等,Mysql數據庫是目前最受歡迎的開源數據庫。
在WEB應用技術中, Mysql數據庫支持不同的操作系統平臺,雖然在不同平臺下的安裝和配置都不相同,但是差別也不是很大,Mysql在Windows平臺下兩種安裝方式,二進制版和免安裝版。安裝完Mysql數據庫之后,需要啟動服務進程,相應的客戶端就可以連接數據庫,客戶端可通過命令行或者圖形界面工具登錄數據庫。
第三章 系統分析
3.1需求分析
任何一個項目在開發研究前,都需要對研發系統本身的需求做一個認真的分析,市場的調研是不可忽視的,從實際場景中確定使用人員的功能需求,從而明確目標,對整個系統的開發有一個更加準確的定位,在這個章節,需要對系統的性能分析,業務流程分析,和數據等進行分析,食堂預約訂餐系統小程序的整體界面簡單,功能完善。
需求的可行性是分析和討論發達的系統能達到什么樣的要求。開發的系統平臺是否符合之前的要求。只有在預先評估系統的開發中,才能在系統開發和實施之前完成需求。如果您不具備開發一個功能不合格的系統的可行性,那就是開發失敗。開發系統是否有用,可以完成之前討論過的需求,以下分析了食堂預約訂餐系統小程序的實際需求。
系統設計需要從用戶和管理員的實際需求開始,以了解他們需要實施哪些功能以及他們可以包括哪些管理工作。
考慮到食堂預約訂餐系統小程序設計的特點,應滿足幾個要求:
(1)它可以通過網絡開展食堂預約訂餐系統小程序信息管理工作,促進對食堂預約訂餐系統小程序信息管理。
(2)用戶可以查看農產品信息和公告信息;
(3)它提供了一個免費的渠道,以確保數據的實時有效溝通。
3.2可行性分析
3.2.1技術可行性:技術背景?????
食堂預約訂餐系統小程序采用了SPRINGBOOT技術,開發了功能完備、使用簡單的前端應用程序,并建立、維護了一個數據完整、安全、穩定性強的后臺數據庫系統。
系統使用SPRINGBOOT技術和Mysql數據庫作為設計工具,可簡單易行地學習操作。用戶角色之間的相結合開發一套食堂預約訂餐系統小程序是值得嘗試的,數據完整性和許多品質為數據的功能分配和管理提供了依據。它也是數據庫安全平臺的重要組成部分,是提高和增強數據安全性的重要手段。此外,為了提供更平滑,更智能和更有效的基本控制方法,定義了同時構建對安全計算環境的支持所需的步驟,并幫助維護安全性。因為在這兩種開發工具中,功能強大且免費且界面良好,所以食堂預約訂餐系統小程序在技術方面是可行的。
3.2.2經濟可行性
桌面食堂預約訂餐系統小程序管理的開發是由開發者自己開發,不需要購買其他軟件或者端口之類的,而且在食堂預約訂餐系統小程序管理的開發之前所做的市場調研及其他的食堂預約訂餐系統小程序,都是沒有任何費用的,通過開發者自己的努力,所有的工作的都是自己親力親為,在碰到自己比較難以解決的問題,大多是通過同學和指導老師的幫助進行相關信息的解決,所以對于食堂預約訂餐系統小程序的開發在經濟上是完全可行的,沒有任何費用支出的。
使用SPRINGBOOT技術是比較成熟的技術,所以食堂預約訂餐系統小程序的開發在經濟上是沒有問題的。
3.2.3操作可行性:?
可操作性主要是對食堂預約訂餐系統小程序系統設計完成后,用戶的使用體驗度,對于管理員可以通過系統隨時管理相關的數據信息,并且對于管理員、用戶二個用戶角色,都可以簡單明了的進入到自己的系統界面,通過界面導航菜單可以簡單明了地操作功能模塊,方便用戶信息需求和農產品信息管理數據信息,對于系統的操作,不需要專業人員都可以直接進行功能模塊的操作管理,所以在系統的可操作性是完全可以的。本系統的操作使用的也是界面窗口進行登錄,所以操作人員只要會簡單的電腦操作就完全可以的。
3.3性能分析
對于性能分析,與傳統的管理方式相比,傳統的管理方式是使用人工通過用紙和筆進行數據信息的統計和管理,并且這種方式對于存儲和查找某一數據信息都比較麻煩,隨著計算機網絡的到來,這種傳統的方法很難適應當下社會的發展,不僅降低人們的辦事效率,而且還需要很多的人力和物力,對于使用的時間和所要花費的費用都是比較高的,為了降低成本費用,提高用戶的工作效率,進行開發一套基于計算機和網絡技術的食堂預約訂餐系統小程序。
食堂預約訂餐系統小程序的開發設計時一個獨立的系統,以流行數據庫進行數據的存儲開發,主要是為了實現食堂預約訂餐系統小程序的用戶角色及相對應的功能模塊,讓食堂預約訂餐系統小程序的管理不會存在管理差異、低效率,而是跟傳統的管理信息恰好相反,食堂預約訂餐系統小程序的實現可以節約資源,并且對于業務的處理速度也提高,速度快、效率高,功能性強大。
3.4系統操作流程
3.4.1用戶登錄流程
對于系統的安全性的第一關,就是用戶想要進入系統,必須通過登錄窗口,輸入自己的登錄信息才可以進行登錄,用戶輸入的信息準確無誤后才可以進入到操作系統界面,進行功能模塊的相對應操作,如果用戶輸入的信息不正確,則窗口出現提示框,用戶登錄失敗,返回到第一步進行重新輸入,如圖3-1所示。
圖3-1登錄操作流程圖
?
3.4.2信息添加流程
對于食堂預約訂餐系統小程序,需要隨時添加所需要的數據信息,對于用戶添加信息,需要根據添加界面,根據選框的內容進行填寫所要添加的數據信息,信息輸入完成后判斷數據信息是否符合要求,符合要求則添加完成,用戶所添加的信息不符合要求,則需要返回到第一步,重新輸入數據信息,再進行判斷操作,如圖3-2所示。
?
圖3-2 信息添加流程圖
3.4.3信息刪除流程
不管是哪個用戶角色進入到不通的系統操作界面,都可以進行不同的信息內容的操作功能,對用系統數據信息的刪除,用戶一旦將信息刪除,那么該刪除的數據信息將無法恢復,所以用戶在對數據刪除事,一定判斷刪除的內容是否是確定要刪除的,確定無誤后選擇確定刪除操作,如圖3-3所示。
?
圖3-3?信息刪除流程圖
第四章 系統設計與實現
4.1系統架構設計
食堂預約訂餐系統小程序的系統項目的概述設計分析,主要內容食堂預約訂餐系統信息的具體分析,進行數據庫的是設計,數據采用mysql數據庫,并且對于系統的設計采用比較人性化的操作設計,對于系統出現的錯誤信息可以及時做出處理及反饋。
基于食堂預約訂餐系統小程序的設計基于現有的手機,可以實現管理員:首頁、站點管理(輪播圖、公告欄)用戶管理(管理員、普通用戶)內容管理(美食資訊、資訊分類)更多管理(食堂菜譜、菜品分類、訂單中心、取消訂單、用戶催單)等功能。方便用戶對首頁、食堂菜譜、訂單中心、取消訂單、美食資訊、我的等詳細的了解及統計分析。根據系統功能需求建立的模塊關系圖如下圖:
?
圖4-1管理員功能模塊圖
4.2開發流程設計
食堂預約訂餐系統小程序的開發對管理模塊和系統使用的數據庫進行分析,編寫代開發,規劃和操作是構建信息管理應用程序的必要三步曲,它決定了系統是否能夠真正實現預設功能以及是否可以在成功設計后實施。在開發過程中,每個階段必須嚴格按照線性順序進行開發,并且在相應階段生成的每個工作都可以通過技術進行驗證和檢查。確保一個階段完成后是正確的,不會造成下一階段拖拽現象,使系統完成設計功能后得到保證。
從食堂預約訂餐系統小程序的成功開發經驗來看,上述方法效果最為明顯,最大程度地降低了系統開發的復雜性。如圖4-2所示。
?
圖4-2開發系統流程圖
4.3數據庫設計
數據庫是信息系統的基礎和核心。數據庫設計的好壞直接影響到信息系統開發的成敗。創建數據庫表首先確定實體的屬性和實體之間的關系。根據關系創建一個數據表。
4.3.1實體ER圖
數據庫是整個軟件編程中最重要的一個步驟,對于數據庫問題主要是判定數據庫的數量和結構公式的創建。展示系統使用的是Mysql進行對數據庫進行管理,進行保證數據的安全性、穩定性等。
概念模型的設計是為了抽象真實世界的信息,并對信息世界進行建模。它是數據庫設計的強大工具。數據庫概念模型設計可以通過E-R圖描述現實世界的概念模型。系統的E-R圖顯示了系統中實體之間的鏈接。而且Mysql數據庫是自我保護能力比較強的數據庫,下圖主要是對數據庫實體的E-R圖:
(1) ?用戶信息E-R圖,如圖4-3所示:
?
圖4-3 用戶信息實體屬性圖
?(2)?食堂菜譜信息E-R圖如圖4-4所示:
?
圖4-4食堂菜譜信息實體圖
這些功能可以充分滿足食堂預約訂餐系統小程序的需求。此系統功能較為全面如下圖系統功能結構如圖4-5所示。
?????????????????????????????????
?
圖4-5系統功能結構圖
4.3.2數據表
我們可以根據數據結構的詳細分析要求,我們根據輸入和輸出數據量的要求進行分析,確定什么表表,結構之間的關系,我們可以驗證,調整和完善,查詢和瀏覽過程,可以實現數據庫,以使用戶對數據和功能有更多要求。
基于系統使用的數據庫管理系統的特點,對數據庫的概念模型進行了轉換和構建。但是,這個系統只需要充分考慮食堂預約訂餐系統小程序的功能,而且組織比較清晰。
user_reminder表:
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| user_reminder_id | int | 11 | 是 | 是 | 用戶催單ID |
| order_number | varchar | 64 | 否 | 否 | 訂單號 |
| dish_name | varchar | 64 | 否 | 否 | 菜品名稱 |
| purchase_user | int | 11 | 否 | 否 | 購買用戶 |
| reservation_information | text | 0 | 否 | 否 | 預約信息 |
| reminder_content | text | 0 | 否 | 否 | 催單內容 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
ordinary_users表:
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| ordinary_users_id | int | 11 | 是 | 是 | 普通用戶ID |
| full_name | varchar | 64 | 否 | 否 | 姓名 |
| gender | varchar | 64 | 否 | 否 | 性別 |
| examine_state | varchar | 16 | 是 | 否 | 審核狀態 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| user_id | int | 11 | 是 | 否 | 用戶ID |
| create_time | datetime | 0 | 是 | 否 | 創建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
order_center表:
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| order_center_id | int | 11 | 是 | 是 | 訂單中心ID |
| order_number | varchar | 64 | 否 | 否 | 訂單號 |
| dish_name | varchar | 64 | 否 | 否 | 菜品名稱 |
| dish_classification | varchar | 64 | 否 | 否 | 菜品分類 |
| price | varchar | 64 | 否 | 否 | 價格 |
| number_of_purchases | int | 11 | 否 | 否 | 購買數 |
| total | varchar | 64 | 否 | 否 | 合計 |
| purchase_user | int | 11 | 否 | 否 | 購買用戶 |
| reservation_information | text | 0 | 否 | 否 | 預約信息 |
| pay_state | varchar | 16 | 是 | 否 | 支付狀態 |
| pay_type | varchar | 16 | 否 | 否 | 支付類型: 微信、支付寶、網銀 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
dish_classification表:
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| dish_classification_id | int | 11 | 是 | 是 | 菜品分類ID |
| dish_classification | varchar | 64 | 否 | 否 | 菜品分類 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
canteen_menu表:
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| canteen_menu_id | int | 11 | 是 | 是 | 食堂菜譜ID |
| dish_name | varchar | 64 | 否 | 否 | 菜品名稱 |
| dish_classification | varchar | 64 | 否 | 否 | 菜品分類 |
| dish_pictures | varchar | 255 | 否 | 否 | 菜品圖片 |
| price | int | 11 | 否 | 否 | 價格 |
| stock | int | 11 | 否 | 否 | 庫存 |
| dish_details | text | 0 | 否 | 否 | 菜品詳情 |
| hits | int | 11 | 是 | 否 | 點擊數 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
cancellation_of_order表:
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| cancellation_of_order_id | int | 11 | 是 | 是 | 取消訂單ID |
| order_number | varchar | 64 | 否 | 否 | 訂單號 |
| dish_name | varchar | 64 | 否 | 否 | 菜品名稱 |
| number_of_purchases | varchar | 64 | 否 | 否 | 購買數 |
| total | varchar | 64 | 否 | 否 | 合計 |
| purchase_user | int | 11 | 否 | 否 | 購買用戶 |
| contact_number | varchar | 16 | 否 | 否 | 聯系電話 |
| order_status | varchar | 64 | 否 | 否 | 訂單狀態 |
| reason_for_cancellation | text | 0 | 否 | 否 | 取消原由 |
| merchant_reply | text | 0 | 否 | 否 | 商家回復 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
第五章 系統實現
5.1用戶前臺功能前臺(前端)?
食堂預約訂餐系統小程序登錄界面,通過填寫賬號、密碼、登錄用戶類型等信息進行登錄,如圖5-1所示。
?
圖5-1登錄界面圖
注冊,通過填寫用戶名、密碼、姓名、手機、郵箱、身份等信息,輸入完成后選擇提交即可注冊成功,如圖5-2所示。
?
圖5-2注冊界面圖
注冊關鍵代碼如下所示。
/**
?????* 注冊
?????* @param user
?????* @return
?????*/
????@PostMapping("register")
????public Map<String, Object> signUp(@RequestBody User user) {
????????// 查詢用戶
????????Map<String, String> query = new HashMap<>();
????????query.put("username",user.getUsername());
????????List list = service.select(query, new HashMap<>()).getResultList();
????????if (list.size()>0){
????????????return error(30000, "用戶已存在");
????????}
????????user.setUserId(null);
????????user.setPassword(service.encryption(user.getPassword()));
????????service.save(user);
????????return success(1);
}
/**
?????* 用戶ID:[0,8388607]用戶獲取其他與用戶相關的數據
?????*/
????@Id
????@GeneratedValue(strategy = GenerationType.IDENTITY)
????@Column(name = "user_id")
????private Integer userId;
????/**
?????* 賬戶狀態:[0,10](1可用|2異常|3已凍結|4已注銷)
?????*/
????@Basic
????@Column(name = "state")
????private Integer state;
????/**
?????* 所在用戶組:[0,32767]決定用戶身份和權限
?????*/
????@Basic
????@Column(name = "user_group")
????private String userGroup;
????/**
?????* 上次登錄時間:
?????*/
????@Basic
????@Column(name = "login_time")
????private Timestamp loginTime;
????/**
?????* 手機號碼:[0,11]用戶的手機號碼,用于找回密碼時或登錄時
?????*/
????@Basic
????@Column(name = "phone")
????private String phone;
????/**
?????* 手機認證:[0,1](0未認證|1審核中|2已認證)
?????*/
????@Basic
????@Column(name = "phone_state")
????private Integer phoneState;
????/**
?????* 用戶名:[0,16]用戶登錄時所用的賬戶名稱
?????*/
????@Basic
????@Column(name = "username")
????private String username;
????/**
?????* 昵稱:[0,16]
?????*/
????@Basic
????@Column(name = "nickname")
????private String nickname;
????/**
?????* 密碼:[0,32]用戶登錄所需的密碼,由6-16位數字或英文組成
?????*/
????@Basic
????@Column(name = "password")
????private String password;
????/**
?????* 郵箱:[0,64]用戶的郵箱,用于找回密碼時或登錄時
?????*/
????@Basic
????@Column(name = "email")
????private String email;
????/**
?????* 郵箱認證:[0,1](0未認證|1審核中|2已認證)
?????*/
????@Basic
????@Column(name = "email_state")
????private Integer emailState;
????/**
?????* 頭像地址:[0,255]
?????*/
????@Basic
????@Column(name = "avatar")
????private String avatar;
????/**
?????* 創建時間:
?????*/
????@Basic
????@Column(name = "create_time")
????@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
????private Timestamp createTime;
????@Basic
????@Transient
????private String code;
}
用戶登錄進入首頁,可以進行首頁、美食資訊、食堂菜譜、我的等功能模塊的查看與操作,如圖5-3所示。
?
圖5-3系統首頁界面圖
美食資訊信息,在美食資訊信息頁面可以查看公告標題、類型、圖片、發布日期、點贊等信息,如圖5-4所示。
?
圖5-4資訊信息界面圖
我的信息,在我的信息頁面可以填寫普通用戶、訂單中心、取消訂單、用戶催單等信息,如圖5-5所示。
?
圖5-5我的信息界面圖
5.2管理員功能模塊(后端)??
管理員登錄,管理員通過輸入用戶名、密碼,選擇角色并點擊登錄進行系統登錄操作,如圖5-6所示。
?
圖5-6管理員登錄界圖面
管理員登錄關鍵代碼如下所示。
/**
?????* 登錄
?????* @param data
?????* @param httpServletRequest
?????* @return
?????*/
????@PostMapping("login")
????public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
????????log.info("[執行登錄接口]");
????????String username = data.get("username");
????????String email = data.get("email");
????????String phone = data.get("phone");
????????String password = data.get("password");
????????List resultList = null;
????????Map<String, String> map = new HashMap<>();
????????if(username != null && "".equals(username) == false){
????????????map.put("username", username);
????????????resultList = service.select(map, new HashMap<>()).getResultList();
????????}
????????else if(email != null && "".equals(email) == false){
????????????map.put("email", email);
????????????resultList = service.select(map, new HashMap<>()).getResultList();
????????}
????????else if(phone != null && "".equals(phone) == false){
????????????map.put("phone", phone);
????????????resultList = service.select(map, new HashMap<>()).getResultList();
????????}else{
????????????return error(30000, "賬號或密碼不能為空");
????????}
????????if (resultList == null || password == null) {
????????????return error(30000, "賬號或密碼不能為空");
????????}
????????//判斷是否有這個用戶
????????if (resultList.size()<=0){
????????????return error(30000,"用戶不存在");
????????}
????????User byUsername = (User) resultList.get(0);
????????Map<String, String> groupMap = new HashMap<>();
????????groupMap.put("name",byUsername.getUserGroup());
????????List groupList = userGroupService.select(groupMap, new HashMap<>()).getResultList();
????????if (groupList.size()<1){
????????????return error(30000,"用戶組不存在");
????????}
????????UserGroup userGroup = (UserGroup) groupList.get(0);
????????//查詢用戶審核狀態
????????if (!StringUtils.isEmpty(userGroup.getSourceTable())){
????????????String sql = "select examine_state from "+ userGroup.getSourceTable() +" WHERE user_id = " + byUsername.getUserId();
????????????String res = String.valueOf(service.runCountSql(sql).getSingleResult());
????????????if (res==null){
????????????????return error(30000,"用戶不存在");
????????????}
????????????if (!res.equals("已通過")){
????????????????return error(30000,"該用戶審核未通過");
????????????}
????????}
????????//查詢用戶狀態
????????if (byUsername.getState()!=1){
????????????return error(30000,"用戶非可用狀態,不能登錄");
????????}
????????String md5password = service.encryption(password);
????????if (byUsername.getPassword().equals(md5password)) {
????????????// 存儲Token到數據庫
????????????AccessToken accessToken = new AccessToken();
????????????accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));
????????????accessToken.setUser_id(byUsername.getUserId());
????????????tokenService.save(accessToken);
????????????// 返回用戶信息
????????????JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
????????????user.put("token", accessToken.getToken());
????????????JSONObject ret = new JSONObject();
????????????ret.put("obj",user);
????????????return success(ret);
????????} else {
????????????return error(30000, "賬號或密碼不正確");
????????}
}
在管理員功能頁面可以查看管理員:首頁、站點管理(輪播圖、公告欄)用戶管理(管理員、普通用戶)內容管理(美食資訊、資訊分類)更多管理(食堂菜譜、菜品分類、訂單中心、取消訂單、用戶催單)等內容進行相對應操作,如圖5-7所示。
?
圖5-7管理員功能界面圖
管理員功能關鍵代碼如下所示。
@RequestMapping(value = {"/sum_group", "/sum"})
????public Map<String, Object> sum(HttpServletRequest request) {
????????Query count = service.sum(service.readQuery(request), service.readConfig(request));
????????return success(count.getResultList());
}
用戶管理,在用戶管理頁面可以查看索引、昵稱、用戶名、密碼、姓名、性別、頭像等信息,并可根據需要進行修改或刪除操作,如圖5-8所示。
?
圖5-8用戶管理界面圖
用戶管理就代碼如下所示。
@RequestMapping(value = {"/count_group", "/count"})
????public Map<String, Object> count(HttpServletRequest request) {
????????Query count = service.count(service.readQuery(request), service.readConfig(request));
????????return success(count.getResultList());
}
食堂菜譜管理,在食堂菜譜管理頁面可以查看索引、菜品名稱、菜品分類、菜品圖片、價格、庫存、菜品詳情等信息,并可根據需要進行查看評論、修改或刪除操作,如圖5-9所示。
?
圖5-9食堂菜譜管理界面圖
食堂菜譜管理關鍵代碼如下所示。
@PostMapping("/add")
????@Transactional
????public Map<String, Object> add(HttpServletRequest request) throws IOException {
????????service.insert(service.readBody(request.getReader()));
????????return success(1);
????}
????@Transactional
????public Map<String, Object> addMap(Map<String,Object> map){
????????service.insert(map);
????????return success(1);
}
????public Map<String,Object> readBody(BufferedReader reader){
????????BufferedReader br = null;
????????StringBuilder sb = new StringBuilder("");
????????try{
????????????br = reader;
????????????String str;
????????????while ((str = br.readLine()) != null){
????????????????sb.append(str);
????????????}
????????????br.close();
????????????String json = sb.toString();
????????????return JSONObject.parseObject(json, Map.class);
????????}catch (IOException e){
????????????e.printStackTrace();
????????}finally{
????????????if (null != br){
????????????????try{
????????????????????br.close();
????????????????}catch (IOException e){
????????????????????e.printStackTrace();
????????????????}
????????????}
????????}
????????return null;
}
????public void insert(Map<String,Object> body){
????????StringBuffer sql = new StringBuffer("INSERT INTO ");
????????sql.append("`").append(table).append("`").append(" (");
????????for (Map.Entry<String,Object> entry:body.entrySet()){
????????????sql.append("`"+humpToLine(entry.getKey())+"`").append(",");
????????}
????????sql.deleteCharAt(sql.length()-1);
????????sql.append(") VALUES (");
????????for (Map.Entry<String,Object> entry:body.entrySet()){
????????????Object value = entry.getValue();
????????????if (value instanceof String){
????????????????sql.append("'").append(entry.getValue()).append("'").append(",");
????????????}else {
????????????????sql.append(entry.getValue()).append(",");
????????????}
????????}
????????sql.deleteCharAt(sql.length() - 1);
????????sql.append(")");
????????log.info("[{}] - 插入操作:{}",table,sql);
????????Query query = runCountSql(sql.toString());
????????query.executeUpdate();
????}
用戶催單管理,在用戶催單信息管理頁面查看用戶訂單號、菜品名稱、購買用戶、預約信息、催單內容等信息,如圖5-10所示。
?
圖5-10用戶催單管理界面圖
用戶催單管理關鍵代碼如下所示。
@PostMapping("/set")
@Transactional
????public Map<String, Object> set(HttpServletRequest request) throws IOException {
????????service.update(service.readQuery(request), service.readConfig(request), service.readBody(request.getReader()));
????????return success(1);
}
????public Map<String,String> readConfig(HttpServletRequest request){
????????Map<String,String> map = new HashMap<>();
????????map.put(FindConfig.PAGE,request.getParameter(FindConfig.PAGE));
????????map.put(FindConfig.SIZE,request.getParameter(FindConfig.SIZE));
????????map.put(FindConfig.LIKE,request.getParameter(FindConfig.LIKE));
????????map.put(FindConfig.ORDER_BY,request.getParameter(FindConfig.ORDER_BY));
????????map.put(FindConfig.FIELD,request.getParameter(FindConfig.FIELD));
????????map.put(FindConfig.GROUP_BY,request.getParameter(FindConfig.GROUP_BY));
????????map.put(FindConfig.MAX_,request.getParameter(FindConfig.MAX_));
????????map.put(FindConfig.MIN_,request.getParameter(FindConfig.MIN_));
????????return map;
}
????public Map<String,String> readQuery(HttpServletRequest request){
????????String queryString = request.getQueryString();
????????if (queryString != null && !"".equals(queryString)) {
????????????String[] querys = queryString.split("&");
????????????Map<String, String> map = new HashMap<>();
????????????for (String query : querys) {
????????????????String[] q = query.split("=");
????????????????map.put(q[0], q[1]);
????????????}
????????????map.remove(FindConfig.PAGE);
????????????map.remove(FindConfig.SIZE);
????????????map.remove(FindConfig.LIKE);
????????????map.remove(FindConfig.ORDER_BY);
????????????map.remove(FindConfig.FIELD);
????????????map.remove(FindConfig.GROUP_BY);
????????????map.remove(FindConfig.MAX_);
????????????map.remove(FindConfig.MIN_);
????????????return map;
????????}else {
????????????return new HashMap<>();
????????}
}
????@Transactional
????public void update(Map<String,String> query,Map<String,String> config,Map<String,Object> body){
????????StringBuffer sql = new StringBuffer("UPDATE ").append("`").append(table).append("`").append(" SET ");
????????for (Map.Entry<String,Object> entry:body.entrySet()){
????????????Object value = entry.getValue();
????????????if (value instanceof String){
????????????????sql.append("`"+humpToLine(entry.getKey())+"`").append("=").append("'").append(value).append("'").append(",");
????????????}else {
????????????????sql.append("`"+humpToLine(entry.getKey())+"`").append("=").append(value).append(",");
????????????}
????????}
????????sql.deleteCharAt(sql.length()-1);
????????sql.append(toWhereSql(query,"0".equals(config.get(FindConfig.LIKE))));
????????log.info("[{}] - 更新操作:{}",table,sql);
????????Query query1 = runCountSql(sql.toString());
????????query1.executeUpdate();
}
????public String toWhereSql(Map<String,String> query, Boolean like) {
????????if (query.size() > 0) {
????????????try {
????????????????StringBuilder sql = new StringBuilder(" WHERE ");
????????????????for (Map.Entry<String, String> entry : query.entrySet()) {
????????????????????if (entry.getKey().contains(FindConfig.MIN_)) {
????????????????????????String min = humpToLine(entry.getKey()).replace("_min", "");
????????????????????????sql.append("`"+min+"`").append(" >= '").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("' and ");
????????????????????????continue;
????????????????????}
????????????????????if (entry.getKey().contains(FindConfig.MAX_)) {
????????????????????????String max = humpToLine(entry.getKey()).replace("_max", "");
????????????????????????sql.append("`"+max+"`").append(" <= '").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("' and ");
????????????????????????continue;
????????????????????}
????????????????????if (like == true) {
????????????????????????sql.append("`"+humpToLine(entry.getKey())+"`").append(" LIKE '%").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("%'").append(" and ");
????????????????????} else {
????????????????????????sql.append("`"+humpToLine(entry.getKey())+"`").append(" = '").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("'").append(" and ");
????????????????????}
????????????????}
????????????????sql.delete(sql.length() - 4, sql.length());
????????????????sql.append(" ");
????????????????return sql.toString();
????????????} catch (UnsupportedEncodingException e) {
????????????????log.info("拼接sql 失敗:{}", e.getMessage());
????????????}
????????}
????????return "";
????}
第六章 ?系統的測試
6.1 測試目的
程序設計不能保證沒有錯誤,這是一個開發過程,在錯誤或錯誤的過程中難以避免,這是不可避免的,但我們不能使這些錯誤始終存在于系統中,錯誤可能會造成無法估量的后果 如系統崩潰,安全信息,系統無法正常啟動,導致安裝用戶手機屏幕等,為了避免這些問題,我們需要測試程序,并發現這些問題,并糾正它們 ,并使系統更長時間穩定成熟,本章的作用是發現這些問題,并對其進行修改,雖然耗時費力,但長期非常重要和必要系統的開發。
軟件測試與開發過程是一樣的,都必須按照軟件工程的正規原理進行,遵守管理學理論。不過,目前國內的軟件測試已經積累了大量經驗和方法,步驟相對成熟,軟件測試的效率也越來越高。
食堂預約訂餐系統小程序的實現,對于系統中功能模塊的實現及操作都必須通過測試進行來評判系統是否可以準確的實現。在食堂預約訂餐系統小程序正式上傳使用之前必須做的一步就是系統測試,對于測試發現的錯誤及時修改處理,保證系統準確無誤的供給用戶使用。
6.2?測試方案設計
6.2.1 測試策略
1、功能測試
從用戶的角度來看,測試時不了解新開發軟件的內部結構,因此可以將系統與黑匣子進行比較,盲目輸入后可以查看系統給出的反饋。這種測試屬于黑盒測試,在測試中如果輸入錯誤信息系統會報錯。
2、性能測試
測試軟件程序的整體狀況(稱為性能測試)通常使用自動化測試工具來檢測系統的整體功能,在負載測試和壓力測試之間進行分配,在某些情況下,將這兩種情況結合起來。雖然壓力測試可以檢測到系統可以提供的最高級別的服務,但負載測試可以測試系統如何響應增加的負載。
6.2.2 測試分析
測試評估系統質量的方法不局限于系統編碼和過程,應該與軟件設計工作和歷史需求分析密切相關。
軟件測試應遵循以下原則:
(1)軟件測試應盡快進行,整個測試部分應在軟件開發和設計的整個過程中進行。如發現錯誤,立即處理,將大大減少軟件開發的時間,并提高軟件的質量。
(2)在軟件的各種測試中,測試過程中使用的計劃、報告等應妥善處理和存儲。其主要目的是為了便于以后系統的維護。
(3)軟件測試整個過程中的聚類現象應優先考慮。
(4)對于軟件測試,我們應該盡量不去和自己設計的系統進行參考,而是要測試對方的程序,以確保軟件測試結果的客觀性和公平性。
(5)整個測試計劃嚴格按照軟件測試的具體實施細則進行。
(6)對整個測試結果進行綜合檢查,盡量避免重復錯誤。
本食堂預約訂餐系統小程序滿足用戶的要求和需求,本食堂預約訂餐系統小程序的使用能夠有效的提高用戶的使用率。
6.3?測試結果
測試后得到的性能和用例,系統具有足夠的正確性、可靠性、穩定性,并且可以對輸入數據進行準確的點擊操作處理和響應測試用戶的體驗也得到了很好的反饋和響應時間。合理的范圍,可以兼容所有主流瀏覽器,設計所需的效果。
結 ?論
在這個設計中,我花了大量的時間去理解系統開發中使用的知識,經過這段時間的努力工作最終完成了系統設計。通過這一階段的學習,我發現了自己的不足,充分掌握了必要的應用技能,進一步的學習使我充實了自己的知識基礎,完成了這個艱巨的任務。當遇到問題時,我很及時的尋求老師的幫助,通過專業的網站來解決,他們的幫助讓我一步一步的成功克服了困難的問題。系統設計過程不容易,你需要不斷充實自己,有勇氣克服困難。系統開發的一些功能還不完善,需要繼續改善后,通過用戶體驗來修改設計完美的系統,讓用戶得到更好的體驗,我覺得很高興,因為這是我第一次通過自己的努力實現這個系統,但絕不是我的最后一個,在未來我將努力實現更多的優秀的系統。
在一些編程語言的系統實現中,對詞匯表不太熟悉,導致了開發的困難,但是我通過了合適的字典軟件來解決這個大問題。由此,我學會了自己的英語缺陷。在那之后,我不斷地提高自己的英語知識,這樣我就不會有任何未來的工作和生活。畢業設計過程我感覺很深刻,從一開始就不熟悉開發技術,一步一步的使用,接觸到文獻和信息,不難理解,系統是一次又一次的實現,系統本身對于在線學習是有用的。我從這個設計中獲益良多,論文的編寫需要有自己的意愿去實現一點,學習生活中所有的問題的勇氣,學習的過程就是學習的過程。畢業設計,我學會了將理論知識應用于實踐。讓我知道該怎么做,我們必須認真對待。勇于克服困難,相信未來,我會做得更好。
參考文獻
[1]高天搏,劉偉.基于微信小程序的食堂訂餐系統[J].科學技術創新,2021(29):74-76.
[2]劉帥,姜旭濤,劉進芬.基于微信小程序的智能食堂系統的設計與實現[J].網絡安全技術與應用,2021(09):60-62.
[3]于莉,張哲坤,白天.基于微信小程序的高校就餐食堂管理與開發[J].電子世界,2021(14):204-205.
[4]丁文,李婷婷.高校食堂早餐配送服務:現實背景、市場態勢與實現策略——基于云南部分高校的校園調查[J].統計與管理,2021,36(08):103-108.
[5]彭玉嬌. 智慧治理視角下網絡訂餐食品安全監管平臺建設研究[D].南昌大學,2021.
[6]張生霞,王瓊,李雯雯,武文科,韓圓圓,李艷梅.“一點就到餐”——基于微信小程序的校園食堂訂餐服務系統[J].電腦知識與技術,2021,17(18):258-260.
[7]劉婧莉,常賢發.智慧食堂用餐管理系統的設計與實現[J].電腦編程技巧與維護,2021(04):90-92.
[8]杜港.微信小程序在醫院患者訂餐中的應用[J].中國醫院建筑與裝備,2021,22(04):83-84.
[9]陳江輝,於立杰,李強.智慧校園食堂訂餐系統信息化平臺的設計[J].網絡安全技術與應用,2021(03):43-44.
[10]李含陽,宮千千,張宇新.“互聯網+”模式下大學生群體網絡訂餐現狀及問題研究[J].文化創新比較研究,2020,4(24):118-120.
[11]周亞楠,張佳儀,任雨杰,史文娟.基于大數據理論指導下的高校食堂點餐微信小程序功能設計[J].電腦知識與技術,2019,15(34):55-59+68.
[12] “訂餐APP”攻占校園,需要防堵嗎?[N]. 西安日報,2015-11-24(007).
[13] The 'Villa dei Gordiani' Project The so-called 'Villa dei Gordiani' at the 3?? mile of the Via Prenestina[J]. Bullettino della Commissione Archeologica Comunale di Roma,2018,109:
[14]莊媛媛,周蕓,李鶴. 病人電子訂餐系統的應用[C]//中國營養學會第八屆臨床營養學術會議暨第三屆營養與腫瘤會議論文摘要匯編.,2018:150.
[15]Ugolini Daniela,Pardies Céline. L'éVOLUTION TOPOGRAPHIQUE DE L'HABITAT D'AGàTHE (AGDE, F) (VI? S. AV. J.-C. - I?? S. APR. J.-C.)[J]. Archeologia Classica,2018,69:
致 ?謝
食堂預約訂餐系統小程序的完成,如何實現的更好,其中付出的努力是很大的,這段時光將會終身難忘。
食堂預約訂餐系統小程序的設計可以順利完成,首先,我要感謝我的指導老師,他在我遇到設計問題時及時幫助了我,并在我對設計感到困惑時給了我充分的指導。在他的幫助下,我可以完成高質量的畢業設計。在食堂預約訂餐系統小程序的設計和開發中,指導老師提出了許多實用的意見和建議,并為我提供了大量相關的研究資料,使我對設計有了更深入的了解。只有在老師的指導下,才能在畢業設計中取得成功。在此,我要向指導老師表示深深的謝意。
在此,我還要感謝我的同學們,他們為我的設計提供了許多參考意見,并與我討論了設計中的問題,從而使我的設計一步一步走向成熟。 ?
點贊+收藏+關注 ?→ ?私信領取本源代碼、數據庫
總結
以上是生活随笔為你收集整理的springboot+食堂预约订餐小程序 毕业设计-附源码221554的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于89 jb2上的自动设置按键唤醒系统
- 下一篇: 陈老师排课12A(普通新课表)排课方法