Springboot自習(xí)室管理系統(tǒng)小程序
摘要
信息化社會(huì)內(nèi)需要與之針對(duì)性的信息獲取途徑,但是途徑的擴(kuò)展基本上為人們所努力的方向,由于站在的角度存在偏差,人們經(jīng)常能夠獲得不同類型信息,這也是技術(shù)最為難以攻克的課題。針對(duì)自習(xí)室管理系統(tǒng)小程序等問題,對(duì)自習(xí)室管理系統(tǒng)小程序進(jìn)行研究分析,然后開發(fā)設(shè)計(jì)出自習(xí)室管理系統(tǒng)小程序以解決問題。
自習(xí)室管理系統(tǒng)小程序的設(shè)計(jì)主要是對(duì)系統(tǒng)所要實(shí)現(xiàn)的功能進(jìn)行詳細(xì)考慮,確定所要實(shí)現(xiàn)的功能后進(jìn)行界面的設(shè)計(jì),在這中間還要考慮如何可以更好的將功能及頁(yè)面進(jìn)行很好的結(jié)合,方便用戶可以很容易明了的找到自己所需要的信息,還有系統(tǒng)平臺(tái)后期的可操作性,通過對(duì)信息內(nèi)容的詳細(xì)了解進(jìn)行技術(shù)的開發(fā)。
自習(xí)室管理系統(tǒng)小程序的開發(fā)利用現(xiàn)有的成熟技術(shù)參考,以源代碼為模板,分析功能調(diào)整與自習(xí)室管理系統(tǒng)小程序管理的實(shí)際需求相結(jié)合,討論了基于自習(xí)室管理系統(tǒng)小程序管理的使用。
經(jīng)過本人的綜合考慮,自習(xí)室管理系統(tǒng)小程序的設(shè)計(jì)是采取面對(duì)對(duì)象的開發(fā)模式進(jìn)行軟件的開發(fā)和硬體的架設(shè),能很好的滿足實(shí)際使用的需求,完善了對(duì)應(yīng)的軟體架設(shè)以及程序編碼的工作,采取MySQL作為后臺(tái)數(shù)據(jù)的主要存儲(chǔ)單元,采用Spring boot框架、java技術(shù)、Ajax技術(shù)進(jìn)行業(yè)務(wù)系統(tǒng)的編碼及其開發(fā),實(shí)現(xiàn)了本系統(tǒng)的全部功能。本次報(bào)告,首先分析了研究的背景、作用、意義,為研究工作的合理性打下了基礎(chǔ)。針對(duì)自習(xí)室管理系統(tǒng)小程序的各項(xiàng)需求以及技術(shù)問題進(jìn)行分析,證明了系統(tǒng)的必要性和技術(shù)可行性,然后對(duì)設(shè)計(jì)系統(tǒng)需要使用的技術(shù)軟件以及設(shè)計(jì)思想做了基本的介紹,最后來實(shí)現(xiàn)自習(xí)室管理系統(tǒng)小程序的部署運(yùn)行使用它。本文展示了首頁(yè)頁(yè)面的實(shí)現(xiàn)效果圖,并通過代碼和頁(yè)面介紹了自習(xí)室管理、座位預(yù)約、自習(xí)室分類、預(yù)約取消、座位歸還、留言管理、會(huì)員管理系統(tǒng)用戶功能的實(shí)現(xiàn)過程。
關(guān)鍵詞:自習(xí)室管理系統(tǒng)小程序;Spring boot框架;
Springboot study room management system applet
Abstract
In the information society, there is a need for targeted access to information, but the expansion of access is basically the direction that people are striving for. Because of the deviation from the perspective, people can often obtain different types of information, which is also the most difficult task for technology to overcome. Aiming at the problems of the study room management system applet, this paper studies and analyzes the study room management system applet, and then develops and designs the study room management system applet to solve the problems.
The design of the study room management system applet mainly focuses on the detailed consideration of the functions to be realized by the system, and the interface design after determining the functions to be realized. In this process, it is also necessary to consider how to better combine the functions and pages, so that users can easily and clearly find the information they need, as well as the operability of the later stage of the system platform, and develop the technology through a detailed understanding of the information content.
The development of the study room management system applet utilizes the existing mature technical reference, takes the source code as a template, analyzes the combination of function adjustment and the actual needs of the study room management system applet management, and discusses the use of the study room management system applet management.
After my comprehensive consideration, the design of the study room management system applet is to adopt the object-oriented development mode for software development and hardware erection, which can well meet the needs of practical use, improve the corresponding software erection and program coding work, adopt MySQL as the main storage unit of background data, and adopt Spring boot framework, java technology and Ajax technology for business system coding and development, thus realizing all functions of this system. This report firstly analyzes the background, function and significance of the research, which lays a foundation for the rationality of the research work. This paper analyzes the requirements and technical problems of the study room management system applet, and proves the necessity and technical feasibility of the system. Then, it makes a basic introduction of the technical software and design ideas needed to design the system, and finally realizes the deployment and operation of the study room management system applet. This paper shows the realization renderings of the home page, and introduces the realization process of study room management, seat reservation, study room classification, reservation cancellation, seat return, message management and membership management system user functions through codes and pages.
Key words: Study room management system applet; Spring boot framework;
目 錄
第1章 緒論 1
1.1 研究背景與意義 1
1.2 開發(fā)現(xiàn)狀 1
1.3 論文組成結(jié)構(gòu) 2
第2章 開發(fā)工具及相關(guān)技術(shù)介紹 3
2.1微信開發(fā)者工具 3
2.2小程序框架以及目錄結(jié)構(gòu)介紹 4
2.3 Spring Boot框架 4
2.4 Mysql數(shù)據(jù)庫(kù) 5
第3章 系統(tǒng)分析 6
3.1 可行性分析 6
3.1.1 經(jīng)濟(jì)可行性 6
3.1.2 技術(shù)可行性 6
3.1.3 操作可行性 6
3.2 性能分析 6
3.3 系統(tǒng)操作流程 9
3.3.1用戶登錄流程 9
3.3.2信息添加流程 10
3.3.3信息刪除流程 10
第4章 系統(tǒng)設(shè)計(jì) 11
4.1系統(tǒng)架構(gòu)設(shè)計(jì) 11
4.2開發(fā)流程設(shè)計(jì) 11
4.3數(shù)據(jù)庫(kù)設(shè)計(jì) 12
4.3.1實(shí)體ER圖 13
4.3.2數(shù)據(jù)表 13
第5章 系統(tǒng)實(shí)現(xiàn) 17
5.1 用戶前臺(tái)功能前臺(tái)(前端) 17
5.2管理員功能模塊(后端) 20
第6章 系統(tǒng)測(cè)試 35
6.1 測(cè)試目的 35
6.2 測(cè)試方案設(shè)計(jì) 35
6.2.1 測(cè)試策略 35
6.2.2 測(cè)試分析 35
6.3 測(cè)試結(jié)果 36
第7章 總結(jié)與展望 37
參考文獻(xiàn) 38
致謝 40
緒論
研究背景與意義
近年來,隨著網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,越來越多人喜歡在專門的自習(xí)室管理系統(tǒng)小程序的設(shè)計(jì)與實(shí)現(xiàn)查看信息,將自習(xí)室管理系統(tǒng)小程序信息加入系統(tǒng)中,方便進(jìn)行管理。自習(xí)室管理系統(tǒng)小程序系統(tǒng)對(duì)使用用戶和管理員都有很大幫助,自習(xí)室管理系統(tǒng)小程序通過和數(shù)據(jù)庫(kù)管理系軟件協(xié)作來實(shí)現(xiàn)用戶與管理員之間的一個(gè)很好的操作平臺(tái),基于這一點(diǎn),設(shè)計(jì)了一個(gè)自習(xí)室管理系統(tǒng)小程序系統(tǒng)。
經(jīng)過對(duì)以上的情況進(jìn)行分析,我們對(duì)用戶的實(shí)際需求進(jìn)行了詳細(xì)的分析,指定出了相應(yīng)的開發(fā)計(jì)劃,為了方便用戶在線進(jìn)行自習(xí)室管理系統(tǒng)小程序跟蹤的收聽以及可以在線進(jìn)行自習(xí)室管理系統(tǒng)小程序方面的管理操作,幫助自習(xí)室管理系統(tǒng)小程序員節(jié)省很多的管理時(shí)間以及可以減少工作量,使得管理工作更加快捷順利的進(jìn)行,因此開發(fā)設(shè)計(jì)了該系統(tǒng)。
隨著計(jì)算機(jī)的不斷發(fā)展,已經(jīng)融入到我們生活工作的每一個(gè)領(lǐng)域中,給我們的生活工作帶來了很多的便利,因此,希望可以通過該系統(tǒng)的開發(fā)也能使自習(xí)室管理系統(tǒng)小程序?qū)崿F(xiàn)信息化管理,減輕人的負(fù)擔(dān),提高工作效率計(jì)。
開發(fā)現(xiàn)狀
與其他國(guó)家相比,我國(guó)的軟件產(chǎn)業(yè)相對(duì)落后,在信息化建設(shè)方面起步也比較晚,但是隨著我國(guó)經(jīng)濟(jì)的不斷發(fā)展,以及網(wǎng)絡(luò)技術(shù)的不斷提高,我國(guó)也在不斷的進(jìn)行軟件行業(yè)的摸索,也得到了一些成果,我國(guó)的軟件產(chǎn)業(yè)得到了快速的發(fā)展,越來越多的軟件系統(tǒng)出現(xiàn)在人們的視線中,也逐漸改變著人們生活工作的方式。但是,對(duì)于信息化的建設(shè),與很多發(fā)達(dá)國(guó)家相比,由于信息化程度的落后以及經(jīng)費(fèi)的不足,我國(guó)的自習(xí)室管理系統(tǒng)小程序開發(fā)方面還是相對(duì)落后的,因此,要不斷的努力探索,爭(zhēng)取開發(fā)出一個(gè)實(shí)用的信息化的自習(xí)室管理系統(tǒng)小程序,來實(shí)現(xiàn)自習(xí)室管理系統(tǒng)小程序的信息化。因此本課題以自習(xí)室管理系統(tǒng)小程序?yàn)槔?,目的是開發(fā)一個(gè)實(shí)用的自習(xí)室管理系統(tǒng)小程序。
自習(xí)室管理系統(tǒng)小程序采用springboot語(yǔ)言、Java框架、MySQL數(shù)據(jù)庫(kù)支持下共同完成了該網(wǎng)站系統(tǒng)的開發(fā),實(shí)現(xiàn)了自習(xí)室管理系統(tǒng)小程序的信息化,用戶可以有一個(gè)非常好的自習(xí)室管理系統(tǒng)小程序體驗(yàn),管理員也可以通過該系統(tǒng)進(jìn)行更加方便的管理操作,實(shí)現(xiàn)了之前指定好的計(jì)劃。
論文組成結(jié)構(gòu)
根據(jù)市場(chǎng)調(diào)研得到的信息數(shù)據(jù),結(jié)合國(guó)內(nèi)外前沿研究,利用相關(guān)系統(tǒng)開發(fā)和設(shè)計(jì)方法,最終設(shè)計(jì)出自習(xí)室管理系統(tǒng)小程序。
本文共有七章,如下所示。
第一章概述了自習(xí)室管理系統(tǒng)小程序的研究目的和意義;精煉地總結(jié)了國(guó)內(nèi)外在內(nèi)的領(lǐng)域研究情況和未來的研究趨勢(shì),最后給出了論文的組成結(jié)構(gòu)。
第二章簡(jiǎn)要概述了本文所用的開發(fā)技術(shù)和工具。
第三章簡(jiǎn)要對(duì)系統(tǒng)各業(yè)務(wù)流程進(jìn)行需求分析、可行性分析。
第四章對(duì)自習(xí)室管理系統(tǒng)小程序進(jìn)行設(shè)計(jì)。
第五章對(duì)自習(xí)室管理系統(tǒng)小程序進(jìn)行實(shí)現(xiàn),并貼出相關(guān)頁(yè)面截圖,語(yǔ)言描述出具體功能實(shí)現(xiàn)的操作方法。
第六章對(duì)自習(xí)室管理系統(tǒng)小程序采用測(cè)試用例的方式來對(duì)一些主要功能模塊測(cè)試,最后得出測(cè)試結(jié)果。
第七章總結(jié)全文并對(duì)未來的研究做出展望。
開發(fā)工具及相關(guān)技術(shù)介紹
微信開發(fā)者工具
微信開發(fā)者工具現(xiàn)在已經(jīng)被小程序開發(fā)團(tuán)隊(duì)開發(fā)運(yùn)行,目前微信開發(fā)者工具任然在不斷的完善中,在開發(fā)小程序時(shí)經(jīng)常要不斷的更新??梢允褂梦⑿艗叽a登陸開發(fā)者工具,開發(fā)者工具將使用這個(gè)微信帳號(hào)的信息進(jìn)行小程序的開發(fā)和調(diào)試。
機(jī)型選擇:小程序以智能手機(jī)的屏幕尺寸為設(shè)計(jì)標(biāo)準(zhǔn),進(jìn)行切圖。
預(yù)覽界面:寫好視圖布局后點(diǎn)擊編譯,用來刷新視圖界面。
控制臺(tái):方便調(diào)試打印輸出信息。
上傳代碼:上傳到騰訊服務(wù)器,提交審核必經(jīng)步驟。上傳代碼時(shí)可以填寫版本號(hào)和備注信息。
資源文件:一般可以在資源文件進(jìn)行對(duì)應(yīng)項(xiàng)目的文件目錄的斷點(diǎn)調(diào)試。
顯示遠(yuǎn)程調(diào)試:手機(jī)端和PC端開發(fā)工具聯(lián)調(diào)對(duì)用戶而言是非常實(shí)用的。
本地?cái)?shù)據(jù)存儲(chǔ):顯示的是本地存儲(chǔ)的數(shù)據(jù)。
視圖調(diào)試:標(biāo)組件以子父層級(jí)結(jié)構(gòu)呈現(xiàn),方便調(diào)試。
微信限制在2M 以內(nèi)的代碼體積;開發(fā)中一般不校驗(yàn)合法域名信息;小程序后臺(tái)要做配置服務(wù)器域名。
以上就是在開發(fā)過程中微信開發(fā)者工具常用到的功能,微信開發(fā)者工具也在不斷的完善。
小程序框架以及目錄結(jié)構(gòu)介紹
整個(gè)小程序框架系統(tǒng)分為兩部分:邏輯層和視圖層。小程序開發(fā)框架的目標(biāo)是通過盡可能簡(jiǎn)單、高效的方式讓開發(fā)者可以在微信中開發(fā)具有原生小程序體驗(yàn)的服務(wù)。小程序在視圖層與邏輯層間提供了數(shù)據(jù)傳輸和事件系統(tǒng),提供了自己的視圖層以及邏輯層框架,讓開發(fā)者能夠?qū)W⒂跀?shù)據(jù)與邏輯??蚣艿暮诵氖且粋€(gè)響應(yīng)的數(shù)據(jù)綁定系統(tǒng),可以讓數(shù)據(jù)與視圖非常簡(jiǎn)單地保持同步。在邏輯層做數(shù)據(jù)修改,在視圖層就會(huì)做相應(yīng)的更新。框架提供了一套基礎(chǔ)的組件,這些組件自帶微信風(fēng)格的樣式以及特殊的邏輯,開發(fā)者可以通過組合基礎(chǔ)組件,創(chuàng)建出強(qiáng)大的微信小程序。
Spring Boot框架
Spring框架是Java平臺(tái)上的一種開源應(yīng)用框架,提供具有控制反轉(zhuǎn)特性的容器。盡管Spring框架自身對(duì)編程模型沒有限制,但其在Java應(yīng)用中的頻繁使用讓它備受青睞,以至于后來讓它作為EJB(EnterpriseJavaBeans)模型的補(bǔ)充,甚至是替補(bǔ)。Spring框架為開發(fā)提供了一系列的解決方案,比如利用控制反轉(zhuǎn)的核心特性,并通過依賴注入實(shí)現(xiàn)控制反轉(zhuǎn)來實(shí)現(xiàn)管理對(duì)象生命周期容器化,利用面向切面編程進(jìn)行聲明式的事務(wù)管理,整合多種持久化技術(shù)管理數(shù)據(jù)訪問,提供大量?jī)?yōu)秀的Web框架方便開發(fā)等等。Spring框架具有控制反轉(zhuǎn)(IOC)特性,IOC旨在方便項(xiàng)目維護(hù)和測(cè)試,它提供了一種通過Java的反射機(jī)制對(duì)Java對(duì)象進(jìn)行統(tǒng)一的配置和管理的方法。Spring框架利用容器管理對(duì)象的生命周期,容器可以通過掃描XML文件或類上特定Java注解來配置對(duì)象,開發(fā)者可以通過依賴查找或依賴注入來獲得對(duì)象。Spring框架具有面向切面編程(AOP)框架,SpringAOP框架基于代理模式,同時(shí)運(yùn)行時(shí)可配置;AOP框架主要針對(duì)模塊之間的交叉關(guān)注點(diǎn)進(jìn)行模塊化。Spring框架的AOP框架僅提供基本的AOP特性,雖無法與AspectJ框架相比,但通過與AspectJ的集成,也可以滿足基本需求。Spring框架下的事務(wù)管理、遠(yuǎn)程訪問等功能均可以通過使用SpringAOP技術(shù)實(shí)現(xiàn)。Spring的事務(wù)管理框架為Java平臺(tái)帶來了一種抽象機(jī)制,使本地和全局事務(wù)以及嵌套事務(wù)能夠與保存點(diǎn)一起工作,并且?guī)缀蹩梢栽贘ava平臺(tái)的任何環(huán)境中工作。
Mysql數(shù)據(jù)庫(kù)
數(shù)據(jù)庫(kù)是系統(tǒng)開發(fā)過程中不可或缺的一部分。在WEB應(yīng)用方面,MySQL AB開發(fā)了一個(gè)具有很大優(yōu)勢(shì)的MySQL關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)。 MySQL可以將數(shù)據(jù)存儲(chǔ)在不同的表中,這非常靈活,并且還可以提高系統(tǒng)在實(shí)際應(yīng)用中的速度。 數(shù)據(jù)庫(kù)訪問最常用于標(biāo)準(zhǔn)SQL語(yǔ)言,MySQL用于SQL語(yǔ)言,因此它具有高度兼容性。數(shù)據(jù)庫(kù)的操作是必不可少的,包括對(duì)數(shù)據(jù)庫(kù)表的增加、刪除、修改、查詢等功能?,F(xiàn)如今,數(shù)據(jù)庫(kù)可以分為關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù),Mysql屬于關(guān)系性數(shù)據(jù)庫(kù),Mysql數(shù)據(jù)庫(kù)是一款小型的關(guān)系型數(shù)據(jù)庫(kù),它以其自身特點(diǎn):體積小、速度快、成本低等,Mysql數(shù)據(jù)庫(kù)是目前最受歡迎的開源數(shù)據(jù)庫(kù)。
在WEB應(yīng)用技術(shù)中, Mysql數(shù)據(jù)庫(kù)支持不同的操作系統(tǒng)平臺(tái),雖然在不同平臺(tái)下的安裝和配置都不相同,但是差別也不是很大,Mysql在Windows平臺(tái)下兩種安裝方式,二進(jìn)制版和免安裝版。安裝完Mysql數(shù)據(jù)庫(kù)之后,需要啟動(dòng)服務(wù)進(jìn)程,相應(yīng)的客戶端就可以連接數(shù)據(jù)庫(kù),客戶端可通過命令行或者圖形界面工具登錄數(shù)據(jù)庫(kù)。
系統(tǒng)分析
可行性分析
本系統(tǒng)將在經(jīng)濟(jì)、技術(shù)、操作這三個(gè)角度上進(jìn)行可行性分析。
經(jīng)濟(jì)可行性
整個(gè)系統(tǒng)從設(shè)計(jì)到開發(fā)以及測(cè)試過程嚴(yán)謹(jǐn)步驟齊全,所有工作任務(wù)全部由本人完成,并未獲取外部技術(shù)支持,節(jié)約了一切服務(wù)成本開銷以及人工成本,在硬件方面,為節(jié)約成本使用一臺(tái)二手移動(dòng)工作站作為項(xiàng)目部署服務(wù)器以及數(shù)據(jù)庫(kù)服務(wù)器,成本在一萬元一下,真?zhèn)€網(wǎng)絡(luò)部署也是由本人獨(dú)立完成不涉及到其他人工費(fèi)用,整個(gè)開發(fā)過程本著低成本,低消耗的原則。
技術(shù)可行性
技術(shù)可行性分析的目的是確認(rèn)該系統(tǒng)能否利用現(xiàn)有技術(shù)實(shí)現(xiàn),并評(píng)估開發(fā)效率和完成情況。技術(shù)的可行性是指在當(dāng)前的技術(shù)條件下,計(jì)算機(jī)軟件和硬件的開發(fā)是否能夠滿足發(fā)展的要求。因?yàn)樵撓到y(tǒng)的開發(fā)基于springboot語(yǔ)言,所以開發(fā)該系統(tǒng)所需的軟件和硬件條件可以在普通計(jì)算機(jī)上滿足。因?yàn)樗加玫膬?nèi)存相對(duì)較少,所以用Mysql數(shù)據(jù)庫(kù)開發(fā)和設(shè)計(jì)軟件理論上沒有問題,因?yàn)樗加玫膬?nèi)存太少。上述技術(shù)可以有效地保證系統(tǒng)的成功和高效開發(fā)。
操作可行性
自習(xí)室管理系統(tǒng)小程序的使用界面簡(jiǎn)單易于操作,采用常見的界面窗口來登錄界面,通過電腦進(jìn)行訪問操作,用戶只要平時(shí)使用過電腦都能進(jìn)行訪問操作。此系統(tǒng)的開發(fā)采用springboot技術(shù)開發(fā),人性化和完善化是B/S結(jié)構(gòu)開發(fā)比較顯要的特點(diǎn)使得用戶操作相比較其他更加簡(jiǎn)潔方便。易操作、易管理、交互性好在本系統(tǒng)操作上體現(xiàn)得淋漓盡致。
3.2性能分析
對(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ù)的自習(xí)室管理系統(tǒng)小程序。
自習(xí)室管理系統(tǒng)小程序的開發(fā)設(shè)計(jì)時(shí)一個(gè)獨(dú)立的系統(tǒng),以流行數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)的存儲(chǔ)開發(fā),主要是為了實(shí)現(xiàn)自習(xí)室管理系統(tǒng)小程序的用戶角色及相對(duì)應(yīng)的功能模塊,讓自習(xí)室管理系統(tǒng)小程序的管理不會(huì)存在管理差異、低效率,而是跟傳統(tǒng)的管理信息恰好相反,自習(xí)室管理系統(tǒng)小程序的實(shí)現(xiàn)可以節(jié)約資源,并且對(duì)于業(yè)務(wù)的處理速度也提高,速度快、效率高,功能性強(qiáng)大。
3.3系統(tǒng)操作流程
3.3.1用戶登錄流程
對(duì)于系統(tǒng)的安全性的第一關(guān),就是用戶想要進(jìn)入系統(tǒng),必須通過登錄窗口,輸入自己的登錄信息才可以進(jìn)行登錄,用戶輸入的信息準(zhǔn)確無誤后才可以進(jìn)入到操作系統(tǒng)界面,進(jìn)行功能模塊的相對(duì)應(yīng)操作,如果用戶輸入的信息不正確,則窗口出現(xiàn)提示框,用戶登錄失敗,返回到第一步進(jìn)行重新輸入,如圖3-1所示。

