趙越超 胡杰
摘 要:在計(jì)算機(jī)新技術(shù)的沖擊下,傳統(tǒng)的圖書管理方式會(huì)被逐漸淘汰,新型的圖書管理應(yīng)該結(jié)合“互聯(lián)網(wǎng)+”的思想使管理趨向簡單、安全、高效。該文主要以圖書管理系統(tǒng)為研究對象,通過需求分析、概要設(shè)計(jì)和數(shù)據(jù)庫設(shè)計(jì)等,詳細(xì)描述了基于JavaEE的圖書管理系統(tǒng)的實(shí)現(xiàn)過程,并在此實(shí)現(xiàn)過程中對容易出現(xiàn)的問題提供了解決方案。
關(guān)鍵詞:JavaEE;圖書管理系統(tǒng);互聯(lián)網(wǎng)+;數(shù)據(jù)庫設(shè)計(jì);系統(tǒng)設(shè)計(jì);圖書館
0 引 言
在近幾年,隨著教育事業(yè)的發(fā)展和網(wǎng)絡(luò)技術(shù)的廣泛普及,傳統(tǒng)的圖書管理方式已經(jīng)不再適用[1]。新型的圖書管理方式應(yīng)該趨向簡單、安全、高效。傳統(tǒng)的圖書管理的工作重點(diǎn)是對讀者借閱信息的登記,其一般會(huì)采用人工線下管理的方式,這種方式帶來的工作負(fù)擔(dān)會(huì)隨著借閱信息的增多而逐漸加重。這種情形下,不僅會(huì)加大資源的開銷,還會(huì)導(dǎo)致讀者借閱的困難。為了提高傳統(tǒng)的圖書管理效率,減少不必要的開銷,同時(shí)讓圖書管理更加科學(xué)化、智能化、效率化[2],開發(fā)設(shè)計(jì)了基于JavaEE的圖書管理系統(tǒng)。本系統(tǒng)界面友好、簡單易操作、功能強(qiáng)大,能夠智能地對借閱時(shí)間到期限的用戶提醒,避免資源浪費(fèi)。
1 需求分析
根據(jù)需求的不同將此設(shè)計(jì)劃分成了兩部分,分別為圖書館工作人員和讀者(學(xué)生和老師)。然后從不同的用戶角度出發(fā),進(jìn)行需求分析,大致概括如下:
讀者(學(xué)生和老師)可查閱借閱信息和自己的基本信息[3]。當(dāng)借閱時(shí)間到期限時(shí),可以有提示信息來進(jìn)行警示,避免讀者忘記還書。讀者還可以進(jìn)行在線提交延遲借閱時(shí)間的申請。
圖書館工作人員可以增加圖書到系統(tǒng)中,從而減小統(tǒng)計(jì)圖書的工作負(fù)擔(dān);同時(shí),要保證圖書館工作人員對圖書具備修改和刪除的權(quán)限。增加圖書時(shí)能夠動(dòng)態(tài)設(shè)置圖書類型,這樣符合實(shí)際的圖書分類情景。圖書館工作人員還需進(jìn)行借閱圖書的管理工作,對借閱書籍,歸還書籍要有很好的管理方式,避免手工勞作。圖書館工作人員能夠?qū)ψx者信息進(jìn)行管理,添加讀者時(shí)可以為老師和學(xué)生增添不同借閱書籍的權(quán)限[4]。
2 相關(guān)技術(shù)介紹
本系統(tǒng)設(shè)計(jì)主要是基于SSM架構(gòu)[5],即Spring,SpringMVC和MyBatis,系統(tǒng)前端界面使用了HTML+CSS+ Bootstrap實(shí)現(xiàn),數(shù)據(jù)庫使用MySQL,開發(fā)工具使用Eclipse。
Spring是一個(gè)輕量級(jí)的開源Java框架,用來裝配項(xiàng)目中Bean的大工廠,在配置文件中可通過指定使用特定的參數(shù)來調(diào)用實(shí)體類的構(gòu)造方法,從而實(shí)例化對象。
SpringMVC框架是基于MVC設(shè)計(jì)模式請求驅(qū)動(dòng)類型的輕量級(jí)框架,為JavaEE提供了各層的解決方案,包括視圖層、業(yè)務(wù)層和服務(wù)層,增強(qiáng)項(xiàng)目的擴(kuò)展性。
MyBatis是一個(gè)對象關(guān)系映射框架,對JDBC進(jìn)行輕量級(jí)的封裝,將POJO對象與數(shù)據(jù)表建立映射關(guān)系。MyBatis和Spring結(jié)合的要點(diǎn)是項(xiàng)目實(shí)體類中具有無參和有參的構(gòu)造方法。MyBatis負(fù)責(zé)Java后端和數(shù)據(jù)庫之間的數(shù)據(jù)交換。
Bootstrap是基于HTML,CSS,JavaScript開發(fā)的簡潔、直觀、強(qiáng)悍的前端開發(fā)框架,使得Web開發(fā)更加快捷。Bootstrap中包含了豐富的Web組件,根據(jù)這些組件,可以快速地搭建一個(gè)漂亮、功能完備的前端界面。
3 系統(tǒng)概要設(shè)計(jì)
按照需求將此系統(tǒng)的使用者分為用戶端(教師和學(xué)生)和管理員端(圖書館工作人員)兩類,根據(jù)用戶的不同來對應(yīng)不同的功能權(quán)限,從而將此系統(tǒng)劃分為用戶子系統(tǒng)和管理員子系統(tǒng)兩部分[6]。
在用戶子系統(tǒng)中,使用者通過圖書管理員提供的賬號(hào)密碼(讀者)登錄系統(tǒng)主頁,然后用戶通過主頁鏈接進(jìn)入基本信息、借閱信息查詢、系統(tǒng)功能三個(gè)功能模塊[7],在模塊內(nèi)完成查看基本信息、修改基本信息、查詢借閱信息、延長借閱時(shí)間、修改密碼、注銷登錄等功能。
在圖書管理員子系統(tǒng)中,使用者通過賬號(hào)密碼(管理員)登入系統(tǒng)主頁,然后管理員通過主頁鏈接進(jìn)入圖書管理、圖書類型、讀者管理、用戶管理、借閱信息、系統(tǒng)功能六個(gè)功能模塊。在圖書管理模塊中,可以對圖書進(jìn)行增加、修改、刪除;在圖書類型中,可以對圖書的類型進(jìn)行增加、修改、刪除操作,動(dòng)態(tài)地把圖書類型增加到下拉列表中;讀者管理模塊中,可以增加讀者的信息;在用戶管理模塊中,可以增加讀者所屬的類型,不同的用戶類型將有不同的權(quán)限;在借閱模塊中,可以對借閱的信息進(jìn)行管理;在系統(tǒng)功能模塊中可以進(jìn)行修改密碼和退出系統(tǒng)[8]等操作。
4 數(shù)據(jù)庫設(shè)計(jì)
根據(jù)圖書管理員和讀者的需求,設(shè)計(jì)管理員信息表、讀者信息表、借閱信息表等[9],管理員信息見表1所列,讀者信息見表2所列,借閱信息見表3所列。
5 系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
5.1 讀者(教師和學(xué)生)
5.1.1 登錄/注銷模塊
讀者在瀏覽器中輸入地址,可看到系統(tǒng)登錄界面,選擇用戶登錄、輸入用戶名和密碼,當(dāng)用戶名或者密碼沒有填寫時(shí),會(huì)提示“這是必填字段”的信息,并且讀者不能登錄系統(tǒng)。這里提示信息是在JSP頁面引入Bootstrap插件,在必填項(xiàng)的中加入required屬性來進(jìn)行實(shí)現(xiàn)。在讀者正確輸入用戶名和密碼,點(diǎn)擊“登錄系統(tǒng)”后,登錄頁面會(huì)向Java后端發(fā)送一個(gè)攜帶用戶信息的請求。這個(gè)請求被Spring中的DispatcherServlet攔截并提交給UserController函數(shù)進(jìn)行處理[10]。UserController使用MyBatis連接數(shù)據(jù)庫進(jìn)行核對,當(dāng)用戶名和密碼完全匹配數(shù)據(jù)庫保存的數(shù)據(jù)后,頁面會(huì)跳轉(zhuǎn)到讀者首頁,同時(shí)在Java后端增加對讀者起到會(huì)話控制作用的Session鍵值對;否則會(huì)出現(xiàn)“用戶名或密碼不正確”的提示信息框[11],讓讀者再次輸入賬號(hào)和密碼。信息框的實(shí)現(xiàn)是在Java后端重新生成一個(gè)提示頁面,讀者在點(diǎn)擊信息框上的確定后,頁面從定向跳轉(zhuǎn)到讀者登錄界面中。當(dāng)讀者需要退出系統(tǒng)時(shí),點(diǎn)擊界面右上角的“注銷登錄”,然后Java后端會(huì)把增加的Session鍵值對移除,實(shí)現(xiàn)注銷功能[12]。
5.1.2 基本信息模塊
讀者在功能欄中點(diǎn)擊“基本信息”,Java后端通過Session中的id定位到數(shù)據(jù)庫中讀者的信息,讀取出來,封裝到Reader實(shí)體類中,然后通過EL表達(dá)式在user-readers-list.jsp頁面中顯示出當(dāng)前讀者的基本信息[13]。讀者在“基本信息”模塊擁有修改的權(quán)限,以保證讀者信息的正確性。讀者雖然具有修改權(quán)限,但是不會(huì)對讀者類型進(jìn)行修改。這一點(diǎn)的實(shí)現(xiàn)是把user-readers-edit.jsp頁面中的“讀者類型”設(shè)置為隱藏表單域,這樣讀者就無法進(jìn)行修改,同時(shí)也保證了“讀者類型”屬性中保存的數(shù)據(jù)不會(huì)遺失。讀者在修改基本信息時(shí),其中只有E-mail和QQ是選填項(xiàng),其他為必填項(xiàng)。如果讀者必填項(xiàng)沒有填寫,表單則無法提交,這一功能的實(shí)現(xiàn)是運(yùn)用Bootstrap插件的data-toggle屬性[14],在
5.1.3 借閱信息模塊
這一模塊是讀者最關(guān)注的模塊,也是系統(tǒng)最重要的基本模塊。讀者在點(diǎn)擊此模塊后,數(shù)據(jù)庫會(huì)通過讀者的借閱編號(hào)查找借閱信息。不使用讀者姓名查找的原因是避免讀者姓名重復(fù)的情況。借閱時(shí)間的實(shí)現(xiàn)是在讀者實(shí)體類中加入String類型的borrowDate屬性,并且在數(shù)據(jù)庫URL后面加入&zeroDateTimeBehavior=convertToNull,來保證日期類型存儲(chǔ)到數(shù)據(jù)庫中不會(huì)出錯(cuò)[15]。
5.2 管理員(圖書館工作人員)
5.2.1 圖書類型模塊
在這個(gè)模塊中主要實(shí)現(xiàn)圖書類型的動(dòng)態(tài)添加,因此用監(jiān)聽器來解決圖書館工作人員的這個(gè)需求[16]。監(jiān)聽器的實(shí)現(xiàn)需要使用web.xml 3.0以上版本,并且導(dǎo)入javax.servlet-api-3.0.1架包。如果使用的是3.0以下版本,則需在web.xml中加入
5.2.2 圖書管理模塊
在這個(gè)模塊中能夠?qū)崿F(xiàn)對圖書數(shù)量的統(tǒng)計(jì),減少圖書館工作人員的負(fù)擔(dān)。管理員點(diǎn)擊“圖書管理”模塊后,Java后端查詢數(shù)據(jù)庫中的圖書信息,并顯示在books-list.jsp頁面中。圖書信息的獲取過程是,先在Java后端設(shè)置Model鍵值對,然后books-list.jsp頁面調(diào)用EL表達(dá)式來完成。其中,圖書類別的顯示是通過保存在全局作用域servletContextEvent的鍵值名來進(jìn)行獲取,books-list.jsp頁面先用forEach來遍歷所有的圖書類型,然后通過判斷圖書類型id和圖書中的圖書類型id是否相等來尋找當(dāng)前圖書的圖書類型。圖書圖片的顯示是Java后端到數(shù)據(jù)庫中獲取圖片的路徑數(shù)據(jù),然后到相應(yīng)的位置進(jìn)行加載實(shí)現(xiàn)的。在增加圖書時(shí),需要填寫序號(hào)、圖書條形碼、圖書名稱、圖書類別、圖書價(jià)格、出版日期、出版社和圖書圖片相關(guān)信息。圖書圖片用Bootstrap-fileinput圖片上傳插件來輔助完成。圖書價(jià)格和庫存輸入的信息要保證為數(shù)字,不能為其他類型,具體是通過在中加入Bootstrap的pattern屬性[17],設(shè)置為pattern="^[0-9]+(\.[0-9]{0,2})?$"來完成這個(gè)要求的。最后在
5.2.3 借閱信息模塊
在這個(gè)模塊中可以幫助圖書館工作人員進(jìn)行圖書的借閱和歸還管理,把傳統(tǒng)的手工操作轉(zhuǎn)化為線上操作。因?yàn)榫€上操作可以極大地簡化圖書館工作人員借書和還書的工作負(fù)擔(dān)。圖書館工作人員通過點(diǎn)擊“借閱信息”來獲取讀者所有的借閱信息。當(dāng)圖書館工作人員需要了解近期的借閱情況,可以點(diǎn)擊“借閱時(shí)間”屬性列,使借閱信息按照時(shí)間來進(jìn)行排序,其他屬性列同樣也可以通過點(diǎn)擊來進(jìn)行排序,這樣的設(shè)計(jì)是用來滿足圖書館工作人員多維度的搜索情況。屬性列的排序是通過在