基于jsp的家庭食譜管理系統-畢業論文設計_第1頁
基于jsp的家庭食譜管理系統-畢業論文設計_第2頁
基于jsp的家庭食譜管理系統-畢業論文設計_第3頁
基于jsp的家庭食譜管理系統-畢業論文設計_第4頁
基于jsp的家庭食譜管理系統-畢業論文設計_第5頁
已閱讀5頁,還剩48頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

PAGE畢業設計(論文)資料設計(論文)題目:家庭食譜管理系統基于jsp的家庭食譜管理系統PAGEIV摘要中國已進入溫飽問題基本得到解決的小康社會,人們對食物的要求越來越高,不僅僅局限于能吃飽就好,越來越多人在追求更多的美食。中國有五千多年的歷史,其間自然也產生了數不勝數的美食。隨著計算機網絡的飛速發展,美食網已經成為人們日常生活中必不可少的部分,也是一種簡單有效的提供網絡用戶進行學習和評價的平臺,通過其可以理解美食,自己學習制作美食,它隨時可以發表評論,方便快捷。開發此網站,目的在于盡可能詳細地展示、介紹各種美食信息,同時提供美食愛好者一個交流的平臺,使得更多的美食傳統做法得到推廣,也可激發更多美食創意的產生針對以上問題,設計開發了家庭食譜管理系統,本系統前臺主要使用JSP作為開發語言,后臺使用SqlServer作為數據庫管理系統,開發環境是MyEclipse,服務器采用tomcat,開發出的一個基于Web技術的B/S結構的食譜分享系統。關鍵詞:食譜共享,WEB,JSP,B/S結構

ABSTRACTChinahasenteredthefoodbasicallyresolvedtheproblemofcomparativelywell-offsociety,peopleonthefoodrequirementsofincreasinglyhigh,isnotconfinedtotoeatgood,moreandmorepeopleinthepursuitofmorefood.Chinahasahistoryofoverfivethousandyears,whichalsoproducedbeyondcountoffood.Withtherapiddevelopmentofcomputernetwork,foodnetworkalreadybecameinthepeopledailylifeessentialpart,isalsoakindofsimpleandeffectivetoprovideusersofthenetworklearningandassessmentplatform,throughitsownfoodcanunderstand,learntomakefood,itcanalwayscomment,convenientandquick.Thedevelopmentofthiswebsite,isasdetailedaspossibletoshow,introducedavarietyoffoodinformation,whileprovidingfoodloversaplatformfortheexchange,sothatmorefoodtraditionhadbeenextended,alsocanstimulatemorefoodideagenerationTosolvetheaboveproblem,designedanddevelopedthefamilyrecipemanagementsystem,thissystemmainlyusestheJSPasadevelopmentlanguage,theuseofSqlServerasdatabasemanagementsystem,thedevelopmentenvironmentisMyEclipse,serverusingtomcat,developedaWebtechnologybasedonB/Sstructurerecipesharingsystem.Keywords:Recipesharing,WEB,JSP,B/Sstructure