圖3-1登錄操作流程圖
3.3.2信息添加流程
對(duì)于自習(xí)室管理系統(tǒng)小程序,需要隨時(shí)添加所需要的數(shù)據(jù)信息,對(duì)于用戶添加信息,需要根據(jù)添加界面,根據(jù)選框的內(nèi)容進(jìn)行填寫所要添加的數(shù)據(jù)信息,信息輸入完成后判斷數(shù)據(jù)信息是否符合要求,符合要求則添加完成,用戶所添加的信息不符合要求,則需要返回到第一步,重新輸入數(shù)據(jù)信息,再進(jìn)行判斷操作,如圖3-2所示。

圖3-2 信息添加流程圖
3.3.3信息刪除流程
不管是哪個(gè)用戶角色進(jìn)入到不通的系統(tǒng)操作界面,都可以進(jìn)行不同的信息內(nèi)容的操作功能,對(duì)用系統(tǒng)數(shù)據(jù)信息的刪除,用戶一旦將信息刪除,那么該刪除的數(shù)據(jù)信息將無法恢復(fù),所以用戶在對(duì)數(shù)據(jù)刪除事,一定判斷刪除的內(nèi)容是否是確定要?jiǎng)h除的,確定無誤后選擇確定刪除操作,如圖3-3所示。

