springboot+乡村图书管理系统 毕业设计-附源码191505
基于java的鄉村圖書館管理系統的設計與實現
摘?要
信息化社會內需要與之針對性的信息獲取途徑,但是途徑的擴展基本上為人們所努力的方向,由于站在的角度存在偏差,人們經常能夠獲得不同類型信息,這也是技術最為難以攻克的課題。針對鄉村圖書館管理等問題,對圖書館管理進行研究分析,然后開發設計出圖書館管理系統以解決問題。
圖書館管理系統主要功能模塊包括資源庫收藏、書籍分類、圖書借閱、圖書歸還預約,采取面對對象的開發模式進行軟件的開發和硬體的架設,能很好的滿足實際使用的需求,完善了對應的軟體架設以及程序編碼的工作,采取Mysql作為后臺數據的主要存儲單元,使用Java語言,采用基于 MVVM模式的SSM技術進行開發,數據方面主要采用的是微軟的MySQL關系型數據庫來作為數據存儲媒介,配合前臺HTML+CSS 技術完成系統的開發。本次報告,首先分析了研究的背景、作用、意義,為研究工作的合理性打下了基礎。針對圖書館服務系統的各項需求以及技術問題進行分析,證明了系統的必要性和技術可行性,然后對設計系統需要使用的技術軟件以及設計思想做了基本的介紹,最后來實現圖書館服務系統和部署運行使用它。
關鍵詞:圖書館管理;Java技術;Mysql數據庫
Design and Implementation of Library Service System
Abstract
In the information society, there is a need for targeted information access, but the expansion of access is basically the direction of people's efforts. Due to the deviation of the perspective, people can often obtain different types of information, which is also the most difficult subject for technology to overcome. Aiming at the problems of library service, this paper studies and analyzes the library service, and then develops and designs the library service system to solve the problems.
The main functional modules of the library service system include resource library collection, book borrowing, picture review, library seat reservation, Library Navigation and message feedback. The object-oriented development mode is adopted for software development and hardware erection, which can well meet the needs of practical use, and improve the corresponding software erection and program coding, MySQL is used as the main storage unit of background data, Java language is used, SSM technology based on MVVM?mode is used for development, and MyEclipse 2017 CI 10 compiler is used. In terms of data, Microsoft's MySQL relational database is mainly used as the data storage medium, and the system development is completed with the foreground HTML + CSS technology. This report first analyzes the background, function and significance of the research, which lays a foundation for the rationality of the research work. This paper analyzes the various requirements and technical problems of the library service system, proves the necessity and technical feasibility of the system, then makes a basic introduction to the technical software and design ideas needed to design the system, and finally realizes the operation and use of the library service system and departments.
Key words:Library service; Java technology; The Mysql database
目 ?錄
第1章 緒論
1.1?研究背景與意義
1.2?開發現狀
1.3?研究方法
第2章 相關技術介紹
2.1J2EE技術
2.2 MVVM模式
2.3 Mysql數據庫
2.4 B/S結構
2.5 SSM框架
第3章 系統分析
3.1?可行性分析
3.2?功能需求分析
3.2.1?前臺用戶功能
3.2.2?后臺管理員功能
3.3?非功能需求分析
3.4?安全性需求分析
3.4.1?系統的安全性
3.4.2?數據的安全性
3.5?數據流程分析
第4章 系統設計
4.1?系統架構設計
4.2?系統總體設計
4.3?系統功能設計
4.4?數據庫設計
4.4.1?數據需求分析
4.4.2?數據庫概念設計
4.4.3?數據庫表設計
第5章 系統實現
5.1?數據庫訪問層的實現
5.2?注冊模塊的實現
5.3?登錄模塊的實現
5.4?用戶資料修改模塊的實現
5.5?資源庫數據管理模塊的實現
5.6?圖書借閱模塊的實現
5.7?圖書管理模塊的實現
5.8?圖書歸還模塊的實現
第6章 系統測試 29
6.1?測試目的 29
6.2?功能測試 30
6.3?性能測試 31
第7章 總結與展望 32
參考文獻 33
致謝 34
隨著人們知識層次的提高,圖書館成為日常生活中不可缺少的一部分。圖書館管理應運而生下,書籍就漸漸地成為人們獲取并增長知識的主要途徑,而圖書館就自然而然地在人們的生活中占據了一定的位置,圖書館的存書量和業務量大,僅僅靠傳統的管理是不可行的。如何科學地管理圖書館不但關系到讀者求知的方便程度,也關系到圖書館的發展,因此,開發一套完善的圖書館管理系統就必不可少了,一線城市大型圖書館運用完善的圖書管理系統,更好的輔助圖書館的日常管理,鄉鎮,鄉村由于較為落后,很多方面的不完善,有些甚至沒有開發,研究鄉村圖書館管理系統如何設計以及實現是更有助于普通圖書館日常管理以及更好幫助提高鄉村人們的知識水平的提高。
所謂的管理信息系統是介于信息論,經濟管理理論,統計學與運籌學及計算機科學之間的一門邊緣性,綜合性,系統性的交叉科學,它是隨著管理科學,信息技術,計算機技術等的發展而產生和發展起來的。
隨著計算機技術的飛速發展,計算機在企業管理中應用的普及,利用計算機實現圖書信息的管理勢在必行。目前一些小型的或者是鄉鎮、農村圖書管理的借閱工作部分大多數還是手工管理,工作效率很低,并且不能及時了解圖書的種類和讀者們比較需求的圖書等,不能更好的適應當前讀者的借閱要求。手工管理還存在這許多弊端,由于不可避免的人為因素,造成數據的遺漏、誤報。計算機信息化管理有著儲存量大,速度快等許多優點,提供給我們的處理信息及時快捷,因此我們利用計算機提供給我們的信息對讀者的借閱過程形成一整套動態的管理能夠極大地提高圖書管理管理的效率,這也是圖書管理的科學化、正規化管理,與世界、城市接軌的重要條件。
隨著信息技術在管理上越來越深入而廣泛的應用,管理信息系統的實施在技術上已逐步成熟。管理信息系統是一個不斷發展的新型學科,圖書館要生存要發展,要高效率地日常圖書館管理工作等做到位,就必須加強設計一套適應自己館內情況的日常事務管理系統,即加強對圖書館內方方面面的有效管理。
管理信息系統就是我們常說的MIS (Management Information System),在強調管理,強調信息的現代社會中它變得越來越普及。MIS是一門新的學科,它跨越了若干個領域,比如管理科學、系統科學,運籌學、統計學以及計算機科學。在這些學科的基礎上,形成信息收集和加工的方法,從而形成一個縱橫交織的系統。管理信息系統是現代信息管理工作不可缺少的一部分,是適應現代高圖書信息管理尺度的要求、推動信息管理走向科學化、規范化的必要條件。
當前網上圖書館系統中,主流的國內產品主要有匯文軟件產品、ADLIB2.0、金盤軟件產品等,主流的國外產品主要以ExLibris的Aleph500為代表。近年來,隨著Web2.0的發展和Library2.0研究的深入,給網上圖書館系統帶來了新的理念和思路,網上圖書館系統很好的融合了Library2.0的理念和Web2.0的技術。當前網上圖書館系統普遍存在的問題有:①圖書館資源與服務的相對隔離與孤立;②不能全面集成圖書館的業務和管理工作;③信息孤島現象日益嚴重;④難以體現圖書館的管理思路。網上圖書館系統的發展趨勢:①融合圖書館的管理理念;②數據驅動管理;③開放合作的理念;④云計算;⑤整合服務評價體系。
首先,通過引擎搜索或者查閱相關文獻資料,了解了本系統開發的背景以及設計系統的意義所在,收集用戶需求信息。其次,在開發工具上,最終確定選用JAVA平臺來設計開發本系統,Mysql作為設計數據庫的工具。即利用JAVA語言實現用戶界面,并同數據庫連接起來實現完整的通信功能。之后,設計出系統大致的功能模塊。主要從方便系統用戶和系統管理員的角度進行分析,明確該系統應該具有的功能。最終是測試系統,通過用例測試發現存在的問題并找到解決的方案。利用現有的開發平臺,結合自己所學的知識,在老師的指導幫助下來完成該設計,確保系統的可用性、實用性。
人可以掌握多門外語,而一個計算機科學家精通的大多是編程語言,它不是人類的自然語言,比如C語言、Java、Perl等等。由于不同的公司開發出的“中間件”不夠規范,所以Sun公司推出J2EE,用這個標準來解決弊病。它提供了良好的機制,讓每個層次允許與之相對的服務器、組件運行,使得系統的搭建穩定可用、開發高效、維護方便。
MVVM模式是常用的開發模式,主要是在代碼實現上將其分為M層、V層和C層。
視圖(View)代表用戶交互界面,一個 Web 應用就可能有很多的界面,在 MVVM?模式中,視圖僅僅處理的只有數據采集、處理,還有用戶的請求, 并不包括業務流程的處理,業務流程由模型(Model)來處理。
模型(Model)就是業務流程/狀態的處理及業務規則的制定。模型處理業務流程的過程其它層是無法看見了的,它就像黑箱子,在接受視圖請求的數據之后,然后返回最終的處理結果。MVVM?最主要的核心就是業務模型的設計,一個典型的應用例子就是目前流行的 EJB 模型,它從應用技術實現的角度對模型做了進一步的劃分,以便充分利用現有的組件,但是它不能作為應用設計模型的框架。
控制器(Controller)可以理解為接收用戶的請求,然后視圖和模型匹配在一起,一起再完成用戶請求。它有非常明顯的作用在劃分控制層上,可以很清晰地告訴你,它就是一個分發器,選擇什么樣的模型、視圖,可以完成用戶的什么樣的請求。控制層不做所有的數據處理,比如說:用戶點擊一個連接,控制層接受到請求之后,并不處理業務信息,它只是向模型傳遞用戶的信息,同時告訴模型做什么,然后選擇符合需求的視圖返回給用戶。
科技的進步,給日常帶來許多便利:教室的投影器用到了虛擬成像技術,數碼相機用到了光電檢測技術,比如超市貨物進出庫的記錄需要一個信息倉庫。這個信息倉庫就是數據庫,而這次的醫院人事管理系統也需要這項技術的支持。
用MySQL這個軟件,是因為它能接受多個使用者訪問,而且里面存在Archive等。它會先把數據進行分類,然后分別保存在表里,這樣的特別操作就會提高數據管理系統自身的速度,讓數據庫能被靈活運用。MySQL的代碼是公開的,而且允許別人二次編譯升級。這個特點能夠降低使用者的成本,再搭配合適的軟件后形成一個良好的網站系統。雖然它有缺點,但是綜合各方面來說,它是使用者的主流運用的對象。
B/S(Browser/Server)比前身架構更為省事的架構。它借助Web server完成數據的傳遞交流。只需要下載瀏覽器作為客戶端,那么工作就達到“瘦身”效果, 不需要考慮不停裝軟件的問題。
SSM即SpringMVVM+Spring+Mybatis,這三個框架有各自最獨有的優勢,那么將它們組合在一起能夠碰撞出很強的火花。設計者在不需消耗大量功夫,能做出Web應用程序,而且這個程序還具有層次清晰、升級更新操作不影響正常使用的、允許多次使用的特點。這個復合框架形成一個有著結構完整、功能強大和結構良好的體系:SpringMVVM使各板塊分離,Spring使開發更靈活方便,使用Mybatis讓開發者直接對對象進行操縱,各層次分工明細,并實現各個層次間的解耦,讓代碼更加的靈活精簡。這個框架使程序員能夠規避在開發時期避免個別錯誤導致整體被破壞,也能在后期應對客戶對產品提出的新需求。
本次設計基于B/S 模式下,運用Java、JSP技術采用的是MySQL數據庫和Myeclipse實現,總體的可行性共分為以下三個方面。
所謂的技術可行性就是在限定時間,前期擬定的功能能否被滿足。在開發設計上是否會遇上解決不了的問題。做完的項目能否被很好地應用,如果存在缺點在后期的維護上是否存在很大的難度。在對這個系統評估后,認定已存在的技術能達成目標。用JSP技術來實現動態的頁面,嵌入低依賴性的設計模式,靈活的數據庫,配合穩定的服務器,整個系統的運行效率大大提升。由此可見,在技術層面達成目標不是非非之想。
在項目上使用的工具大部分都是是當下流行開源免費的,所以在開發前期,開發時用于項目的經費將會大大降低,不會讓開發該軟件在項目啟動期受到經費的影響,所以經濟上還是可行的。盡量用最少的花費去滿足用戶的需求。省下經費用于人工費,以及設備費用。將在無紙化,高效率的道路上越走越遠。
本系統實現功能的操作很簡單,普通電腦的常見配置就可以運行本軟件,并且只要粗通電腦使用的基本常識就可以流暢的使用本軟件。電腦具備連接互聯網的能力,并且可以正常訪問系統,并不需要操作者有什么高超的能力,只需了解業務流程,并且按照專業知識進行正確操作即可,所以醫院人事管理系統具備操作可行性。
在系統開發設計前,應該對功能做初步設想,清楚這個管理系統有什么板塊,每個板塊有什么功能,整體的設計是否滿足使用者的需求,接著對所開發的系統功能進行的詳細分析總結,從而設計出完整的系統并將其實現。用戶和開發人員的交流分析,使其達到最佳理解程度,使系統功能達到最佳。
系統用戶示例圖如下所示。
?
圖3-1 系統用戶示例圖
圖書管理員用例圖如下所示。
?
圖3-1 圖書管理員用例圖
前臺用戶可分為未注冊用戶需求和已注冊用戶需求。
未注冊用戶的功能如下:
注冊賬號:用戶填寫個人信息,密碼設置。
個人信息修改:用戶可以修改自己的頭像、具體信息等。
圖書搜索:用戶可以根據自己需要搜索相關書籍,并選中某個書籍查看詳情搜索找到圖書后進行詳情查詢。
圖書借閱:查看圖書剩余量以及借閱情況,有多余的書籍可在圖書信息中進行借閱。
圖書歸還:借閱完后的圖書歸還。
圖書預留:當書籍已經借光,可以進行預留功能,當書籍被還,用戶會收到通知。
已注冊用戶的功能如下:
管理員功能如下:
修改密碼:管理員可以隨時修改自己進入系統的登錄密碼,以保證系統的安全性。
對借閱單信息進行處理:辦理借閱單審核等。
用戶管理:管理員管理用戶基礎信息包括修改查看用戶信息,管理員還可注冊用戶。
圖書信息管理:對圖書信息進行維護,添加、刪除、修改信息。
書籍類別管理:主要實現書籍類別的動態管理。
智能推薦功能:根據用戶的點擊量來做一個簡單的智能推薦,根據點擊量來排序圖書的順序,推薦熱門書籍。
首先主要考慮的是系統功能軟件,在具體設計的環節上,是不是能夠較好的滿足各類用戶的基本功能需求,如果不能較好的滿足用戶需求,那么這個系統的存在是沒有價值的。軟件系統的非功能性求分析,從7個方面展開,一個是性能分析,針對系統;一個是安全分析,針對系統,一個是完整度分析,針對系統,一個是可維護分析,針對系統,一個是可擴展性分析,針對系統,一個是適應業務的性能分析。面對圖書館服務系統存在的性能、安全、擴展、完整度等7個方面性能綜合比對分析后發現,需要相應的非功能性需求分析。
安全性對每一個系統來說都是非常重要的。安全性很好的系統可以保護企業的信息和用戶的信息不被竊取。提高系統的安全性不僅是對用戶的負責,更是對企業的負責。尤其針對于圖書館服務系統來說,必須要有很好的安全性來保障整個系統。
系統具有對使用者有權限控制,針對角色的不通限制使用者的權限,以此來確保系統的安全性。
數據庫中的數據是從外界輸入的,當數據的輸入時,由于種種原因,輸入的數據會無效,或者是臟數據。因此,怎樣保證輸入的數據符合規定,成為了數據庫系統,尤其是多用戶的關系數據庫系統首要關注的問題。
因此,在寫入數據庫時,要保證數據完整性、正確性和一致性。
對系統的數據流進行分析,系統的使用者分為二類,一般用戶,管理員。系統主要對界面信息傳送,登錄信息的驗證,注冊信息的接收,用戶各種操作的響應做處理。
系統頂層數據流圖如下圖所示。
?
圖3-2 頂層數據流圖
要判斷用戶是是什么身份,是根據登錄的數據來判斷后,跳轉到對應的功能界面。在系統的內部用戶就可以對數據進行操作,數據庫中心就可以接收到系統傳輸的有效數據流來對數據sql語句進行對應操作。
系統底層數據流圖如下圖所示。
?圖3-3 底層數據流層圖
?
系統可以分為前臺和后臺兩部分,每一種操作后系統都返回操作結果。前臺和后臺的數據連接主要通過數據庫,既分別對數據庫做不同的操作。
本圖書館服務系統的架構設計主要分為可以3層,主要有Web層,業務層,Model層。其中web層還包括View層和Controller層,Model層包括元數據擴展層和數據訪問層。
系統架構如下圖所示。
?
圖4-1 系統架構
圖書館服務系統總體分為前臺用戶模塊和后臺管理員模塊。
兩個模塊表現上是分別獨立存在,但是訪問的數據庫是一樣的。每一個模塊的功能都是根據先前完成的需求分析,并查閱相關資料后整理制作的。
綜上所述,系統功能結構圖如下圖所示。
?
圖4-2 系統功能結構圖
登錄模塊:登錄模塊是進入系統的入口,所有用戶必須登錄后才能訪問系統。登錄需要輸入用戶名和密碼,如果多次嘗試登錄需要輸入驗證碼。登錄時需要選擇用戶的角色,是一般用戶還是管理員登錄等。登錄成功后,會通過數據庫獲取用戶的權限,并跳轉至用戶的主頁面。
留言版模塊:留言板促進用戶之間的交流,發表個人意見、建議、看法等,在留言板可以查看已有的留言記錄,發布新留言,可以展示個人動態頭像,個人匿名昵稱等。
評價模塊:評價模塊促進用戶對圖書進行點評,查看某個圖書已存在的評價,發表評價可以達到真實描述圖書的效果。
資源庫數據模塊:可分為資源庫數據瀏覽、資源庫數據檢索、資源庫數據維護三個模塊,管理員對資源庫數據有維護的權限,發布新的資源庫數據、更新已有的資源庫數據等。
圖書管理模塊:圖書管理分為圖書添加、修改和圖書借閱。圖書信息由管理員進行修改、添加、刪除操作;圖書借閱由普通用戶來執行。
圖書館管理系統模塊:圖書館管理分為圖書信息添加、修改和圖書館數據借閱預約。圖書館具體信息由管理員進行修改、添加、刪除操作;圖書館書籍借閱預約由普通用戶來執行。
從前面可以分析到數據庫中最重要的是圖書信息,用戶信息,借閱信息,同時存在圖書歸還信息和預約信息。分析可以得到如下數據描述:
平臺用戶:用于記錄用戶的各種信息,包括用戶名、密碼、頭像、姓名、性別、年齡、聯系手機、郵箱等數據項。
管理員:記錄管理員的登錄信息。包括用戶名,密碼,權限等數據項。
圖書:存放給圖書的內容,包括圖書編號、圖書名稱、圖書類別、作者、封面、可借閱數量等數據項。
圖書借閱:存儲用戶的圖書借閱信息。包括圖書借閱的圖書編號、圖書名稱、圖書類別、可借閱數量、借閱數量、預計歸還時間、用戶名、是否審核等數據項。
圖書歸還:存儲用戶的圖書歸還信息。包括圖書歸還的圖書編號、圖書名稱、圖書類別、歸還時間。
資源庫數據:存儲平臺內的資源庫數據內容。包括資源名稱、資源類型、圖片、文檔、視頻等數據項。
根據前面的數據流程圖,結合系統的功能模塊設計,設計出符合系統的各信息實體。
系統ER圖如下圖所示。
?
?
圖4-3 系統ER圖
圖書館管理系統所擁有的數據表有以下:書籍分類,圖書信息表,圖書預約表,圖書借閱表,圖書歸還表。
由于數據表較多,只展示系統主要數據表,如下表所示。
type表:
????????????????????
| 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| int | 11 | 是 | 是 | 商品分類ID |
| smallint | 5 | 是 | 否 | 上級分類ID |
| varchar | 255 | 否 | 否 | 商品名稱 |
| varchar | 255 | 否 | 否 | 描述 |
| varchar | 255 | 否 | 否 | 圖標 |
| varchar | 255 | 否 | 否 | 來源表 |
| varchar | 255 | 否 | 否 | 來源字段 |
| timestamp | 0 | 是 | 否 | 創建時間 |
| timestamp | 0 | 是 | 否 | 更新時間 |
????????
book_management表:
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| book_management_id | int | 11 | 是 | 是 | 書籍管理ID |
| book_number | varchar | 64 | 是 | 否 | 書籍編號 |
| author | varchar | 64 | 否 | 否 | 作者 |
| title | varchar | 64 | 否 | 否 | 書名 |
| category | varchar | 64 | 否 | 否 | 類別 |
| launch_date | date | 0 | 否 | 否 | 上架日期 |
| price | int | 11 | 否 | 否 | 價格 |
| stock | int | 11 | 否 | 否 | 庫存 |
| display_diagram | varchar | 255 | 否 | 否 | 展示圖 |
| details | longtext | 0 | 否 | 否 | 詳情 |
| hits | int | 11 | 是 | 否 | 點擊數 |
| examine_state | varchar | 16 | 是 | 否 | 審核狀態 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| seat | varchar | 64 | 是 | 否 | 座位號 |
| create_time | datetime | 0 | 是 | 否 | 創建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
reserve表:
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| reserve_id | int | 11 | 是 | 是 | 預留ID |
| title | varchar | 64 | 否 | 否 | 書名 |
| number_of_applications | varchar | 64 | 否 | 否 | 申請數量 |
| category | varchar | 64 | 否 | 否 | 類別 |
| applicant | int | 11 | 否 | 否 | 申請人 |
| author | varchar | 64 | 否 | 否 | 作者 |
| application_time | date | 0 | 否 | 否 | 申請時間 |
| contact_information | varchar | 64 | 否 | 否 | 電話號碼 |
| examine_state | varchar | 16 | 是 | 否 | 審核狀態 |
| examine_reply | varchar | 255 | 否 | 否 | 審核回復 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
lend表:
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| lend_id | int | 11 | 是 | 是 | 出借ID |
| author | varchar | 64 | 否 | 否 | 作者 |
| book_number | varchar | 64 | 否 | 否 | 書籍編號 |
| title | varchar | 64 | 否 | 否 | 書名 |
| contact_number | varchar | 64 | 否 | 否 | 聯系電話 |
| price | varchar | 64 | 否 | 否 | 價格 |
| borrowing_number | int | 11 | 否 | 否 | 借閱數 |
| student_number | int | 11 | 否 | 否 | 借書人 |
| total_price | varchar | 64 | 否 | 否 | 總價 |
| examine_state | varchar | 16 | 是 | 否 | 審核狀態 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
book_return表:
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| book_return_id | int | 11 | 是 | 是 | 圖書歸還ID |
| title | varchar | 64 | 否 | 否 | 書名 |
| book_number | varchar | 64 | 否 | 否 | 書籍編號 |
| author | varchar | 64 | 否 | 否 | 作者 |
| book_returning_person | int | 11 | 否 | 否 | 還書人 |
| borrowing_number | varchar | 64 | 否 | 否 | 借閱數 |
| time | date | 0 | 否 | 否 | 時間 |
| examine_state | varchar | 16 | 是 | 否 | 審核狀態 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
slides表:
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| slides_id | int | 10 | 是 | 是 | 輪播圖ID |
| title | varchar | 64 | 否 | 否 | 標題 |
| content | varchar | 255 | 否 | 否 | 內容 |
| url | varchar | 255 | 否 | 否 | 鏈接 |
| img | varchar | 255 | 否 | 否 | 輪播圖 |
| hits | int | 10 | 是 | 否 | 點擊量 |
| create_time | timestamp | 0 | 是 | 否 | 創建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
notice表:
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| notice_id | mediumint | 8 | 是 | 是 | 公告id |
| title | varchar | 125 | 是 | 否 | 標題 |
| content | longtext | 0 | 否 | 否 | 正文 |
| create_time | timestamp | 0 | 是 | 否 | 創建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
?
從B/S架構的原理可知,圖書館管理系統的各大模塊的實現均需要對數據庫的數據進行操作,具體包括查詢數據、寫入數據、更新數據和刪除數據,因此,在開發各功能模塊前,連接數據庫文件在Resources?文件夾下的application.yml文件。
該文件的代碼如下:
server:
??port: 5000
??servlet:
????context-path: /api
spring:
??datasource:
????url: jdbc:mysql://127.0.0.1:3306/CS725260_20211101091736?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=utf-8
????username: root
????password: root
????driver-class-name: com.mysql.cj.jdbc.Driver
??jackson:
????property-naming-strategy: CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES
????default-property-inclusion: ALWAYS
????time-zone: GMT+8
????date-format: yyyy-MM-dd HH:mm:ss
??servlet:
????multipart:
??????max-file-size: 100MB
??????max-request-size: 100MB
用戶在填寫數據的時候必須與注冊頁面上的驗證相匹配否則會注冊失敗,注冊頁面的表單驗證是通過JavaScript進行驗證的,用戶名的長度必須在6到18之間,郵箱必須帶有@符號,密碼和密碼確認必須相同,你輸入的密碼,系統會根據你輸入密碼的強度給出指定的值,電話號碼和身份證號碼必須要求輸入格式與生活相符合,當你前臺驗證通過的時候你點擊注冊,表單會將你輸入的值通過name值傳遞給后臺并保存到數據庫中。
用戶注冊流程圖如下圖所示。
?
圖5-1用戶注冊流程圖
用戶注冊界面如下圖所示。
?
圖5-2用戶注冊界面
用戶注冊的關鍵代碼為:
/**
?????* 登錄
?????* @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);
主要由兩部分組成,登錄前的登錄界面以及登錄后的用戶功能界面。登錄界面,要求用戶輸入用戶名和密碼,當用戶名和密碼其中一個輸入為空時,給出提示“用戶名,密碼不能為空”。獲取用戶名和密碼后到數據庫中查找,如果用戶名存在,以及對應的密碼正確,則登錄成功,否則登錄失敗。登錄失敗后給出提示,并把焦點停在文本框中。登錄成功后將該次會話的全局變量username設置為用戶名。登錄成功后進入會員的功能模塊,主要有會員基本信息修改,已經發布圖書信息管理,發布信息,和退出功能。退出功能是清除全局變量username的值,并跳回到首頁。
登錄流程圖如下圖所示。
?
圖5-3登錄流程圖
用戶登錄界面如下圖所示。
?
圖5-4用戶登錄界面
用戶登錄的關鍵代碼如下:
?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, "賬號或密碼不正確");
????????}
}
用戶登錄/注冊成功之后可以修改自己的基本信息。修改頁面的表單中每一個input的name值都要與實體類中的參數相匹配,在用戶點擊修改頁面的時候,如果改后用戶名與數據庫里面重復了,頁面會提示該用戶名已經存在了,否則通過Id來查詢用戶,并將用戶的信息修改為表單提交的數據。
如果資源庫數據的信息需要修改,管理員可以通過查詢資源庫數據的基本信息來查詢資源庫數據,查詢資源庫數據是通過ajax技術來進行查詢的,需要傳遞資源庫數據的標題、編號等參數然后在返回到該頁面中,可以選中要修改或刪除的那條信息,如果選中了超過一條數據,頁面會挑一個窗口提醒只能選擇一條數,如果沒有選中數據會挑一個窗口題型必須選擇一條數據。當選擇確認修改的時候,后臺會根據傳過來的id到數據庫查詢,并將結果返回到修改頁面中,可以在修改頁面中修改剛剛選中的信息當點擊確認的時候from表單會將修改的數據提交到后臺并保存到數據庫中,就是說如果提交的數據數據庫中存在就修改,否則就保存。
資源庫數據管理界面如下圖所示。
?
圖5-5資源庫數據管理界面
資源庫數據發布的關鍵代碼如下:
?@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());
}
圖書借閱功能需要考慮高并發,防止出現圖書重復借閱、圖書狀態顯示出錯等情況,特對圖書這一共享數據增加鎖機制。在樂觀鎖、悲觀鎖以及線程鎖中,綜合考慮性能效率和錯誤的可接受性選擇了樂觀鎖機制。樂觀鎖的實現方式是使用版本標識來確定讀到的數據與提交時的數據是否一致,提交后修改版本標識,不一致時可以采取丟棄和再次嘗試的策略。在數據庫圖書表(對應圖書實體)設計中增加了version字段,每次數據提交時(更改圖書狀態)會判斷version是否匹配,若不匹配停止本次提交,若匹配則提交成功并增加version的值。
圖書借閱功能整體流程:用戶瀏覽圖書信息時,同時會顯示圖書的狀態,系統會在其顯示詳細信息的頁面時便會判斷圖書的狀態,若圖書狀態為可借閱,則會顯示借閱的鏈接按鈕。在用戶點擊借閱按鈕時,會先通過攔截器判斷用戶是否登錄,若未登錄,會跳轉至登錄頁面,提示用戶先登錄,若為登錄用戶就會跳轉至填寫借閱信息的頁面,填寫好借閱信息之后,點擊提交按鈕,借閱成功之后返回提示信息,告知用戶借閱成功。
圖書借閱流程圖如下圖所示。
?
圖5-6圖書借閱流程圖
圖書借閱界面如下圖所示。
?
圖5-7圖書借閱管理界面
圖書借閱關鍵代碼為:
?@RequestMapping("/get_list")
????public Map<String, Object> getList(HttpServletRequest request) {
????????Map<String, Object> map = service.selectToPage(service.readQuery(request), service.readConfig(request));
????????return success(map);
}
此頁面的關鍵是編寫圖書信息,包括圖書編號,名稱,詳情等。單擊提交按鈕以完成信息的添加。如果未寫入完整的圖書信息,例如,如果未寫入圖書編號,系統將給出相應的錯誤提示,并且無法成功輸入。數據以概念的形式以onsubmit =“return checkForm()”的形式寫入以進行檢查,checkForm()函數是一種用于寫入數據的不同類型的校對方法,是不是為空也是經過form表單中的οnsubmit=”return checkForm()來檢查。
管理員點擊左側菜單“圖書信息管理”,頁面跳轉到圖書信息管理外觀,調用后臺圖書查詢所有圖書信息。并將信息密封到數據集合List,綁定到請求對象,然后頁面跳轉到相應的php頁面,顯示出圖書信息,單擊刪除按鈕完成圖書信息的刪除。
圖書管理流程圖如下圖所示。
?
圖5-8圖書管理流程圖
圖書管理如下圖所示。
?
圖5-9圖書管理界面
圖書發布的關鍵代碼如下:
??@RequestMapping("/get_obj")
????public Map<String, Object> obj(HttpServletRequest request) {
????????Query select = service.select(service.readQuery(request), service.readConfig(request));
????????List resultList = select.getResultList();
????????if (resultList.size() > 0) {
????????????JSONObject jsonObject = new JSONObject();
????????????jsonObject.put("obj",resultList.get(0));
????????????return success(jsonObject);
????????} else {
????????????return success(null);
????????}
}
?public Query select(Map<String,String> query,Map<String,String> config){
????????StringBuffer sql = new StringBuffer("select ");
????????sql.append(config.get(FindConfig.FIELD) == null || "".equals(config.get(FindConfig.FIELD)) ? "*" : config.get(FindConfig.FIELD)).append(" ");
????????sql.append("from ").append("`").append(table).append("`").append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));
????????if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){
????????????sql.append("group by ").append(config.get(FindConfig.GROUP_BY)).append(" ");
????????}
????????if (config.get(FindConfig.ORDER_BY) != null && !"".equals(config.get(FindConfig.ORDER_BY))){
????????????sql.append("order by ").append(config.get(FindConfig.ORDER_BY)).append(" ");
????????}
????????if (config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE))){
????????????int page = config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE)) ? Integer.parseInt(config.get(FindConfig.PAGE)) : 1;
????????????int limit = config.get(FindConfig.SIZE) != null && !"".equals(config.get(FindConfig.SIZE)) ? Integer.parseInt(config.get(FindConfig.SIZE)) : 10;
????????????sql.append(" limit ").append( (page-1)*limit ).append(" , ").append(limit);
????????}
????????log.info("[{}] - 查詢操作,sql: {}",table,sql);
????????return runEntitySql(sql.toString());
????}
根據需求,需要對圖書歸還進行添加、刪除或修改詳情信息。刪除或修改圖書歸還時,系統根據圖書歸還的狀態判定為可刪除狀態下,才會給出刪除和修改鏈接,點擊刪除鏈接按鈕時,請求到達后臺,還會先查詢圖書歸還狀態再次做出判定能否刪除。點擊修改鏈接按鈕時,會跳轉到修改信息的頁面,重新填寫好數據后,數據提交到后臺會對數據庫中相應的記錄做出修改。
添加圖書歸還時,會給出數據填寫的頁面,該頁面根據填寫好的圖書歸還編號同樣會事先發送Ajax請求查詢編號是否已存在,數據填寫好之后提交到后臺,會調用相關服務在數據庫中插入記錄。
圖書歸還管理流程圖如下圖所示。
?
圖5-11圖書歸還管理流程圖
圖書歸還添加頁面設計效果如下圖所示。
?
圖5-12圖書歸還管理界面
圖書歸還發布的關鍵代碼如下:
?@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());
}
??
6.1測試目的
對任何系統而言,測試都是必不可少的環節,測試可以發現系統存在的很多問題,所有的軟件上線之前,都應該進行充足的測試之后才能保證上線后不會Bug頻發,或者是功能不滿足需求等問題的發生。下面分別從單元測試,功能測試和用例測試來對系統進行測試以保證系統的穩定性和可靠性。
6.2功能測試
下表是圖書管理功能的測試用例,檢測了圖書管理中對圖書信息的增加,刪除,修改,查詢操作是否成功運行。觀察系統的響應情況,得出該功能也達到了設計目標,系統運行正確。
前置條件;用戶登錄系統。
表6-1 圖書管理的測試用例
| 功能描述 | 用于圖書管理 | |
| 測試目的 | 檢測圖書管理時的各種操作的運行情況 | |
| 測試數據以及操作 | 預期結果 | 實際結果 |
| 點擊添加圖書,必填項合法輸入,點擊保存 | 提示添加成功 | 與預期結果一致 |
| 點擊添加圖書,必填項輸入不合法,點擊保存 | 提示必填項不能為空 | 與預期結果一致 |
| 點擊修改圖書,必填項修改為空,點擊保存 | 提示必填項不能為空 | 與預期結果一致 |
| 點擊修改圖書,必填項輸入不合法,點擊保存 | 提示必填項不能為空 | 與預期結果一致 |
| 點擊刪除圖書,選擇圖書刪除 | 提示刪除成功 | 與預期結果一致 |
| 點擊搜索圖書,輸入存在的圖書名 | 查找出圖書 | 與預期結果一致 |
| 點擊搜索圖書,輸入不存在的圖書名 | 不顯示圖書 | 與預期結果一致 |
下表是圖書歸還管理功能的測試用例,檢測了圖書歸還管理中對圖書歸還信息的增加,刪除,修改,查詢操作是否成功運行。觀察系統的響應情況,得出該功能也達到了設計目標,系統運行正確。
前置條件;用戶登錄系統。
表6-2 圖書歸還管理的測試用例
| 功能描述 | 用于圖書歸還管理 | |
| 測試目的 | 檢測圖書歸還管理時的各種操作的運行情況 | |
| 測試數據以及操作 | 預期結果 | 實際結果 |
| 點擊添加圖書歸還,必填項合法輸入,點擊保存 | 提示添加成功 | 與預期結果一致 |
| 點擊添加圖書歸還,必填項輸入不合法,點擊保存 | 提示必填項不能為空 | 與預期結果一致 |
| 點擊修改圖書歸還,必填項修改為空,點擊保存 | 提示必填項不能為空 | 與預期結果一致 |
| 點擊修改圖書歸還,必填項輸入不合法,點擊保存 | 提示必填項不能為空 | 與預期結果一致 |
| 點擊刪除圖書歸還,選擇圖書歸還刪除 | 提示刪除成功 | 與預期結果一致 |
| 點擊搜索圖書歸還,輸入存在的圖書歸還名 | 查找出圖書歸還 | 與預期結果一致 |
| 點擊搜索圖書歸還,輸入不存在的圖書歸還名 | 不顯示圖書歸還 | 與預期結果一致 |
下表是借閱管理功能的測試用例,檢測了借閱管理中借閱單的操作是否成功運行。觀察系統的響應情況,得出該功能也達到了設計目標,系統運行正確。
前置條件;用戶登錄系統。
表6-3 借閱管理的測試用例
| 功能描述 | 用于借閱管理 | |
| 測試目的 | 檢測借閱管理時各種操作的情況 | |
| 測試數據以及操作 | 預期結果 | 實際結果 |
| 未選擇圖書,點擊提交 | 提示請選擇圖書 | 與預期結果一致 |
| 未輸入數量,點擊提交 | 提示請輸入數量 | 與預期結果一致 |
| 未選擇時間,點擊提交 | 提示請選擇時間 | 與預期結果一致 |
6.3性能測試
使用阿里云PTS(Performance Testing Service)性能測試服務對線上系統進行壓力測試。線上服務器環境為:1核心CPU,1G內存,1Mbps公網帶寬,Centos7.0操作系統。
壓測過程中使用了2臺并發機器,每臺機器20個用戶并發,對系統主頁,登錄,數據查詢和數據維護等模塊進行并發訪問,測試結果是有40個用戶并發時,數據管理相關頁面的響應時間甚至達到了7s,通過查看服務器出網流量發現已經達到1381kb/s,可以看出服務器的帶寬已經達到峰值,如果系統使用5Mbps的帶寬,系統的響應時間和TPS將會大大增加。在整個測試的過程中,CPU的使用率占用僅8%,也提現出帶寬瓶頸對系統的影響非常嚴重。
總結與展望
隨著計算機互聯網技術的迅猛發展,各行各業都已經實現采用計算機相關技術對日益放大的數據進行管理。該課題是圖書館服務系統為核心展開的,主要是為了實現圖書館服務信息化管理和用戶在線預約圖書歸還的需求。
圖書館服務系統的開發是以Java編程語言作為基礎,在系統平臺上完成編碼工作,系統整體為B/S架構,數據庫系統使用Mysql。文中詳細分析了圖書館服務系統的研究背景、研究目的和意義、開發工具和相關技術以及系統需求、系統詳細設計和系統測試等等一系列內容。系統實現了圖書館服務系統所需的一些基本功能,并通過測試對這些實現的功能進行了完善,進而提高了系統整體的實用性。
系統投入運行時,各功能均運行正常。系統的每個界面的操作符合常規邏輯,對使用者來說操作簡單,界面友好。整個系統的各個功能設計合理,體現了人性化。
但是由于自己在系統開發過程中對一些用到的相關知識和技術掌握不夠牢固,再加上自身開發經驗欠缺,因此系統在有些方面的功能還不夠完善,考慮的不夠全面,因此整個系統還有待日后逐步完善。
參考文獻
- [1]林妍,毛夢雅,丁鄒倩,劉愛華.基于GPS定位的圖書館座位管理系統的設計與實現[J].電腦知識與技術,2021,17(27):5-7.
- [2]李文佳,劉嘉靈,夏儀,陳雪.基于微小程序的智能圖書館管理系統設計[J].數字通信世界,2021(09):86-87+89.
- [3]徐田.面向知識服務的圖書館管理信息系統的設計與實現[J].電子技術與軟件工程,2021(17):188-189.
- [4]顧懿德.基于.NET的基層圖書館使用預約管理系統設計[J].電腦知識與技術,2021,17(21):73-75.
- [5]陸亞紅,李靖,施曉華.新技術環境下圖書館智能館藏管理系統設計與構建[J].圖書館雜志,2021,40(09):48-53.
- [6]Ostler Karalyn R,Norlander Bree,Weber Nicholas. Using Open Data to Inform Public Library Branch Services[J]. Public Library Quarterly,2021,40(4):
- [7]吾熱亞提·玉素甫.“互聯網+”背景下智能圖書館管理系統的設計[J].無線互聯科技,2021,18(11):50-51.
- [8]Wang Chunyu,Sha Zhengyu,Jia Lin. Research on Digital Resource System Construction of Smart Library Based on Computer Network and Artificial Intelligence[J]. Journal of Physics: Conference Series,2021,1952(4):
- [9]陳美娜,丁憲成.基于大數據的圖書數字信息資源管理系統設計[J].信息與電腦(理論版),2021,33(10):70-72.
- [10]李琳.數字化圖書館管理系統設計[J].中國新技術新產品,2021(08):30-32.
- [11]李鵬,張海燕.基于Java技術的圖書館預約座位管理系統的設計[J].電腦知識與技術,2021,17(08):71-73.
- [12]王玉慶.基于Java的圖書查詢系統設計與實現[J].信息與電腦(理論版),2021,33(02):138-140.
- [13]毛瑞欣,王平,張國艷,徐婧,趙文恒.基于JAVA的校圖書館管理系統的設計與實現[J].信息與電腦(理論版),2020,32(23):95-97.
- [14]趙越超,胡杰.基于Java的圖書管理系統設計與實現[J].物聯網技術,2020,10(08):52-55+58.
- [15]唐靜,史紅娟.下一代圖書館管理系統新探——以用戶需求為導向的類基礎設施服務平臺構想[J].圖書情報研究,2020,13(02):101-105.
致謝
本次設計歷時3個月。在這個畢業設計中,它離不開指導教師的指導,使事情基本順利。指導老師無論是在畢業設計歷經中,還是在論文做完中都給了了我特別大的助益。另1個方面,教師認真負責的工作姿態,謹慎的教學精神厚重的理論水準都使我獲益匪淺。他勤懇謹慎的教學育人學習姿態也給我留下了特別特別深的感覺。我從老師那里學到了很多東西。在理論和實踐中,我的技能得到了特別大的提高。在此,特向教師表示由衷的感激。
經過對該畢業設計的全部研究和開發,我的系統研發經歷了從需求分析到實現詳細功能,再到最終測試和維護的特殊進展。讓我對系統研發有了更深層次的認識。如今我的動手本領單獨處理疑惑的本領也獲取到了特別大的演練學習增多,這是這次畢業設計最好的收獲。
最后,在整個系統開發過程中,我周圍的同學和朋友給了我很多意見,所以我很快就確認了系統的商業思想。再次,我由衷的向他們表示感激。
點贊+收藏+關注 ?→ ?私信領取本源代碼、數據庫
總結
以上是生活随笔為你收集整理的springboot+乡村图书管理系统 毕业设计-附源码191505的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 稀土掘金 2022 开发者大会观后总结
- 下一篇: RIGOL示波器编程使用