目錄TOC\o"1-2"\h\z\t"標題3,3,標題4,4"摘要 IABSTRACT II第一章緒論 11.1課題背景 11.2目的和意義 11.3開發工具及技術 11.3.1開發工具 11.3.2JSP 21.3.3JavaScript 31.4軟硬件需求 3第二章需求分析 52.1需求調研 52.2可行性分析 52.2.1技術的可行性 52.2.2經濟的可行性 52.2.3操作可行性 52.2.4法律的可行性 52.3系統用戶用例圖 62.3.1管理員用例圖 62.4功能模塊需求分析 62.5設計的基本思想 72.6性能需求 82.6.1系統的安全性 82.6.2數據的完整性 82.7界面需求 8第三章系統分析與設計 103.1數據庫的分析與設計 103.1.1數據庫的概念結構設計 103.1.2數據庫的邏輯結構設計 133.1.3數據庫的連接原理 153.2中文亂碼問題處理 16第四章系統功能實現 184.1系統登陸頁面實現 184.2總體功能模塊 194.2.1注冊用戶信息管理 204.2.2類別信息管理 224.2.3菜譜信息管理 254.2.4周食譜管理 284.2.5公告信息管理 314.2.6留言信息管理 344.2.7修改密碼 364.2.8退出系統 364.3前臺網站模塊 364.3.1網站首面 364.3.2用戶注冊 374.3.3菜譜信息查看 394.3.4周食譜信息查看 404.3.5系統留言板功能 41第五章系統測試 435.1系統測試目的與意義 435.2測試過程 435.2.1主頁面的登錄模塊測試 435.3其他錯誤 44結論 45參考文獻 46致謝 47基于jsp的家庭食譜管理系統第一章緒論1.1課題背景俗話說“民以食為天”,在解決了溫飽問題的現代,人們對食物的要求越來越高,已不僅僅局限于能吃飽就好,更多是希望能吃好,追求更多的美食,迅猛發展并日益成熟的互聯網已經影響到我們生活的方方面面。隨著時代的發展,信息技術、Internet/Intranet技術、數據庫技術的不斷發展完善,網絡進程的加快使美食網系統已經成為人們生活中必不可少的部分。美食網系統是一種簡單有效的提供網絡用戶進行交流。查詢和學習評論的網絡平臺,通過其可以了解美食,自己學習制作美食,它隨時可以發表評論,方便快捷。訪客可以直接在美食網上上留言,如提出問題或意見。1.2目的和意義中國自古就有“民以食為天”的說法,特別是改革開放以后,隨著人們生活水平的不斷提高,和全球經濟一體化的發展,酒店業面臨著日趨激烈的競爭環境和不斷攀升的客戶期望,迫使業內人士不斷地進一步尋求擴大酒店銷售、改進服務質量、降低管理成本和提高客戶滿意度的新法寶來增強酒店的核心競爭力。其中最有效的手段之一就是大規模應用先進的信息化技術,為飲食業信息化發展注入新的生機和活力。在線美食網的發展既增強了酒店的知名度,又方便了消費者查詢信息。1.3開發工具及技術1.3.1開發工具此次設計主要采用MyEclipse加Tomcat后臺服務器進行,設計過程中頁面主要使用JSP技術完成,下面對MyEclipse、Tomcat和SqlServer數據庫進行簡要介紹。MyEclipseMyEclipse,是一個十分優秀的用于開發Java,J2EE的Eclipse插件集合,MyEclipse的功能非常強大,支持也十分廣泛,尤其是對各種開元產品的支持十分不錯。MyEclipse企業級工作平臺(MyEclipseEnterpriseWorkbench,簡稱MyEclipse)是對EclipseIDE的擴展,利用它我們可以在數據庫和JavaEE的開發、發布,以及應用程序服務器的整合方面極大的提高工作效率。它是功能豐富的JavaEE集成開發環境,包括了完備的編碼、調試、測試和發布功能,完整支持HTML,Struts,JSP,CSS,Javascript,SQL,Hibernate。TomcatTomcat是一個小型的輕量級應用服務器,在中小型系統和并發訪問用戶不是很多的場合下被普遍使用,是開發和調試JSP程序的首選。可以這樣認為,當在一臺機器上配置好Apahce服務器,可利用它響應對HTML頁面的訪問請求。實際上Tomcat部分是Apache服務器的擴展,但它是獨立運行的,所以當運行tomcat時,它實際上作為一個與Apache獨立的進程單獨運行的。SqlServerSqlServer使用C和C++編寫,并使用了多種編譯器進行測試,保證源代碼的可移植性;支持AIX、FreeBSD、HP-UX、Linux、MacOS、NovellNetware、OpenBSD、OS/2Wrap、Solaris、Windows等多種操作系統;為多種編程語言提供了API;支持多線程,充分利用CPU資源;提供TCP/IP、ODBC和JDBC等多種數據庫連接途徑;可以處理擁有上千萬條記錄的大型數據庫。對于一般的個人使用者和中小型企業來說,SqlServer提供的功能已經綽綽有余,而且由于SqlServer是開放源碼軟件,因此可以大大降低總體擁有成本。1.3.2JSPJSP技術使用Java編程語言編寫類XML的tags和scriptlets,來封裝產生動態網頁的處理邏輯。網頁還能通過tags和scriptlets訪問存在于服務端的資源的應用邏輯。JSP將網頁邏輯與網頁設計和顯示分離,支持可重用的基于組件的設計,使基于Web的應用程序的開發變得迅速和容易。Web服務器在遇到訪問JSP網頁的請求時,首先執行其中的程序段,然后將執行結果連同JSP文件中的HTML代碼一起返回給客戶。插入的Java程序段可以操作數據庫、重新定向網頁等,以實現建立動態網頁所需要的功能。JSP與Servlet一樣,是在服務器端執行的,通常返回給客戶端就是一個HTML文本,因此客戶端只要有瀏覽器能瀏覽。JSP頁面由HTML代碼和嵌入其中的Java代碼所組成。服務器在頁面被客戶端請求以后對這些Java代碼進行處理,然后將生成的HTML頁面返回給客戶端的瀏覽器。Servlet是JSP的技術基礎,而且大型的Web應用程序的開發需要JavaServlet和JSP配合才能完成。JSP具備了Java技術的簡單易用,完全的面向對象,具有平臺無關性且安全可靠,主要面向因特網的所有特點。JSP技術的優點:(1)一次編寫,到處運行。除了系統之外,代碼不用做任何更改。(2)系統的多平臺支持。基本上可以在所有平臺上的任意環境中開發,在任意環境中進行系統部署,在任意環境中擴展。相比ASP/.net的局限性是顯而易見的。(3)強大的可伸縮性。從只有一個小的Jar文件就可以運行Servlet/JSP,到由多臺服務器進行集群和負載均衡,到多臺Application進行事務處理,消息處理,一臺服務器到無數臺服務器,Java顯示了一個巨大的生命力。(4)多樣化和功能強大的開發工具支持。Java已經有了許多非常優秀的開發工具,而且許多可以免費得到,并且其中許多已經可以順利的運行于多種平臺之下(5)支持服務器端組件。web應用需要強大的服務器端組件來支持,開發人員需要利用其他工具設計實現復雜功能的組件供web頁面調用,以增強系統性能。JSP可以使用成熟的JAVABEANS組件來實現復雜商務功能。內部對象說明:request客戶端請求,此請求會包含來自GET/POST請求的參數;response網頁傳回客戶端的響應;pageContext網頁的屬性是在這里管理;session與請求有關的會話;applicationservlet正在執行的內容;out用來傳送響應的輸出流;config代碼片段配置對象;pageJSP網頁本身;exception針對錯誤網頁,未捕捉的例外1.3.3JavaScriptJavaScript是一種基于對象和事件驅動并具有相對安全性的客戶端腳本語言。同時也是一種廣泛用于客戶端Web開發的腳本語言,常用來給HTML網頁添加動態功能,比如響應用戶的各種操作。JavaScript的一個重要功能就是面向對象的功能,通過基于對象的程序設計,可以用更直觀、模塊化和可重復使用的方式進行程序開發。在HTML基礎上,使用Javascript可以開發交互式Web網頁。Javascript的出現使得網頁和用戶之間實現了一種實時性的、動態的、交互性的關系,使網頁包含更多活躍的元素和更加精彩的內容。在本系統中很多地方使用了javascript技術,比如說,檢驗用戶輸入數據的有效性,是否重復,是否為空等等。1.4軟硬件需求硬件需求:CPU:Pentium以上計算機內存:512M以上軟件需求:操作系統版本:WindowsXP/vista/Win7開發工具:MyEclipse6.0.1后臺服務器:ApacheTomcat6.0開發語言:Java瀏覽器:IE6.0第二章需求分析2.1需求調研隨著計算機網絡的飛速發展,美食網已經成為人們日常生活中必不可少的部分,也是一種簡單有效的提供網絡用戶進行學習和評價的平臺,通過其可以理解美食,自己學習制作美食,它隨時可以發表評論,方便快捷。2.2可行性分析開發任何一個系統,都會受到時間和資源上的限制。因此,在每一個項目開發之前,都要進行可行性分析,可以減少項目的開發風險,避免人力、物力和財力的浪費。下面就技術、經濟、操作和法律四個方面來介紹。2.2.1技術的可行性本系統開發工具是MyEclipse和SqlServer數據庫,開發語言是Java,主要使用了J2EE的技術,java是一種面向對象編程語言,簡單易學而且靈活方便。大三時就學習了java課程,大四期間也系統的了解了J2EE的知識,家庭食譜管理系統總體上開發難度不高,數據庫的設計和操作是本系統設計的核心。在大學期間學習過軟件工程,軟件測試,UML統一建模語言等課程,每個學期也會完成對應的課程設計,具備一定的系統分析、設計和測試能力。因此,完成系統實現在技術上完全具有可行性。2.2.2經濟的可行性如今是信息化時代,信息化管理可以使食譜管理工作更加系統化、快速化、全面化。這樣可以為企業帶來較高的工作效益和經濟效益,本系統對計算機配置的要求不高,企業機房更換下來的低配置電腦都可以完全滿足需要,再者,企業在管理工作上的高效率和便捷性遠遠超過了開發本系統的成本,所以在經濟上具有完全的可行性。2.2.3操作可行性本系統操作簡單,輸入信息頁面大多數都是下拉框的選擇形式,在某些頁面,信息可以自動生成,無需輸入,時間的輸入也是用的日歷控件,操作簡便,對操作人員的要求很低,只需對WINDOWS操作熟練,加之對本系統的操作稍加培訓即可工作,而且本系統可視性非常好,所以在技術上不會有很大難度。2.2.4法律的可行性本家庭食譜管理系統是自行開發的管理系統,是很有實際意義的系統,開發環境軟件和使用的數據庫都是開源代碼,開發這個系統不同于開發普通的系統軟件,不存在侵權等問題,即法律上是可行的。綜上所述,開發一個家庭食譜管理系統與原有的食譜分享方式相比具有速度更快,操作更準確,節省開支等有利之處,因此,建立一個家庭食譜管理系統是必要可行的。2.3系統用戶用例圖2.3.1管理員用例圖管理員是系統的核心用戶,涉及到六大功能模塊,管理員對系統的所有用戶有著操作的權限。圖2.1管理員用例圖2.4功能模塊需求分析本系統最大的特點是使用操作簡單、友好的提示信息。本系統將實現以下基本功能:(1)系統具有簡潔大方的頁面,使用簡便,友好的錯誤操作提示(2)管理員用戶具有系統信息管理、班級信息管理、教師信息管理、學生信息管理、公告管理、留言管理、資料管理等功能。(3)具有較強的安全性,避免用戶的惡意操作管理員功能模塊圖說明:(1)會員信息管理模塊:在該模塊中定義了會員信息的管理,其功能包括會員信息的查詢、刪除等操作。(2)類別信息管理模塊:在該模塊中定義了類別信息的管理,其功能包括類別信息的錄入、查詢、修改、刪除等操作。(3)菜譜信息管理模塊:在該模塊中定義了菜譜信息的管理,其功能包括菜譜信息的錄入、查詢、修改、刪除等操作。(4)周食譜信息管理模塊:在該模塊中定義了周食譜信息的管理,其功能包括周食譜信息的錄入、查詢、修改、刪除等操作。(5)公告信息管理模塊:在該模塊中定義了公告信息的管理,其功能包括公告信息的錄入、查詢、刪除等操作。(6)留言信息管理模塊:在該模塊中定義了留言信息的管理,其功能包括留言信息的查詢、刪除等操作。圖2.2管理員用戶功能模塊圖2.5設計的基本思想設計思想遵循以下幾點:1.采用B/S模式進行開發,其優點是后臺與前臺處理層次分明,而且符合眾多已經習慣網頁方式的用戶。2.采用面向對象的開發與設計理念。運用面向對象技術的前提是對整體系統的高度和準確抽象,通過它可以保證系統良好的框架,進而帶來產品較強的穩定性和運行效率。3.采用模塊化設計。模塊化設計要求將整個系統劃分成基于小的模塊,有利于代碼的重載,簡化設計和實現過程。4.簡單方便的系統界面。設計簡單友好的系統界面,方便用戶較快的適應系統的操作。5.速度優先原則。由于此工具最重要的評測標準就是速度,因此在設計過程中,具體過程盡量做到資源占用少,速度快。6.設計既要突出重點,又要細致周到。要符合設計需求,在有可能改進的地方進行擴充,使系統更適應用戶的需要。2.6性能需求2.6.1系統的安全性家庭食譜管理系統在管理權限上要嚴格進行控制,具體要求如下:想登錄家庭食譜管理系統進行操作,必須有操作權限,沒有權限的用戶不能通過任何方式登錄系統查看系統的任何信息和數據,以確保系統的嚴密性和安全性。2.6.2數據的完整性1.各種記錄信息的完整性,信息記錄內容不能為空2.各種數據間相互聯系的正確性3.相同數據在不同記錄中的一致性2.7界面需求界面設計目前已經成為評價軟件質量的一條重要指標,一個好的用戶界面可以增加用戶使用系統的信心和興趣,提高工作效率,JSP技術是用JAVA語言作為腳本語言的,JSP網頁為整個服務器端的JAVA庫單元提供了一個接口來服務于HTTP的應用程序。創建動態頁面非常方便。用戶界面是指軟件系統與用戶交互的接口,通常包括輸出、輸入、人-機對話的界面格式等。1.輸出設計輸出是由計算機對輸入的原始信息進行加工處理,形成高質量的有效信息,并使之具有一定的格式,提供管理者使用,這是輸出設計的主要職責和目標。系統設計的過程正好和實施過程相反,并不是從輸入設計到輸出設計,而是從輸出設計到輸入設計,這是因為輸出表格直接與使用者相聯系,設計的出發點應當是保證輸出表格方便地為使用者服務,正確及時反映和組成用于各部門的有用信息。輸出設計的原則是考慮既要全面反映不同管理層的各項需要,又要言簡意賅,不要將用戶需要和不需要的都提供給用戶。2.輸入設計輸入數據的收集和錄入是比較費事的,需要大量的人力和一定設備,并且容易出錯。如果輸入系統的數據有錯誤,則處理后的輸出將擴大這些錯誤,因此輸入數據的正確性對于整個系統質量的好壞是具有決定性意義的。輸入設計的原則有如下幾點:1)輸入量應保持在能滿足處理要求的最低限度。設計中可采用設置字段初值,下拉式數據窗口等方式盡量減少用戶鍵盤輸入量。輸入量越少,錯誤率就越少,數據準備時間也減少。2)輸入的準備及輸入過程應盡量容易進行,從而減少錯誤的發生。3)應盡量早對輸入數據進行檢查(盡量接近原數據發生點),以便使錯誤及時得到更正。4)輸入數據盡早地用其處理所需的形式被記錄,以避免數據由一種介質轉移到另一種介質時需要轉錄而可能發生的錯誤第三章系統分析與設計3.1數據庫的分析與設計計算機信息系統以數據庫為核心,在數據庫管理系統的支持下,進行信息的收集、整理、存儲、檢索、更新、加工、統計和傳播等操作。數據庫已經成為現在信息系統等計算機系統的基礎與核心部分。數據庫設計的好壞直接影響到整個系統的質量和效率。數據庫的設計一般經過規劃。需求分析、概念設計、邏輯設計、物理設計5個步驟。3.1.1數據庫的概念結構設計概念設計是指在數據分析的基礎上自底向上的建立整個系統的數據庫概念結構,從用戶的角度進行視圖設計,然后將視圖集成,最后對集成的結構分析優化得到最后結果。數據庫的概念結構設計采用實體—聯系(E-R)模型設計方法。E-R模型法的組成元素有:實體、屬性、聯系,E-R模型用E-R圖表示,是提示用戶工作環境中所涉及的事物,屬性則是對實體特性的描述。概念設計的目標是產生反映企業組織信息要求的數據庫概念結構,即概念模式。概念模式是獨立于數據庫邏輯結構,獨立于支持數據庫的DBMS,不依賴于計算機系統的,根據以上對數據庫的需求分析,并結合系統概念模型的特點及建立方法,建立E-R模型圖。實體間關系屬性實體實體間關系屬性實體(1)會員信息實體E-R圖如圖3.1所示:圖3.1學生信息實體E-R圖(2)類別信息實體E-R圖如圖3.2所示:圖3.2類別信息實體E-R圖(3)菜譜信息實體E-R圖如圖3.3所示圖3.3菜譜信息實體E-R圖(4)周食譜信息E-R圖如圖3.4所示圖3.4周食譜信息實體E-R圖(5)公告信息E-R圖如圖3.7所示圖3.5公告信息實體E-R圖(6)留言信息E-R圖如圖3.8所示圖3.6留言信息實體E-R圖(7)管理員信息E-R圖如圖3.9所示圖3.7管理員信息實體E-R圖3.1.2數據庫的邏輯結構設計我們知道,數據庫概念模型獨立于任何特定的數據庫管理系統,因此,需要根據具體使用的數據庫管理系統的特點進行轉換。即轉化為按計算機觀點處理的邏輯關系模型,E-R模型向關系數據庫模型轉換應遵循下列原則:*每一個實體要轉換成一個關系*所有的主鍵必須定義非空(NOTNULL)*對于二元聯系應按照一對多、弱對實、一對一、多對多等聯系來定義外鍵。根據E-R模型,網上家庭食譜系統建立了以下邏輯數據結構,下面是各數據表的詳細說明。(1)注冊用戶信息表主要是記錄了注冊用戶基本信息。表結構如表3.1所示。表3.1注冊用戶信息表(t_user)列名數據類型長度允許空是否主鍵說明idint4否是編號loginnamevarchar50否否登錄名loginpwvarchar50否否登錄密碼namevarchar50否否姓名sexvarchar50否否性別agevarchar50否否年齡addressvarchar50否否地址telvarchar20否否聯系電話emailvarchar20否否電子郵箱qqvarchar20否否 QQ(2)類別信息表主要是記錄了類別基本信息。表結構如表3.2所示。表3.2類別信息表(t_leibie)列名數據類型長度允許空是否主鍵說明idint4否是編號miaoshuvarchar50否否描述(3)菜譜信息表主要是記錄了菜譜的基本信息,表結構如圖3.3所示。表3.3菜譜信息表(t_caipu)列名數據類型長度允許空是否主鍵說明idint4否是編號lxidint4否是菜譜類型mingchengvarchar50否否名稱neirongvarchar50否否內容lujingvarchar50否否菜譜圖片(4)周食譜信息表主要是記錄了周食譜的基本信息,表結構如圖3.4所示。表3.4周食譜信息表(t_zhoushi)列名數據類型長度允許空是否主鍵說明idint4否是編號biaotivarchar50否否標題neirongvarchar50否否內容(5)公告信息表主要是記錄了公告的基本信息,表結構如圖3.5所示。表3.5公告信息表(t_gonggao)列名數據類型長度允許空是否主鍵說明idint4否是編號titlevarchar50否否標題contentvarchar5000否否內容shijianvarchar50否否發布時間(6)留言信息表主要是記錄了留言的基本信息,表結構如圖3.6所示。表3.6留言信息表(t_liuyan)列名數據類型長度允許空是否主鍵說明idint4否是編號titlevarchar50否否標題contentvarchar5000否否內容shijianvarchar50否否發布時間user_idVarchar50否否發布人(7)管理員信息表主要記錄的管理員的賬號信息,包括用戶名和密碼,表結構如表3.9所示。表3.7管理員信息表(t_admin)列名數據類型長度允許空是否主鍵說明userIdint4否是編號userNamevarchar50否否用戶名userPwvarchar50否否密碼3.1.3數據庫的連接原理采用JDBC連接數據庫的方式,只需在工程中導入對應數據庫的jar包,就可以方便的對數據庫進行連接,在程序中,用Class.forName()方法來加載驅動程序,在用DriverManager的getConnection()方法就可以創建一個數據庫連接。程序采用的是DAO模式來操作數據庫,DAO(DataAccessObject,數據訪問對象),是Java編程中的一種經典模式,已被廣泛應用,也是J2EE架構中持久層框架的基礎知識,基于分層次式的軟件架構來實現對數據庫的訪問操作。DAO模式的主要思想就是從抽象數據源獲取與操縱數據的方法。抽象數據的含義就是編寫應用程序的程序員不必關心數據庫的物理位置,已經是何種數據庫,只需使用封裝數據庫中表示記錄的數據對象即可。其思想如圖3.10所示:封裝使用封裝使用DataSourceDataAccessObjectBusinessObjectDataSourceDataAccessObjectBusinessObject創建/使用獲取/修改創建/使用獲取/修改DataTransferObjectDataTransferObject圖3.10DAO模式類圖圖中BussinessObject是業務對象,是使用DAO模式的客戶端;DataTransferObject數據傳輸對象,在應用程序不同層次之間傳輸對象,在一個分布式應用程序中,通常可以提高整理的性能;DataObjectAcces數據輸入/輸出對象封裝了對數據源的一些基本操作;DataSource指的是數據源。可以從圖中看出,DAO模式分離了業務邏輯和數據羅即將,是的編寫的軟件具有良好的層次式體系結構。本系統為了方便數據庫的操作,主要使用DBContent的對象來接一個數據庫(建立一個類DBContent),代碼如下:publicDBContent(){ StringCLASSFORNAME="com.SqlServer.jdbc.Driver";//連接數據庫的驅動 Stringurl="jdbc:SqlServer://localhost:3306/gy1"; Stringuser="root";//連接數據庫的用戶名 Stringpassword="root";//連接數據庫的密碼 try{ Class.forName(CLASSFORNAME); con=DriverManager.getConnection(url,user,password);//加載數據庫的驅動 stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); } catch(Exceptionex){ ex.printStackTrace(); } } 在程序需要連接數據庫的地方,只需要生成一個DBConnet的對象,就可以對數據庫進行連接并操作。3.2中文亂碼問題處理在程序中經常會遇到中文亂碼的情況,如果手動的在servlet和jsp頁面進行設置,相當麻煩。因此,在程序的開始就寫了一個過濾器SetCharacterEncodingFilter。在web.xml中配置:<filter><filter-name>SetCharacterEncodingFilter</filter-name><filter-class>myweb.util.filter.SetCharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>gb2312</param-value></init-param></filter><filter-mapping><filter-name>SetCharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern>//*表示工程下所有的頁面都會有此過濾器的處理</filter-mapping>對應的SetCharacterEncodingFilter.java文件中的重要代碼,在初始化init()方法中定義:publicvoidinit(FilterConfigfilterConfig)throwsServletException{ this.filterConfig=filterConfig;this.encoding=filterConfig.getInitParameter("encoding");Stringvalue=filterConfig.getInitParameter("ignore");}在工具包util包中同樣定義了DataFormate類來處理字符轉換:publicstaticStringtoUni(StringgbStr){StringuniStr="";/*把字符串轉換成uincode編碼*/if(gbStr==null){gbStr="";}try{byte[]tempByte=gbStr.getBytes("GB2312");uniStr=newString(tempByte,"ISO8859_1");}catch(Exceptionex){}returnuniStr;}/*把字符串轉換成Utf8編碼*/publicstaticStringtoUtf8String(Strings){StringBuffersb=newStringBuffer();for(inti=0;i<s.length();i++){charc=s.charAt(i);if(c>=0&&c<=255){sb.append(c);}else{byte[]b;try{b=Character.toString(c).getBytes("utf-8");}catch(Exceptionex){System.out.println(ex);b=newbyte[0];}for(intj=0;j<b.length;j++){intk=b[j];if(k<0){k+=256;}sb.append("%"+Integer.toHexString(k).toUpperCase());}} returnsb.toString();}

第四章系統功能實現在管理信息系統的生命周期中,經過了需求分析、系統設計等階段之后,便開始了系統實施階段。在系統分析和設計階段,系統開發工作主要是集中在邏輯、功能和技術設計上,系統實施階段要繼承此前面各個階段的工作成果,將技術設計轉化為物理實現,因此系統實施的成果是系統分析和設計階段的結晶。4.1系統登陸頁面實現1.描述:為了保證系統的安全性,要先使用本系統必須先登陸到系統中,用戶需要正確的賬號和密碼登錄本系統。2.程序運行效果圖如圖4.1所示:圖4.1系統登陸頁面設計3.在登陸頁面輸入用戶名和密碼以,點擊提交按鈕,跳轉到登陸的service中,在該service中會對用戶名,密碼,驗證碼進行判斷,驗證通過進入對應的頁面,loginservice關鍵代碼: publicStringlogin(StringuserName,StringuserPw,intuserType) { Stringresult="no"; if(userType==0)//系統管理員登陸 { Stringsql="select*fromt_adminwhereuserName=?anduserPw=?"; Object[]params={userName,userPw}; DBmydb=newDB(); mydb.doPstm(sql,params); try { ResultSetrs=mydb.getRs(); booleanmark=(rs==null||!rs.next()?false:true); if(mark==false) { result="no"; } else { result="yes"; TAdminadmin=newTAdmin(); admin.setUserId(rs.getInt("userId")); admin.setUserName(rs.getString("userName")); admin.setUserPw(rs.getString("userPw")); WebContextctx=WebContextFactory.get(); HttpSessionsession=ctx.getSession(); session.setAttribute("userType",0); session.setAttribute("admin",admin); } rs.close(); } catch(SQLExceptione) { System.out.println("登錄失敗!"); e.printStackTrace(); } finally { mydb.closed(); } } returnresult; }4.2總體功能模塊1.描述:系統主頁面:左方頁面展示了管理員可操作的六大功能,進入相關的管理頁面可以鏈接到子菜單,并且高亮顯示,每個管理模塊下面都有相應的子菜單。2.程序運行效果圖如圖4.2所示:圖4.2管理員主頁面在每個jsp頁面將會對相關用戶進行攔截操作,這樣可以提高安全性,防止用戶不經過登陸頁面而進入任何子菜單頁面:if(session.getAttribute("user")==null){out.print("<script>alert('請先登錄!');window.open('../index.jsp','_self')</script>"); }4.2.1注冊用戶信息管理注冊用戶信息管理1.描述:管理員點擊左側的菜單“注冊用戶管理”,頁面跳轉到注冊用戶信息管理界面,調用后臺的action類查詢所有注冊用戶信息。2.程序效果圖如下圖4.3所示圖4.3注冊用戶信息管理注冊用戶信息管理關鍵代碼: publicvoiduserDel(HttpServletRequestreq,HttpServletResponseres) { Stringid=req.getParameter("id"); Stringsql="deletefromt_userwhereid=?"; Object[]params={id}; DBmydb=newDB(); mydb.doPstm(sql,params); mydb.closed(); req.setAttribute("message","操作成功"); req.setAttribute("path","user?type=userMana");StringtargetURL="/common/success.jsp"; dispatch(targetURL,req,res); } publicvoiduserMana(HttpServletRequestreq,HttpServletResponseres)throwsServletException,IOException { ListuserList=newArrayList(); Stringsql="select*fromt_userwheredel='no'"; Object[]params={}; DBmydb=newDB(); try { mydb.doPstm(sql,params); ResultSetrs=mydb.getRs(); while(rs.next()) { Tuseruser=newTuser(); user.setId(rs.getString("id")); user.setLoginname(rs.getString("loginname")); user.setLoginpw(rs.getString("loginpw")); user.setLoginpw(rs.getString("loginpw")); user.setName(rs.getString("name")); user.setSex(rs.getString("sex")); user.setAge(rs.getString("age")); user.setAddress(rs.getString("address")); user.setTel(rs.getString("tel")); user.setEmail(rs.getString("email")); user.setQq(rs.getString("qq")); userList.add(user); } rs.close(); } catch(Exceptione) { e.printStackTrace(); } mydb.closed(); req.setAttribute("userList",userList); req.getRequestDispatcher("admin/user/userMana.jsp").forward(req,res); }注冊用戶信息刪除1.描述:先是點擊會員管理,頁面跳轉到注冊用戶信息管理界面,瀏覽所有的注冊用戶信息,點擊要刪除的注冊用戶信息,即可刪除該會員信息。4.2.2類別信息管理類別信息錄入1.描述:管理員輸入類別相關正確信息后點擊錄入按鈕,如果是沒有輸入完整的類別信息,都會給出相應的錯誤提示,不能錄入成功。輸入數據都通過form表單中定義的方法onsubmit="returncheckForm()"來檢查,checkForm()函數中是各種的校驗輸入數據的方式。2.程序效果圖如下圖4.4所示:圖4.4類別信息錄入類別信息管理1.描述:管理員點擊左側的菜單“類別信息管理”,頁面跳轉到類別信息管理界面,調用后臺的action類查詢出所有的類別信息,并把這些信息封轉到數據集合List中,綁定到request對象,然后頁面跳轉到相應的jsp,顯示出類別信息。2.程序效果圖如下圖4.5所示圖4.5類別信息管理頁面類別信息管理關鍵代碼: publicvoidleibieAdd(HttpServletRequestreq,HttpServletResponseres){ Stringmiaoshu=req.getParameter("miaoshu"); Stringdel="no"; Stringsql="insertintot_leibievalues(?,?)"; Object[]params={miaoshu,del}; DBmydb=newDB(); mydb.doPstm(sql,params); mydb.closed(); req.setAttribute("message","食譜類別添加成功"); req.setAttribute("path","leibie?type=leibieMana"); StringtargetURL="/common/success.jsp"; dispatch(targetURL,req,res); } publicvoidleibieMana(HttpServletRequestreq,HttpServletResponseres) throwsServletException,IOException{ ListleibieList=newArrayList(); Stringsql="select*fromt_leibiewheredel='no'"; Object[]params={}; DBmydb=newDB(); try{ mydb.doPstm(sql,params); ResultSetrs=mydb.getRs(); while(rs.next()){ TLeibieleibie=newTLeibie(); leibie.setId(rs.getInt("id")); leibie.setMiaoshu(rs.getString("miaoshu")); leibieList.add(leibie); } rs.close(); }catch(Exceptione){ e.printStackTrace(); } mydb.closed(); req.setAttribute("leibieList",leibieList); req.getRequestDispatcher("/admin/leibie/leibieMana.jsp").forward(req,res); } publicvoidleibieDel(HttpServletRequestreq,HttpServletResponseres){ intid=Integer.parseInt(req.getParameter("id")); Stringdel="yes"; Stringsql="updatet_leibiesetdel=?whereid=?"; Object[]params={del,id}; DBmydb=newDB(); mydb.doPstm(sql,params); mydb.closed(); req.setAttribute("message","類別信息刪除成功!"); req.setAttribute("path","leibie?type=leibieMana"); StringtargetURL="/common/success.jsp"; dispatch(targetURL,req,res); } publicvoidleibieEdit(HttpServletRequestreq,HttpServletResponseres){ intid=Integer.parseInt(req.getParameter("id")); Stringmiaoshu=req.getParameter("miaoshu"); Stringsql="updatet_leibiesetmiaoshu=?whereid=?"; Object[]params={miaoshu,id}; DBmydb=newDB(); mydb.doPstm(sql,params); mydb.closed(); req.setAttribute("message","類別信息修改成功!"); req.setAttribute("path","leibie?type=leibieMana"); StringtargetURL="/common/success.jsp"; dispatch(targetURL,req,res); }類別信息修改1.描述:先是點擊類別信息管理,頁面跳轉到類別信息管理界面,瀏覽所有的類別信息信息,點擊要修改的類別信息,彈出的類別信息修改對話框,修改類別信息。2.程序效果圖如下圖4.6所示圖4.6類別信息修改類別信息刪除1.描述:先是點擊類別信息管理,頁面跳轉到類別信息管理界面,瀏覽所有的類別信息,點擊要刪除的類別信息,點擊彈出的確定對話框,即可刪除該類別信息。2.程序效果圖如下圖4.7所示圖4.7類別信息刪除頁面4.2.3菜譜信息管理菜譜信息錄入1.描述:管理員輸入菜譜相關正確信息后點擊錄入按鈕,如果是沒有輸入完整的菜譜信息,都會給出相應的錯誤提示,不能錄入成功。輸入數據都通過form表單中定義的方法onsubmit="returncheckForm()"來檢查,checkForm()函數中是各種的校驗輸入數據的方式。2.程序效果圖如下圖4.8所示:圖4.8菜譜信息錄入菜譜信息管理1.描述:管理員點擊左側的菜單“菜譜信息管理”,頁面跳轉到菜譜信息管理界面,調用后臺的action類查詢出所有的菜譜信息,并把這些信息封轉到數據集合List中,綁定到request對象,然后頁面跳轉到相應的jsp,顯示出菜譜信息。2.程序效果圖如下圖4.9所示圖4.9菜譜信息管理頁面菜譜信息管理關鍵代碼: publicvoidcaipuAdd(HttpServletRequestreq,HttpServletResponseres){ Stringlxid=req.getParameter("lxid"); Stringmingcheng=req.getParameter("mingcheng"); Stringneirong=req.getParameter("content"); Stringlujing=req.getParameter("lujing"); Stringdel="no"; Stringsql="insertintot_caipuvalues(?,?,?,?,?)"; Object[]params={lxid,mingcheng,neirong,lujing,del}; DBmydb=newDB(); mydb.doPstm(sql,params); mydb.closed(); req.setAttribute("message","食譜添加成功"); req.setAttribute("path","caipu?type=caipuMana"); StringtargetURL="/common/success.jsp"; dispatch(targetURL,req,res); } publicvoidcaipuEdit(HttpServletRequestreq,HttpServletResponseres){ Stringid=req.getParameter("id"); Stringlxid=req.getParameter("lxid"); Stringmingcheng=req.getParameter("mingcheng"); Stringneirong=req.getParameter("content"); Stringlujing=req.getParameter("lujing"); Stringsql="updatet_caipusetlxid=?,mingcheng=?,neirong=?,lujing=?whereid=?"; Object[]params={lxid,mingcheng,neirong,lujing,id}; DBmydb=newDB(); mydb.doPstm(sql,params); mydb.closed(); req.setAttribute("message","食譜修改成功"); req.setAttribute("path","caipu?type=caipuMana"); StringtargetURL="/common/success.jsp"; dispatch(targetURL,req,res); } publicvoidcaipuDel(HttpServletRequestreq,HttpServletResponseres){ Stringid=req.getParameter("id"); Stringdel="yes"; Stringsql="updatet_caipusetdel=?whereid=?"; Object[]params={del,id}; DBmydb=newDB(); mydb.doPstm(sql,params); mydb.closed(); req.setAttribute("message","食譜刪除成功"); req.setAttribute("path","caipu?type=caipuMana"); StringtargetURL="/common/success.jsp"; dispatch(targetURL,req,res); } publicvoidcaipuMana(HttpServletRequestreq,HttpServletResponseres) throwsServletException,IOException{ ListcaipuList=newArrayList(); Stringsql="selectta.*,tb.miaoshufromt_caiputa,t_leibietb"+ "whereta.lxid=tb.idandta.del='no'"; Object[]params={}; DBmydb=newDB(); try{ mydb.doPstm(sql,params); ResultSetrs=mydb.getRs(); while(rs.next()){ TCaipucaipu=newTCaipu(); caipu.setId(rs.getInt("id")); caipu.setMingcheng(rs.getString("mingcheng")); caipu.setLxms(rs.getString("miaoshu")); caipuList.add(caipu); } rs.close(); }catch(Exceptione){ e.printStackTrace(); } mydb.closed(); req.setAttribute("caipuList",caipuList); req.getRequestDispatcher("/admin/caipu/caipuMana.jsp").forward(req,res); }菜譜信息修改1.描述:先是點擊菜譜信息管理,頁面跳轉到菜譜信息管理界面,瀏覽所有的菜譜信息信息,點擊要修改的菜譜信息,彈出的菜譜信息修改對話框,修改菜譜信息。2.程序效果圖如下圖4.10所示圖4.10菜譜信息修改菜譜信息刪除1.描述:先是點擊菜譜信息管理,頁面跳轉到菜譜信息管理界面,瀏覽所有的菜譜信息,點擊要刪除的菜譜信息,點擊彈出的確定對話框,即可刪除該菜譜信息。2.程序效果圖如下圖4.11所示圖4.11菜譜信息刪除頁面4.2.4周食譜管理周食譜錄入1.描述:管理員輸入周食譜相關正確信息后點擊錄入按鈕,如果是沒有輸入完整的周食譜信息,都會給出相應的錯誤提示,不能錄入成功。輸入數據都通過form表單中定義的方法onsubmit="returncheckForm()"來檢查,checkForm()函數中是各種的校驗輸入數據的方式。2.程序效果圖如下圖4.12所示:圖4.12周食譜錄入周食譜管理1.描述:管理員點擊左側的菜單“周食譜管理”,頁面跳轉到周食譜管理界面,調用后臺的action類查詢出所有的周食譜信息,并把這些信息封轉到數據集合List中,綁定到request對象,然后頁面跳轉到相應的jsp,顯示出周食譜信息。2.程序效果圖如下圖4.13所示圖4.13周食譜管理頁面周食譜管理關鍵代碼: publicvoidzhoushiAdd(HttpServletRequestreq,HttpServletResponseres){ Stringbiaoti=req.getParameter("biaoti"); Stringneirong=req.getParameter("content"); Stringdel="no"; Stringsql="insertintot_zhoushivalues(?,?,?)"; Object[]params={biaoti,neirong,del}; DBmydb=newDB(); mydb.doPstm(sql,params); mydb.closed(); req.setAttribute("message","周食譜添加成功"); req.setAttribute("path","zhoushi?type=zhoushiMana"); StringtargetURL="/common/success.jsp"; dispatch(targetURL,req,res); } publicvoidzhoushiMana(HttpServletRequestreq,HttpServletResponseres) throwsServletException,IOException{ ListzhoushiList=newArrayList(); Stringsql="select*fromt_zhoushiwheredel='no'"; Object[]params={}; DBmydb=newDB(); try{ mydb.doPstm(sql,params); ResultSetrs=mydb.getRs(); while(rs.next()){ TZhoushizhoushi=newTZhoushi(); zhoushi.setId(rs.getInt("id")); zhoushi.setBiaoti(rs.getString("biaoti")); zhoushiList.add(zhoushi); } rs.close(); }catch(Exceptione){ e.printStackTrace(); } mydb.closed(); req.setAttribute("zhoushiList",zhoushiList); req.getRequestDispatcher("/admin/zhoushi/zhoushiMana.jsp").forward(req,res); } publicvoidzhoushiEdit(HttpServletRequestreq,HttpServletResponseres){ intid=Integer.parseInt(req.getParameter("id")); Stringbiaoti=req.getParameter("biaoti"); Stringneirong=req.getParameter("content"); Stringsql="updatet_zhoushisetbiaoti=?,neirong=?whereid=?"; Object[]params={biaoti,neirong,id}; DBmydb=newDB(); mydb.doPstm(sql,params); mydb.closed(); req.setAttribute("message","周食譜信息修改成功!"); req.setAttribute("path","zhoushi?type=zhoushiMana"); StringtargetURL="/common/success.jsp"; dispatch(targetURL,req,res); }周食譜信息修改1.描述:先是點擊周食譜信息管理,頁面跳轉到周食譜信息管理界面,瀏覽所有的周食譜信息信息,點擊要修改的周食譜信息,彈出的周食譜信息修改對話框,修改周食譜信息。2.程序效果圖如下圖4.14所示圖4.14周食譜信息修改周食譜刪除1.描述:先是點擊周食譜信息管理,頁面跳轉到周食譜管理界面,瀏覽所有的周食譜信息,點擊要刪除的周食譜信息,點擊彈出的確定對話框,即可刪除該周食譜信息。2.程序效果圖如下圖4.15所示圖4.15周食譜信息刪除頁面4.2.5公告信息管理公告信息錄入1.描述:管理員輸入公告相關正確信息后點擊錄入按鈕,如果是沒有輸入完整的公告信息,都會給出相應的錯誤提示,不能錄入成功。輸入數據都通過form表單中定義的方法onsubmit="returncheckForm()"來檢查,checkForm()函數中是各種的校驗輸入數據的方式。2.程序效果圖如下圖4.16所示:圖4.16公告信息錄入公告信息管理1.描述:管理員點擊左側的菜單“公告信息管理”,頁面跳轉到公告信息管理界面,調用后臺的action類查詢出所有的公告信息,并把這些信息封轉到數據集合List中,綁定到request對象,然后頁面跳轉到相應的jsp,顯示出公告信息。2.程序效果圖如下圖4.17所示圖4.17公告信息管理頁面公告信息管理關鍵代碼: publicvoidgonggaoAdd(HttpServletRequestreq,HttpServletResponseres) { Stringid=String.valueOf(newDate().getTime()); Stringtitle=req.getParameter("title"); Stringcontent=req.getParameter("content"); Stringshijian=newDate().toLocaleString(); Stringsql="insertintot_gonggaovalues(?,?,?,?)"; Object[]params={id,title,content,shijian}; DBmydb=newDB(); mydb.doPstm(sql,params); mydb.closed(); req.setAttribute("message","操作成功"); req.setAttribute("path","gonggao?type=gonggaoMana");StringtargetURL="/common/success.jsp"; dispatch(targetURL,req,res); } publicvoidgonggaoDel(HttpServletRequestreq,HttpServletResponseres) { Stringid=req.getParameter("id"); Stringsql="deletefromt_gonggaowhereid=?"; Object[]params={id}; DBmydb=newDB(); mydb.doPstm(sql,params); mydb.closed(); req.setAttribute("message","操作成功"); req.setAttribute("path","gonggao?type=gonggaoMana");StringtargetURL="/common/success.jsp"; dispatch(targetURL,req,res); } publicvoidgonggaoMana(HttpServletRequestreq,HttpServletResponseres)throwsServletException,IOException { ListgonggaoList=newArrayList(); Stringsql="select*fromt_gonggao"; Object[]params={}; DBmydb=newDB(); try { mydb.doPstm(sql,params); ResultSetrs=mydb.getRs(); while(rs.next()) { Tgonggaogonggao=newTgonggao(); gonggao.setId(rs.getString("id")); gonggao.setTitle(rs.getString("title")); gong

溫馨提示

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

評論

0/150

提交評論