圖3-3 信息刪除流程圖
系統(tǒng)設(shè)計(jì)
4.1系統(tǒng)架構(gòu)設(shè)計(jì)
自習(xí)室管理系統(tǒng)小程序的系統(tǒng)項(xiàng)目的概述設(shè)計(jì)分析,主要內(nèi)容自習(xí)室管理系統(tǒng)信息的具體分析,進(jìn)行數(shù)據(jù)庫(kù)的是設(shè)計(jì),數(shù)據(jù)采用mysql數(shù)據(jù)庫(kù),并且對(duì)于系統(tǒng)的設(shè)計(jì)采用比較人性化的操作設(shè)計(jì),對(duì)于系統(tǒng)出現(xiàn)的錯(cuò)誤信息可以及時(shí)做出處理及反饋。
基于自習(xí)室管理系統(tǒng)小程序的設(shè)計(jì)基于現(xiàn)有的手機(jī),可以實(shí)現(xiàn)管理員:首頁(yè)、自習(xí)室管理、座位預(yù)約、自習(xí)室分類、預(yù)約取消、座位歸還、留言管理、會(huì)員管理等詳細(xì)的了解及統(tǒng)計(jì)分析。根據(jù)系統(tǒng)功能需求建立的模塊關(guān)系圖如下圖:

