Java圖書管理系統(tǒng)畢業(yè)設(shè)計(論文)_第1頁
Java圖書管理系統(tǒng)畢業(yè)設(shè)計(論文)_第2頁
Java圖書管理系統(tǒng)畢業(yè)設(shè)計(論文)_第3頁
Java圖書管理系統(tǒng)畢業(yè)設(shè)計(論文)_第4頁
Java圖書管理系統(tǒng)畢業(yè)設(shè)計(論文)_第5頁
已閱讀5頁,還剩61頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

PAGE┊┊┊┊┊┊┊┊┊┊┊┊┊裝┊┊┊┊┊訂┊┊┊┊┊線┊┊┊┊┊┊┊┊┊┊┊┊┊安徽工業(yè)大學(xué)畢業(yè)設(shè)計(論文)說明書PAGEPAGEV摘要本文介紹了在Java運(yùn)行環(huán)境下開發(fā)圖書管理信息系統(tǒng)的過程。文章介紹了圖書館管理信息系統(tǒng)的系統(tǒng)分析部分,包括可行性分析、圖書借閱流程分析等;系統(tǒng)設(shè)計部分主要介紹了系統(tǒng)功能設(shè)計和數(shù)據(jù)庫設(shè)計及代碼設(shè)計;系統(tǒng)實(shí)現(xiàn)部分說明了幾個主要模塊的算法,本系統(tǒng)界面友好,操作簡單,比較實(shí)用。

本系統(tǒng)采用了JSP頁面的設(shè)計,使用了MVC模式,它采用了當(dāng)今軟件設(shè)計的最新技術(shù),具有開發(fā)效率高、設(shè)計靈活、生成的軟件界面友好美觀等特點(diǎn)。本系統(tǒng)中通過JDBC驅(qū)動和數(shù)據(jù)庫進(jìn)行無縫連接,后端的數(shù)據(jù)庫是SqlServer2005,該數(shù)據(jù)庫界面友好,容易上手,具有較高的完整性,一致性和安全性。關(guān)鍵詞:Java;圖書管理系統(tǒng);圖書借閱;MVC;開源;數(shù)據(jù)庫

AbstractThisarticleintroducedtheprocessthatdevelopingthebooksmanagementsystemundertheJavarunningenvironment.Thispaperintroducestheanalysispartsoflibrarymanagementinformationsystem,includingfeasibilityanalysis,libraryprocessanalysis,etc.;Systemdesignpartmainlyintroducedthesystemfunctiondesignanddatabasedesignandcodedesign;Thesystemrealizationpartexplainedseveralmainmodulealgorithms,Thesystemisuser-friendly,simple,morepractical.ThissystemusestheJSPpagedesignandusestheMVCpattern.Itusesthenewesttechnologyintoday'ssoftwaredesign,andhasthedevelopmentofhighefficiency,flexibledesign,generatesoftwareuser-friendlyappearanceandothercharacteristics.ThesystemadoptedinJDBCdriveanddatabaseforaseamlessconnectiontothebackenddatabaseisSqlServer2005,thedatabaseinterfaceisveryuserfriendly,easytolearn,andhaveahigherintegrity,consistencyandsecurity.Keywords:Java;BooksManagementSystem;LibraryProcessAnalysis;MVC;OpenSource

畢業(yè)設(shè)計(論文)原創(chuàng)性聲明和使用授權(quán)說明原創(chuàng)性聲明本人鄭重承諾:所呈交的畢業(yè)設(shè)計(論文),是我個人在指導(dǎo)教師的指導(dǎo)下進(jìn)行的研究工作及取得的成果。盡我所知,除文中特別加以標(biāo)注和致謝的地方外,不包含其他人或組織已經(jīng)發(fā)表或公布過的研究成果,也不包含我為獲得及其它教育機(jī)構(gòu)的學(xué)位或?qū)W歷而使用過的材料。對本研究提供過幫助和做出過貢獻(xiàn)的個人或集體,均已在文中作了明確的說明并表示了謝意。作者簽名:日期:指導(dǎo)教師簽名:日期:使用授權(quán)說明本人完全了解大學(xué)關(guān)于收集、保存、使用畢業(yè)設(shè)計(論文)的規(guī)定,即:按照學(xué)校要求提交畢業(yè)設(shè)計(論文)的印刷本和電子版本;學(xué)校有權(quán)保存畢業(yè)設(shè)計(論文)的印刷本和電子版,并提供目錄檢索與閱覽服務(wù);學(xué)??梢圆捎糜坝 ⒖s印、數(shù)字化或其它復(fù)制手段保存論文;在不以贏利為目的前提下,學(xué)校可以公布論文的部分或全部內(nèi)容。作者簽名:日期:

