SSM基于java的线上阅读平台的设计与实现 毕业设计-附源码291023
SSM線上閱讀平臺(tái)開發(fā)
摘?要
隨著互聯(lián)網(wǎng)趨勢(shì)的到來,各行各業(yè)都在考慮利用互聯(lián)網(wǎng)將自己推廣出去,最好方式就是建立自己的互聯(lián)網(wǎng)系統(tǒng),并對(duì)其進(jìn)行維護(hù)和管理。在現(xiàn)實(shí)運(yùn)用中,應(yīng)用軟件的工作規(guī)則和開發(fā)步驟,采用SSM框架開發(fā)一個(gè)線上閱讀平臺(tái)。
本設(shè)計(jì)主要實(shí)現(xiàn)集人性化、高效率、便捷等優(yōu)點(diǎn)于一身的線上閱讀平臺(tái),完成用戶管理、書籍管理、小說資訊、投稿中心等功能模塊。系統(tǒng)通過瀏覽器與服務(wù)器進(jìn)行通信,實(shí)現(xiàn)數(shù)據(jù)的交互與變更。只需通過一臺(tái)電腦,動(dòng)動(dòng)手指就可以操作系統(tǒng),實(shí)現(xiàn)數(shù)據(jù)通信管理。整個(gè)系統(tǒng)的設(shè)計(jì)過程都充分考慮了數(shù)據(jù)的安全、穩(wěn)定及可靠等問題,而且操作過程簡(jiǎn)單。本系統(tǒng)通過科學(xué)的管理方式、便捷的服務(wù)提高了工作效率,減少了數(shù)據(jù)存儲(chǔ)上的錯(cuò)誤和遺漏。線上閱讀平臺(tái)使用Java語言,采用基于 MVC模式的JavaEE技術(shù)進(jìn)行開發(fā),使用 MyEclipse 2017 CI 10 編譯器編寫,數(shù)據(jù)方面主要采用的是微軟的MySQL關(guān)系型數(shù)據(jù)庫來作為數(shù)據(jù)存儲(chǔ)媒介,配合前臺(tái)HTML+CSS 技術(shù)完成系統(tǒng)的開發(fā)。
關(guān)鍵詞:在線閱讀;Java語言;書籍管理?
Development of SSM online reading platform
Abstract
With the advent of the Internet trend, all walks of life are considering using the Internet to promote themselves. The best way is to establish their own Internet system and maintain and manage it. In practical application, according to the working rules and development steps of application software, an online reading platform is developed by using SSM framework.
This design mainly realizes the online reading platform with the advantages of humanization, high efficiency and convenience, and completes the functional modules such as user management, book management, novel information, submission center and so on. The system communicates with the server through the browser to realize the interaction and change of data. You can operate the system and realize data communication management by moving your fingers through a computer. The safety, stability and reliability of data are fully considered in the design process of the whole system, and the operation process is simple. Through scientific management and convenient service, the system improves work efficiency and reduces errors and omissions in data storage. The online reading platform uses Java language, adopts Java EE technology based on MVC mode for development, and is written with MyEclipse 2017 CI 10 compiler. 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.
Key words:?在線閱讀;Java語言;書籍管理
目 ?錄
第1章?緒論
1.1?研究背景與意義
1.2?開發(fā)現(xiàn)狀
1.3?主要工作及論文結(jié)構(gòu)
第2章 相關(guān)技術(shù)介紹
2.1開發(fā)技術(shù)
2.2 MVVM模式
2.3?B/S結(jié)構(gòu)
2.4?Mysql數(shù)據(jù)庫
2.5?SSM框架
2.5 SSM框架各層關(guān)系
第3章 系統(tǒng)分析
3.1?可行性分析
3.1.1?技術(shù)可行性
3.1.2?經(jīng)濟(jì)可行性
3.1.3?社會(huì)可行性
3.2系統(tǒng)功能分析和描述
3.3性能分析 6
3.4系統(tǒng)操作流程 7
3.4.1添加信息流程 7
3.4.2操作流程 7
3.4.3刪除信息流程 8
第4章 系統(tǒng)設(shè)計(jì)
4.1系統(tǒng)架構(gòu)設(shè)計(jì)
4.2開發(fā)流程設(shè)計(jì)
4.3數(shù)據(jù)庫設(shè)計(jì)
4..3.1實(shí)體ER圖 13
4.3.2數(shù)據(jù)表 14
第5章?系統(tǒng)實(shí)現(xiàn)
5.1?數(shù)據(jù)庫連接模塊的實(shí)現(xiàn)
5.2?登錄模塊的實(shí)現(xiàn) 16
5.3注冊(cè)模塊的實(shí)現(xiàn)
5.4 小說資訊列表模塊的實(shí)現(xiàn) 23
5.5 閱讀中心推薦模塊的實(shí)現(xiàn) 24
5.6 書籍模塊的實(shí)現(xiàn) 26
5.7 圖書分類管理模塊的實(shí)現(xiàn) 28
5.8 書籍信息管理模塊的實(shí)現(xiàn) 30
第6章?系統(tǒng)測(cè)試 31
6.1?測(cè)試環(huán)境 31
6.2?測(cè)試目標(biāo)
6.3?功能測(cè)試 31
6.4?測(cè)試結(jié)果 32
第7章?總結(jié)與展望 34
參考文獻(xiàn) 35
致謝 37
在這個(gè)快節(jié)奏的時(shí)代,人們的空余時(shí)間越來越零碎,而且人們對(duì)智能手機(jī)的依賴越來越重,所以,一個(gè)擁有豐富功能且能隨時(shí)進(jìn)行閱讀的線上閱讀平臺(tái)的出現(xiàn),則是我們刻不容緩的事情。此軟件是在網(wǎng)絡(luò)平臺(tái)上進(jìn)行設(shè)計(jì)開發(fā),此軟件的開發(fā)是通過了客戶需求分析階段以及技術(shù)可行性分析階段,然后進(jìn)行總體設(shè)計(jì)階段和詳細(xì)設(shè)計(jì)編碼等階段。此軟件不僅具有基本的書籍閱讀功能,而且還擁有豐富的實(shí)用功能設(shè)計(jì),例如投稿中心、反饋中心、內(nèi)容加密等。經(jīng)過不斷的測(cè)試與完善,線上閱讀平臺(tái)功能穩(wěn)定,并且在真機(jī)上對(duì)其進(jìn)行了測(cè)試與驗(yàn)證,基本上達(dá)到了用戶的需求標(biāo)準(zhǔn)。
線上閱讀平臺(tái)的開發(fā)目標(biāo)就是讓用戶可以把零碎的空余時(shí)間有效的利用到書籍的閱讀上,而且用戶在沒有網(wǎng)路的情況下也可以正常的進(jìn)行書籍的閱讀,讓用戶擺脫書籍的笨重?cái)y帶不方便等確定,給予閱讀者更大的便利性更好的舒適性。此軟件是在網(wǎng)絡(luò)平臺(tái)上進(jìn)行設(shè)計(jì)開發(fā),它的界面豐富簡(jiǎn)潔但是卻不簡(jiǎn)單,它包含了書架界面、文件查看界面、軟件設(shè)置界面、書籍閱讀界面等界面,它的功能全面。其優(yōu)越性表現(xiàn)在:手動(dòng)從文件夾中選擇添加書籍、自動(dòng)為書籍生成章節(jié)目錄、添加查看書簽、全文關(guān)鍵詞搜索、閱讀主題選擇等功能。此外,給用戶更清晰方便的界面,也是本軟件的出發(fā)點(diǎn)之一。
計(jì)算機(jī)在現(xiàn)如今已經(jīng)是大部分家家戶戶基本會(huì)有的硬件設(shè)備,互聯(lián)網(wǎng)發(fā)展也是在超音速進(jìn)行著,網(wǎng)絡(luò)時(shí)代改變著人們的很多生活習(xí)慣,現(xiàn)在越來越多的人在網(wǎng)上購物、交水電費(fèi)、手機(jī)充值、購買演出票等等,互聯(lián)網(wǎng)已經(jīng)慢慢滲透到越來越多的人的生活中,“網(wǎng)上操作”已經(jīng)成為流行。
在線閱讀與傳統(tǒng)閱讀方式已經(jīng)發(fā)生了較大改變,在線閱讀不需要購買一本又一本的紙質(zhì)書籍,而只是在電腦面前點(diǎn)點(diǎn)屏幕就可以閱讀自己想看的任何書籍,傳統(tǒng)閱讀方式不僅在書籍上面會(huì)耗費(fèi)大量木材,而且讀者還會(huì)花費(fèi)很多經(jīng)濟(jì)在購買書籍上面。因此,在線閱讀是文學(xué)發(fā)展的一種必要的趨勢(shì),線上閱讀平臺(tái)正是這種發(fā)展趨勢(shì)的演變形式。
現(xiàn)在到以后,互聯(lián)網(wǎng)更是會(huì)“霸占”人類越來越多的時(shí)間,改變?nèi)祟惿?、學(xué)習(xí)、工作方式,上世紀(jì)世界是武器技術(shù)的較量,而在這個(gè)世紀(jì)世界則是信息技術(shù)的較量。互聯(lián)網(wǎng)技術(shù)又是信息技術(shù)的載體,在線閱讀又是今后的一種發(fā)展趨勢(shì),全民讀書在在線閱讀基礎(chǔ)上是完全可以做到的,任何人、任何職業(yè)、任何背景,都應(yīng)該有使用互聯(lián)網(wǎng),終身學(xué)習(xí)的想法。在信息時(shí)代的門前,人人都應(yīng)該要參與進(jìn)來,或者說跟隨時(shí)代的大流,而在線閱讀也正是這種文學(xué)大流的指向標(biāo)。
本文的主要工作是研究如何將計(jì)算機(jī)和信息管理進(jìn)行有機(jī)結(jié)合,從而利用Java語言以及Mysql數(shù)據(jù)庫技術(shù)在Dreamweaver中實(shí)現(xiàn)了系統(tǒng)的功能模塊,切實(shí)的開發(fā)出一套貼近線上閱讀平臺(tái)的實(shí)際,有效管理線上閱讀平臺(tái)。
論文結(jié)構(gòu)如下:
第一章緒論:主要對(duì)線上閱讀平臺(tái)?的開發(fā)背景,研究現(xiàn)狀,目的,及意義進(jìn)行了分析。
第二章開發(fā)技術(shù)及軟件:主要把系統(tǒng)開發(fā)工具進(jìn)行介紹,另外講解開發(fā)系統(tǒng)所用到的一些特殊功能技術(shù)。
第三章系統(tǒng)分析:主要是對(duì)線上閱讀平臺(tái)進(jìn)行需求分析,以及對(duì)其數(shù)據(jù)流程與功能進(jìn)行分析。
第四章系統(tǒng)設(shè)計(jì):主要根據(jù)系統(tǒng)需求對(duì)系統(tǒng)的設(shè)計(jì)進(jìn)行介紹,以及對(duì)數(shù)據(jù)的開發(fā)與功能模塊設(shè)計(jì)的過程。
第五章系統(tǒng)實(shí)現(xiàn):本章主要結(jié)合系統(tǒng)界面截圖,介紹了系統(tǒng)各個(gè)功能實(shí)現(xiàn)的結(jié)果。
第六章系統(tǒng)測(cè)試:本章系統(tǒng)進(jìn)行功能模塊的測(cè)試,撰寫測(cè)試用例,確保系統(tǒng)各大功能準(zhǔn)確無誤。
第七章總結(jié)與展望:對(duì)整個(gè)論文的研究?jī)?nèi)容進(jìn)行總結(jié),概括整個(gè)論文的特點(diǎn),指出不足之處,為下步深究指明方向。
本系統(tǒng)前端部分基于MVVM模式進(jìn)行開發(fā),采用B/S模式,后端部分基于Java的ssm框架進(jìn)行開發(fā)。
前端部分:前端框架采用了比較流行的漸進(jìn)式JavaScript框架Vue.js。使用Vue-Router和Vuex實(shí)現(xiàn)動(dòng)態(tài)路由和全局狀態(tài)管理,Ajax實(shí)現(xiàn)前后端通信,Element UI組件庫使頁面快速成型,項(xiàng)目前端通過柵格布局實(shí)現(xiàn)響應(yīng)式,可適應(yīng)PC端、平板端、手機(jī)端等不同屏幕大小尺寸的完美布局展示。
后端部分:采用ssm作為開發(fā)框架,同時(shí)集成MyBatis、Redis等相關(guān)技術(shù)
MVVM是Model-View-ViewModel的簡(jiǎn)寫。它本質(zhì)上就是MVC 的改進(jìn)版。MVVM 就是將其中的View 的狀態(tài)和行為抽象化,讓我們將視圖 UI 和業(yè)務(wù)邏輯分開。當(dāng)然這些事 ViewModel 已經(jīng)幫我們做了,它可以取出 Model 的數(shù)據(jù)同時(shí)幫忙處理 View 中由于需要展示內(nèi)容而涉及的業(yè)務(wù)邏輯。微軟的WPF帶來了新的技術(shù)體驗(yàn),如Silverlight、音頻、視頻、3D、動(dòng)畫……,這導(dǎo)致了軟件UI層更加細(xì)節(jié)化、可定制化。同時(shí),在技術(shù)層面,WPF也帶來了 諸如Binding、Dependency Property、Routed Events、Command、DataTemplate、ControlTemplate等新特性。MVVM(Model-View-ViewModel)框架的由來便是MVP(Model-View-Presenter)模式與WPF結(jié)合的應(yīng)用方式時(shí)發(fā)展演變過來的一種新型架構(gòu)框架。它立足于原有MVP框架并且把WPF的新特性糅合進(jìn)去,以應(yīng)對(duì)客戶日益復(fù)雜的需求變化。
Mysql 經(jīng)過多次的更新,功能層面已經(jīng)非常的豐富和完善了,從Mysql4版本到5版本進(jìn)行了比較大的更新,在商業(yè)的實(shí)際使用中取得了很好的實(shí)際應(yīng)用效果。最新版本的Mysql支持對(duì)信息的壓縮,同時(shí)還能進(jìn)行加密能更好的滿足對(duì)信息安全性的需求。同時(shí)經(jīng)過系統(tǒng)的多次更新,數(shù)據(jù)庫自身的鏡像功能也得到了很大的增強(qiáng),運(yùn)行的流暢度和易用性方面有了不小的進(jìn)步,驅(qū)動(dòng)的使用和創(chuàng)建也更加的高效快捷。最大的變動(dòng)還是進(jìn)行了空間信息的顯示優(yōu)化,能更加方便的在應(yīng)用地圖上進(jìn)行坐標(biāo)的標(biāo)注和運(yùn)算。強(qiáng)大的備份功能也保證了用戶使用的過程會(huì)更加安心,同時(shí)支持的Office特性還支持用戶的自行安裝和使用。在信息的顯示形式上也進(jìn)行了不小的更新,增加了兩個(gè)非常使用的顯示區(qū),一個(gè)是信息區(qū),對(duì)表格和文字進(jìn)行了分類處理,界面的顯示更加清爽和具體。第二是儀表的信息控件,能在儀表信息區(qū)進(jìn)行信息的顯示,同時(shí)還能進(jìn)行多個(gè)信息的比對(duì),為用戶的實(shí)際使用帶來了很大的便捷。
針對(duì)本文中設(shè)計(jì)的在線閱讀平臺(tái)在實(shí)際的實(shí)現(xiàn)過程中,最終選擇Mysql數(shù)據(jù)庫的主要原因在于在企業(yè)的應(yīng)用系統(tǒng)應(yīng)用及開發(fā)的過程中會(huì)存在大量的數(shù)據(jù)庫比較頻繁的操作,而且數(shù)據(jù)的安全性要求也是非常的高。綜合這些因素,最終選擇安全性系數(shù)比較高的Mysql來對(duì)在線閱讀平臺(tái)后臺(tái)數(shù)據(jù)進(jìn)行存儲(chǔ)操作。
數(shù)據(jù)庫管理系統(tǒng)的總體結(jié)構(gòu)圖如下圖所示。
圖2-1 數(shù)據(jù)庫組成結(jié)構(gòu)
B/S結(jié)構(gòu)
B/S(Browser/Server)比前身架構(gòu)更為省事的架構(gòu)。它借助Web server完成數(shù)據(jù)的傳遞交流。只需要下載瀏覽器作為客戶端,那么工作就達(dá)到“瘦身”效果, 不需要考慮不停裝軟件的問題。
SSM即SpringMVVM+Spring+MySQL,這三個(gè)框架有各自最獨(dú)有的優(yōu)勢(shì),那么將它們組合在一起能夠碰撞出很強(qiáng)的火花。設(shè)計(jì)者在不需消耗大量功夫,能做出Web應(yīng)用程序,而且這個(gè)程序還具有層次清晰、升級(jí)更新操作不影響正常使用的、允許多次使用的特點(diǎn)。這個(gè)復(fù)合框架形成一個(gè)有著結(jié)構(gòu)完整、功能強(qiáng)大和結(jié)構(gòu)良好的體系:SpringMVVM使各板塊分離,Spring使開發(fā)更靈活方便,讓開發(fā)者直接對(duì)對(duì)象進(jìn)行操縱,各層次分工明細(xì),并實(shí)現(xiàn)各個(gè)層次間的解耦,讓代碼更加的靈活精簡(jiǎn)。這個(gè)框架使程序員能夠規(guī)避在開發(fā)時(shí)期避免個(gè)別錯(cuò)誤導(dǎo)致整體被破壞,也能在后期應(yīng)對(duì)客戶對(duì)產(chǎn)品提出的新需求。
DAO層、Service層這兩個(gè)層次都可以單獨(dú)開發(fā),互相的耦合度很低,完全可以獨(dú)立進(jìn)行,這樣的一種模式在開發(fā)大項(xiàng)目的過程中尤其有優(yōu)勢(shì)。
Controller,View層因?yàn)轳詈隙缺容^高,因而要結(jié)合在一起開發(fā),但是也可以看作一個(gè)整體獨(dú)立于前兩個(gè)層進(jìn)行開發(fā)。這樣,在層與層之前只需要知道接口的定義,調(diào)用接口即可完成所需要的邏輯單元應(yīng)用,一切顯得非常清晰簡(jiǎn)單。
開發(fā)任何一個(gè)系統(tǒng),都要對(duì)其可行性進(jìn)行分析,對(duì)其時(shí)間和資源上的限制進(jìn)行考慮,這樣可以減少系統(tǒng)開發(fā)的風(fēng)險(xiǎn)。同時(shí),分析之后不僅能夠合理的運(yùn)用人力,還能在各方面資源的消耗上得到節(jié)省。下面就對(duì)技術(shù)、經(jīng)濟(jì)和社會(huì)三個(gè)方面來介紹。
技術(shù)可行性主要考慮當(dāng)前項(xiàng)目所用的技術(shù)是否能夠符合,在設(shè)備上是否能夠滿足,及各種輔助工具是否提供幫助。本系統(tǒng)用的是Java開發(fā)語言,調(diào)試相對(duì)簡(jiǎn)單,當(dāng)前的計(jì)算機(jī)硬件配置也完全能滿足開發(fā)的需求,因此在技術(shù)上是絕對(duì)可行的。軟件方面:由于軟件的開發(fā)平臺(tái)成熟可行,它們速度快、容量大、可靠性能高、價(jià)格低,完全能滿足系統(tǒng)的需求。采用Java編程語言,已無技術(shù)上的問題。
系統(tǒng)所采用的Myeclipse開發(fā)平臺(tái)和Mysql后端數(shù)據(jù)庫均為免費(fèi)開發(fā)工具。故開發(fā)成本主要集中在后期的推廣及系統(tǒng)維護(hù)上。相對(duì)于成本較高的C/S模式,也是選用了成本較低的B/S模式,所以經(jīng)濟(jì)上幾乎沒任何問題。
本系統(tǒng)是自行開發(fā)的系統(tǒng),以方便高效管理線上閱讀平臺(tái)為出發(fā)點(diǎn),是具有實(shí)際意義的系統(tǒng),開發(fā)的環(huán)境軟件和用到的數(shù)據(jù)庫也都是開源代碼,不存在侵權(quán)等問題,所以在社會(huì)方面也是可行的。
對(duì)于性能分析,與傳統(tǒng)的管理方式相比,傳統(tǒng)的管理方式是使用人工通過用紙和筆進(jìn)行數(shù)據(jù)信息的統(tǒng)計(jì)和管理,并且這種方式對(duì)于存儲(chǔ)和查找某一數(shù)據(jù)信息都比較麻煩,隨著計(jì)算機(jī)網(wǎng)絡(luò)的到來,這種傳統(tǒng)的方法很難適應(yīng)當(dāng)下社會(huì)的發(fā)展,不僅降低人們的辦事效率,而且還需要很多的人力和物力,對(duì)于使用的時(shí)間和所要花費(fèi)的費(fèi)用都是比較高的,為了降低成本費(fèi)用,提高用戶的工作效率,進(jìn)行開發(fā)一套基于計(jì)算機(jī)和網(wǎng)絡(luò)技術(shù)的線上閱讀平臺(tái)??。
線上閱讀平臺(tái)的開發(fā)設(shè)計(jì)時(shí)一個(gè)獨(dú)立的系統(tǒng),以之前數(shù)據(jù)庫進(jìn)行數(shù)據(jù)的存儲(chǔ)開發(fā),主要是為了實(shí)現(xiàn)線上閱讀平臺(tái)??的用戶角色及相對(duì)應(yīng)的功能模塊,讓線上閱讀平臺(tái)的管理不會(huì)存在管理差異、低效率,而是跟傳統(tǒng)的管理信息恰好相反,線上閱讀平臺(tái)的實(shí)現(xiàn)可以節(jié)約資源,并且對(duì)于業(yè)務(wù)的處理速度也提高,速度快、效率高,功能性強(qiáng)大。
3.3系統(tǒng)流程分析
3.3.1添加信息流程
添加信息,編號(hào)系統(tǒng)使用自動(dòng)編號(hào)模式,沒有用戶填寫,用戶添加信息輸入信息,系統(tǒng)將自動(dòng)確認(rèn)的信息和數(shù)據(jù),驗(yàn)證的成功是有效的信息添加到數(shù)據(jù)庫,信息無效,重新輸入信息。添加信息流程如圖3-3所示。
圖3-3 添加信息流程圖
3.3.2操作流程
用戶想進(jìn)入系統(tǒng),首先進(jìn)入系統(tǒng)登錄界面,通過正確的用戶名、密碼,選擇登錄類型登錄,系統(tǒng)會(huì)檢查登錄信息,信息正確,然后輸入相應(yīng)的功能界面,提示信息錯(cuò)誤,登錄失敗。系統(tǒng)操作流程如圖3-4所示。
圖3-4操作流程圖
3.3.3刪除信息流程
用戶選擇要?jiǎng)h除的信息并單擊Delete按鈕。系統(tǒng)提示是否刪除信息。如果用戶想要?jiǎng)h除信息,系統(tǒng)將刪除信息。系統(tǒng)數(shù)據(jù)庫刪除信息。刪除信息流程圖如圖3-5所示。
圖3-5?刪除信息流程圖
系統(tǒng)設(shè)計(jì)
線上閱讀平臺(tái) 的系統(tǒng)項(xiàng)目的概述設(shè)計(jì)分析,主要內(nèi)容有線上閱讀平臺(tái)的具體分析,進(jìn)行數(shù)據(jù)庫的是設(shè)計(jì),數(shù)據(jù)采用mysql數(shù)據(jù)庫,并且對(duì)于系統(tǒng)的設(shè)計(jì)采用比較人性化的操作設(shè)計(jì),對(duì)于系統(tǒng)出現(xiàn)的錯(cuò)誤信息可以及時(shí)做出處理及反饋。
基于線上閱讀平臺(tái)的設(shè)計(jì)基于現(xiàn)有的電腦,可以實(shí)現(xiàn)用戶管理、書籍信息搜索、投稿中心、反饋中心功能等詳細(xì)的了解及統(tǒng)計(jì)分析。根據(jù)系統(tǒng)功能需求建立的模塊關(guān)系圖如下圖:
???????????圖4-1管理員功能模塊圖
???????
線上閱讀平臺(tái)的開發(fā)對(duì)管理模塊和系統(tǒng)使用的數(shù)據(jù)庫進(jìn)行分析,編寫代開發(fā),規(guī)劃和操作是構(gòu)建信息管理應(yīng)用程序的必要三步曲,它決定了系統(tǒng)是否能夠真正實(shí)現(xiàn)預(yù)設(shè)功能以及是否可以在成功設(shè)計(jì)后實(shí)施。在開發(fā)過程中,每個(gè)階段必須嚴(yán)格按照線性順序進(jìn)行開發(fā),并且在相應(yīng)階段生成的每個(gè)工作都可以通過技術(shù)進(jìn)行驗(yàn)證和檢查。確保一個(gè)階段完成后是正確的,不會(huì)造成下一階段拖拽現(xiàn)象,使系統(tǒng)完成設(shè)計(jì)功能后得到保證。
從線上閱讀平臺(tái)的成功開發(fā)經(jīng)驗(yàn)來看,上述方法效果最為明顯,最大程度地降低了系統(tǒng)開發(fā)的復(fù)雜性。如圖4-2所示。
?????????圖4-2開發(fā)系統(tǒng)流程圖
數(shù)據(jù)庫是信息系統(tǒng)的基礎(chǔ)和核心。數(shù)據(jù)庫設(shè)計(jì)的好壞直接影響到信息系統(tǒng)開發(fā)的成敗。創(chuàng)建數(shù)據(jù)庫表首先確定實(shí)體的屬性和實(shí)體之間的關(guān)系。根據(jù)關(guān)系創(chuàng)建一個(gè)數(shù)據(jù)表。
4.3.1實(shí)體ER圖
數(shù)據(jù)庫是整個(gè)軟件編程中最重要的一個(gè)步驟,對(duì)于數(shù)據(jù)庫問題主要是判定數(shù)據(jù)庫的數(shù)量和結(jié)構(gòu)公式的創(chuàng)建。展示系統(tǒng)使用的是Mysql進(jìn)行對(duì)數(shù)據(jù)庫進(jìn)行管理,進(jìn)行保證數(shù)據(jù)的安全性、穩(wěn)定性等。
概念模型的設(shè)計(jì)是為了抽象真實(shí)世界的信息,并對(duì)信息世界進(jìn)行建模。它是數(shù)據(jù)庫設(shè)計(jì)的強(qiáng)大工具。數(shù)據(jù)庫概念模型設(shè)計(jì)可以通過E-R圖描述現(xiàn)實(shí)世界的概念模型。系統(tǒng)的E-R圖顯示了系統(tǒng)中實(shí)體之間的鏈接。而且Mysql數(shù)據(jù)庫是自我保護(hù)能力比較強(qiáng)的數(shù)據(jù)庫,下圖主要是對(duì)數(shù)據(jù)庫實(shí)體的E-R圖:
(1)書籍管理E-R圖,如圖4-3所示:
?圖4-3書籍管理實(shí)體屬性圖
?(2)投稿中心管理E-R圖如圖4-4所示:
???圖4-4投稿中心管理實(shí)體圖
這些功能可以充分滿足線上閱讀平臺(tái)??的需求。此系統(tǒng)功能較為全面如下圖系統(tǒng)功能結(jié)構(gòu)如圖4-5所示。
??????????????????????????????圖4-5系統(tǒng)功能結(jié)構(gòu)圖
4.3.2數(shù)據(jù)表
將數(shù)據(jù)庫概念設(shè)計(jì)的E-R圖轉(zhuǎn)換為關(guān)系數(shù)據(jù)庫。在關(guān)系數(shù)據(jù)庫中,數(shù)據(jù)關(guān)系由數(shù)據(jù)表組成,但是表的結(jié)構(gòu)表現(xiàn)在表的字段上。
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| user_registration_id | int | 11 | 是 | 是 | 用戶注冊(cè)ID |
| user_account | varchar | 64 | 是 | 否 | 用戶賬號(hào) |
| gender | varchar | 64 | 否 | 否 | 性別 |
| age | varchar | 64 | 否 | 否 | 年齡 |
| examine_state | varchar | 16 | 是 | 否 | 審核狀態(tài) |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| user_id | int | 11 | 是 | 否 | 用戶ID |
| create_time | datetime | 0 | 是 | 否 | 創(chuàng)建時(shí)間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時(shí)間 |
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| reading_center_id | int | 11 | 是 | 是 | 閱讀中心ID |
| book_number | varchar | 64 | 否 | 否 | 書籍編號(hào) |
| book_name | varchar | 64 | 否 | 否 | 書籍名稱 |
| book_classification | varchar | 64 | 否 | 否 | 書籍分類 |
| book_cover_ | varchar | 255 | 否 | 否 | 書籍封面 |
| book_accessories | varchar | 255 | 否 | 否 | 書籍附件 |
| book_author | varchar | 64 | 否 | 否 | 書籍作者 |
| number_of_words_in_books | varchar | 64 | 否 | 否 | 書籍字?jǐn)?shù) |
| book_status | varchar | 64 | 否 | 否 | 書籍狀態(tài) |
| book_introduction | text | 0 | 否 | 否 | 書籍簡(jiǎn)介 |
| start_reading | longtext | 0 | 否 | 否 | 開始閱讀 |
| hits | int | 11 | 是 | 否 | 點(diǎn)擊數(shù) |
| praise_len | int | 11 | 是 | 否 | 點(diǎn)贊數(shù) |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創(chuàng)建時(shí)間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時(shí)間 |
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| manuscript_central_id | int | 11 | 是 | 是 | 投稿中心ID |
| book_number | varchar | 64 | 否 | 否 | 書籍編號(hào) |
| book_name | varchar | 64 | 否 | 否 | 書籍名稱 |
| book_classification | varchar | 64 | 否 | 否 | 書籍分類 |
| book_cover_ | varchar | 255 | 否 | 否 | 書籍封面 |
| book_accessories | varchar | 255 | 否 | 否 | 書籍附件 |
| book_author | varchar | 64 | 否 | 否 | 書籍作者 |
| user_account | int | 11 | 否 | 否 | 用戶賬號(hào) |
| audit_status | varchar | 64 | 否 | 否 | 審核狀態(tài) |
| book_introduction | text | 0 | 否 | 否 | 書籍簡(jiǎn)介 |
| review_reply | text | 0 | 否 | 否 | 審核回復(fù) |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創(chuàng)建時(shí)間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時(shí)間 |
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| feedback_center_id | int | 11 | 是 | 是 | 反饋中心ID |
| feedback_title | varchar | 64 | 否 | 否 | 反饋標(biāo)題 |
| feedback_type | varchar | 64 | 否 | 否 | 反饋類型 |
| user_account | int | 11 | 否 | 否 | 用戶賬號(hào) |
| feedback_time | date | 0 | 否 | 否 | 反饋時(shí)間 |
| feedback_content | text | 0 | 否 | 否 | 反饋內(nèi)容 |
| reply_content | text | 0 | 否 | 否 | 回復(fù)內(nèi)容 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創(chuàng)建時(shí)間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時(shí)間 |
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| classification_information_id | int | 11 | 是 | 是 | 分類信息ID |
| book_classification | varchar | 64 | 否 | 否 | 書籍分類 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創(chuàng)建時(shí)間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時(shí)間 |
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| book_management_id | int | 11 | 是 | 是 | 書籍管理ID |
| book_number | varchar | 64 | 否 | 否 | 書籍編號(hào) |
| book_name | varchar | 64 | 否 | 否 | 書籍名稱 |
| book_classification | varchar | 64 | 否 | 否 | 書籍分類 |
| book_cover_ | varchar | 255 | 否 | 否 | 書籍封面 |
| book_accessories | varchar | 255 | 否 | 否 | 書籍附件 |
| book_author | varchar | 64 | 否 | 否 | 書籍作者 |
| user_account | int | 11 | 否 | 否 | 用戶賬號(hào) |
| book_introduction | text | 0 | 否 | 否 | 書籍簡(jiǎn)介 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創(chuàng)建時(shí)間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時(shí)間 |
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| notice_id | mediumint | 8 | 是 | 是 | 公告id: |
| title | varchar | 125 | 是 | 否 | 標(biāo)題: |
| content | longtext | 0 | 否 | 否 | 正文: |
| create_time | timestamp | 0 | 是 | 否 | 創(chuàng)建時(shí)間: |
| update_time | timestamp | 0 | 是 | 否 | 更新時(shí)間: |
從web系統(tǒng)查詢數(shù)據(jù)的根本的查詢步驟:
Step1: 進(jìn)行檢查并且過濾來自用戶的系統(tǒng)數(shù)據(jù);
Step2: 成立起一個(gè)合適的數(shù)據(jù)庫進(jìn)行連接;
Step3: 進(jìn)行查詢系統(tǒng)數(shù)據(jù)庫;
Step4: 獲得查詢的結(jié)構(gòu);
Step5: 把查詢的結(jié)果展示給用戶。
Step6: 數(shù)據(jù)庫連接斷開,釋放資源。
數(shù)據(jù)庫連接原理如下圖所示。
圖5-1數(shù)據(jù)庫連接原理
數(shù)據(jù)庫連接關(guān)鍵代碼如下所示。
/**
?* 臨時(shí)訪問牌(AccessToken)表實(shí)體類
?*
?*/
@TableName("access_token")
@Data
@EqualsAndHashCode(callSuper = false)
public class AccessToken implements Serializable {
????private static final long serialVersionUID = 913269304437207500L;
????/**
?????* 臨時(shí)訪問牌ID
?????*/
????@TableId(value = "token_id", type = IdType.AUTO)
????private Integer tokenId;
????/**
?????* 臨時(shí)訪問牌
?????*/
????@TableField(value = "token")
????private String token;
????/**
?????* 最大壽命:默認(rèn)2小時(shí)
?????*/
????@TableField(value = "maxage")
????private Integer maxage;
????/**
?????* 創(chuàng)建時(shí)間:
?????*/
????@TableField(value = "create_time")
????private Timestamp createTime;
????/**
?????* 更新時(shí)間:
?????*/
????@TableField(value = "update_time")
????private Timestamp updateTime;
????/**
?????* 用戶信息
?????*/
????@TableField(value = "user_id")
????private Integer user_id;
}
為確保系統(tǒng)安全性,系統(tǒng)操作員只有在登錄界面輸入正確的用戶名、密碼、權(quán)限以及驗(yàn)證碼,單擊“登錄”按鈕后才能夠進(jìn)入本系統(tǒng)的主界面。
用戶登錄流程圖如下所示。
????????????????????
圖5-1用戶登錄流程圖
登錄界面如下圖所示。
圖5-1登錄界面
登錄代碼如下:
????/**
?????* 登錄
?????* @param data
?????* @param httpServletRequest
?????* @return
?????*/
????@PostMapping("login")
????public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
????????log.info("[執(zhí)行登錄接口]");
????????String username = data.get("username");
????????String email = data.get("email");
????????String phone = data.get("phone");
????????String password = data.get("password");
????????List resultList = null;
????????QueryWrapper wrapper = new QueryWrapper<User>();
????????Map<String, String> map = new HashMap<>();
????????if(username != null && "".equals(username) == false){
????????????map.put("username", username);
????????????resultList = service.selectBaseList(service.select(map, new HashMap<>()));
????????}
????????else if(email != null && "".equals(email) == false){
????????????map.put("email", email);
????????????resultList = service.selectBaseList(service.select(map, new HashMap<>()));
????????}
????????else if(phone != null && "".equals(phone) == false){
????????????map.put("phone", phone);
????????????resultList = service.selectBaseList(service.select(map, new HashMap<>()));
????????}else{
????????????return error(30000, "賬號(hào)或密碼不能為空");
????????}
????????if (resultList == null || password == null) {
????????????return error(30000, "賬號(hào)或密碼不能為空");
????????}
????????//判斷是否有這個(gè)用戶
????????if (resultList.size()<=0){
????????????return error(30000,"用戶不存在");
????????}
????????User byUsername = (User) resultList.get(0);
????????Map<String, String> groupMap = new HashMap<>();
????????groupMap.put("name",byUsername.getUserGroup());
????????List groupList = userGroupService.selectBaseList(userGroupService.select(groupMap, new HashMap<>()));
????????if (groupList.size()<1){
????????????return error(30000,"用戶組不存在");
????????}
????????UserGroup userGroup = (UserGroup) groupList.get(0);
????????//查詢用戶審核狀態(tài)
????????if (!StringUtils.isEmpty(userGroup.getSourceTable())){
????????????String res = service.selectExamineState(userGroup.getSourceTable(),byUsername.getUserId());
????????????if (res==null){
????????????????return error(30000,"用戶不存在");
????????????}
????????????if (!res.equals("已通過")){
????????????????return error(30000,"該用戶審核未通過");
????????????}
????????}
????????//查詢用戶狀態(tài)
????????if (byUsername.getState()!=1){
????????????return error(30000,"用戶非可用狀態(tài),不能登錄");
????????}
????????String md5password = service.encryption(password);
????????if (byUsername.getPassword().equals(md5password)) {
????????????// 存儲(chǔ)Token到數(shù)據(jù)庫
????????????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, "賬號(hào)或密碼不正確");
????????}
}
????public String 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 sql.toString();
}
????public List selectBaseList(String select) {
????????List<Map<String,Object>> mapList = baseMapper.selectBaseList(select);
????????List<E> list = new ArrayList<>();
????????for (Map<String,Object> map:mapList) {
????????????list.add(JSON.parseObject(JSON.toJSONString(map),eClass));
????????}
????????return list;
}
用戶在填寫數(shù)據(jù)的時(shí)候必須與注冊(cè)頁面上的驗(yàn)證相匹配否則會(huì)注冊(cè)失敗,注冊(cè)頁面的表單驗(yàn)證是通過驗(yàn)證的,用戶名的長度必須在6到18之間,郵箱必須帶有@符號(hào),密碼和密碼確認(rèn)必須相同,你輸入的密碼,系統(tǒng)會(huì)根據(jù)你輸入密碼的強(qiáng)度給出指定的值,電話號(hào)碼和身份證號(hào)碼必須要求輸入格式與生活相符合,當(dāng)你前臺(tái)驗(yàn)證通過的時(shí)候你點(diǎn)擊注冊(cè),表單會(huì)將你輸入的值通過name值傳遞給后臺(tái)并保存到數(shù)據(jù)庫中。
用戶注冊(cè)流程圖如下圖所示。
圖5-1用戶注冊(cè)流程圖
圖5-1用戶注冊(cè)界面
注冊(cè)關(guān)鍵代碼如下所示。
??/**
?????* 注冊(cè)
?????* @return
?????*/
????@PostMapping("register")
????public Map<String, Object> signUp(HttpServletRequest request) throws IOException {
????????// 查詢用戶
????????Map<String, String> query = new HashMap<>();
????????Map<String,Object> map = service.readBody(request.getReader());
????????query.put("username",String.valueOf(map.get("username")));
????????List list = service.selectBaseList(service.select(query, new HashMap<>()));
????????if (list.size()>0){
????????????return error(30000, "用戶已存在");
????????}
????????map.put("password",service.encryption(String.valueOf(map.get("password"))));
????????service.insert(map);
????????return success(1);
}
????public Map<String,Object> readBody(BufferedReader reader){
????????BufferedReader br = null;
????????StringBuilder sb = new StringBuilder("");
????????try{
????????????br = reader;
????????????String str;
????????????while ((str = br.readLine()) != null){
????????????????sb.append(str);
????????????}
????????????br.close();
????????????String json = sb.toString();
????????????return JSONObject.parseObject(json, Map.class);
????????}catch (IOException e){
????????????e.printStackTrace();
????????}finally{
????????????if (null != br){
????????????????try{
????????????????????br.close();
????????????????}catch (IOException e){
????????????????????e.printStackTrace();
????????????????}
????????????}
????????}
????????return null;
????}
????public void insert(Map<String,Object> body){
????????E entity = JSON.parseObject(JSON.toJSONString(body),eClass);
????????baseMapper.insert(entity);
????????log.info("[{}] - 插入操作:{}",entity);
}
如果小說資訊列表數(shù)據(jù)的信息需要修改,管理員可以通過查詢小說資訊列表數(shù)據(jù)的基本信息來查詢小說資訊列表數(shù)據(jù),查詢小說資訊列表數(shù)據(jù)是通過ajax技術(shù)來進(jìn)行查詢的,需要傳遞小說資訊列表數(shù)據(jù)的標(biāo)題、編號(hào)等參數(shù)然后在返回到該頁面中,可以選中要修改或刪除的那條信息,如果選中了超過一條數(shù)據(jù),頁面會(huì)挑一個(gè)窗口提醒只能選擇一條數(shù),如果沒有選中數(shù)據(jù)會(huì)挑一個(gè)窗口題型必須選擇一條數(shù)據(jù)。當(dāng)選擇確認(rèn)修改的時(shí)候,后臺(tái)會(huì)根據(jù)傳過來的id到數(shù)據(jù)庫查詢,并將結(jié)果返回到修改頁面中,可以在修改頁面中修改剛剛選中的信息當(dāng)點(diǎn)擊確認(rèn)的時(shí)候from表單會(huì)將修改的數(shù)據(jù)提交到后臺(tái)并保存到數(shù)據(jù)庫中,就是說如果提交的數(shù)據(jù)數(shù)據(jù)庫中存在就修改,否則就保存。
小說資訊列表數(shù)據(jù)展示界面如下圖所示。
圖5-1小說資訊界面圖
小說資訊管理關(guān)鍵代碼如下所示。
@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);
????}
用戶圖書推薦頁面點(diǎn)開,后臺(tái)會(huì)自動(dòng)生成推薦列表。從session中取出該圖書信息,前臺(tái)發(fā)起請(qǐng)求,將對(duì)應(yīng)的圖書信息、baozhangpId參數(shù)信息從前臺(tái)傳遞BaozhangController類里,匹配到create()方法,create()方法調(diào)用BaozhangServiceImpl類的createBaozhang()方法獲取數(shù)據(jù),調(diào)用本類的getCartBaozhangItem()方法得到推薦列表。
閱讀中心推薦界面如下所示。
圖5-1閱讀中心推薦界面
閱讀中心推薦關(guān)鍵代碼如下:
????@RequestMapping(value = "/del")
????@Transactional
????public Map<String, Object> del(HttpServletRequest request) {
????????service.delete(service.readQuery(request), service.readConfig(request));
????????return success(1);
}
????
???????
}
書籍信息功能需要考慮高并發(fā),防止出現(xiàn)圖書重復(fù)添加、圖書狀態(tài)顯示出錯(cuò)等情況,特對(duì)圖書這一共享數(shù)據(jù)增加鎖機(jī)制。在樂觀鎖、悲觀鎖以及線程鎖中,綜合考慮性能效率和錯(cuò)誤的可接受性選擇了樂觀鎖機(jī)制。樂觀鎖的實(shí)現(xiàn)方式是使用版本標(biāo)識(shí)來確定讀到的數(shù)據(jù)與提交時(shí)的數(shù)據(jù)是否一致,提交后修改版本標(biāo)識(shí),不一致時(shí)可以采取丟棄和再次嘗試的策略。在數(shù)據(jù)庫圖書表(對(duì)應(yīng)圖書實(shí)體)設(shè)計(jì)中增加了version字段,每次數(shù)據(jù)提交時(shí)(更改圖書狀態(tài))會(huì)判斷version是否匹配,若不匹配停止本次提交,若匹配則提交成功并增加version的值。
書籍信息功能整體流程:用戶瀏覽書籍信息時(shí),同時(shí)會(huì)顯示圖書的狀態(tài),在用戶點(diǎn)擊搜索按鈕時(shí),會(huì)先通過攔截器判斷用戶是否登錄,若未登錄,會(huì)跳轉(zhuǎn)至登錄頁面,提示用戶先登錄,若為登錄用戶就會(huì)跳轉(zhuǎn)至填寫書籍信息的頁面,填寫關(guān)鍵字眼之后,點(diǎn)擊搜索按鈕,搜索成功之后返回提示信息。
書籍添加流程圖如下圖所示。
圖5-1書籍添加流程圖
書籍信息展示界面如下圖所示。
圖5-1書籍信息展示界面
書籍信息展示關(guān)鍵代碼如下所示。
public List selectBaseList(String select) {
????????List<Map<String,Object>> mapList = baseMapper.selectBaseList(select);
????????List<E> list = new ArrayList<>();
????????for (Map<String,Object> map:mapList) {
????????????list.add(JSON.parseObject(JSON.toJSONString(map),eClass));
????????}
????????return list;
}
圖書分類功能整體流程:用戶瀏覽圖書信息時(shí),同時(shí)會(huì)顯示圖書的狀態(tài),系統(tǒng)會(huì)在其顯示詳細(xì)信息的頁面時(shí)便會(huì)判斷圖書的狀態(tài),若圖書狀態(tài)為可圖書分類,則會(huì)顯示圖書分類的鏈接按鈕。在用戶點(diǎn)擊圖書分類按鈕時(shí),會(huì)先通過攔截器判斷用戶是否登錄,若未登錄,會(huì)跳轉(zhuǎn)至登錄頁面,提示用戶先登錄,若為登錄用戶就會(huì)跳轉(zhuǎn)至填寫圖書分類信息的頁面,填寫好圖書分類信息之后,點(diǎn)擊提交按鈕,圖書分類成功之后返回提示信息,告知用戶圖書分類成功。
圖書分類列表流程圖如下圖所示。
????????????
圖5-1圖書分類管理流程圖
圖書分類管理界面如下圖所示。
圖5-1圖書分類管理界面圖
圖書分類管理關(guān)鍵代碼如下所示。
???public List selectBaseList(String select) {
????????List<Map<String,Object>> mapList = baseMapper.selectBaseList(select);
????????List<E> list = new ArrayList<>();
????????for (Map<String,Object> map:mapList) {
????????????list.add(JSON.parseObject(JSON.toJSONString(map),eClass));
????????}
????????return list;
}
此頁面的關(guān)鍵是編輯書籍信息,包括書籍名稱、書籍類別、書籍作者信息等。單擊提交按鈕以完成信息的添加。如果未寫入完整的書籍信息,例如,如果未寫入書籍編號(hào),系統(tǒng)將給出相應(yīng)的錯(cuò)誤提示,并且無法成功輸入。數(shù)據(jù)以概念的形式以onsubmit =“return checkForm()”的形式寫入以進(jìn)行檢查,checkForm()函數(shù)是一種用于寫入數(shù)據(jù)的不同類型的校對(duì)方法,是不是為空也是經(jīng)過form表單中的οnsubmit=”return checkForm()來檢查。
管理員點(diǎn)擊左側(cè)菜單“書籍信息管理”,頁面跳轉(zhuǎn)到書籍信息管理外觀,調(diào)用后臺(tái)測(cè)評(píng)查詢所有書籍信息。并將信息密封到數(shù)據(jù)集合List,綁定到請(qǐng)求對(duì)象,然后頁面跳轉(zhuǎn)到相應(yīng)的界面,顯示出測(cè)評(píng)信息,單擊刪除按鈕完成書籍信息的刪除。
書籍信息管理流程圖如下圖所示。
圖5-1書籍信息管理流程圖
書籍信息管理界面如下圖所示。
圖5-1書籍信息管理界面圖
書籍信息管理關(guān)鍵代碼如下所示。
@RequestMapping(value = "/del")
????@Transactional
????public Map<String, Object> del(HttpServletRequest request) {
????????service.delete(service.readQuery(request), service.readConfig(request));
????????return success(1);
}
1、服務(wù)器端
操作系統(tǒng):Windows 7
Web服務(wù)器:Tomcat7.0
數(shù)據(jù)庫:Mysql
開發(fā)語言:Java
2、客戶端
瀏覽器:Internet Explorer10
界面布局:DIV+CSS
分辨率:最佳效果1027*768以上像素
3、開發(fā)工具
Visual Studio Code
Myeclipse
系統(tǒng)測(cè)試是用于檢查軟件的質(zhì)量、性能、可靠性等是否符合用戶需求。一套嚴(yán)謹(jǐn)?shù)摹⒁?guī)范的、完善的測(cè)試過程將大大提高軟件的質(zhì)量、可信度、可靠性,降低軟件的出錯(cuò)率,降低用戶風(fēng)險(xiǎn)系數(shù)。通過在計(jì)算機(jī)上對(duì)系統(tǒng)進(jìn)行測(cè)試試驗(yàn)并從中發(fā)現(xiàn)此系統(tǒng)中存在的問題和錯(cuò)誤然后加以修改,使之更加符合用戶需求。
1.測(cè)試的目的是通過測(cè)試來發(fā)現(xiàn)程序在執(zhí)行過程中的錯(cuò)誤的過程。
2.好的測(cè)試方案是可以檢驗(yàn)出還未被發(fā)現(xiàn)的錯(cuò)誤的方案。
3.好的測(cè)試是發(fā)現(xiàn)了到目前為止還未被發(fā)現(xiàn)的錯(cuò)誤的測(cè)試。
4.該系統(tǒng)能夠完成管理員、圖書分類、用戶管理、書籍信息、小說資訊、投稿中心等功能,做到所開發(fā)的系統(tǒng)操作簡(jiǎn)單,盡量使系統(tǒng)操作不受用戶對(duì)電腦知識(shí)水平的限制。
下表是線上閱讀平臺(tái)功能的測(cè)試用例,檢測(cè)了線上閱讀平臺(tái)中對(duì)圖書推薦信息的增加,刪除,修改,查詢操作是否成功運(yùn)行。觀察系統(tǒng)的響應(yīng)情況,得出該功能也達(dá)到了設(shè)計(jì)目標(biāo),系統(tǒng)運(yùn)行正確。
前置條件;管理員登錄系統(tǒng)。
表6-1圖書信息管理的測(cè)試用例
| 功能描述 | 用于圖書信息管理 | |
| 測(cè)試目的 | 檢測(cè)圖書信息管理時(shí)的各種操作的運(yùn)行情況 | |
| 測(cè)試數(shù)據(jù)以及操作 | 預(yù)期結(jié)果 | 實(shí)際結(jié)果 |
| 點(diǎn)擊添加圖書信息,必填項(xiàng)合法輸入,點(diǎn)擊保存 | 提示添加成功 | 與預(yù)期結(jié)果一致 |
| 點(diǎn)擊添加圖書信息,必填項(xiàng)輸入不合法,點(diǎn)擊保存 | 提示必填項(xiàng)不能為空 | 與預(yù)期結(jié)果一致 |
| 點(diǎn)擊修改圖書信息,必填項(xiàng)修改為空,點(diǎn)擊保存 | 提示必填項(xiàng)不能為空 | 與預(yù)期結(jié)果一致 |
| 點(diǎn)擊修改圖書信息,必填項(xiàng)輸入不合法,點(diǎn)擊保存 | 提示必填項(xiàng)不能為空 | 與預(yù)期結(jié)果一致 |
| 點(diǎn)擊刪除圖書信息,選擇圖書信息刪除 | 提示刪除成功 | 與預(yù)期結(jié)果一致 |
| 點(diǎn)擊搜索圖書信息,輸入存在的圖書信息名 | 查找出圖書信息 | 與預(yù)期結(jié)果一致 |
| 點(diǎn)擊搜索圖書信息 ,輸入不存在的在線投票名 | 不顯示圖書信息 | 與預(yù)期結(jié)果一致 |
下表是投稿中心管理功能的測(cè)試用例,檢測(cè)了投稿中心管理的操作是否成功運(yùn)行。觀察系統(tǒng)的響應(yīng)情況,得出該功能也達(dá)到了設(shè)計(jì)目標(biāo),系統(tǒng)運(yùn)行正確。
前置條件;管理員登錄系統(tǒng)。
表6-2 投稿中心管理的測(cè)試用例
| 功能描述 | 用于投稿中心管理 | |
| 測(cè)試目的 | 檢測(cè)投稿中心管理時(shí)各種操作的情況 | |
| 測(cè)試數(shù)據(jù)以及操作 | 預(yù)期結(jié)果 | 實(shí)際結(jié)果 |
| 未選擇投稿中心,點(diǎn)擊提交 | 提示請(qǐng)選擇投稿中心 | 與預(yù)期結(jié)果一致 |
| 未上傳附件,點(diǎn)擊提交 | 提示請(qǐng)選擇附件 | 與預(yù)期結(jié)果一致 |
| 未選擇原因,點(diǎn)擊提交 | 提示請(qǐng)選擇原因 | 與預(yù)期結(jié)果一致 |
根據(jù)以上測(cè)試情況,測(cè)試結(jié)果如下表所示。
表6-1測(cè)試結(jié)果表
| 測(cè)試項(xiàng)目 | 測(cè)試結(jié)果 |
| 登錄測(cè)試 | 成功 |
| 修改密碼測(cè)試 | 成功 |
| 書籍信息管理測(cè)試 | 成功 |
| 圖書分類測(cè)試 | 成功 |
| 小說資訊 | 成功 |
| 投稿中心管理測(cè)試 | 成功 |
| 反饋中心測(cè)試 | 成功 |
| 用戶管理測(cè)試 | 成功 |
本研究針對(duì)線上閱讀平臺(tái)地需求建模,數(shù)據(jù)建模及過程建模分析設(shè)計(jì)并實(shí)現(xiàn)線上閱讀平臺(tái)的過程。給出系統(tǒng)應(yīng)用架構(gòu)并分析優(yōu)劣勢(shì),通過功能分解圖,系統(tǒng)組件圖描述功能需求。設(shè)計(jì)建立了數(shù)據(jù)庫,給出系統(tǒng)關(guān)鍵數(shù)據(jù)結(jié)構(gòu)的定義。通過類關(guān)系圖描述組件間的協(xié)作關(guān)系,給出各個(gè)類的定義方法。通過描述每一個(gè)類的字段,屬性及方法實(shí)現(xiàn)線上閱讀平臺(tái)??的前后端代碼。最終給出系統(tǒng)集成整合方法,完成線上閱讀平臺(tái)??地設(shè)計(jì)與實(shí)現(xiàn)。
在此項(xiàng)目的開發(fā)中,當(dāng)靜態(tài)頁面的搭建的大體已經(jīng)完善時(shí),就需要和負(fù)責(zé)后臺(tái)開發(fā)的技術(shù)開發(fā)者聯(lián)系,來接好前后臺(tái)的數(shù)據(jù)接口,可以讓后臺(tái)的信息在前臺(tái)顯示出來,在這個(gè)項(xiàng)目實(shí)現(xiàn)中,明白了前端開發(fā)和后臺(tái)在整個(gè)系統(tǒng)中起到了什么作用,因?yàn)榍昂笈_(tái)的連接,用戶可以對(duì)系統(tǒng)進(jìn)行操作,可以在輸入自己的相關(guān)信息后,通過后臺(tái)加工,完成對(duì)數(shù)據(jù)庫的查找、修改、添加,而理解了這些關(guān)系與實(shí)現(xiàn)的方法后。再去完善整個(gè)系統(tǒng)的功能就更加清晰與簡(jiǎn)單了。此次的項(xiàng)目它涉及了前臺(tái)與后臺(tái)系統(tǒng)的搭建,在學(xué)校所學(xué)的知識(shí)基礎(chǔ)上,此次的項(xiàng)目,讓我對(duì)于一個(gè)系統(tǒng)的前端開發(fā),以及后臺(tái)的作用都有了一個(gè)更深切的認(rèn)知。
參考文獻(xiàn)
[1]楊孫超.從數(shù)字閱讀的變遷看待電子墨水屏技術(shù)的發(fā)展[J].科技資訊,2021,19(03):207-209.
[2]周瑞鶯,陳黃焱. 全媒體時(shí)代基于電子書閱讀器的閱讀推廣服務(wù)探析[C]//中國圖書館學(xué)會(huì)年會(huì)論文集(2020年卷).,2020:336-340.
[3]余麗娜.基于Android的多功能在線閱讀的設(shè)計(jì)與實(shí)現(xiàn)[J].信息通信,2019(08):199-200.
[4]祝潔莉,王細(xì)榮.掌閱iReader電子閱讀器及其打開國內(nèi)市場(chǎng)分析[J].新聞傳播,2019(14):186-187.
[5]陳東升.亞馬遜推出全新Kindle電子閱讀器[J].計(jì)算機(jī)與網(wǎng)絡(luò),2019,45(07):31.
[6]黃燕妮.Kindle電子書閱讀器在公共圖書館的使用情況調(diào)查分析——以廈門市圖書館為例[J].四川圖書館學(xué)報(bào),2019(05):60-64.
[7]寇惠云.在吸閱讀技術(shù)發(fā)展綜述[J].中國高新區(qū),2019(11):16+26.
[8]張潔.電子書閱讀界面在移動(dòng)互聯(lián)網(wǎng)時(shí)代的設(shè)計(jì)路線[J].數(shù)字技術(shù)與應(yīng)用,2019,36(03):147+149.
[9]毛璐娜. 基于多模態(tài)信號(hào)識(shí)別的無障礙電子書閱讀器的研究和實(shí)現(xiàn)[D].浙江大學(xué),2019.
[10]朱曉寧,王軍,郭延紅.基于Android下電子書閱讀器的技術(shù)研究[J].科技視界,2018(33):56+22.
[11]岳賢.互聯(lián)網(wǎng)大潮下“電紙書”還有人讀嗎[J].計(jì)算機(jī)與網(wǎng)絡(luò),2018,43(21):18.
[12]余娜.手機(jī)+移動(dòng)互聯(lián)網(wǎng)大潮下 “電紙書”還有人讀嗎[J].計(jì)算機(jī)與網(wǎng)絡(luò),2018,43(20):46.
[13]王東.Kindle X咪咕電子書閱讀器正式開售[J].計(jì)算機(jī)與網(wǎng)絡(luò),2018,43(18):28.
[14]陳濤.國內(nèi)電子書閱讀器發(fā)展現(xiàn)狀與前景芻議——以三款電子書閱讀器為例[J].山西科技,2018,31(05):95-99.
[15]孫瑞.智能設(shè)備中電子閱讀APP界面設(shè)計(jì)研究[J].出版廣角,2018(03):49-51.
[16] Kou Huiyun Overview of e-book reader technology development [J] China high tech Zone, 2020?(11): 16 + 26
[17] Zhang Jie Design route of e-book reading interface in the era of mobile Internet [J] Digital technology and application, 2019,36 (03): 147 + 149
致謝
在此論文完成之際,感謝我的指導(dǎo)老師。在指導(dǎo)老師的網(wǎng)頁設(shè)計(jì)課上,當(dāng)時(shí)我學(xué)到了很多東西,這對(duì)于我實(shí)習(xí)過程中也打了一定的基礎(chǔ),而且指導(dǎo)老師對(duì)于我的設(shè)計(jì)也提出許多建議,并予以悉心的指導(dǎo),對(duì)于一些細(xì)小的問題都耐心的指導(dǎo)我去完善,授予我寫論文的好友,時(shí)常的鼓勵(lì)我,另外感謝教導(dǎo)我完善此項(xiàng)目的前端同學(xué),對(duì)于這個(gè)項(xiàng)目,我是邊學(xué)習(xí)邊實(shí)現(xiàn)完成的,有許多東西開始并不是很明白,但前端開發(fā)的同學(xué)非常耐心的引導(dǎo)我去將這個(gè)項(xiàng)目完成,在系統(tǒng)的后端開發(fā)中,所用到的后臺(tái)開發(fā)技術(shù)也時(shí)常會(huì)給我講解,助于我更好的將論文完成,在此對(duì)幫助到我的同學(xué)和一直予以教導(dǎo)的指導(dǎo)老師致以衷心的感謝,祝事業(yè)有成。
?點(diǎn)贊+收藏+關(guān)注 ?→ ?私信領(lǐng)取本源代碼、數(shù)據(jù)庫
總結(jié)
以上是生活随笔為你收集整理的SSM基于java的线上阅读平台的设计与实现 毕业设计-附源码291023的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LOGO设计的五大原则
- 下一篇: PyQt5-在窗口上绘制文本 QPain