圖4-1管理員功能模塊圖
4.2開發(fā)流程設(shè)計(jì)
自習(xí)室管理系統(tǒng)小程序的開發(fā)對(duì)管理模塊和系統(tǒng)使用的數(shù)據(jù)庫(kù)進(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ì)功能后得到保證。
從自習(xí)室管理系統(tǒng)小程序的成功開發(fā)經(jīng)驗(yàn)來看,上述方法效果最為明顯,最大程度地降低了系統(tǒng)開發(fā)的復(fù)雜性。如圖4-2所示。

圖4-2開發(fā)系統(tǒng)流程圖
4.3數(shù)據(jù)庫(kù)設(shè)計(jì)
數(shù)據(jù)庫(kù)是信息系統(tǒng)的基礎(chǔ)和核心。數(shù)據(jù)庫(kù)設(shè)計(jì)的好壞直接影響到信息系統(tǒng)開發(fā)的成敗。創(chuàng)建數(shù)據(jù)庫(kù)表首先確定實(shí)體的屬性和實(shí)體之間的關(guān)系。根據(jù)關(guān)系創(chuàng)建一個(gè)數(shù)據(jù)表。4.3.1實(shí)體ER圖
數(shù)據(jù)庫(kù)是整個(gè)軟件編程中最重要的一個(gè)步驟,對(duì)于數(shù)據(jù)庫(kù)問題主要是判定數(shù)據(jù)庫(kù)的數(shù)量和結(jié)構(gòu)公式的創(chuàng)建。展示系統(tǒng)使用的是Mysql進(jìn)行對(duì)數(shù)據(jù)庫(kù)進(jìn)行管理,進(jìn)行保證數(shù)據(jù)的安全性、穩(wěn)定性等。
概念模型的設(shè)計(jì)是為了抽象真實(shí)世界的信息,并對(duì)信息世界進(jìn)行建模。它是數(shù)據(jù)庫(kù)設(shè)計(jì)的強(qiáng)大工具。數(shù)據(jù)庫(kù)概念模型設(shè)計(jì)可以通過E-R圖描述現(xiàn)實(shí)世界的概念模型。系統(tǒng)的E-R圖顯示了系統(tǒng)中實(shí)體之間的鏈接。而且Mysql數(shù)據(jù)庫(kù)是自我保護(hù)能力比較強(qiáng)的數(shù)據(jù)庫(kù),下圖主要是對(duì)數(shù)據(jù)庫(kù)實(shí)體的E-R圖:
(1) 座位預(yù)約信息E-R圖,如圖4-3所示:

圖4-3 座位預(yù)約信息實(shí)體屬性圖
(2) 座位歸還信息E-R圖如圖4-4所示:

圖4-4座位歸還信息實(shí)體圖
這些功能可以充分滿足自習(xí)室管理系統(tǒng)小程序的需求。此系統(tǒng)功能較為全面如下圖系統(tǒng)功能結(jié)構(gòu)如圖4-5所示。