目錄1緒論 11.1開發(fā)背景 11.2國內(nèi)外研究現(xiàn)狀 21.3目前存在的問題 21.3.1易遭病毒攻擊 21.3.2微機(jī)操作技能欠缺 21.3.3維護(hù)工作量大 21.3.4運(yùn)營成本加大 22需求分析 32.1用戶需求 32.1.1數(shù)據(jù)需求 32.1.2功能需求 32.2業(yè)務(wù)流程 42.2.1系統(tǒng)業(yè)務(wù)流程 42.3 主要用例的用例描述 43開發(fā)平臺和開發(fā)工具 73.1技術(shù)框架 73.1.1J2EE平臺 73.1.2Web服務(wù)器和數(shù)據(jù)庫 73.2工具選擇 83.2.1Java語言誕生背景 83.2.2Java語言的特點(diǎn) 83.2.3開發(fā)工具介紹 93.2.4開發(fā)環(huán)境介紹 94系統(tǒng)設(shè)計 104.1總體結(jié)構(gòu)框圖 104.2數(shù)據(jù)庫結(jié)構(gòu)設(shè)計 114.2.1數(shù)據(jù)庫概念結(jié)構(gòu)設(shè)計(ER圖) 114.2.2數(shù)據(jù)庫邏輯結(jié)構(gòu)設(shè)計 114.2.3數(shù)據(jù)庫表設(shè)計 134.3系統(tǒng)各模塊功能 144.3.1系統(tǒng)管理員模塊功能 144.3.2讀者模塊功能 144.3.3圖書借還模塊功能 144.3.4圖書管理模塊功能 154.3.5出版社管理模塊功能 154.3.6作者管理模塊功能 155系統(tǒng)實(shí)現(xiàn) 165.1開發(fā)步驟 165.2詳細(xì)功能與編碼 175.2.1管理員模塊 175.2.2讀者管理模塊 215.2.3圖書借還管理模塊 245.2.4圖書管理模塊 266系統(tǒng)測試 366.1部分功能測試 366.1.1登錄模塊測試 366.1.2管理員注冊模塊測試 376.1.3圖書模塊測試 386.2驗(yàn)收測試 406.3評價 407總結(jié) 428致謝 439參考文獻(xiàn) 4410附錄、系統(tǒng)主要代碼 45┊┊┊┊┊┊┊┊┊┊┊┊┊裝┊┊┊┊┊訂┊┊┊┊┊線┊┊┊┊┊┊┊┊┊┊┊┊┊安徽工業(yè)大學(xué)畢業(yè)設(shè)計(論文)說明書PAGE第61頁共61頁1緒論1.1開發(fā)背景經(jīng)過大學(xué)四年理論課程的學(xué)習(xí),以及校內(nèi)校外的實(shí)踐,極大的豐富了自身的理論基礎(chǔ),并且也具備了一些處理簡單問題的能力,但即將踏上社會的我深知這還遠(yuǎn)遠(yuǎn)不夠,因此我利用了畢業(yè)設(shè)計的機(jī)會,在老師的指導(dǎo)下去完成一個具有挑戰(zhàn)性的,其具體應(yīng)用及社會服務(wù)相結(jié)合的項(xiàng)目,深知通過對它的開發(fā),將對我的能力有更高層次的突破。在調(diào)研農(nóng)村中學(xué)時發(fā)現(xiàn)這些農(nóng)村中學(xué)圖書室都藏書達(dá)六、七萬余冊,但其現(xiàn)行圖書管理工作都是采用傳統(tǒng)的手工管理,經(jīng)過對其圖書管理工作中的圖書信息、讀者管理及借閱管理工作做全面調(diào)查研究,其現(xiàn)行手工流程具體分析如下:圖書登記:對上級分配、學(xué)校購入和社會捐贈的圖書進(jìn)行圖書信息登記;讀者登記:圖書管理員根據(jù)學(xué)校檔案室提供的教師花名冊和學(xué)生花名冊進(jìn)行讀者登記,然后填發(fā)借書證,學(xué)生畢業(yè)和教師調(diào)出時將其借書證注銷。借閱管理:讀者特別是學(xué)生讀者持借書證到圖書室借閱圖書,圖書管理員將借閱日期填寫在書籍卡片上,將卡片夾在借書證中間,存放在圖書室,學(xué)生看完后,送還所借書籍,收回借書證或另借其它書籍。這種傳統(tǒng)人工的管理方式存在著許多缺點(diǎn),如:效率低、保密性差,一方面導(dǎo)致教師、學(xué)生對學(xué)校圖書室藏書情況不了解,圖書室究竟有哪些圖書也不知道;另一方面圖書管理員對圖書管理工作倍感頭痛,因?yàn)闀r間一長,將產(chǎn)生大量的文件和數(shù)據(jù),這對于查找、更新和維護(hù)都帶來了不少的困難,耗費(fèi)勞動力大,難于避免錯誤的產(chǎn)生,如借書證掛失后,仍有少數(shù)學(xué)生冒用已掛失的借書證借出圖書,造成圖書外流。本人是安工大的學(xué)生,看著圖書館日益忙碌的借書還書管理,大膽猜想一種新方案的圖書管理系統(tǒng),即純網(wǎng)絡(luò)借書還書操作,同學(xué)可以不必天天到圖書館徘徊選書,也不必為了找某一本書而勞煩工作人員,不必因?yàn)楣ぷ魅藛T的上下班而等著借還圖書,同學(xué)可以在網(wǎng)上進(jìn)行選書借書還書操作,當(dāng)選好圖書時可以點(diǎn)擊預(yù)定借閱操作,管理員這邊如果看到可以幫您借閱并送到指定的存數(shù)地點(diǎn),您可隨時憑學(xué)生證刷卡取書。還書同樣是學(xué)生先在網(wǎng)上圖書館進(jìn)行還書操作,再在指定工作日將書籍歸還到指定還書地點(diǎn),工作人員將在一段時間后進(jìn)行檢查,如果歸還將網(wǎng)上通知管理員進(jìn)行最后的還書確認(rèn),圖書歸還成功。本軟件以此為設(shè)計理念,是管理員操作的后臺管理軟件。1.2國內(nèi)外研究現(xiàn)狀隨著數(shù)字化時代的到來,人們對于知識的渴求越來越高,為了提高全民文化知識水平,各地政府不斷在當(dāng)?shù)亟D書館,供人們參考與借閱,當(dāng)然隨著規(guī)模的擴(kuò)大,普通的手工管理已經(jīng)不能適應(yīng),不僅浪費(fèi)人力物力還有可能造成書籍的遺失和損壞,此時,一種基于互聯(lián)網(wǎng)的圖書管理系統(tǒng)已經(jīng)如雨后春筍搬不斷成長,圖書館里系統(tǒng)在現(xiàn)代社會也成為一門熱門的行業(yè)。國際上在線圖書管理系統(tǒng)的前景看好,而國內(nèi)的在線圖書管理系統(tǒng)數(shù)量上也有了新的增長。它的建立使圖書館里拜托傳統(tǒng)的手工操作,實(shí)現(xiàn)通過互聯(lián)網(wǎng)而進(jìn)行的遠(yuǎn)程圖書借閱歸還,其發(fā)展前景將是非常深遠(yuǎn)的。1.3目前存在的問題隨著社會數(shù)字化的進(jìn)行,圖書館里系統(tǒng)雖然從手工操作慢慢過渡到了互聯(lián)網(wǎng)管理的階段,但也在線圖書管理系統(tǒng)也存在著很多問題1.3.1易遭病毒攻擊如今科技發(fā)達(dá)的同時,不少攻擊計算機(jī)的電腦病毒應(yīng)運(yùn)而生,如果數(shù)字圖書管理系統(tǒng)不小心被病毒入侵后,可能導(dǎo)致圖書資料丟失,借閱信息丟失,以至造成圖書的丟失。1.3.2微機(jī)操作技能欠缺雖然很多人都對互聯(lián)網(wǎng)和電腦的使用輕車熟路,但仍有很多人不能正確的使用微機(jī)和互聯(lián)網(wǎng),使在線圖書管理系統(tǒng)面臨的讀者用戶收到限制。1.3.3維護(hù)工作量大雖然相比手工管理圖書,節(jié)約了很多工作量,但工作量仍然很大,由于管理計算機(jī)的數(shù)據(jù)量較大,導(dǎo)致日后維護(hù)也有很大的困難。1.3.4運(yùn)營成本加大計算機(jī)管理圖書的操作,要求工作人員對計算機(jī)的環(huán)境以及軟件的掌握都有一定的要求,從而對招募管理人員增加了難度。2需求分析2.1用戶需求2.1.1數(shù)據(jù)需求本圖書管理系統(tǒng)主要的面向圖書館的管理者所開發(fā)的一款簡潔的后臺管理軟件。對于該系統(tǒng)的數(shù)據(jù)需求可從以下幾方面進(jìn)行考慮:1)從管理員角度分析,可得到管理員的帳號,用戶名,密碼,注冊時間等數(shù)據(jù)。2)從讀者角度分析,可得到讀者的學(xué)號,姓名,性別,所在院系,所借書籍等信息。3)從書籍的角度出發(fā),可得到書籍的圖書ISBN,書名,出版社的相關(guān)信息,作者的相關(guān)信息,圖書的價格,圖書的版本號,出版年份,圖書的封面圖片等數(shù)據(jù)信息。綜上,在開發(fā)該系統(tǒng)的數(shù)據(jù)層時可以從上面所列三方面去設(shè)計數(shù)據(jù)庫的表,進(jìn)而能將所需數(shù)據(jù)全部包含起來。2.1.2功能需求1.面向圖書的功能有:圖書列表的查詢,圖書入庫,圖書修訂,圖書的快速定位查詢,由于此系統(tǒng)所面向的功能有限,所以將圖書的作者和出版社加以細(xì)分,有出版社的管理,包括出版社的添加,出版社的修改,出版社的移除等,為了更方便的實(shí)現(xiàn)添加圖書。同時還有對圖書作者的單獨(dú)管理,如對作者的查詢,增加以及修改等。2.面向管理員的功能有:管理員的登錄,注冊功能,管理員的修改以及顯示等,還有管理員對讀者的管理,即對用戶實(shí)現(xiàn)的一些列操作,如對讀者的增刪改查,以及讀者借閱圖書和歸還圖書等。此系統(tǒng)功能設(shè)計以圖書和管理員為重心:本系統(tǒng)的主要功能模塊主要有以上所提及的這些,還有較多小功能設(shè)計,如jquery驗(yàn)證,一些特效的顯示等。用戶登錄用戶登錄作者管理出版社管理圖書管理借還查詢讀者管理用戶管理退出系統(tǒng)圖2-1功能需求圖2.2業(yè)務(wù)流程2.2.1系統(tǒng)業(yè)務(wù)流程本系統(tǒng)的總體業(yè)務(wù)流程圖如下圖2-1所示,數(shù)據(jù)庫中存儲了問卷和答卷的信息,問卷信息通過問卷制作、問卷導(dǎo)入兩種方式經(jīng)過問卷修訂的接口保存到數(shù)據(jù)庫中;答卷信息通過問卷調(diào)查、外部調(diào)查兩種方式保存到數(shù)據(jù)庫中。數(shù)據(jù)庫中答卷信息經(jīng)過數(shù)據(jù)的清洗生成決策樹,清洗過的數(shù)據(jù)可以再次保存到數(shù)據(jù)庫中,生成的決策樹可以提取規(guī)則保存到數(shù)據(jù)庫中,數(shù)據(jù)庫中的規(guī)則也可以通過簡單統(tǒng)計功能以文本文檔的形式導(dǎo)出到數(shù)據(jù)庫外部。DBDB出版社操作圖書操作圖書列表快速搜索圖書刪除圖書修訂圖書入庫出版社列表出版社添加出版社刪除出版社修改作者操作讀者操作作者添加搜索作者刪除作者修改作者列表讀者借書讀者還書讀者銷戶讀者修改讀者注冊讀者列表管理員操作管理員注冊管理員刪除管理員修改管理員列表圖2-2業(yè)務(wù)流程圖主要用例的用例描述圖書管理系統(tǒng)涉及到的用例包括:圖書借閱,圖書歸還,圖書查詢,讀者信息管理,圖書信息管理,用戶管理,作者信息管理,出版社信息管理,管理員信息管理等,現(xiàn)就系統(tǒng)的主要用例圖書借閱,圖書歸還,圖書查詢進(jìn)行詳細(xì)分析。圖書借還模塊用例描述:表2-1用例“圖書借閱”用例名稱圖書借閱標(biāo)識符BMS-1參與者讀者(用戶),圖書管理員描述讀書可以通過在圖書館書架上找尋自己要借閱的書籍,將指定書籍交付于管理員,向圖書管理員提出借閱請求,管理員在系統(tǒng)中先錄入該書籍的isbn查找到相應(yīng)信息,再對指定讀者進(jìn)行借閱操作,如果讀者沒注冊,管理員要事先給予讀者注冊,再將圖書交給讀者,借閱成功。前置條件1.圖書館找到自己想要借閱的書籍后置條件1.登錄;2.更新圖書借閱列表;主干過程借閱圖書讀者請求借閱新地圖書,并提供自己的編號以及指定圖書系統(tǒng)顯示被借閱圖書的詳細(xì)資料讀者提供自己的id系統(tǒng)存儲讀者和借閱的圖書,并將之存儲到數(shù)據(jù)庫中系統(tǒng)更新借閱列表異常1.讀者借閱已滿(未做要求)2.系統(tǒng)將錯誤信息顯示在借閱頁面3.系統(tǒng)重新啟動該用例4.數(shù)據(jù)庫中該圖書數(shù)據(jù)損壞被包含用例無被擴(kuò)展用例無優(yōu)先級高表2-2用例“圖書歸還”用例名稱圖書歸還標(biāo)識符UC-2參與者讀者,圖書管理員描述讀者將自己借閱的圖書歸還圖書館。前置條件1.到圖書操作服務(wù)臺歸還圖書后置條件1.根據(jù)圖書isbn找到圖書,進(jìn)入歸還頁面,更新圖書歸還列表;主干過程讀者請求歸還借閱的圖書并提供自己的編號讀者將書交給管理員管理員根據(jù)圖書編號查找到此書進(jìn)入歸還頁面進(jìn)行還書操作更新書籍列表異常1.該書超出了應(yīng)該歸還的時間范圍(未限定)2.系統(tǒng)將罰款信息顯示在歸還頁面(未限定)3.無法將圖書歸還被包含用例無被擴(kuò)展用例無優(yōu)先級高表2-3用例“圖書查詢”用例名稱圖書查詢 標(biāo)識符UC-3參與者圖書管理員描述讀者通過圖書的isbn,書名等信息對相應(yīng)的圖書進(jìn)行查詢。前置條件1.登錄;2.轉(zhuǎn)到圖書列表后置條件1.查詢頁面顯示相應(yīng)的圖書的信息主干過程圖書查詢管理員輸入想要查詢的圖書信息系統(tǒng)顯示相應(yīng)的圖書信息點(diǎn)擊每本書可以進(jìn)行單本圖書的詳細(xì)信息異常1.查詢的圖書不存在(第3步后)2.讀者輸入的圖書信息不能在數(shù)據(jù)庫中查詢到,后臺報錯3.系統(tǒng)顯示暫時無該圖書信息4.重新啟動該用例被包含用例無被擴(kuò)展用例無優(yōu)先級高3開發(fā)平臺和開發(fā)工具3.1技術(shù)框架本系統(tǒng)采用JSP+Servlet+DAO的mvc3層架構(gòu)模式,服務(wù)器端采用Tomcat,客戶端采用FireFox。應(yīng)用JavaBean和Jdbc數(shù)據(jù)庫連接,Javascript,Ajax等技術(shù),JQuery框架等。3.1.1J2EE平臺J2EE,即是Java2平臺企業(yè)版(Java2PlatformEnterpriseEdition),是原Sun公司(現(xiàn)已被甲骨文公司收購)為企業(yè)級應(yīng)用推出的標(biāo)準(zhǔn)平臺。它簡化了企業(yè)解決方案的開發(fā)、部署和管理相關(guān)復(fù)雜問題的體系結(jié)構(gòu),J2EE技術(shù)的基礎(chǔ)就是核心Java平臺或Java2平臺的標(biāo)準(zhǔn)版,J2EE不僅鞏固了標(biāo)準(zhǔn)版中的許多優(yōu)點(diǎn),例如"編寫一次、隨處運(yùn)行"的特性、方便存取數(shù)據(jù)庫的JDBCAPI、CORBA技術(shù)以及能夠在Internet應(yīng)用中保護(hù)數(shù)據(jù)的安全模式等等,同時還提供了對EJB(EnterpriseJavaBeans)、JavaServletsAPI、JSP(JavaServerPages)以及XML技術(shù)的全面支持。其最終目的就是成為一個能夠使企業(yè)開發(fā)者大幅縮短投放市場時間的體系結(jié)構(gòu)。J2EE體系結(jié)構(gòu)提供中間層集成框架用來滿足無需太多費(fèi)用而又需要高可用性、高可靠性以及可擴(kuò)展性的應(yīng)用的需求。通過提供統(tǒng)一的開發(fā)平臺,J2EE降低了開發(fā)多層應(yīng)用的費(fèi)用和復(fù)雜性,同時提供對現(xiàn)有應(yīng)用程序集成強(qiáng)有力支持,完全支持EnterpriseJavaBeans,有良好的向?qū)еС执虬筒渴饝?yīng)用,添加目錄支持,增強(qiáng)了安全機(jī)制,提高了性能。在開發(fā)圖書館借閱管理系統(tǒng)的過程中,應(yīng)用Myeclipse8.5,它可以在數(shù)據(jù)庫和J2EE的開發(fā)、發(fā)布,以及應(yīng)用程序服務(wù)器的整合方面極大的提高工作效率。Myeclipse是功能豐富的J2EE集成開發(fā)環(huán)境,包括了完備的編碼、調(diào)試、測試和發(fā)布功能,完整支持HTML,Struts,JSF,CSS,Javascript,SQL。3.1.2Web服務(wù)器和數(shù)據(jù)庫在系統(tǒng)的開發(fā)過程中使用的Web應(yīng)用服務(wù)器是Tomcat,是Apache軟件基金會(ApacheSoftwareFoundation)的Jakarta項(xiàng)目中的一個核心項(xiàng)目,由Apache、SUN和其他一些公司及個人共同開發(fā)而成。由于有了Sun的參與和支持,最新的Servlet和JSP規(guī)范總是能在Tomcat中得到體現(xiàn)。Tomcat是一個小型的輕量級應(yīng)用服務(wù)器,它運(yùn)行時占用的系統(tǒng)資源小、擴(kuò)展性好、支持負(fù)載平衡和郵件服務(wù)等開發(fā)應(yīng)用系統(tǒng)常用的功能,因此在中小型系統(tǒng)和并發(fā)訪問用戶不是很多的時候,經(jīng)常被使用。SQLServer是由Microsoft開發(fā)和推廣的關(guān)系數(shù)據(jù)庫系統(tǒng)(DBMS),它最初是由Microsoft、Sybase和Ashton-Tate三家公司共同開發(fā)的,并于1988年推出了第一個OS/2版本。為了開發(fā)的便捷快速,使用servlet容器對系統(tǒng)進(jìn)行控制,擔(dān)任系統(tǒng)的控制層,是程序的樞紐部分開發(fā)系統(tǒng)用的系統(tǒng)工具如表4.1所示:表3-1系統(tǒng)開發(fā)平臺和工具工具名稱用途JDK1.6.0_11MyEclipseSqlServer2005Tomcat6.0FireFoxJava開發(fā)工具包J2EE集成開發(fā)環(huán)境關(guān)系數(shù)據(jù)庫管理系統(tǒng)Web應(yīng)用服務(wù)器客戶端瀏覽器3.2工具選擇3.2.1Java語言誕生背景Java是一種應(yīng)用于分布式網(wǎng)絡(luò)環(huán)境中的程序設(shè)計語言,由Sun開發(fā),java語言廣為人知,得益于Internate的迅猛發(fā)展。有人說java語言無所不能,這中說法固然夸張,但它確實(shí)從一個側(cè)面反映出這種新生語言強(qiáng)大的威力與優(yōu)越性。一樣的應(yīng)用程序、Web服務(wù)器乃至手機(jī)的嵌入式系統(tǒng),java都足以勝任,并且表現(xiàn)得十分出色。特別是,java對網(wǎng)絡(luò)提供了強(qiáng)有力的支持,這也是這種奇妙語言的魅力所在。3.2.2Java語言的特點(diǎn)Java是一種被廣泛使用的網(wǎng)絡(luò)編程語言。它定位于網(wǎng)絡(luò)計算,它的幾乎所有特點(diǎn)都是服從于這一中心。同時Java語言也集中體現(xiàn)和充分利用了許多軟件技術(shù)的新成果。可移植性:這是Java語言區(qū)別于其他程序語言的最大的優(yōu)點(diǎn)——可移植性(平臺無關(guān)性),這正體現(xiàn)了Java語言的“一次編譯,處處運(yùn)行”的優(yōu)點(diǎn)。安全性:網(wǎng)絡(luò)上的應(yīng)用程序必須具有較高的安全性和可靠性,Java特有的沙箱機(jī)制已經(jīng)很好的提供了足夠的保障,同時去除了復(fù)雜且容易造成錯誤的指針。還有獨(dú)特的垃圾回收機(jī)制:Java語言提供了垃圾回收機(jī)制,用以自動回收內(nèi)存垃圾。這使得程序設(shè)計語言在編寫Java程序時不必特別考慮內(nèi)存管理的問題。使用Java編程的時候不必理會這種惱人且容易出錯的工作。3.2.3開發(fā)工具介紹開發(fā)源代碼工具為:MyEclipse8.5運(yùn)行平臺為:Tomcat,Tomcat性能可靠、操作和配置都十分簡單,運(yùn)行拋出異常時比較明顯,易解決。采用的數(shù)據(jù)庫為SqlServer2005。3.2.4開發(fā)環(huán)境介紹實(shí)驗(yàn)設(shè)備是一臺普通計算機(jī),操作系統(tǒng)為WindowsXPProfessional(SP3),CPU規(guī)格為英特爾Celeron(賽揚(yáng))雙核T3000@1.80GHz,內(nèi)存為2G,硬盤為250GB。4系統(tǒng)設(shè)計4.1總體結(jié)構(gòu)框圖讀者添加讀者添加讀者刪除讀者修改讀者查詢借書操作還書操作JavaWeb圖書管理系統(tǒng)作者管理出版社管理圖書管理用戶管理讀者借還作者添加作者刪除作者修改作者查詢出版社添加出版社修改出版社移除出版社查詢用戶注冊用戶修改用戶銷戶用戶查詢圖書入庫圖書刪除圖書查詢圖書修訂圖4-1系統(tǒng)結(jié)構(gòu)框圖4.2數(shù)據(jù)庫結(jié)構(gòu)設(shè)計4.2.1數(shù)據(jù)庫概念結(jié)構(gòu)設(shè)計(ER圖) 讀者讀者借閱閱圖書ISBN書名版本號價格封面借閱期限借閱狀態(tài)可借閱數(shù)出版社出版社ID出版社名屬于屬于作者姓名作者ID讀者ID姓名學(xué)號性別院系圖4-2圖書管理系統(tǒng)全局E-R圖4.2.2數(shù)據(jù)庫邏輯結(jié)構(gòu)設(shè)計E-R圖向關(guān)系模型的轉(zhuǎn)換:讀者(讀者ID,姓名,學(xué)號,性別,所在院系)此為讀者實(shí)體對應(yīng)的關(guān)系模式管理員(管理員ID,姓名,帳號,密碼,注冊時間)此為管理員實(shí)體對應(yīng)的關(guān)系模式圖書(ISBN,書名,出版社,價格,版本號,出版日期,圖書圖片,作者,庫存量,借閱狀態(tài))此為圖書實(shí)體對應(yīng)的關(guān)系模式作者(作者ID,作者的姓,作者的名)此為作者實(shí)體對于的關(guān)系模式出版社(出版社ID,出版社名)此為出版社實(shí)體的關(guān)系模式借閱(圖書ISBN,讀者ID)此為聯(lián)系“借閱”的關(guān)系模型歸還(圖書ISBN,讀者ID)此為聯(lián)系“歸還”的關(guān)系模式borrowUserborrowUserborrowIDborrowNamestudyNumsexdepartmenttitleIsbnTitleEditionNumCopyrightpubliserIdImageFilepriceborrowTimeisBorrowborrowIDpublihserIdpubliserNamepublishersauthorIdfirstNamelastNameauthorsauthorIdisbnauthorIsbnbookUsersuserIdaccountpasswordnamecreateTime圖4-2各實(shí)體間聯(lián)系圖數(shù)據(jù)模型的優(yōu)化:1)確定數(shù)據(jù)依賴。2)對于各個關(guān)系模式之間的數(shù)據(jù)依賴進(jìn)行極小化處理,消除冗余的聯(lián)系。3)按照數(shù)據(jù)依賴的理論對關(guān)系模式進(jìn)行逐一分析。4)按照要求分析階段得到的處理要求,分析這樣的應(yīng)用環(huán)境這些模式是否合適。確定是否要對某些模式進(jìn)行合并或分解。5)對關(guān)系模式進(jìn)行必要的分解,提高數(shù)據(jù)操作的效率和存儲空間的利用率。(水平分解,垂直分解)。4.2.3數(shù)據(jù)庫表設(shè)計根據(jù)系統(tǒng)需求,可以進(jìn)行具體的表的設(shè)計,表4-1是所有數(shù)據(jù)庫表的匯總。表4-1數(shù)據(jù)庫匯總表表名說明authors作者表,存放書籍的作者相關(guān)信息publishers出版社表,存放書籍的出版社相關(guān)信息title圖書表,存放與書籍相關(guān)的所有信息authorISBN作者表和圖書表的關(guān)聯(lián)表borrowUser讀者列表,存放讀者借書的相關(guān)信息bookusers管理員表,存放管理員的相關(guān)信息數(shù)據(jù)庫中的各個表的邏輯結(jié)構(gòu)設(shè)計結(jié)果如下面的幾個表格所示,每個表格表示數(shù)據(jù)庫中的一個表。表4-2作者表(authors)字段名類型說明authorIDintPrimaryKeyfirstNamevarchar(20)姓lastNamevarchar(30)名表4-3出版社表(publishers)字段名類型說明publisherID int PrimaryKeypublisherNamevarchar(30)出版社名表4-4圖書表(titles)字段名類型說明isbnvarchar(20)PrimaryKeytitlevarchar(100)圖書名,非空editionNumberint版本號,非空publisherIDint外鍵,出版社ID,非空imageFilevarchar(20)文件圖片路徑pricefloat圖書價格borrowTimeint借閱最大期限isBorrowint是否被借出borrowIDint外鍵,讀者ID,非空表4-5圖書作者關(guān)聯(lián)表(authorISBN)字段名類型說明authorIDint外鍵,作者IDisbnvarchar(20)外鍵,圖書ISBN表4-6讀者表(borrowUser)字段名類型說明borrowIDintPrimaryKeyborrowNamevarchar(50)讀者姓名,非空departmentvarchar(50)所在系sexvarchar(50)性別studyNumvarchar(20)學(xué)號,非空表4-7管理員表(bookusers)字段名類型說明userIdintPrimaryKeyaccoutvarchar(20)帳號,非空passwordvarchar(20)密碼,非空namevarchar(20)用戶名,非空createTimedatatime創(chuàng)建時間4.3系統(tǒng)各模塊功能4.3.1系統(tǒng)管理員模塊功能該模塊主要包括對管理員進(jìn)行注冊,銷戶,修改賬戶信息等。管理員可以通過注冊一個賬號登錄管理系統(tǒng),之后對所注冊用戶進(jìn)行統(tǒng)一管理,用戶列表顯示了所有注冊用戶的用戶名,密碼,帳號以及注冊時間等操作,管理員可以對所有注冊的帳號進(jìn)行修改和移除。4.3.2讀者模塊功能該模塊主要有對讀者用戶的注冊,銷戶修改功能。讀者列表主要顯示讀者的姓名,學(xué)號,性別,所在系,這里主要存放借書還書的對象。如果想要借書或還書,就必須先通過管理員登錄進(jìn)行注冊,成為該系統(tǒng)的讀者用戶,進(jìn)而才能對書籍進(jìn)行借還。4.3.3圖書借還模塊功能該模塊主要是對圖書進(jìn)行借還操作的一個管理模塊,列表主要顯示圖書的isbn號,書名,借閱狀態(tài)以及最大借閱期限等信息。對于書名加以不同的鏈接,由于圖書和作者的關(guān)系是一對多,即一本圖書只能借給一個人,一個人可以借多本不同的圖書,所以根據(jù)每本書的借閱狀態(tài)不同,鏈接對象也不一樣,當(dāng)此書已借出,點(diǎn)擊進(jìn)入的就是歸還頁面,歸還對象即為借書的讀者;若此書狀態(tài)為未借出,則點(diǎn)擊鏈接會進(jìn)入到借書頁面,借書對象是所有注冊的讀者用戶。管理員可以選擇某一位用戶進(jìn)行借出工作。4.3.4圖書管理模塊功能該模塊主要是對圖書進(jìn)行統(tǒng)一的管理,功能包括對圖書的入庫,移出,修訂,快速檢索等,圖書列表主要顯示圖書的isbn,書名,出版社,價格,版本號,出版年份。點(diǎn)擊書名進(jìn)入圖書詳細(xì)頁面,能看到該圖書的詳細(xì)信息,除剛才所說信息外還有該書籍的作者以及圖片,和正被借閱的讀者用戶名。同時在列表頁面可根據(jù)圖書的isbn和書名進(jìn)行模糊查詢,能更好的定位某本書或某些書。4.3.5出版社管理模塊功能該模塊主要是對圖書的出版社做一統(tǒng)一管理,將其單獨(dú)作為一模塊的原因是因?yàn)?,出版社?shù)量較少,可以單獨(dú)存放一數(shù)據(jù)庫表,在添加或修改圖書時可以將表中出版社進(jìn)行遍歷顯示,若要添加圖書的出版社在數(shù)據(jù)庫表中沒有,可以在該模塊下添加相應(yīng)的出版社,在進(jìn)行遍歷。該模塊還包括刪除修改出版社等功能。4.3.6作者管理模塊功能該模塊主要是對圖書的作者進(jìn)行統(tǒng)一管理,將其單獨(dú)作為一個模塊,可以在添加書籍的時候?qū)ψ髡叩奶砑訉?shí)現(xiàn)方便的管理,,對于新書的作者,可以在此模塊中進(jìn)行添加,類似的功能還有修改和刪除作者。5系統(tǒng)實(shí)現(xiàn)5.1開發(fā)步驟1、靜態(tài)頁面制作(html代碼,frame應(yīng)用,css應(yīng)用)2、利用JDBC,比較簡單的實(shí)現(xiàn)數(shù)據(jù)庫存取操作(二層結(jié)構(gòu))3、分析二層結(jié)構(gòu)帶來的問題,改進(jìn)該結(jié)構(gòu),引入數(shù)據(jù)訪問層。4、簡單的數(shù)據(jù)訪問層實(shí)現(xiàn)數(shù)據(jù)庫存取操作5、簡單的數(shù)據(jù)訪問層帶來的問題以及如何改進(jìn)6、數(shù)據(jù)訪問層設(shè)計:公共的數(shù)據(jù)庫連接類DbConnection、數(shù)據(jù)訪問對象DAO的基類BaseDAO7、(Log4j的配置與應(yīng)用)。8、針對業(yè)務(wù)的數(shù)據(jù)訪問對象開發(fā),從AuthorDAO開始。9、作者管理的數(shù)據(jù)訪問層開發(fā)完畢,開始實(shí)現(xiàn)前臺JSP層的開發(fā),主要是CRUD操作。10、CRUD開發(fā)涉及問題:表單提交GET/POST方式、網(wǎng)頁傳值、request中文編碼、重定向等。11、增加簡單的JS校驗(yàn)。12、ok!開始進(jìn)入出版社模塊的開發(fā),和作者管理開發(fā)基本類似,開發(fā)速度明顯加快。13、圖書管理模塊分析,業(yè)務(wù)層略微復(fù)雜。14、圖書管理業(yè)務(wù)層開發(fā)、涉及事務(wù)操作、多表操作。15、圖書管理JSP層開發(fā),分析參數(shù)多的情況帶來的問題,引入JavaBean來實(shí)現(xiàn)request參數(shù)的自動獲取和設(shè)置。16、增加JS校驗(yàn)實(shí)現(xiàn)基本的數(shù)據(jù)驗(yàn)證。17、分頁的兩種策略介紹。編寫通用的分頁對象PageUtil,應(yīng)用該對象在圖書列表中實(shí)現(xiàn)內(nèi)存中分頁。18、繼續(xù)實(shí)現(xiàn)作者、出版社的分頁。19、為系統(tǒng)增加一張系統(tǒng)用戶表,完成系統(tǒng)用戶的CRUD。20、Session簡要介紹,用戶登錄以及登錄驗(yàn)證的開發(fā)。編寫通用的登錄驗(yàn)證,單獨(dú)作為文件包含到需要驗(yàn)證才能訪問的頁面中。21、增強(qiáng)用戶登錄功能,利用Session,使得可以記住用戶上次登錄的帳號。22、開放管理員用戶的注冊修改功能,并且加上jquery驗(yàn)證23、進(jìn)入讀者管理模塊開放,繼續(xù)使用servlet容器管理讀者的CURD24、系統(tǒng)退出功能增加。25、介紹Servlet中的過濾器,使用過濾器增強(qiáng)可維護(hù)性。改進(jìn)代碼,將request編碼交由過濾器處理,將登錄校驗(yàn)交由過濾器處理。(此系統(tǒng)的特殊性,無法使用過濾器改由另一種過濾方式)26、總結(jié)5.2詳細(xì)功能與編碼5.2.1管理員模塊1.登錄頁面截圖:圖5-1登陸界面代碼部分:通過網(wǎng)址的login.ii在web.xml文件中找到控制器ListUserServlet類,在獲得切割后字符串login,找到下面處理代碼,再調(diào)用DAO層login()方法進(jìn)行處理,如果傳入的帳號和密碼能夠獲得一個用戶,則讓其登陸成功,并加載用戶列表,若用戶名密碼不正確則提示錯誤信息。if(action.equals("/login")){ try{ Stringaccount=request.getParameter("userAccount"); Stringpassword=request.getParameter("password"); booleanflag=false; PrintWriterout=response.getWriter(); UserModeluser=dao.login(account.trim(),password.trim()); if(user!=null){ flag=true; session.setAttribute("userName",user.getUserName()); } out.print(flag); out.flush(); out.close(); }catch(Exceptione){ System.out.println("用戶登錄異常!"); e.printStackTrace(); thrownewServletException(); }數(shù)據(jù)層login()方法實(shí)現(xiàn):傳入兩個字符串變量,在用sql語句查詢數(shù)據(jù)庫,返回用戶對象。publicUserModellogin(finalStringaccount,finalStringpassword){ Stringsql=""; List<UserModel>list=null; sql="select*frombookuserswhereaccount=?andpassword=?"; list=super.querySql(sql,newIParamBingding(){ publicvoidbingParam(PreparedStatementstmt) throwsSQLException{ stmt.setString(1,account); stmt.setString(2,password); } },newUserRowMapper()); return(list.size()==0||list==null)?null:list.get(0); }2.列表顯示頁面截圖:圖5-2管理員列表顯示模塊代碼部分: 控制器代碼,頁面通過請求list轉(zhuǎn)到web.xml通過匹配找到servlet包下面的ListUserServlet類,然后通過字符串切割得到list字符串,根據(jù)list找到下面控制器代碼,再調(diào)用數(shù)據(jù)層的queryAll部分查詢數(shù)據(jù)庫的所有管理員信息,并在列表上顯示。 if(action.equals("/list")){ try{ List<UserModel>users=dao.queryAll(); request.setAttribute("users",users); //step2獲得轉(zhuǎn)發(fā)器 RequestDispatcherrd= request.getRequestDispatcher("userMain.jsp"); //step3轉(zhuǎn)發(fā) rd.forward(request,response); }catch(Exceptione){ e.printStackTrace(); thrownewServletException(); } queryAll()方法的實(shí)現(xiàn)(查詢所有管理員用戶的信息):publicList<UserModel>queryAll(){ Stringsql="select*frombookusers"; returnsuper.querySql(sql,newUserRowMapper()); } queryAll()調(diào)用querySql()方法進(jìn)行sql查詢語句操作 publicListquerySql(Stringsql,IRowMappermapper){ Connectionconn=null; PreparedStatementstmt=null; ResultSetrs=null; Listlist=newArrayList(); try{ conn=db.getConnection(); stmt=conn.prepareStatement(sql); logger.debug(sql); rs=stmt.executeQuery(); while(rs.next()){ Objectobj=mapper.mappingRow(rs); list.add(obj); } }catch(Exceptione){ logger.debug("執(zhí)行sql語句異常"); e.printStackTrace(); }finally{ db.closeResultSet(rs); db.closeStatement(stmt); db.closeConnection(conn); } returnlist; }3.管理員注冊截圖:圖5-3管理員注冊模塊代碼部分:根據(jù)regist.ii找到此類的部分,在從頁面獲得文本框的內(nèi)容,通過業(yè)務(wù)層方法save()將用戶注冊信息保存到數(shù)據(jù)庫,并調(diào)用通用類的方法getAccount()給用戶生成隨機(jī)且不重復(fù)帳號,作為用戶登錄時的id。try{ StringuserName=request.getParameter("username"); System.out.println(userName); Stringpassword=request.getParameter("pwd"); UserModeluser=newUserModel(); user.setUserName(userName); user.setPassword(password); dao.save(user); //用session保存用戶帳號 session.setAttribute("userName",userName); Stringacc=dao.getAccount(userName,password); session.setAttribute("account",acc); response.sendRedirect("bookusers/registOk.jsp"); }catch(Exceptione){ response.sendRedirect("bookusers/registFail.jsp"); }生成圖片驗(yàn)證碼的方法: Map<String,BufferedImage>map=ImageUtil.getImage(); Stringcode=map.keySet().iterator().next(); //將驗(yàn)證碼暫時保存,用來與用戶輸入做比較 session.setAttribute("code",code); BufferedImageimage=map.get(code); response.setContentType("image/jepg"); OutputStreamops=response.getOutputStream();//對原始圖片(image)按照指定的壓縮算法(jpeg)進(jìn)行壓縮,然后再輸出到ops javax.imageio.ImageIO.write(image,"jpeg",ops); ops.close();生成隨機(jī)不重復(fù)賬號:通過所在年份和0-9999之間的隨機(jī)數(shù)之和產(chǎn)生4-7位不等的數(shù)據(jù),作為唯一的id/***生成四到7位不等的隨機(jī)數(shù)*@authorAdministrator**/publicclassAccountMaker{ staticRandomrandom=newRandom(); publicstaticStringgetAccount(){ List<Character>list=newArrayList<Character>(); Stringstr=getYear(); intnum=str.length(); intk=random.nextInt(num); System.out.println(k); for(inti=0;i<num;i++){ list.add(str.charAt(i)); } for(intj=0;j<k;j++){ Stringc=String.valueOf(random.nextInt(9)); list.add(k,c.charAt(0)); } StringBuffersb=newStringBuffer(); for(Characterc:list){ sb.append(c); } returnsb.toString(); } publicstaticStringgetYear(){ longnow=System.currentTimeMillis()/1000/3600/24/365+1970+random.nextInt(9999); returnString.valueOf(now); }}5.2.2讀者管理模塊1.讀者列表截圖:圖5-4讀者列表代碼部分:此控制器為BorrowUserServlet,里面主要對讀者的一些功能進(jìn)行處理并轉(zhuǎn)發(fā)頁面。該控制器會響應(yīng)用戶在瀏覽器輸入的后綴帶.uu的請求,如“l(fā)ist.uu”。當(dāng)web.xml接收到“l(fā)ist.uu”時會自動跳到該類中處理。該類分割字符串得到“l(fā)ist”,在跳到以下分支代碼處理if(action.equals("/list")){ try{ List<BorrowUser>users=dao.findAll(); request.setAttribute("users",users); //step2獲得轉(zhuǎn)發(fā)器 RequestDispatcherrd=request .getRequestDispatcher("userMain.jsp"); //step3轉(zhuǎn)發(fā) rd.forward(request,response); }catch(Exceptione){ e.printStackTrace(); thrownewServletException(); } }該分支調(diào)用DAO層findAll()方法查詢數(shù)據(jù)庫,返回讀者列表的list集合。以下是findAll()方法的實(shí)現(xiàn):publicList<BorrowUser>findAll(){ Stringsql="select*fromborrowUser"; returnsuper.querySql(sql,newBorrowUserMapper()); }同樣此處調(diào)用數(shù)據(jù)封裝的querySql()方法,此處要對sql查詢的結(jié)果集進(jìn)行處理,故創(chuàng)建一個內(nèi)部類BorrowUserMapper:classBorrowUserMapperimplementsIRowMapper{ publicObjectmappingRow(ResultSetrs)throwsSQLException{ BorrowUseruser=newBorrowUser(); user.setBorrowId(rs.getInt("borrowID")); user.setBorrowName(rs.getString("borrowName")); user.setStudyNum(rs.getString("studyNum")); user.setSex(rs.getString("sex")); user.setDepartMent(rs.getString("department")); returnuser; }2.添加讀者:截圖:圖5-5添加讀者代碼部分:對于讀者的數(shù)據(jù)庫表進(jìn)行分析得到,添加讀者信息應(yīng)該包括姓名,學(xué)號,性別,所在系等字段。在點(diǎn)擊添加按鈕時,用戶會發(fā)送add.uu請求,web.xml會將請求轉(zhuǎn)發(fā)到控制器。再根據(jù)分割得到字符串“add”,進(jìn)入以下代碼塊:通過request獲得頁面參數(shù),b并將其綁定到實(shí)體類BorrowUser的user實(shí)體中,再調(diào)用DAO層add方法,將數(shù)據(jù)插入數(shù)據(jù)庫中try{ StringborrowName=newString(ParamUtil.getString(request.getParameter("borrowName")).getBytes("iso-8859-1"),"gbk"); StringstudyNum=newString(ParamUtil.getString(request.getParameter("studyNum")).getBytes("iso-8859-1"),"gbk"); Stringsex=newString(ParamUtil.getString(request.getParameter("sex")).getBytes("iso-8859-1"),"gbk"); Stringdepartment=newString(ParamUtil.getString(request.getParameter("department")).getBytes("iso-8859-1"),"gbk"); BorrowUseruser=newBorrowUser(); user.setBorrowName(borrowName); user.setStudyNum(studyNum); user.setSex(sex); user.setDepartMent(department); dao.add(user); response.sendRedirect("jump_do.jsp"); }catch(Exceptione){ e.printStackTrace(); thrownewServletException(); }DAO層add()方法的實(shí)現(xiàn):publicvoidadd(finalBorrowUserbUser){ Stringsql="insertintoborrowUser(borrowName,studyNum,sex,department)values(?,?,?,?)"; super.updateSql(sql,newIParamBingding(){ publicvoidbingParam(PreparedStatementstmt)throwsSQLException{ stmt.setString(1,bUser.getBorrowName()); stmt.setString(2,bUser.getStudyNum()); stmt.setString(3,bUser.getSex()); stmt.setString(4,bUser.getDepartMent()); } }); }5.2.3圖書借還管理模塊1.借還列表截圖:圖5-6圖書借還一覽代碼部分:此模塊控制器類為BookBRServlet,用戶進(jìn)入借還圖書的模塊,會以“l(fā)ist.rr”的方式去發(fā)送請求,此時web.xml會將請求轉(zhuǎn)到該控制器,經(jīng)控制器處理會得到字符串“l(fā)ist”進(jìn)而進(jìn)入以下代碼: Stringisbn=ParamUtil .getString(request.getParameter("qisbn")); StringbookName=ParamUtil.getString(request .getParameter("bookName")); StringqueryParam="&isbn="+isbn+"&bookName="+bookName; List<BookModel>books=dao.quickSearch(isbn,bookName); for(BookModelbook:books){ int[]countNum=dao.getCountAndNum(book.getTitle()); book.setBorrowNum(countNum[1]); book.setCount(countNum[0]); } request.setAttribute("books",books); request.setAttribute("queryParam",queryParam); //step2獲得轉(zhuǎn)發(fā)器 RequestDispatcherrd=request .getRequestDispatcher("bRMain.jsp"); //step3轉(zhuǎn)發(fā) rd.forward(request,response); 其中要將瀏覽器地址后附帶的參數(shù)用queryParam進(jìn)行綁定組合,以便后面的分頁操作,其次調(diào)用了quickSearch()方法進(jìn)行快速搜索,當(dāng)方法參數(shù)的isbn和書名為空時為全部檢索,不為空時為快速條件搜索。以下為quickSearch()方法體:publicList<BookModel>quickSearch(Stringisbn,Stringtitle)throwsSQLException{ Stringsql="selectt.*,publisherNamefromtitlestleftouterjoinpublisherspont.publisherID=p.publisherID"; sql+="whereisbnlike'%"+isbn+"%'andtitlelike'%"+title+"%'"; returnquerySql(sql,newTitleRowMapper()); }2.圖書借閱截圖:圖5-7圖書借閱代碼部分:對于圖書借還列表顯示的圖書狀態(tài)分為兩種,當(dāng)數(shù)據(jù)庫中圖書的借閱狀態(tài)字段為1時表明此書已借出,其顯示背景成灰色,當(dāng)點(diǎn)擊書名鏈接時,會根據(jù)借閱狀態(tài)自動判斷進(jìn)入歸還圖書的頁面還是借閱圖書的頁面。當(dāng)該圖書已經(jīng)借出,則進(jìn)入歸還頁面,該頁面顯示該圖書的借閱者、借閱期限、書名等詳細(xì)信息 intflag=Integer.parseInt(request.getParameter("br")); Stringisbn=ParamUtil .getString(request.getParameter("qisbn")); intborrowNum=Integer.parseInt(request.getParameter("borrowNum")); intcount=Integer.parseInt(request.getParameter("count")); BookModelbook=newBookModel(); book=dao.findBookByIsbn(isbn); book.setBorrowNum(borrowNum); book.setCount(count);將圖書綁定 request.setAttribute("book",book);如果圖書借閱標(biāo)志位為0說明,則轉(zhuǎn)發(fā)到該圖書的借閱頁面,進(jìn)行借閱操作: if(flag==0){ equest.getRequestDispatcher("bRDetails.jsp").forward( request,response); } 如果發(fā)生錯誤,則至錯誤頁面else{ request.getRequestDispatcher("fail.jsp").forward(request,response); } 3.圖書歸還截圖:圖5-8圖書歸還代碼部分:當(dāng)點(diǎn)擊背景條為灰色的書籍鏈接時,會進(jìn)入歸還頁面,此時標(biāo)志位為1:if(flag==1){ request.getRequestDispatcher("rBDetails.jsp").forward( request,response); }5.2.4圖書管理模塊1.圖書列表顯示截圖:圖5-9圖書列表顯示代碼部分:圖書管理模塊的控制器在ListBookServlet類中,其分辨的后綴為“.xx”,當(dāng)進(jìn)入圖書列表頁面時,瀏覽器會發(fā)送“l(fā)ist.xx”的請求到web.xml,web.xml根據(jù)后綴找到該控制器,在將請求切割成“l(fā)ist”字符串,到下面代碼塊:try{ Stringisbn=ParamUtil.getString(request.getParameter("qisbn")); StringbookName=newString(ParamUtil.getString(request.getParameter("bookName")).getBytes("iso-8859-1"),"GBK"); StringqueryParam="&isbn="+isbn+"&bookName="+bookName; List<BookModel>books=dao.quickSearch(isbn,bookName); request.setAttribute("books",books); request.setAttribute("queryParam",queryParam); //step2獲得轉(zhuǎn)發(fā)器 RequestDispatcherrd= request.getRequestDispatcher("booksMain.jsp"); //step3轉(zhuǎn)發(fā) rd.forward(request,response); }catch(Exceptione){ e.printStackTrace(); thrownewServletException(); }在獲得通過空的書名和isbn,去DAO層調(diào)用quickSearch()方法,查詢所有書籍2.圖書添加截圖:圖5-10圖書添加代碼部分:當(dāng)點(diǎn)擊圖書添加按鈕時,頁面會重定向到addBook.jsp頁面,如上圖。在該頁面將要添加圖書的各項(xiàng)信息。其中作者添加要從數(shù)據(jù)庫作者表中去選擇。當(dāng)添加的isbn號已存在數(shù)據(jù)庫時,則無法添加。添加isbn時,點(diǎn)擊檢查sibn按鈕,調(diào)用下面方法檢查isbn是否重復(fù):if(action.equals("/checkIsbn")){ try{ Stringisbn=ParamUtil.getString(request.getParameter("isbn")); booleanflag=dao.checkIsbn(isbn); PrintWriterout=response.getWriter(); out.print(flag); out.flush(); out.close(); }catch(Exceptione){ e.printStackTrace(); thrownewServletException(); } }對于添加信息的合理性檢查,代碼如下(jquery代碼):檢查isbn合理性: $("#checkISBN").click(function(){ $("#checkImg").show(); varisbn=$("#isbn").val(); if(isbn==""){ alert("isb不能為空!"); $("#checkImg").fadeOut(1000); flag0=false; }else{實(shí)行ajax同步處理,并發(fā)送post請求,調(diào)用checkIsbn()方法: $.ajaxSetup({async:false}); $.post( "checkIsbn.xx", {"isbn":isbn}, function(data){ if(data=="true"){ alert("isbn名可用"); $("#checkImg").fadeOut(1000); flag0=true; }else{ alert("isbn已經(jīng)存在"); $("#checkImg").fadeOut(1000); flag0=false; } }, "text" ); } }); $("#isbn").change(function(){ varisbnTxt=$(this).val(); if(isbnTxt==""){ $("#checkDetails").text("isbn不能為空").css("color","red"); flag1=false; }else{ $("#checkDetails").text(""); flag1=true; } });對書名的非空檢查: $("#bookName").

溫馨提示

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

評論

0/150

提交評論