外賣訂餐系統設計_第1頁
外賣訂餐系統設計_第2頁
外賣訂餐系統設計_第3頁
已閱讀5頁,還剩30頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

..v畢業論文Web的外賣系統的設計與實現摘要隨著外賣訂外賣在高校越來越普及,傳統的訂外賣給顧客跟外賣店帶來不方便,如何使訂外賣更快速,更方便已成為眾多高校學生關注的問題了。本外賣訂外賣管理系統是針對高校外賣店進行具體的需求分析,采用OOA(面向對象分析)和采用UML工具輔助開發分析,基于S2SH(Struts2+Spring+Hibernate)架構進行設計和開發。論文主要描述外賣訂外賣管理系統的開發流程,分別從需求分析和系統設計、詳細設計與系統實現這幾個階段進行描述。關鍵詞:WEB;訂外賣管理系統;S2SH;OOAABSTRACTWithmoreandmorepopularinuniversitiesordertake-out,duetothetraditionaltelephonereservationforcustomerstobringinconveniencetake-awaymeal,howtomakemorequickly,moreconvenienthasbeetheconcernofthestudents.Thetake-awaymealmanagementsystemincollegesanduniversitiesistheconcretetake-awaydemandanalysis,usingobject-orientedanalysis(OOA)andusingUMLtoolstoassistinthedevelopment,usingStruts2-Spring-Hibernateframeworktodesignanddevelopment.Thesismainlydescribestake-awaymealmanagementsystemprocess,separatelyfromthedemandanalysisandsystemdesign,detaileddesignandrealizationofthissystemaredescribedseveralstages.Keywords:WEB;mealmanagementsystem;S2SH;OOA目錄第1章緒論11.1背景11.2**工業大學外賣訂外賣行業實際情況的分析11.3外賣訂外賣管理系統的可行性分析及其作用11.4系統簡介2第2章外賣系統設計與實現的關鍵技術32.1引言32.2struts2技術介紹32.3hibernate技術介紹52.4spring技術介紹52.5數據源技術介紹72.6小結8第3章系統需求分析93.1引言93.2UML 93.3需求分析93.4系統功能93.5小結11第4章系統設計124.1引言124.2系統總體結構124.3系統架構方式124.4建立數據庫表144.4.1系統信息數據庫表設計154.4.2映射文件的編寫164.5詳細設計194.5.1類設計194.5.2外賣訂外賣系統流程分析214.5.3時序圖分析224.5.4系統主要界面設計27第5章系統實現305.1引言305.1開發工具和環境305.2環境搭配305.3編碼實現315.3.1DAO層的編寫325.3.2Service層的編寫325.3.3Web層的編寫335.3.4ajax的應用355.4小結37結論38參考文獻40致41..v第1章緒論1.1背景隨著社會的不斷進步和創新,人們的生活方式也發生了很大的改變,其中外賣和餐飲行業以每年平均22%的速度不斷增長,很快成為了中國國民經濟中的發展行業最快的之一。隨著人們生活水平的不斷提高,在城市中工作人群的步伐也越來越快,有時候根本沒有時間自己做飯,這樣就促進了外賣行業的發展,在我國大學內餐飲行業中的外賣行業就是發展最為迅速的一個行業,在**工業大學每年都有幾家新的負責外賣的餐廳的的產生。外賣訂外賣也已經成為**工業大學學生生活中不可或缺的一部分活動了,并且訂外賣的方式也隨著大學學生們的要求不斷提高,不斷的創新化和成熟化。1.2**工業大學外賣訂外賣行業實際情況的分析學生們通過打給外賣餐廳服務員來定外賣是**工業大學當前使用人數最多的訂外賣方式,其中比較大的外賣店有攸縣大碗菜、祝家莊、水晶鍋等都是采用訂外賣方式,但通過訂外賣方式存在不少的缺陷和不足,比如:效率和時間的問題、打的費成本問題等等。對當前**工業大學外賣訂外賣行業的實際情況分析如下:外賣訂外賣店鋪很多并且菜單豐富,店鋪之間一直都在競爭。外賣店鋪很多都是服務員接聽客戶的并手動記錄下外賣的信息,特別是在放學期間,外賣店鋪訂外賣很多時,很容易發生店鋪訂外賣打不通的情況。外賣店鋪在接聽客戶訂外賣時,由于客戶不熟悉外賣店鋪的菜單,在于服務員溝通時會浪費很多的時間,容易造成外賣訂外賣占線的情況。外賣店鋪不能及時的獲取學生的喜好,容易造成有的菜浪費,有的菜不夠的情況。經過分析**工業大學的周圍的外賣行業的實際情況,很容易發現我國國內大學校園周圍的外賣店基本上數都是依靠服務員記錄的管理方式,很少外賣店實行外賣訂外賣管理的信息化,因此訂外賣造成了不少的問題。1.3外賣訂外賣管理系統的可行性分析及其作用根據以上分析得出傳統的依靠打訂外賣不僅會造成學生的不方便,另外也對外賣店鋪的生意產生了不良影響。經過分析得出實行訂外賣有以下幾個缺點:在每天中午和晚上餐廳高峰期間,外賣店鋪如果只有一臺是不夠的,很容易造成占線、餐館服務員忙不過來、比較倉促、導致雙方態度惡劣,引起不必要的麻煩。學生打一般不知道餐廳有什么菜,所以導致點餐很麻煩,也要浪費很多的時間,如果餐館去學生發傳單,也會造成額外的開銷。學生通過訂外賣,總是會產生一定的費用,這個費用也是額外的開銷。通過以上綜合的分析,實行打訂外賣不僅不會促進外賣行業的發展,反而會成為外賣行業發展的絆腳石,所以實行訂外賣管理的信息化是勢在必行的,如果外賣管理系統對學生訂外賣流程實行信息化管理,不僅給訂外賣顧客帶來了很大的方便,也會給外賣店鋪帶來了經濟和效率收益。訂外賣管理系統信息化給顧客和外賣店帶來了雙贏。對于顧客,不用再擔心高峰期打訂外賣失敗了,顧客可以通過瀏覽器在在外賣店鋪網上瀏覽相關菜單,還可以添加自己喜歡的菜單,在一定程度上解決了曾經的那種打訂外賣造成菜單出錯的現象。也為外賣店鋪帶來了很大的收益和長遠的利益,也能減少外賣店的人力和財力和物力,通過外賣管理系統信息化也能使外賣店能夠及時掌握學生客戶市場的信息,及時推出新菜系和實行更有效的經營管理策略。1.4系統簡介基于WEB的外賣系統主要針對的是大學校園的訂外賣流程和對訂單處理實行信息化而搭建出來的B/S外賣購物平臺,學生客戶可以通過瀏覽器上網訪問外賣,也可以實現網上瀏覽菜單和訂自己喜歡的菜單到購物車中,外賣店鋪服務員通過后臺管理登陸該系統實現對訂單的處理操作,通過外賣信息化處理給學生客戶訂外賣帶來方便,同時也給外賣店管理人員帶來了長遠利益。第2章外賣系統設計與實現的關鍵技術2.1引言基于WEB的外賣管理系統的設計與實現選取S2SH架構作為基本設計理念來設計和開發,因為S2SH是SSH的升級版,以前的SSH架構中的用到的MVC框架是struts,而S2SH中的MVC框架用到的是struts2,在Struts框架方面有很大的改進,struts2與struts在實際配置方面有很大的不同,其中struts2的配置更靈活、開發更加方便,研究人員利用其開發的插件與hibernate和spring都能達到無縫集成,另外本管理系統采用了三層架構,首先用struts2處理的前端,用hibernate封裝對數據庫的訪問操作,使用spring對struts2、hibernate和業務邏輯層中進行數據對象的管理和連接,struts2、hibernate和spring三個框架有個字不同的職責,這樣分層設計有利于系統項目開發的分工,也能使項目開發達到更高的靈活性和可維護性。S2SH三層架構如圖1.1所示。圖1.1S2SH三層架構圖2.2struts2技術介紹Struts2是目前功能比較完善的Web系統常用的開發框架,Struts2框架是Struts1.X的升級和完善的版本,Struts2框架集合了Struts1.X框架和WebWork框架功能中的優點。相對比較Struts1.X,Struts2在功能上已經有了非常大的改進,首先是取消了ActionForm,其次是降低了框架組件之間的耦合度,Struts2中的Action部件只是普通的Java類(POJO),使用它可以給模塊測試的工作帶來了極大的簡便。Struts2也提供了強大的整合能力,支持多種返回結果類型,改進了Struts1.X的標簽庫,引入OGNL表達式和值棧的概念,給開發者帶來了更好的體驗[1]。另外從全局功能的角度來看,Struts2在一定程度上是一個pull(拉)功能類型的MVC理論的框架,另外它與傳統類型的MVC框架理論的區別方面就在于在Struts2中,在其中Action部件擔任的是模型的部分,而不是控制器的部分,雖然它的部分功能仍然有一些重合。“pull”的動作由視圖發起,它直接從Action里拉取所需的數據,而不是另外還需要一個單獨的模型對象存在[2]。圖1.2MVC/Struts2架構圖圖1.2描述了MVC/Struts2架構中的模型層、視圖層和控制器層的流程。如圖所示:控制器層通過Struts2分布Servlet過濾器來實現功能。模型層在功能上通過Action部件實現,視圖層則通過結果類型和結果組合實現。值棧和OGNL提供了公共的線程和通道,在一定程度上可以使得不同組件之間可以相互的集成。Struts2框架的可取之處就是使用了Action部件代理,Action代理可以根據系統預先配置好的配置文件,加載一系列的Servlet攔截器。由攔截器將HttpServletRequest參數解析出來,傳入到Action部件當中。同樣,Action部件處理的數據也是通過Servlet攔截器傳入HttpServletResponse,然后由HttpServletRequest將數據結果傳給用戶。其實,上面的處理過程是典型的AOP理論的方式,Struts2處理過程模型如圖1.3所示。圖1.3Struts2處理過程模型圖2.3hibernate技術介紹Hibernate是一個優秀的輕量級的ORM框架,開發人員可以通過使用Hibernate框架。在一定程度上允許開發人員使用面向對象的方式對系統的數據庫進行檢索訪問。這樣就可以避免使用JDBC方式連接和訪問數據庫,不會造成面向對象編程與面向過程編程在數據庫方面的沖突。在這種方式下,很多系統的設計應用的面向對象分析、面向對象設計和面向對象編程有很大的相同性,這樣讓系統的分析和設計更加簡潔。Hibernate框架作為JavaEE持久化的標準框架,讓然使用傳統的POJO做為系統的持久化類。同時具有低侵入式的系統設計這樣不會造成代碼方面的污染。系統的持久化類無需繼承任何Hibernate基類,或者實現任何Hibernate接口,提供了極好的代碼復用[4]。Hibernate框架與數據庫、應用程序關聯關系如圖1.4所示。圖1.4Hibernate關聯關系圖雖然Hibernate這個框架還處于發展的階段,產生的時間不長,但是已經成為當今社會編程方面最流行的持久層解決方案,和另一個持久層框架iBATIS比較來說,Hibernate框架更具有面向對象的特征;另外和傳統的EntityE的持久層解決方案相比較,Hibernate框架則使用低侵入式的設計理念,也就是完全采用普通的Java對象(POJO)類型,而不必繼承Hibernate的某個父類或實現Hibernate框架中的某個功能接口。Hibernate框架是面向對象的程序設計語言和連接關系數據庫之間的紐帶,另外Hibernate框架也允許程序員采用面向對象的方式來操作關系數據庫。2.4spring技術介紹Spring框架是一個優秀輕量級的Web開發框架。Spring框架是一個分層的架構,由7個模塊組成,如下圖1.5所示。Spring框架中比較重要的模塊是核心容器模塊,其他模塊構建在這個核心的模塊容器之上,核心模塊是其它模塊的基礎,核心容器定義創建、配置和管理Bean的方式和操作,核心模塊容器提供了Spring框架的基本功能。其中主要組件是BeanFactory組件,BeanFactory組件是工廠模式的實現類。BeanFactory組件通過使用反轉控制(IOC)模式,將應用程序的配置文件和依賴性規X與實際的應用程序代碼分隔開來。圖1.5spring七大模塊圖組成Spring框架的每個模塊(或組件)在一定的程度上都可以單獨存在的,或者也可以與其他一個或多個模塊一起實現某種功能而存在。其中每個模塊的功能如下:核心模塊容器:核心容器提供Spring框架的基本功能。核心容器的主要組件是BeanFactory組件,BeanFactory組件是工廠模式的實現類。BeanFactory組件使用控制反轉(IOC)模式將應用程序的配置文件和依賴性規X與實際的應用程序代碼分隔開來。Spring上下文模塊:Spring上下文模塊是一個配置文件,它的作用是向Spring框架提供上下文的信息。Spring上下文信息包括企業服務,例如JNDI組件、E組件、電子、國際化組件、校驗組件和調度功能等。SpringAOP模塊:通過配置管理特性,SpringAOP模塊可以直接將面向對象的編程功能全部集成到了Spring框架之中。所以使用SpringAOP模塊可以很簡單地使Spring框架管理的任何對象支持都SpringAOP模塊。SpringAOP模塊為基于Spring的應用程序中的對象提供了事務管理服務等功能。程序開發人員通過使用SpringAOP模塊,可以不用依賴E組件,就毫無問題地將聲明性的事務管理等功能全都集合到應用程序代碼中。SpringDAO模塊:JDBCDAO模塊中的抽象層概念提供了有很大實用性的異常理論結構,程序員可用該結構去統計異常處理和不同數據庫供應商之間拋出的錯誤信息。異常層次結構簡化了錯誤處理,并且極大地降低了需要編寫的異常代碼數量(例如打開和關閉連接)。SpringDAO的面向JDBC的異常遵從通用的DAO異常層次結構。SpringORM:Spring框架插入了若干個ORM框架,從而提供了ORM的對象關系工具,其中包括JDO、Hibernate和iBatisSQLMap。所有這些都遵從Spring的通用事務和DAO異常層次結構。SpringWeb模塊:Web上下文模塊建立在應用程序上下文模塊之上,為基于Web的應用程序提供了上下文。所以,Spring框架支持與JakartaStruts的集成。Web模塊還簡化了處理多部分請求以及將請求參數綁定到域對象的工作。SpringMVC框架:MVC框架是一個全功能的構建Web應用程序的MVC實現。通過策略接口,MVC框架變成為高度可配置的,MVC容納了大量視圖技術,其中包括JSP、Velocity、Tiles、iText和POI[5]。2.5數據源技術介紹JNDI(JavaNamingandDirectoryInterface,Java命名和目錄接口)是一組在Java應用中訪問命名和目錄服務的AP,通過名稱將資源與服務進行關聯[1]。在系統中使用JNDI連接池連接Oracle數據庫。連接池是在內存中預設好一定數量的連接對象,以備用戶在進行數據庫操作時直接使用,與傳統數據庫連接比較,使用數據池技術數據庫操作性能得到提升,通過連接池管理數據庫的連接與釋放、提高了系統資源的使用效率[1]。Java程序訪問數據庫時,只需要從連接池中取出空閑狀態的數據庫連接;當程序訪問數據庫結束,再將數據庫連接放回連接池[1]。在系統服務器Tomcat中配置內容如下所示:Tomcat配置文件:<Resourcename="jdbc"auth="Container"type="javax.sql.DataSource"maxActive="8"maxIdle="4"maxWait="10000"username="shao"password="199451Shao"driverClassName="oracle.jdbc.driver.OracleDriver"url="jdbc:oracle:thin:localhost:1521:orclsh"/>其中標簽的功能如下:Name:表示指定的jndi名稱。Auth:表示認證方式,一般為Container。Type:表示數據源床型,使用標準的javax.sql.DataSource。maxActive:表示連接池當中最大的數據庫連接。maxIdle:表示最大的空閑連接數。maxWait:當池的數據庫連接已經被占用的時候,最大等待時間。Username:表示數據庫用戶名。Password:表示數據庫用戶的密碼。driverClassName:表示JDBCDRIVER。url:表示數據庫URL地址。2.6小結基于WEB的外賣訂外賣系統的設計與實現主要分為管理員操作和客戶操作,系統從需求分析到模型設計,再到代碼編寫都是按照MVC三層的設計理念,將系統簡化為視圖層(View)、控制層(Controller)和模型層(Model),并且在View層與Model層之間使用接口Service連接,Model層和Controller層之間使用DAO接口,降低了層與層之間的耦合度,為以后修改代碼更加方便。同時在檢索數據庫時建立一個數據次,可以減少打開和關閉數據庫的次數,有效地提高系統的運行效率,對經常登錄的用戶可以帶來很快的反應速度。第3章系統需求分析3.1引言本系統采用OOA(面向對象分析)和UML(UnifiedModelingLanguage)工具為指導理論,第三章主要對系統的需求分析以及系統設計和功能等進行分析描述。3.2UMLUML(UnifiedModelingLanguage)是一種用來創建程序模型的圖形語言(即帶有語意的一種圖形記號)[7],常用的UML圖有對象類圖、時序圖、用例圖、活動圖和狀態圖。3.3需求分析軟件需求分析是軟件開發過程中生存期中非常重要的一步,是起到決定性作用的一步。需求分析是軟件定義過程中一個必不可少的階段,它的作用是讓開發者明白系統需要做些什么,能完成什么功能。本外賣訂外賣管理系統包括兩個子系統,前臺訂外賣和后臺管理,前臺訂外賣是供用戶瀏覽菜系和提交訂單進行訂外賣;后臺管理是供管理員進行外賣訂單管理、菜系管理、菜單管理。外賣訂餐管理系統主要的作用是滿足學生和個人之間的吃飯需求,要解決目前餐廳信息阻塞,許多的資源機會而被流失,所以網上外賣訂餐管理系統的出現很好的解決的這一問題。該系統分為前臺和后臺,前臺是個人會員用的,個人通過注冊成為會員,然后登錄系統,可以查看餐廳大量的外賣信息,并可以選擇自己喜歡的菜添加到購物車。系統后臺管理是管理員對本系統進行管理的平臺,管理員可以更新菜系信息和菜單信息,并可以對訂餐的狀態進行管理。3.4系統功能本系統采用面向對象分析方法,下面是對本系統的兩個子系統進行分析說明。通過需求分析跟系統設計和功能的分析可以得出該系統的總體結構如圖3.1所示。圖3.1系統總體框架圖前臺管理系統供用戶瀏覽菜系,進行菜單添加到購物車,用戶可以對購物車進行增加、清除,用戶提交訂單后可以在訂單列表查看外賣訂單配送狀態,用例如圖3.2所示。圖3.2用戶用例圖后臺管理系統有菜系管理、訂單管理、菜單管理三大模塊。菜系管理:可以對菜系進行查看、添加、修改和刪除。用例如圖3.3所示。圖3.3菜系管理用例圖訂單管理:可以對外賣訂單的狀態進行查看,改變。用例如圖3.4所示。圖3.4訂單管理用例圖菜單管理:可以對菜單進行查看、添加、修改和刪除。用例如圖3.5所示。圖3.5菜單管理用例圖3.5小結系統項目在開始之前首要任務就是系統需求的分析,根據搜集的需求分析得出系統的模型設計,在需求分析時要根據實際情況分析,往往需求的分析是否全面影響著后續系統的編寫。第4章系統設計4.1引言本系統的設計采用OOA(面向對象分析)和利用UML工具輔助開發設計。4.2系統架構方式本系統使用MVC三層架構模式作為系統的設計理念,即視圖層,業務邏輯層,數據訪問層,三層之間都相互獨立,視圖層與業務邏輯層通過接口進行通信,業務邏輯層與數據訪問層也是通過接口進行通信,數據訪問層是直接跟數據庫(DB)通信,可以直接操作數據庫,這樣系統設計具有很好的解耦性,每一層內容的邏輯的改變和更新不會影響到另一層的邏輯代碼,這樣對項目以后的可維護性及代碼更新具有很大方便作用,三層架構流程如圖4.1所示。圖4.1三層架構圖4.3數據庫設計數據庫設計包括了數據庫需求分析、概念設計以及邏輯設計。數據庫的需求分析是根據開發系統的功能對數據庫進行需求分析來得出數據庫需要的表以及表屬性。概念設計是根據需求分析來設計數據庫的實體結構圖以及ER圖。邏輯設計是根據概念設計中的ER模型設計數據庫的表結構。4.3.1數據庫需求分析本系統使用的是Oracle數據庫,從系統的需求分可以看出,系統需要建立用戶表、菜系表、購物車表、訂單表。從功能模塊看,還需要菜單表、訂單詳細表、購物車項表。系統的數據庫包含如下:個人用戶數據:用來存儲個人信息,如賬號,密碼聯系方式等。菜系數據:用來存儲菜系信息,如菜系名稱,菜系內容等。菜單數據:用來存放菜單信息,如菜單名稱,介紹等。訂單數據:用來存放訂單信息,如**,地址等。購物車數據:用來存放外賣信息,如菜單數量,菜單價格等。訂單詳細數據:用來訂單詳細信息,如訂單所屬用戶,訂單項等。購物車項數據:用來存放購物車項信息,如菜單信息,數量等。4.3.2E-R模型在數據庫的概念設計中以實體聯系法建立E-R模型,用E-R模型表示概念結構,得到外賣訂餐管理系統的概念模型。E-R模型的基本元素是:實體、聯系和屬性。實體是數據對象,是應用中能夠區分的客觀的存在的事物;聯系表示一個或多個實體之間的關聯關系;能夠描述實體對象某一特征的屬性稱為實體屬性,在實體中,能夠唯一標識實體的作用的屬性,它被稱之為“實體標識符”。根據以上數據庫的需求分析可以得到系統中需要的實體類型,進一步可以分析實體所需要的屬性以及各實體之間的聯系。系統中的實體結構圖以及系統E-R模型圖如圖4.2至5.2所示。圖4.2會員實體圖會員實體屬性有:會員ID、用戶名、密碼、等,這些都是不可少的;其中ID更是作為標識存在。圖4.3訂單實體圖訂單實體屬性有:訂單ID、訂單時間、訂單價格等,這些都是不可少的;其中ID更是作為標識存在。圖4.4菜系實體圖菜系實體屬性有:菜系ID、菜系名稱、菜系描述等,這些都是不可少的;其中ID更是作為標識存在。圖4.5菜系實體圖菜單實體屬性有:菜單ID、菜單名稱、菜單描述等,這些都是不可少的;其中ID更是作為標識存在。4.4建立數據庫表很多程序員都是使用傳統的數據庫設計,就是首先設計E-R圖,然后在通過E-R圖生成數據表。使用MVC三層設計理念,就是先建立系統實體類和編寫實體類的映射文件,接著通過實體類和映射文件之間的關系自動生成相關的數據庫表。這種開發模式主要體現出來的是OOD思想,數據的持久化在某一方面都是非常機械呆板的,基本沒有什么需要變動的,hibernate框架就把這些獨特的行為抽象出來自動完成,并在轉換的效率上進行優化等,讓我們很容易的就能實現數據庫的移植。本系統是采用先建立實體類和編寫映射文件,然后根據之間的關系自動生成數據表的開發模式。系統設計的實體類如下表4.1所示。表4.1實體類設計表4.4.1系統信息數據庫表設計如下表4.2所示:數據庫表Category是存儲外賣系統中菜系的信息。其中id字段是作為菜系的序號,name字段是作為菜系的名稱,description字段是作為菜系的介紹。表4.2實體類Category如下表4.3所示:數據庫表Order是存儲外賣系統中外賣訂單的信息。其中id字段作為訂單的序號,Ordertime字段是作為訂單的提交時間,price字段是作為訂單的價格,state字段的作用是標記訂單的狀態,user_id字段作為訂單所屬用戶的序號。表4.3實體類Order如下表4.4所示:數據庫表User是存儲該系統中注冊客戶的個人信息。其中id字段作為用戶的序號,username字段是作為用戶的登陸名,password字段作為用戶登錄的密碼,cellphone字段的作用是存儲用戶的聯系,address字段作為用戶外賣配送的地址,sex字段是存儲用戶的性別信息,types字段存儲用戶的會員類型。表4.4實體類User如下表4.5所示:數據庫表OrderItem是存儲外賣系統中外賣訂單項的信息。其中id字段作為訂單項的序號,quantity字段是作為訂單項的數量,price字段是作為訂單項的價格,menu_id字段作為訂單項中包含的菜單的序號,order_id字段作為訂單項所屬訂單的序號。表4.5實體類OrderItem如下表4.6所示:數據庫表Menu是存儲外賣系統中外賣菜單的信息。其中id字段作為菜單的序號,name字段是存儲菜單的名稱信息,description字段是存儲菜單的介紹信息,image字段的作用是存儲菜單的實際圖片,price字段的作用是作為菜單的售價,Category_id字段的作用是存儲該菜單所屬菜系類別的序號信息。表4.6實體類Menu4.4.2映射文件的編寫在該系統中Web.xml文件的功能使初始化配置信息。context.xml文件的功能使配合JNDI連接數據庫。Web.xml文件如下:<"xmlversion="1.0"encoding="UTF-8"><web-appxmlns:xsi=./2001/XMLSchema-instancexmlns="java.sun./xml/ns/javaee"xmlns:web="java.sun./xml/ns/javaee/web-app_2_5.xsd"xsi:schemaLocation="java.sun./xml/ns/javaeejava.sun./xml/ns/javaee/web-app_3_0.xsd"id="WebApp_ID"version="3.0"><display-name>FD</display-name><filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>.filter.CharacterEncodingFilter</filter-class> </filter> <filter-mapping><filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter> <filter-name>HtmlFilter</filter-name> <filter-class>.filter.HtmlFilter</filter-class> </filter> <filter-mapping> <filter-name>HtmlFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping><listener> <listener-class>.filter.IndexListener</listener-class> </listener><servlet><servlet-name>UserServlet</servlet-name><servlet-class>.web.client.UserServlet</servlet-class></servlet><servlet><servlet-name>MenuServlet</servlet-name><servlet-class>.web.manager.MenuServlet</servlet-class></servlet><servlet><servlet-name>CategoryServlet</servlet-name><servlet-class>.web.manager.CategoryServlet</servlet-class></servlet><servlet><servlet-name>BaseServlet</servlet-name><servlet-class>.web.manager.BaseServlet</servlet-class></servlet><servlet><servlet-name>ManagerOrderServlet</servlet-name><servlet-class>.web.manager.ManagerOrderServlet</servlet-class></servlet><servlet><servlet-name>IndexServlet</servlet-name><servlet-class>.web.client.IndexServlet</servlet-class></servlet><servlet><servlet-name>BuyServlet</servlet-name><servlet-class>.web.client.BuyServlet</servlet-class></servlet><servlet><servlet-name>OrderServlet</servlet-name><servlet-class>.web.client.OrderServlet</servlet-class></servlet><servlet-mapping><servlet-name>UserServlet</servlet-name><url-pattern>/client/UserServlet</url-pattern></servlet-mapping><servlet-mapping><servlet-name>MenuServlet</servlet-name><url-pattern>/manager/MenuServlet</url-pattern></servlet-mapping><servlet-mapping><servlet-name>CategoryServlet</servlet-name><url-pattern>/manager/CategoryServlet</url-pattern></servlet-mapping><servlet-mapping><servlet-name>BaseServlet</servlet-name><url-pattern>/BaseServlet</url-pattern></servlet-mapping><servlet-mapping><servlet-name>ManagerOrderServlet</servlet-name><url-pattern>/manager/ManagerOrderServlet</url-pattern></servlet-mapping><servlet-mapping><servlet-name>IndexServlet</servlet-name><url-pattern>/client/IndexServlet</url-pattern></servlet-mapping><servlet-mapping><servlet-name>BuyServlet</servlet-name><url-pattern>/client/BuyServlet</url-pattern></servlet-mapping><servlet-mapping><servlet-name>OrderServlet</servlet-name><url-pattern>/client/OrderServlet</url-pattern></servlet-mapping>context.xml文件如下:<"xmlversion="1.0"encoding="UTF-8"><Context><Resourcename="jdbc"auth="SH"type="javax.sql.DataSource"username="shao"password="199451Shao"driverClassName="oracle.jdbc.driver.OracleDriver"url="jdbc:oracle:thin::1521:ORCLSH"maxActive="8"maxIdle="4"/></Context>4.5詳細設計這一章節主要內容是描述了怎么樣對系統的對象類進行分析和設計、系統的流程分析以及如何使用時序圖對系統中的對象交互信息等進行詳細的描述。4.5.1類設計類關系通過面向對象分析得出在本系統中用戶跟訂單、訂單項,訂單跟訂單項,購物車跟訂單項,菜系跟菜單都是一對多關系,用戶跟購物車,訂單跟購物車,菜單跟訂單項都是一對一關系。其關聯關系如圖4.3所示。圖4.3類關聯圖DAO與業務邏輯類設計1.UserDao與BusinessService設計如下圖4.4所示:BusinessService依賴于UserDao。圖4.4UserDao與邏輯類關聯圖CategoryDao與BusinessService設計如圖4.5所示:BusinessService依賴于CategoryDao。圖4.5CategoryDao與邏輯類關聯圖MenuDao與BusinessService類設計如下圖4.6示:BusinessService依賴于MenuDao。圖4.6MenuDao與邏輯類關聯圖OrderDao與BusinessService類設計如下圖4.7示:BusinessService依賴于OrderDao。圖4.7OrderDao與邏輯類關聯圖4.5.2外賣訂外賣系統流程分析1.用戶通過瀏覽器訂購外賣流程:圖4.8用戶訂購外賣流程圖2.后臺管理員訂單處理流程:圖4.9管理員訂單處理流程圖4.5.3時序圖分析1.登錄用例實現A、用戶登錄時序圖圖4.10用戶登錄時序圖B、描述1)輸入信息輸入用戶和密碼,提交登錄信息;2)表單驗證當接收到提交表單UserServlet會調用userLogin(HttpServletRequestrequest,HttpServletResponseresponse)方法進行用戶信息查詢,并將用戶登錄信息封裝傳遞到BusinessService中。3)獲取BusinessService接口UserServlet類獲取BusinessService接口,以便調用BusinessService中的方法userLogin(username,password)。4)查詢用戶信息在BusinessService中userLogin(username,password)會調用UserDaoImpl方法,根據用戶名和密碼在已經注冊的數據庫中查詢是否存在該用戶。5)返回結果如果用戶名和密碼輸入正確進入系統主頁面,否則提示用戶名或密碼輸入錯誤。2.注冊用戶用例實現A、用戶注冊時序圖圖4.11用戶注冊時序圖B、描述1)輸入用戶信息輸入注冊用戶名、注冊密碼、性別、聯系、居住地址、注冊會員類型等信息。2)表單驗證用戶輸入注冊信息之后,點擊注冊系統會將用戶表單信息提交到UserServlet中,UserServlet接收到用戶注冊表單之后會調用RegisterFormBean中的validate方法進行表單驗證,主要驗證用戶名是否合法、用戶設置的密碼是否符合要求等。如果用戶輸入不合法就會轉向message.jsp提示用戶輸入不合法,如果輸入用戶名已存在也會轉向message.jsp并進行提示。3)獲取BusinessService接口用戶提交的注冊表單經過RegisterFormBean中的validate方法進行表單驗證通過之后,UserServlet通過BusinessService接口調用BusinessServiceImpl中的方法RegisterUser(Useruser),在user中封裝著用戶注冊的信息4)保存到數據庫在RegisterUser(Useruser)方法中通過創建UserDao對象調用UserDaoImpl中的方法add(user),將用戶在注冊界面輸入的信息保存到數據庫中,并返回注冊成功的結果。5)返回結果當用戶信息注冊成功后,UserDaoImpl將會把用戶注冊成功的結果封裝的返回到BusinessService,當BusinessServic接收到注冊返回的結果之后將結果返回到UserServlet中,UserServlet將結果返回到WEB層,在頁面中顯示給用戶注冊結果。3.添加菜單到購物車并提交訂單用例實現A、用戶購買時序圖圖4.12用戶購買時序圖B、描述1)選擇菜單通過瀏覽器瀏覽餐廳的菜單,可以瀏覽菜單的價格、配料和圖片,選擇自己要加入購物車的菜單,點擊購買。2)表單驗證當用戶瀏覽之后點擊購買之后將菜單信息提交到BuyServlet中,BuyServlet調用OrderServlet中的findOrder(request,response)方法檢查用戶是否已經登錄,如果沒有登錄提示登錄信息,如果用戶已經登錄,將登錄結果返回到BuyServlet中。BuyServlet通過創建BusinessServiceImpl的對象調用buymenu(Cartcart,Menumenu,Stringaccess)方法。3)進入業務方法在buymenu(Cartcart,Menumenu,Stringaccess)方法中通過Cart類的對象調用add(Menumenu,Stringaccess)。4)轉向CartCart是一個通用的購物車,將接收到的菜單信息添加到購物車中并將數據進行更新。5)返回到購物車界面轉到listcart.jsp頁面將數據顯示給用戶。6)提交訂單用戶可以點擊購物車查看購物車里的菜單,也可以在購物車里對菜單的數量進行修改和刪除,等到用戶確認無誤后點擊結算就會提交訂單。7)獲取BusinessService接口調用BusinessService的createOrder(Cartcart,Useruser)方法進行訂單的添加。8)添加到數據庫調用OrderDao的add(Orderorder)方法將訂單數據添加到數據庫。9)返回結果返回到系統界面,用戶可以在系統主界面點擊”查看訂單”,可以查看到訂單的詳情。4.管理員添加菜系用例實現A、管理員添加菜系時序圖圖4.13管理員添加菜系時序圖B、描述1)登錄系統后臺管理員登錄系統的后臺。2)進行業務方法點擊”菜系管理”下面的”添加菜系”,manager會調用CategoryServlet中的addCategoryUI(request,response),將要添加的菜系信息傳輸到CategoryServlet中。3)獲取BusinessService接口使用CategoryServlet類獲取BusinessService接口,調用接口中的addCategory(Categorycategory)方法。4)添加到數據庫調用CategoryDao的addCategory(Categorycategory)方法將管理員新輸入的菜系信息添加到數據庫中。5)返回結果添加完成后,返回系統界面。5.管理員處理訂單用例實現A、管理員處理訂單時序圖圖4.14管理員處理訂單時序圖B、描述1)訪問訂單列表管理員登錄后臺系統后訪問訂單列表,可以查看訂單的詳細和對訂單狀態的修改和刪除。2)進行業務方法管理員登錄之后,管理員點擊”查看訂單”,系統會ManagerServlet中調用方法orderState(HttpServletRequestrequest,HttpServletResponseresponse)查詢符合條件的訂單列表,并顯示出來。3)獲取BusinessService接口ManagerOrderServlet類獲取BusinessService接口,當管理員對訂單操作時就會調用BusinessService關于操作訂單狀態的方法。4)更新到數據庫管理員對訂單的操作會調用OrderDao的update(Orderorder)方法更改訂單數據的狀態并更新到數據庫。5)返回結果更改訂單狀態后,返回到系統界面。4.5.4系統主要界面設計客戶登陸界面:客戶通過瀏覽器訪問系統前臺頁面,在登錄處輸入用戶名、密碼,點擊”登錄”按鈕,如下圖所示。圖4.15客戶登錄界面圖用戶注冊界面:用戶輸入用戶名、密碼、性別、手機、住址和客戶類型進行注冊,如下圖所示。圖4.16用戶注冊界面圖添加菜系界面:管理人員輸入菜系名、菜系介紹添加菜系,如下圖所示。圖4.17添加菜系界面圖前臺訂外賣主界面:用戶通過點擊菜系類型,可以瀏覽不同類型菜系下的菜單,點擊”購買”將菜單添加到購物車中,如下圖所示。圖4.18訂外賣界面圖購物車界面:用戶可以對外賣數量進行更改和刪除,也可以選擇部分結算,如下圖所示。圖4.19購物車界面圖詳細界面:供用戶查看訂單詳細信息,如下圖所示。圖4.20詳細界面圖第5章系統實現5.1引言系統設計理論使用S2SH架構理論的最大的特點就是就是可以使我們的系統代碼具有良好的可維護性與可擴展性,在系統項目中許多邏輯模塊可以集成項目在配置文件中,而不用硬編碼在代碼中。第五章主要介紹了怎樣構建自己的S2SH環境以及如何編碼實現預定的系統功能,以用戶注冊為例。5.1開發工具和環境本系統采用MyEclipse2013為開發工具,以JAVAEE6.0為開發平臺,采用oracle11g數據庫,系統服務器采用tomcat7.0。5.2環境搭配(1)要將必須的jar包放在工程路徑下WEB-INF/lib文件夾下;(2)編寫web.xml,包括對struts2過濾器、spring監聽器與字符過濾器配置,如下所示。<"xmlversion="1.0"encoding="UTF-8"><web-appversion="2.5"xmlns="java.sun./xml/ns/javaee" xmlns:xsi="./2001/XMLSchema-instance" xsi:schemaLocation="java.sun./xml/ns/javaee java.sun./xml/ns/javaee/web-app_2_5.xsd"> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.FilterDispatcher </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter> <filter-name>encodingFilter</filter-name> <filter-class>.order.util.EncodingFilter</filter-class> </filter> <filter-mapping><filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping></web-app>添加struts.xml到類路徑下,放到項目的src文件夾下,如下所示:<"xmlversion="1.0"encoding="UTF-8""><!DOCTYPEstrutsPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN""/dtds/struts-2.0.dtd"><struts><packagename="vote"extends="struts-default"namespace="/Order"></package></struts>啟動tomcat服務器如果后臺沒有打印異常信息,就證明環境搭配正確,服務器啟動完畢。5.3編碼實現本系統代碼的編寫順序是先編寫持久層(DAO),再編寫業務邏輯層(Service),最后編寫表現層(Web)。持久層包括實體類的編寫、DAO的編寫與配置文件的編寫;業務邏輯層包括業務接口與業務實現類的編寫,配置文件的編寫;web層包括html的編寫,jsp的編寫,配置文件的編寫。本系統的代碼分配情況如下圖所示。圖5.1系統代碼圖5.3.1DAO層的編寫在環境搭建好的情況下,各實體類的Dao接口方法也設計好的情況下,下面是對UserDaoImpl進行編寫,其關鍵代碼與說明如下。publicclassUserDaoImplimplementsUserDao{/**add添加用戶*/ publicvoidadd(Useruser){ //TODOAuto-generatedmethodstub try{ QueryRunnerrunner=newQueryRunner(JNDI.getSource()); Stringsql="insertintouseres"+"(id,username,password,cellphone,address,sex,types)"+ "values(",",",",",",")"; Object[]params={user.getId(),user.getUsername(),user.getPassword(),user.getCellphone(),user.getAddress(), user.getGender(),user.getUsertype()}; runner.update(sql,params); }catch(Exceptione){ thrownewRuntimeException(e); } }/**find根據ID查找用戶*/ Override publicUserfind(Stringid){ //TODOAuto-generatedmethodstub try{ QueryRunnerrunner=newQueryRunner(JNDI.getSource()); Stringsql="select*fromusereswnereid="; Object[]params={id}; System.out.println("statr"); return(User)runner.query(sql,params,newBeanHandler(User.class)); }catch(Exceptione){ thrownewRuntimeException(e); } }/**用戶登錄監測*/ Override publicUserfind(Stringusername,Stringpassword){ //TODOAuto-generatedmethodstub try{ QueryRunnerrunner=newQueryRunner(JNDI.getSource()); Stringsql="select*fromusereswhereusername="andpassword="; Object[]params={username,password}; return(User)runner.query(sql,params,newBeanHandler(User.class)); }catch(Exceptione){ thrownewRuntimeException(e); } }5.3.2Service層的編寫下面是對BusinessServiceImpl類進行編寫,其關鍵代碼說明如下。publicclassBusinessServiceImplimplementsBusinessService{/***注冊用戶*/ publicvoidregisterUser(Useruser){ udao=DaoFactory.getInstance().createDao(UserDao.class); if(this.findUser(user.getId())!=null){ thrownewRuntimeException("用戶已經存在!"); } udao.add(user);//add用戶 }/***根據ID查找用戶*/ publicUserfindUser(Stringid){ udao=DaoFactory.getInstance().createDao(UserDao.class); returnudao.find(id); } /** *用戶登錄 */ publicUseruserLogin(Stringusername,Stringpassword){ udao=DaoFactory.getInstance().createDao(UserDao.class); returnudao.find(username,password); }}5.3.3Web層的編寫注冊頁面register.jsp頁面的編寫,其關鍵代碼如下。<scripttype="text/javascript"> functiondosubmit(){ makePreference(); returntrue; } functionmakePreference(){ /*創建隱藏域對象并保存到表單中*/ varinput2=document.createElement("input"); input2.type="hidden"; ="method"; input2.value="add"; document.getElementById("userRegister").appendChild(input2); } </script></head><body><formid="userRegister"action="${pageContext.request.contextPath}/client/UserServlet"method="post"onsubmit="returndosubmit()"> 用戶名:<inputtype="text"name="username"/><br/> 密碼:<inputtype="password"name="password"/><br/> 性別:<inputtype="radio"name="gender"value="男"/>男 <inputtype="radio"name="gender"value="女"/>女<br/> 手機:<inputtype="text"name="cellphone"/><br/> 住址:<inputtype="text"name="address"/><br/>類型:<c:forEachvar="type"items="${usertype}"> <inputtype="radio"name="usertype"value="${type}">${type} </c:forEach><br/> <inputtype="submit"value="注冊"> <inputtype="reset"value="重置"><br/> </form></body> 其頁面效果如下圖所示。圖5.2系統注冊界面圖RegisterFormBean的編寫,其關鍵代碼與說明如下。publicclassRegisterFormBean{ //表單提交過來的信息都是String privateStringusername; //用戶** privateStringpassword; //用戶密碼 privateStringcellphone; //用戶手機 privateStringaddress; //用戶地址 privateStringgender; //用戶性別 privateStringusertype; //用戶類型privateMap<String,String>errors=newHashMap<String,String>();privatebooleanisOK=true;//..以下省略相應的set**x()/get**x()方法; Override publicbooleanvalidate(){ checkUserName(); checkPassWord(); returnisOK; } /** *校驗用戶名,private類型 *matches方法告訴這個字符串是否在給定的正則表達式匹配。返回true則是匹配. */ privatevoidcheckUserName(){ if(this.username==null||this.username.trim().equals(")) { this.isOK=false; errors.put("username","用戶名不能為空"); }else{ if(!this.username.matches("[a-zA-Z]{3,8}")){ this.isOK=false; errors.put("username","用戶名必須是三到八位的字母"); } } } /** *校驗密碼 * */ privatevoidcheckPassWord(){ if(this.password==null||this.password.trim().equals(")){ this.isOK=false; errors.put("password","密碼不能為空"); }else{ if(!this.password.matches("\\d{3,8}")){ this.isOK=false; errors.put("password","密碼必須是三到八位的數字"); } } }}(3)struts.xml的編寫<actionname="registerUser"class="registerUserAction"> <resultname="success"type="redirect"> /Order/listOnMenus.action </result> <resultname="input">/User/registerUser.jsp</result> <interceptor-refname="defaultStack"></interceptor-ref></action>(4)界面效果展示如果用戶輸入不合法進行提交就不能注冊成功,其效果如下圖所示。圖5.3校驗界面圖5.3.4ajax的應用本系統適當的采用ajax技術來加強用戶的體驗,用戶登錄時輸入用戶名點擊登錄時就會檢索數據庫是否存在改用戶,并校驗用戶密碼。當

溫馨提示

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

評論

0/150

提交評論