圖4-5系統(tǒng)功能結(jié)構(gòu)圖
4.3.2數(shù)據(jù)表
我們可以根據(jù)數(shù)據(jù)結(jié)構(gòu)的詳細(xì)分析要求,我們根據(jù)輸入和輸出數(shù)據(jù)量的要求進(jìn)行分析,確定什么表表,結(jié)構(gòu)之間的關(guān)系,我們可以驗(yàn)證,調(diào)整和完善,查詢和瀏覽過程,可以實(shí)現(xiàn)數(shù)據(jù)庫(kù),以使用戶對(duì)數(shù)據(jù)和功能有更多要求。
基于系統(tǒng)使用的數(shù)據(jù)庫(kù)管理系統(tǒng)的特點(diǎn),對(duì)數(shù)據(jù)庫(kù)的概念模型進(jìn)行了轉(zhuǎn)換和構(gòu)建。但是,這個(gè)系統(tǒng)只需要充分考慮自習(xí)室管理系統(tǒng)小程序的功能,而且組織比較清晰。
appointment_cancellation表
名稱 |
類型 |
長(zhǎng)度 |
不是null |
主鍵 |
注釋 |
appointment_cancellation_id |
int |
11 |
是 |
是 |
預(yù)約取消ID |
self_study_room_name |
varchar |
64 |
否 |
否 |
自習(xí)室名 |
study_room_type |
varchar |
64 |
否 |
否 |
習(xí)室類型 |
study_room_location |
varchar |
64 |
否 |
否 |
習(xí)室位置 |
appointment_person |
int |
11 |
否 |
否 |
預(yù)約人 |
full_name |
varchar |
64 |
否 |
否 |
姓名 |
time_of_appointment |
varchar |
64 |
否 |
否 |
預(yù)約時(shí)間 |
single_time |
varchar |
64 |
否 |
否 |
單次 |
cancellation_reason |
text |
0 |
否 |
否 |
取消原因 |
recommend |
int |
11 |
是 |
否 |
智能推薦 |
create_time |
datetime |
0 |
是 |
否 |
創(chuàng)建時(shí)間 |
update_time |
timestamp |
0 |
是 |
否 |
更新時(shí)間 |
self_study表
名稱 |
類型 |
長(zhǎng)度 |
不是null |
主鍵 |
注釋 |
self_study_id |
int |
11 |
是 |
是 |
自習(xí)室ID |
self_study_room_name |
varchar |
64 |
是 |
否 |
自習(xí)室名 |
study_room_type |
varchar |
64 |
否 |
否 |
習(xí)室類型 |
study_room_location |
varchar |
64 |
否 |
否 |
習(xí)室位置 |
environmental_cover |
varchar |
255 |
否 |
否 |
環(huán)境封面 |
number_of_seats |
varchar |
64 |
否 |
否 |
座位數(shù) |
single_time |
varchar |
64 |
否 |
否 |
單次 |
study_room_announcement |
text |
0 |
否 |
否 |
習(xí)室公告 |
hits |
int |
11 |
是 |
否 |
點(diǎn)擊數(shù) |
praise_len |
int |
11 |
是 |
否 |
點(diǎn)贊數(shù) |
recommend |
int |
11 |
是 |
否 |
智能推薦 |
timer_title |
varchar |
64 |
否 |
否 |
計(jì)時(shí)器標(biāo)題 |
timing_start_time |
datetime |
0 |
否 |
否 |
計(jì)時(shí)開始時(shí)間 |
timing_end_time |
datetime |
0 |
否 |
否 |
計(jì)時(shí)結(jié)束時(shí)間 |
create_time |
datetime |
0 |
是 |
否 |
創(chuàng)建時(shí)間 |
update_time |
timestamp |
0 |
是 |
否 |
更新時(shí)間 |
classification_of_study_room表
名稱 |
類型 |
長(zhǎng)度 |
不是null |
主鍵 |
注釋 |
classification_of_study_room_id |
int |
11 |
是 |
是 |
自習(xí)室分類ID |
study_room_type |
varchar |
64 |
否 |
否 |
習(xí)室類型 |
recommend |
int |
11 |
是 |
否 |
智能推薦 |
create_time |
datetime |
0 |
是 |
否 |
創(chuàng)建時(shí)間 |
update_time |
timestamp |
0 |
是 |
否 |
更新時(shí)間 |
leaving_a_message表
名稱 |
類型 |
長(zhǎng)度 |
不是null |
主鍵 |
注釋 |
leaving_a_message_id |
int |
11 |
是 |
是 |
留言ID |
title |
varchar |
64 |
否 |
否 |
標(biāo)題 |
message_person |
int |
11 |
否 |
否 |
留言人 |
message_time |
varchar |
64 |
否 |
否 |
留言時(shí)間 |
message_information |
text |
0 |
否 |
否 |
留言信息 |
platform_reply |
text |
0 |
否 |
否 |
平臺(tái)回復(fù) |
recommend |
int |
11 |
是 |
否 |
智能推薦 |
create_time |
datetime |
0 |
是 |
否 |
創(chuàng)建時(shí)間 |
update_time |
timestamp |
0 |
是 |
否 |
更新時(shí)間 |
member_management表
名稱 |
類型 |
長(zhǎng)度 |
不是null |
主鍵 |
注釋 |
member_management_id |
int |
11 |
是 |
是 |
會(huì)員管理ID |
membership_level |
varchar |
64 |
否 |
否 |
會(huì)員等級(jí) |
recommend |
int |
11 |
是 |
否 |
智能推薦 |
create_time |
datetime |
0 |
是 |
否 |
創(chuàng)建時(shí)間 |
update_time |
timestamp |
0 |
是 |
否 |
更新時(shí)間 |
seat_reservation表
名稱 |
類型 |
長(zhǎng)度 |
不是null |
主鍵 |
注釋 |
seat_reservation_id |
int |
11 |
是 |
是 |
座位預(yù)約ID |
self_study_room_name |
varchar |
64 |
否 |
否 |
自習(xí)室名 |
study_room_type |
varchar |
64 |
否 |
否 |
習(xí)室類型 |
study_room_location |
varchar |
64 |
否 |
否 |
習(xí)室位置 |
appointment_person |
int |
11 |
否 |
否 |
預(yù)約人 |
full_name |
varchar |
64 |
否 |
否 |
姓名 |
time_of_appointment |
varchar |
64 |
否 |
否 |
預(yù)約時(shí)間 |
single_time |
varchar |
64 |
否 |
否 |
單次 |
recommend |
int |
11 |
是 |
否 |
智能推薦 |
create_time |
datetime |
0 |
是 |
否 |
創(chuàng)建時(shí)間 |
update_time |
timestamp |
0 |
是 |
否 |
更新時(shí)間 |
seat_return表
名稱 |
類型 |
長(zhǎng)度 |
不是null |
主鍵 |
注釋 |
seat_return_id |
int |
11 |
是 |
是 |
座位歸還ID |
self_study_room_name |
varchar |
64 |
否 |
否 |
自習(xí)室名 |
study_room_type |
varchar |
64 |
否 |
否 |
習(xí)室類型 |
study_room_location |
varchar |
64 |
否 |
否 |
習(xí)室位置 |
appointment_person |
int |
11 |
否 |
否 |
預(yù)約人 |
full_name |
varchar |
64 |
否 |
否 |
姓名 |
single_time |
varchar |
64 |
否 |
否 |
單次 |
return_time |
varchar |
64 |
否 |
否 |
歸還時(shí)間 |
pay_state |
varchar |
16 |
是 |
否 |
支付狀態(tài) |
pay_type |
varchar |
16 |
否 |
否 |
支付類型 |
recommend |
int |
11 |
是 |
否 |
智能推薦 |
create_time |
datetime |
0 |
是 |
否 |
創(chuàng)建時(shí)間 |
update_time |
timestamp |
0 |
是 |
否 |
更新時(shí)間 |
ordinary_users表
名稱 |
類型 |
長(zhǎng)度 |
不是null |
主鍵 |
注釋 |
ordinary_users_id |
int |
11 |
是 |
是 |
普通用戶ID |
full_name |
varchar |
64 |
否 |
否 |
姓名 |
gender |
varchar |
64 |
否 |
否 |
性別 |
membership_level |
varchar |
64 |
否 |
否 |
會(huì)員等級(jí) |
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í)間 |
系統(tǒng)實(shí)現(xiàn)
用戶前臺(tái)功能前臺(tái)(前端)
用戶注冊(cè)完成后,點(diǎn)擊“登陸”進(jìn)入到登陸頁(yè)面,輸入用戶名和密碼,點(diǎn)擊“登陸”按鈕,對(duì)用戶名和密碼進(jìn)行驗(yàn)證,根據(jù)傳入的用戶名和密碼在數(shù)據(jù)庫(kù)中是否能查詢到一條用戶信息,若不能返回用戶信息則登陸失敗,頁(yè)面提示用戶名或密碼錯(cuò)誤。
登錄流程圖如下所示。

圖5-1登錄流程圖
登錄界面如下圖所示。

圖5-2登錄界面
登錄系統(tǒng)主要代碼如下。
/**
* 登錄
* @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;
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, "賬號(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.select(groupMap, new HashMap<>()).getResultList();
if (groupList.size()<1){
return error(30000,"用戶組不存在");
}
UserGroup userGroup = (UserGroup) groupList.get(0);
//查詢用戶審核狀態(tài)
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,"該用戶審核未通過");
}
}
//查詢用戶狀態(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ù)庫(kù)
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)或密碼不正確");
}
}
注冊(cè),通過填寫用戶名、密碼、姓名、手機(jī)、郵箱、身份等信息,輸入完成后選擇提交即可注冊(cè)成功,如圖5-2所示。

圖5-3用戶注冊(cè)界面圖
注冊(cè)邏輯關(guān)鍵代碼如下所示。
/**
* 注冊(cè)
* @param user
* @return
*/
@PostMapping("register")
public Map<String, Object> signUp(@RequestBody User user) {
// 查詢用戶
Map<String, String> query = new HashMap<>();
query.put("username",user.getUsername());
List list = service.select(query, new HashMap<>()).getResultList();
if (list.size()>0){
return error(30000, "用戶已存在");
}
user.setUserId(null);
user.setPassword(service.encryption(user.getPassword()));
service.save(user);
return success(1);
}
/**
* 用戶ID:[0,8388607]用戶獲取其他與用戶相關(guān)的數(shù)據(jù)
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private Integer userId;
/**
* 賬戶狀態(tài):[0,10](1可用|2異常|3已凍結(jié)|4已注銷)
*/
@Basic
@Column(name = "state")
private Integer state;
/**
* 所在用戶組:[0,32767]決定用戶身份和權(quán)限
*/
@Basic
@Column(name = "user_group")
private String userGroup;
/**
* 上次登錄時(shí)間:
*/
@Basic
@Column(name = "login_time")
private Timestamp loginTime;
/**
* 手機(jī)號(hào)碼:[0,11]用戶的手機(jī)號(hào)碼,用于找回密碼時(shí)或登錄時(shí)
*/
@Basic
@Column(name = "phone")
private String phone;
/**
* 手機(jī)認(rèn)證:[0,1](0未認(rèn)證|1審核中|2已認(rèn)證)
*/
@Basic
@Column(name = "phone_state")
private Integer phoneState;
/**
* 用戶名:[0,16]用戶登錄時(shí)所用的賬戶名稱
*/
@Basic
@Column(name = "username")
private String username;
/**
* 昵稱:[0,16]
*/
@Basic
@Column(name = "nickname")
private String nickname;
/**
* 密碼:[0,32]用戶登錄所需的密碼,由6-16位數(shù)字或英文組成
*/
@Basic
@Column(name = "password")
private String password;
/**
* 郵箱:[0,64]用戶的郵箱,用于找回密碼時(shí)或登錄時(shí)
*/
@Basic
@Column(name = "email")
private String email;
/**
* 郵箱認(rèn)證:[0,1](0未認(rèn)證|1審核中|2已認(rèn)證)
*/
@Basic
@Column(name = "email_state")
private Integer emailState;
/**
* 頭像地址:[0,255]
*/
@Basic
@Column(name = "avatar")
private String avatar;
/**
* 創(chuàng)建時(shí)間:
*/
@Basic
@Column(name = "create_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Timestamp createTime;
@Basic
@Transient
private String code;
}
用戶界面要盡量簡(jiǎn)潔大方,使用戶能夠方便找到需要的功能入口,首頁(yè)、公告欄、潮流資訊,且要易于修改和維護(hù),同時(shí)還要保證用戶合法和系統(tǒng)安全。
首頁(yè)載入流程圖如下所示。

圖5-4首頁(yè)載入流程
首頁(yè)界面如下圖所示。

圖5-6首頁(yè)界面
我的信息,在我的信息頁(yè)面可以用戶、座位預(yù)約、預(yù)約取消、座位歸還、留言等信息,如圖5-7所示。

圖5-7我的信息界面
留言,在留言信息頁(yè)面可以標(biāo)題、留言人、留言時(shí)間、留言信息、平臺(tái)回復(fù)等信息,如圖5-8所示。

圖5-8留言界面
管理員功能模塊(后端)
管理員登錄,管理員通過輸入用戶名、密碼,選擇角色并點(diǎn)擊登錄進(jìn)行系統(tǒng)登錄操作,如圖5-9所示。

圖5-9管理員登錄界面
在管理員功能頁(yè)面可以查看管理員:首頁(yè)、站點(diǎn)內(nèi)容(輪播圖、公告欄)系統(tǒng)用戶管理(管理員、普通用戶)公共內(nèi)容(資訊列表、資訊分類)模塊管理(自習(xí)室管理、預(yù)約取消、座位歸還、座位預(yù)約、自習(xí)室分類、留言管理、會(huì)員管理)等內(nèi)容進(jìn)行相對(duì)應(yīng)操作,如圖5-10所示。

圖5-10管理員登錄界面
管理員功能關(guān)鍵代碼如下所示。
@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());
}
自習(xí)室分類,在自習(xí)室分類頁(yè)面可以查看習(xí)室類型等編輯信息,并可根據(jù)需要進(jìn)行修改或刪除操作,如圖5-11所示。

圖5-11自習(xí)室分類界面圖
自習(xí)室分類代碼如下所示。
@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());
}
預(yù)約取消管理,在預(yù)約取消管理頁(yè)面可以查看自習(xí)室名、習(xí)室類型、習(xí)室位置、預(yù)約人、姓名、預(yù)約時(shí)間、單次等信息,并可根據(jù)需要進(jìn)行編輯、修改或刪除操作,如圖5-12所示。

圖5-12預(yù)約取消界面圖
預(yù)約取消管理關(guān)鍵代碼如下所示。
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
service.insert(service.readBody(request.getReader()));
return success(1);
}
@Transactional
public Map<String, Object> addMap(Map<String,Object> map){
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){
StringBuffer sql = new StringBuffer("INSERT INTO ");
sql.append("`").append(table).append("`").append(" (");
for (Map.Entry<String,Object> entry:body.entrySet()){
sql.append("`"+humpToLine(entry.getKey())+"`").append(",");
}
sql.deleteCharAt(sql.length()-1);
sql.append(") VALUES (");
for (Map.Entry<String,Object> entry:body.entrySet()){
Object value = entry.getValue();
if (value instanceof String){
sql.append("'").append(entry.getValue()).append("'").append(",");
}else {
sql.append(entry.getValue()).append(",");
}
}
sql.deleteCharAt(sql.length() - 1);
sql.append(")");
log.info("[{}] - 插入操作:{}",table,sql);
Query query = runCountSql(sql.toString());
query.executeUpdate();
}
座位歸還管理,在我歸還管理頁(yè)面可以查看自習(xí)室名、習(xí)室類型、習(xí)室位置、預(yù)約人、姓名、歸還時(shí)間、單次等信息,并可根據(jù)需要進(jìn)行編輯、修改或刪除操作,如圖5-13所示。

圖5-13座位歸還管理界面圖
座位歸還管理關(guān)鍵代碼如下所示。
@PostMapping("/set")
@Transactional
public Map<String, Object> set(HttpServletRequest request) throws IOException {
service.update(service.readQuery(request), service.readConfig(request), service.readBody(request.getReader()));
return success(1);
}
public Map<String,String> readConfig(HttpServletRequest request){
Map<String,String> map = new HashMap<>();
map.put(FindConfig.PAGE,request.getParameter(FindConfig.PAGE));
map.put(FindConfig.SIZE,request.getParameter(FindConfig.SIZE));
map.put(FindConfig.LIKE,request.getParameter(FindConfig.LIKE));
map.put(FindConfig.ORDER_BY,request.getParameter(FindConfig.ORDER_BY));
map.put(FindConfig.FIELD,request.getParameter(FindConfig.FIELD));
map.put(FindConfig.GROUP_BY,request.getParameter(FindConfig.GROUP_BY));
map.put(FindConfig.MAX_,request.getParameter(FindConfig.MAX_));
map.put(FindConfig.MIN_,request.getParameter(FindConfig.MIN_));
return map;
}
public Map<String,String> readQuery(HttpServletRequest request){
String queryString = request.getQueryString();
if (queryString != null && !"".equals(queryString)) {
String[] querys = queryString.split("&");
Map<String, String> map = new HashMap<>();
for (String query : querys) {
String[] q = query.split("=");
map.put(q[0], q[1]);
}
map.remove(FindConfig.PAGE);
map.remove(FindConfig.SIZE);
map.remove(FindConfig.LIKE);
map.remove(FindConfig.ORDER_BY);
map.remove(FindConfig.FIELD);
map.remove(FindConfig.GROUP_BY);
map.remove(FindConfig.MAX_);
map.remove(FindConfig.MIN_);
return map;
}else {
return new HashMap<>();
}
}
@Transactional
public void update(Map<String,String> query,Map<String,String> config,Map<String,Object> body){
StringBuffer sql = new StringBuffer("UPDATE ").append("`").append(table).append("`").append(" SET ");
for (Map.Entry<String,Object> entry:body.entrySet()){
Object value = entry.getValue();
if (value instanceof String){
sql.append("`"+humpToLine(entry.getKey())+"`").append("=").append("'").append(value).append("'").append(",");
}else {
sql.append("`"+humpToLine(entry.getKey())+"`").append("=").append(value).append(",");
}
}
sql.deleteCharAt(sql.length()-1);
sql.append(toWhereSql(query,"0".equals(config.get(FindConfig.LIKE))));
log.info("[{}] - 更新操作:{}",table,sql);
Query query1 = runCountSql(sql.toString());
query1.executeUpdate();
}
public String toWhereSql(Map<String,String> query, Boolean like) {
if (query.size() > 0) {
try {
StringBuilder sql = new StringBuilder(" WHERE ");
for (Map.Entry<String, String> entry : query.entrySet()) {
if (entry.getKey().contains(FindConfig.MIN_)) {
String min = humpToLine(entry.getKey()).replace("_min", "");
sql.append("`"+min+"`").append(" >= '").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("' and ");
continue;
}
if (entry.getKey().contains(FindConfig.MAX_)) {
String max = humpToLine(entry.getKey()).replace("_max", "");
sql.append("`"+max+"`").append(" <= '").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("' and ");
continue;
}
if (like == true) {
sql.append("`"+humpToLine(entry.getKey())+"`").append(" LIKE '%").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("%'").append(" and ");
} else {
sql.append("`"+humpToLine(entry.getKey())+"`").append(" = '").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("'").append(" and ");
}
}
sql.delete(sql.length() - 4, sql.length());
sql.append(" ");
return sql.toString();
} catch (UnsupportedEncodingException e) {
log.info("拼接sql 失敗:{}", e.getMessage());
}
}
return "";
}
系統(tǒng)測(cè)試
測(cè)試目的
程序設(shè)計(jì)不能保證沒有錯(cuò)誤,這是一個(gè)開發(fā)過程,在錯(cuò)誤或錯(cuò)誤的過程中難以避免,這是不可避免的,但我們不能使這些錯(cuò)誤始終存在于系統(tǒng)中,錯(cuò)誤可能會(huì)造成無法估量的后果如系統(tǒng)崩潰,安全信息,系統(tǒng)無法正常啟動(dòng),導(dǎo)致安裝用戶手機(jī)屏幕等,為了避免這些問題,我們需要測(cè)試程序,并發(fā)現(xiàn)這些問題,并糾正它們,并使系統(tǒng)更長(zhǎng)時(shí)間穩(wěn)定成熟,本章的作用是發(fā)現(xiàn)這些問題,并對(duì)其進(jìn)行修改,雖然耗時(shí)費(fèi)力,但長(zhǎng)期非常重要和必要系統(tǒng)的開發(fā)。
軟件測(cè)試與開發(fā)過程是一樣的,都必須按照軟件工程的正規(guī)原理進(jìn)行,遵守管理學(xué)理論。不過,目前國(guó)內(nèi)的軟件測(cè)試已經(jīng)積累了大量經(jīng)驗(yàn)和方法,步驟相對(duì)成熟,軟件測(cè)試的效率也越來越高。
自習(xí)室管理系統(tǒng)小程序的實(shí)現(xiàn),對(duì)于系統(tǒng)中功能模塊的實(shí)現(xiàn)及操作都必須通過測(cè)試進(jìn)行來評(píng)判系統(tǒng)是否可以準(zhǔn)確的實(shí)現(xiàn)。在自習(xí)室管理系統(tǒng)小程序正式上傳使用之前必須做的一步就是系統(tǒng)測(cè)試,對(duì)于測(cè)試發(fā)現(xiàn)的錯(cuò)誤及時(shí)修改處理,保證系統(tǒng)準(zhǔn)確無誤的供給用戶使用。
測(cè)試方案設(shè)計(jì)
6.2.1 測(cè)試策略
1、功能測(cè)試
從用戶的角度來看,測(cè)試時(shí)不了解新開發(fā)軟件的內(nèi)部結(jié)構(gòu),因此可以將系統(tǒng)與黑匣子進(jìn)行比較,盲目輸入后可以查看系統(tǒng)給出的反饋。這種測(cè)試屬于黑盒測(cè)試,在測(cè)試中如果輸入錯(cuò)誤信息系統(tǒng)會(huì)報(bào)錯(cuò)。
2、性能測(cè)試
測(cè)試軟件程序的整體狀況(稱為性能測(cè)試)通常使用自動(dòng)化測(cè)試工具來檢測(cè)系統(tǒng)的整體功能,在負(fù)載測(cè)試和壓力測(cè)試之間進(jìn)行分配,在某些情況下,將這兩種情況結(jié)合起來。雖然壓力測(cè)試可以檢測(cè)到系統(tǒng)可以提供的最高級(jí)別的服務(wù),但負(fù)載測(cè)試可以測(cè)試系統(tǒng)如何響應(yīng)增加的負(fù)載。
6.2.2 測(cè)試分析
測(cè)試評(píng)估系統(tǒng)質(zhì)量的方法不局限于系統(tǒng)編碼和過程,應(yīng)該與軟件設(shè)計(jì)工作和歷史需求分析密切相關(guān)。
軟件測(cè)試應(yīng)遵循以下原則:
(1)軟件測(cè)試應(yīng)盡快進(jìn)行,整個(gè)測(cè)試部分應(yīng)在軟件開發(fā)和設(shè)計(jì)的整個(gè)過程中進(jìn)行。如發(fā)現(xiàn)錯(cuò)誤,立即處理,將大大減少軟件開發(fā)的時(shí)間,并提高軟件的質(zhì)量。
(2)在軟件的各種測(cè)試中,測(cè)試過程中使用的計(jì)劃、報(bào)告等應(yīng)妥善處理和存儲(chǔ)。其主要目的是為了便于以后系統(tǒng)的維護(hù)。
(3)軟件測(cè)試整個(gè)過程中的聚類現(xiàn)象應(yīng)優(yōu)先考慮。
(4)對(duì)于軟件測(cè)試,我們應(yīng)該盡量不去和自己設(shè)計(jì)的系統(tǒng)進(jìn)行參考,而是要測(cè)試對(duì)方的程序,以確保軟件測(cè)試結(jié)果的客觀性和公平性。
(5)整個(gè)測(cè)試計(jì)劃嚴(yán)格按照軟件測(cè)試的具體實(shí)施細(xì)則進(jìn)行。
(6)對(duì)整個(gè)測(cè)試結(jié)果進(jìn)行綜合檢查,盡量避免重復(fù)錯(cuò)誤。
本自習(xí)室管理系統(tǒng)小程序滿足用戶的要求和需求,本自習(xí)室管理系統(tǒng)小程序的使用能夠有效的提高用戶的使用率。
測(cè)試結(jié)果
測(cè)試后得到的性能和用例,系統(tǒng)具有足夠的正確性、可靠性、穩(wěn)定性,并且可以對(duì)輸入數(shù)據(jù)進(jìn)行準(zhǔn)確的點(diǎn)擊操作處理和響應(yīng)測(cè)試用戶的體驗(yàn)也得到了很好的反饋和響應(yīng)時(shí)間。合理的范圍,可以兼容所有主流瀏覽器,設(shè)計(jì)所需的效果。
總結(jié)與展望
通過自習(xí)室管理系統(tǒng)小程序的開發(fā),本人鞏固了之前學(xué)過的知識(shí),如今將平時(shí)所學(xué)到的知識(shí)融合在設(shè)計(jì)中,在設(shè)計(jì)過程中,做了很多的準(zhǔn)備,首先,在數(shù)據(jù)庫(kù)系統(tǒng)的設(shè)計(jì)過程中,尤其是在數(shù)據(jù)庫(kù)的工作原理、工作特點(diǎn),對(duì)其深刻的討論,與此同時(shí),對(duì)于小型站點(diǎn)來說,最好服務(wù)器的選擇,其次,利用所學(xué)的知識(shí)點(diǎn)分析所做的系統(tǒng),并在此基礎(chǔ)上設(shè)計(jì)。
目前本系統(tǒng)已經(jīng)上線,正在試運(yùn)行階段,用戶反饋良好,基本完成用戶所需,試運(yùn)行過程中沒有出現(xiàn)阻斷性問題,有一些不足和小問題也及時(shí)予以修正,系統(tǒng)上線后,為了保證數(shù)據(jù)的安全性,對(duì)系統(tǒng)進(jìn)行了備份操作,系統(tǒng)備份是每?jī)蓚€(gè)月備份一次,數(shù)據(jù)庫(kù)備份為每周備份一次,系統(tǒng)部署在租賃的云平臺(tái)服務(wù)器中。
本次系統(tǒng)上線成功后,得到了用戶的高度認(rèn)可,但是在功能上和性能上還需做進(jìn)一步的研究處理,使其有更高的性能和更好的用戶體驗(yàn)。
系統(tǒng)在以后的升級(jí)過程中,需要解決一系列用戶所提出的問題,例如打印過程中如何避免瀏覽器的兼容性問題,大量用戶訪問時(shí),如何保持較高的響應(yīng)速度,在系統(tǒng)今后的升級(jí)過程中將著重解決這些安全性問題。
參考文獻(xiàn)
[1]湯煒瑋,成熔興. 武漢付費(fèi)自習(xí)室悄然興起[N]. 湖北日?qǐng)?bào),2022-01-19(011).
[2]周楠. “滬漂自習(xí)室”,承載夢(mèng)想的地方[N]. 解放日?qǐng)?bào),2021-12-28(006).
[3]吳海萌.共享經(jīng)濟(jì)下共享自習(xí)室安全風(fēng)險(xiǎn)分析與治理對(duì)策研究[J].中國(guó)儲(chǔ)運(yùn),2021(12):123-124.
[4]楊麗.高校圖書館自習(xí)室管理問題分析[J].科技視界,2021(22):102-103.
[5]趙源源,王聰,周海濤.付費(fèi)自習(xí)室管理系統(tǒng)數(shù)據(jù)庫(kù)的設(shè)計(jì)[J].中國(guó)新通信,2021,23(14):7-9.
[6]赫斌,何云斌,趙琦. 一種基于監(jiān)控檢測(cè)的教室自習(xí)室管理系統(tǒng)[P]. 黑龍江?。篊N113052736A,2021-06-29.
[7]廖佳昱,李建國(guó). 一種防占座的桌子、桌椅組合以及自習(xí)室桌椅管理系統(tǒng)[P]. 廣東?。篊N109171221B,2021-05-28.
[8]邢利平.高校圖書館自習(xí)室現(xiàn)狀分析與管理對(duì)策[J].忻州師范學(xué)院學(xué)報(bào),2021,37(02):131-134.
[9]徐丹. 一種學(xué)校晚自習(xí)用電管理系統(tǒng)及方法[P]. 廣東?。篊N112636344A,2021-04-09.
[10]van den Bogerd Nicole,Dijkstra S. Coosje,Koole Sander L.,Seidell Jacob C.,Maas Jolanda. Greening the Room: A Quasi-Experimental Study on the Presence of Potted Plants in Study Rooms on Mood, Cognitive Performance, and Perceived Environmental Quality among University Students[J]. Journal of Environmental Psychology,2021(prepublish):
[11]張智恒,李明. 一種智能校園自習(xí)室監(jiān)控管理系統(tǒng)[P]. 陜西?。篊N111898492A,2020-11-06.
[12]德宇. Welearn自習(xí)室創(chuàng)業(yè)項(xiàng)目商業(yè)計(jì)劃研究[D].河北工業(yè)大學(xué),2020.
[13]Ali Mohammadzadeh,Miroslava Kavgic. Multivariable optimization of PCM-enhanced radiant floor of a highly glazed study room in cold climates[J]. Building Simulation,2019,13(3):
[14]Tyler C. Graff,Robert D. Ridge,Holt Zaugg. A Space for Every Student: Assessing the Utility of a Family Friendly Study Room in a University Library[J]. Journal of Library Administration,2019,59(6):
[15]鐘藝,陳麗君,胡蘭馨.考研自習(xí)室的考勤管理系統(tǒng)研究[J].福建電腦,2019,35(07):104-105.
[16]孫艷妮. 輪廓識(shí)別在自習(xí)室空位查詢系統(tǒng)中的應(yīng)用[D].重慶師范大學(xué),2018.
[17]儲(chǔ)文靜,儲(chǔ)昭輝,許曉云.基于座位管理系統(tǒng)數(shù)據(jù)的圖書館讀者自習(xí)行為探究[J].圖書館研究,2017,47(05):107-112.
[18]張興佳,劉文浩,石蕊.圖書館自習(xí)室座位管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].通訊世界,2017(18):283-284.
[19]魏倩,刁振峰,馬寶琳,呂明茹.高校自習(xí)室座位管理系統(tǒng)的開發(fā)[J].科技資訊,2017,15(16):10-11+13.
致謝
時(shí)光飛逝,轉(zhuǎn)眼間我在學(xué)校的這些年生活即將結(jié)束,回顧這幾年的學(xué)習(xí)生活,收獲良多,既有幸福也有難過,學(xué)校生活的結(jié)束對(duì)于我來說也是一個(gè)新的開始。論文即將完成,在此,我心中有許多想要感謝的人。首先感謝我的導(dǎo)師,不僅在學(xué)習(xí)研究方面加以指導(dǎo),也在生活和為人處世上給予幫助。還要感謝授課老師,你們嚴(yán)謹(jǐn)?shù)膶W(xué)術(shù)精神和積極向上的工作態(tài)度都在激勵(lì)我的成長(zhǎng)和進(jìn)步。感謝多年來一直生活在一起的室友,謝謝你們多年來的陪伴和照顧。最后,要感謝各位論文評(píng)審老師,感謝您們?cè)诎倜χ谐榭赵u(píng)閱本論文并給出寶貴的意見和建議。文章來源:http://www.zghlxwxcb.cn/news/detail-735840.html
免費(fèi)領(lǐng)取項(xiàng)目源碼,請(qǐng)關(guān)注點(diǎn)贊+私聊文章來源地址http://www.zghlxwxcb.cn/news/detail-735840.html
到了這里,關(guān)于(附源碼)springboot自習(xí)室管理系統(tǒng) 小程序 畢業(yè)設(shè)計(jì)221535的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!