SSM+阳光大学宿舍管理系统 毕业设计-附源码211714
基于SSM陽光大學宿舍管理系統
摘?要
科技進步的飛速發展引起人們日常生活的巨大變化,電子信息技術的飛速發展使得電子信息技術的各個領域的應用水平得到普及和應用。信息時代的到來已成為不可阻擋的時尚潮流,人類發展的歷史正進入一個新時代。在現實運用中,應用軟件的工作規則和開發步驟,采用JSP技術建設大學宿舍管理系統。
本設計主要實現集人性化、高效率、便捷等優點于一身的陽光大學宿舍管理系統,完成首頁、用戶管理(管理員)更多管理(學生、宿舍信息、宿舍申請、學生退宿、報修信息管理、用電管理、來訪人員登記)等功能模塊。系統通過瀏覽器與服務器進行通信,實現數據的交互與變更。本系統通過科學的管理方式、便捷的服務提高了工作效率,減少了數據存儲上的錯誤和遺漏。陽光大學宿舍管理系統使用Java語言,采用基于 MVVM模式的SSM技術進行開發,使用 Eclipse 2017 CI 10 編譯器編寫,數據方面主要采用的是微軟的SQLserver數據庫來作為數據存儲媒介,配合前臺HTML+CSS 技術完成系統的開發。
關鍵詞:大學宿舍管理;SQLserver數據庫;SSM技術
Dormitory management system of sunshine university based on SSM
Abstract
The rapid development of scientific and technological progress has caused great changes in people's daily life. The rapid development of electronic information technology has popularized and applied the application level of electronic information technology in various fields. The advent of the information age has become an irresistible fashion trend, and the history of human development is entering a new era. In practical application, according to the working rules and development steps of the application software, JSP technology is used to build the university dormitory management system.
This design mainly realizes the sunshine university dormitory management system with the advantages of humanization, high efficiency and convenience, and completes the functional modules such as home page, user management (administrator) and more management (students, dormitory information, dormitory application, student check-out, repair information management, power management, visitor registration). The system communicates with the server through the browser to realize the interaction and change of data. Through scientific management and convenient service, the system improves work efficiency and reduces errors and omissions in data storage. The dormitory management system of sunshine University uses Java language, adopts SSM technology based on MVVM mode for development, and is written with eclipse 2017 CI 10 compiler. In terms of data, it mainly uses Microsoft's SQLSERVER database as the data storage medium, and completes the development of the system with the foreground HTML + CSS technology.
Key words:University dormitory management?;??SQLserver; ?SSM Technology
目 ?錄
第1章 緒論
1.1?研究背景與意義
1.2?開發現狀
1.3?管理信息系統的開發原則
1.4?本文的組織結構
第2章 相關技術介紹
2.1 開發技術
2.2 MVVM模式
2.3 SQLserver數據庫
2.4 B/S結構
2.5 SSM框架
2.6 ssm框架各層關系
2.7B/S體系工作原理
2.8?JavaScript 運行模式
第3章 系統分析
3.1?可行性分析
3.1.1?技術可行性分析
3.1.2?經濟可行性分析
3.1.3?操作可行性分析
3.2?功能需求分析
3.3?非功能需求分析
3.4?數據流程分析
第4章 系統設計
4.1?系統架構設計
4.2?系統功能結構
4.3?功能模塊設計
4.4?數據庫設計
4.4.1?概念模型
4.4.2?關系模型
4.4.3?數據表
第5章 系統實現
5.1?登錄模塊的實現
5.2?用戶子系統模塊的實現 20
5.2.1?用戶首頁模塊 20
5.2.2?學生入住模塊 20
5.2.3?宿舍信息模塊
5.3?管理員子系統模塊的實現
5.3.1?學生管理模塊
5.3.2?個人資料管理模塊
5.3.3?學生退宿管理模塊 25
5.3.4?報修申請管理模塊 27
第6章 系統測試 29
6.1?測試目的 29
6.2?測試過程 29
6.3?測試結果 30
第7章 總結與展望 31
參考文獻 32
致謝 34
對于大學宿舍處而言,最主要的是管理宿舍的信息。如果使用一般的方法來管理,會比較繁瑣,管理起來也很有可能出錯。為了方便宿舍人員的管理工作,提高工作效率,同時為了更好地為學生提供服務,有必要開發學生宿舍管理系統,使學校的宿舍管理走上信息化之路,克服人為的種種弊端。
陽光大學宿舍管理系統的開發不僅可以減少人力、物力和財力資源的浪費,更重要的是有助于提高宿舍管理的效率。宿舍管理人員管理學生信息、管理宿舍信息時是一項復雜的組織工作,這種復雜性不僅僅指學生學籍變更快,變更人數眾多,更突出地表現在宿舍管理主要對象(即學生)的數據量大,管理起來帶來不便,所以開發一個實用、高效的宿舍管理信息系統是很有必要的。
目前我國各行各業的信息化建設開展得如火如荼,這種信息化的發展已經影響到了各學校。學校在對宿舍進行管理時,學生宿舍的管理一直都是很麻煩的事情,不僅僅管理起來不易修改和更新,而且學生需要了解本宿舍的信息時,也需要去學校宿舍處找專門人員。由于這些操作的繁瑣性,學生宿舍管理系統的開發成為各學校必須的事情,特別是各個高校。
然而目前許多學生宿舍管理系統在使用時,效率低下容易出錯,學生、教師資料不易整理,大量丟失,這些無疑都已成為管理學生宿舍的障礙。這就要求學校能夠建立高效的學生宿舍管理系統,對學生的宿舍、管理等操作及流程進行規范化管理,簡化業務流程,提高工作效率并防止中間的漏洞;迅速、準確地捕捉用戶要求,并加以高效回應。同時需要不斷完善系統,增加模塊,更好的滿足用戶需求,簡化宿舍人員的管理工作,盡量做到一切信息化。
要為用戶體現完美的系統性能,就必須以應用為核心,以實用、易用、好用三大主線為出發點,有一個正確的設計指導思想,通過合理選擇數據結構、網絡結構、操作系統以及開發環境,構成一個完善的網絡體系結構,全面兼顧技術、應用與發展的和諧統一,才能充分發揮辦公系統的優勢。根據調查,本系統的設計按照下述原則進行。
(1)實用性原則
系統以用戶需求為目標,以方便用戶為原則。同時,根據用戶實際的需求情況,增加了數據的備份和恢復。
(2)易用性原則
BS結構使用戶端不必安裝任何軟件,只要有瀏覽器并連接到Internet即可使用,免除了非專業人員維護系統的困難。
(3)性原則
本設計將充分應用現有成熟的計算機技術、網絡技術、軟件開發技術,為用戶提供高性能的系統。系統將運用先進的客戶機/服務器結構,采用SQL Server數據庫,可以方便的滿足公司內部辦公的需要。
(4)穩定性原則
本設計通過合理而先進的網絡設計以及軟、硬件的優化選型,可保證系統的可靠性與容錯性,數據庫穩定,功能順暢,沒有堵塞、丟失數據的現象,能在不同的硬件、網絡、操作系統以及操作習慣中長期平穩運行,以保證日常辦公的正常進行。
(5)安全性原則
本設計具有嚴格、細致的訪問權限管理,內部數據具有備份方式。可保存有企業的核心資料,也可保存個人用戶的一些保密資料
(6)拓展性原則
本系統提供了二次開發接口,在不影響系統正常使用的情況下,可進行高自由度、高個性化的升級與擴充。實現不同應用系統的互聯互通,構建用戶的綜合性信息處理中心平臺。
(7)實時性原則
本系統所有的數據均采用了實時處理,確保了數據的及時。
第一章是緒論,本文章的開頭部分,對本題目的研究背景和研究意義等一些做文字性的描述。
第二章研究了陽光大學宿舍管理系統的所采用的開發技術和開發工具。
第三章是系統分析部分,包括系統總體需求描述、功能性角度分析系統需求、非功能性等各個方面分析系統是否可以實現。
第四章是系統設計部分,本文章的重要部分,提供了系統架構的詳細設計和一些主要功能模塊的設計說明。
第五章是系統的具體實現,介紹系統的各個模塊的具體實現。
第六章在前幾章的基礎上對系統進行測試和運行。
最后對系統進行了認真的總結,以此對未來有一個新的展望。
本系統前端部分基于MVVM模式進行開發,采用B/S模式,后端部分基于Java的ssm框架進行開發。
前端部分:前端框架采用了比較流行的漸進式JavaScript框架Vue.js。使用Vue-Router和Vuex實現動態路由和全局狀態管理,Ajax實現前后端通信,Element UI組件庫使頁面快速成型,項目前端通過柵格布局實現響應式,可適應PC端、平板端、手機端等不同屏幕大小尺寸的完美布局展示。
后端部分:采用ssm作為開發框架,同時集成MyBatis、Redis等相關技術
MVVM是Model-View-ViewModel的簡寫。它本質上就是MVC 的改進版。MVVM 就是將其中的View 的狀態和行為抽象化,讓我們將視圖 UI 和業務邏輯分開。當然這些事 ViewModel 已經幫我們做了,它可以取出 Model 的數據同時幫忙處理 View 中由于需要展示內容而涉及的業務邏輯。微軟的WPF帶來了新的技術體驗,如Silverlight、音頻、視頻、3D、動畫……,這導致了軟件UI層更加細節化、可定制化。同時,在技術層面,WPF也帶來了 諸如Binding、Dependency Property、Routed Events、Command、DataTemplate、ControlTemplate等新特性。MVVM(Model-View-ViewModel)框架的由來便是MVP(Model-View-Presenter)模式與WPF結合的應用方式時發展演變過來的一種新型架構框架。它立足于原有MVP框架并且把WPF的新特性糅合進去,以應對客戶日益復雜的需求變化。
科技的進步,給日常帶來許多便利:宿舍的投影器用到了虛擬成像技術,數碼相機用到了光電檢測技術,比如超市貨物進出庫的記錄需要一個信息倉庫。這個信息倉庫就是數據庫,而這次的學生宿舍管理系統也需要這項技術的支持,SQlserver數據庫的優點如下:
(1)高性能設計,可充分利用WindowsNT的優勢。
(2)系統管理先進,支持Windows圖形化管理具,支持本地和遠程的系統管理和配置。
(3)強壯的事務處理功能,采各種方法保證數據的完整性。
(4)支持對稱多處理器結構、存儲過程、ODBC, 犋有自主的SQL語言。SQL Serverl以其內置的數據復制功能、強大的管理工具與Internet的緊密集成和開放的系統結構為廣大的用戶、開發人員和系統集成商提供了一個出眾的數據庫平臺。
B/S(Browser/Server)比前身架構更為省事的架構。它借助Web server完成數據的傳遞交流。只需要下載瀏覽器作為客戶端,那么工作就達到“瘦身”效果, 不需要考慮不停裝軟件的問題。
SSM即SpringMVVM+Spring+MySQL,這三個框架有各自最獨有的優勢,那么將它們組合在一起能夠碰撞出很強的火花。設計者在不需消耗大量功夫,能做出Web應用程序,而且這個程序還具有層次清晰、升級更新操作不影響正常使用的、允許多次使用的特點。這個復合框架形成一個有著結構完整、功能強大和結構良好的體系:SpringMVVM使各板塊分離,Spring使開發更靈活方便,讓開發者直接對對象進行操縱,各層次分工明細,并實現各個層次間的解耦,讓代碼更加的靈活精簡。這個框架使程序員能夠規避在開發時期避免個別錯誤導致整體被破壞,也能在后期應對客戶對產品提出的新需求。
DAO層、Service層這兩個層次都可以單獨開發,互相的耦合度很低,完全可以獨立進行,這樣的一種模式在開發大項目的過程中尤其有優勢。
Controller,View層因為耦合度比較高,因而要結合在一起開發,但是也可以看作一個整體獨立于前兩個層進行開發。這樣,在層與層之前只需要知道接口的定義,調用接口即可完成所需要的邏輯單元應用,一切顯得非常清晰簡單。
B/S架構采取瀏覽器請求,服務器響應的工作模式。
用戶可以通過瀏覽器去訪問Internet上由Web服務器產生的文本、數據、圖片、動畫、視頻點播和聲音等信息;
而每一個Web服務器又可以通過各種方式與數據庫服務器連接,大量的數據實際存放在數據庫服務器中;
從Web服務器上下載程序到本地來執行,在下載過程中若遇到與數據庫有關的指令,由Web服務器交給數據庫服務器來解釋執行,并返回給Web服務器,Web服務器又返回給用戶。在這種結構中,將許許多多的網連接到一塊,形成一個巨大的網,即全球網。而各個企業可以在此結構的基礎上建立自己的Internet。
在 B/S 模式中,用戶是通過瀏覽器針對許多分布于網絡上的服務器進行請求訪問的,瀏覽器的請求通過服務器進行處理,并將處理結果以及相應的信息返回給瀏覽器,其他的數據加工、請求全部都是由Web Server完成的。通過該框架結構以及植入于操作系統內部的瀏覽器,該結構已經成為了當今軟件應用的主流結構模式。
JavaScript是一種屬于網絡的高級腳本語言,已經被廣泛用于Web應用開發,常用來為網頁添加各式各樣的動態功能,為用戶提供更流暢美觀的瀏覽效果。通常JavaScript腳本是通過嵌入在HTML中來實現自身的功能的。
1.8.1是一種解釋性腳本語言(代碼不進行預編譯)。
1.8.2主要用來向HTML(標準通用標記語言下的一個應用)頁面添加交互行為。
1.8.3可以直接嵌入HTML頁面,但寫成單獨的js文件有利于結構和行為的分離。
1.8.4跨平臺特性,在絕大多數瀏覽器的支持下,可以在多種平臺下運行(如Windows、Linux、Mac、Android、iOS等)。
1.8.5 JavaScript腳本語言同其他語言一樣,有它自身的基本數據類型,表達式和算術運算符及程序的基本程序框架。JavaScript提供了四種基本的數據類型和兩種特殊數據類型用來處理數據和文字。而變量提供存放信息的地方,表達式則可以完成較復雜的信息處理。
本次設計基于B/S 模式下,運用Java、JSP技術采用的是SQLserver數據庫實現,總體的可行性共分為以下三個方面。
所謂的技術可行性就是在限定時間,前期擬定的功能能否被滿足。在開發設計上是否會遇上解決不了的問題。做完的項目能否被很好地應用,如果存在缺點在后期的維護上是否存在很大的難度。在對這個系統評估后,認定已存在的技術能達成目標。用JSP技術來實現動態的頁面,嵌入低依賴性的設計模式,靈活的數據庫,配合穩定的服務器,整個系統的運行效率大大提升。由此可見,在技術層面達成目標不是非非之想。
在項目上使用的工具大部分都是是當下流行開源免費的,所以在開發前期,開發時用于項目的經費將會大大降低,不會讓開發該軟件在項目啟動期受到經費的影響,所以經濟上還是可行的。盡量用最少的花費去滿足用戶的需求。省下經費用于人工費,以及設備費用。將在無紙化,高效率的道路上越走越遠。
本系統實現功能的操作很簡單,普通電腦的常見配置就可以運行本軟件,并且只要粗通電腦使用的基本常識就可以流暢的使用本軟件。電腦具備連接互聯網的能力,并且可以正常訪問系統,并不需要操作者有什么高超的能力,只需了解業務流程,并且按照專業知識進行正確操作即可,所以陽光大學宿舍管理系統具備操作可行性。
在系統開發設計前,應該對功能做初步設想,清楚這個管理系統有什么板塊,每個板塊有什么功能,整體的設計是否滿足使用者的需求,接著對所開發的系統功能進行的詳細分析總結,從而設計出完整的系統并將其實現。用戶和開發人員的交流分析,使其達到最佳理解程度,使系統功能達到最佳。
學生用例圖如下所示。
圖3-1 學生用例圖
管理員用例圖如下所示。
圖3-2 管理員用例圖
陽光大學宿舍管理系統在對需求做解析后,整個系統主要分為兩個部分:管理員和學生,每個模塊下的分支功能不一樣。對功能做出如下說明:
學生模塊:
賬號登錄認證。
管理個人資料信息,修改可修改的信息項。
宿舍信息:同時查看宿舍具體信息。
退宿申請:同時查看退宿記錄。
報修申請:對于宿舍可以提交報修申請。
我的違規:違規信息查詢等。
來訪人員:對來訪人員信息進行登記。
管理員模塊:
維護普通用戶:審核普通用戶的賬號,可以凍結普通用戶的登錄權限,或者刪除普通用戶賬號。
公告維護:管理員發布公告,公布一些必要的消息,讓學生瀏覽。
宿舍信息:對宿舍信息進行維護。
退宿管理:對學校退宿申請進行審批。
報修申請管理:對宿舍報修項目進行審批。
違規管理:對學生的違規事宜進行公告。
優秀宿舍:對優秀宿舍進行評定。
來訪人員:對來訪人員信息登記進行管理
系統非功能需求有非常多,比如性能需求、可承載最大用戶數、穩定性、易用性需求等。本系統分析時考慮到易用性需求,因為系統是給人使用的,所以必須充分從用戶的角度出發,考慮用戶體驗,使系統易理解易上手易操作。
一層數據流程圖包括了登錄、用戶功能和檢索維護等模塊,在登錄模塊使用到的數據存儲有用戶賬戶文檔,用戶功能模塊需要的存儲是用戶各功能模塊數據文檔,檢索維護是使用以上這些數據文檔通過關鍵詞進行檢索。
系統的一層數據流圖如下圖所示。
圖3-2系統數據流圖(一層)
二層數據流程是對一層數據流層圖中填寫登錄信息、用戶功能的細化。即:填寫登錄信息細化為填制信息、后臺審核,用戶功能細化為宿舍信息管理、學生管理、學生入住、學生退宿、報修申請管理)查看等操作。
系統的二層數據流圖如下圖所示。
圖3-4系統數據流圖(二層)
目前B/S體系的系統主要的數據訪問方式是:通過瀏覽器頁面用戶可以進入系統,系統可以自動對用戶向服務器發送的請求進行處理,處理請求是在系統后臺中進行的,用戶在瀏覽器頁面上進行相應操作,就能夠看到服務端傳遞的處理結果。陽光大學宿舍管理系統主要分為視圖-模型-控制三層架構設計。在視圖層中,主要是操作在服務器端向客戶端反饋并顯示的數據,在模型層中,主要處理相關的業務邏輯、數據整合等,最后的控制層它介于視圖和模型之間,主要是調整兩層之間的關系,最終落實數據的傳遞。
系統架構圖如下圖所示。
圖4-1系統架構圖
系統設計的目的是分析系統包括的所有功能結構,為開發人員設計開發和實現系統做好準備工作。經過前期的需求調查、分析和整理之后,確定的總體需求主要包括多個模塊,分別是:首頁、用戶管理(管理員)更多管理(宿舍信息管理、學生管理、學生入住、學生退宿、報修申請管理,違規信息管理)。系統整體角色分為兩個部分,一是學生、二是管理員。權限分布也是很明顯,學生是在除去瀏覽信息之外還具有查詢和管理自己賬戶信息、宿舍查詢、報修申請等權限;管理員是最高權限擁有者。
系統功能結構圖如下圖所示。
圖4-2系統功能結構圖
宿舍入住模塊
學生和宿舍存在入住關系,關系為一對多,根據宿舍編號來將宿舍數據傳入到申請數據中,操作人為學生,然后生成宿舍入住列表,學生查看個人歷史宿舍入住列表,可以進行數據銷毀。
學生退宿維護模塊
學生來錄入學生退宿數據,點擊學生退宿錄入按鈕,依次填寫要錄入的學生退宿數據,點擊提交按鈕,將數據提交至數據庫,然后刷新學生退宿數據頁面,每條數據右邊有刪除和編輯按鈕,來完成相應的刪除和更新功能。
宿舍信息管理模塊
管理員和宿舍信息存在管理關系,關系為一對多,根據宿舍編號來將宿舍數據傳入到上交數據中,操作人為管理員,然后生成上交列表,管理員查看學生歷史入住、退宿列表,可以進行數據銷毀。
對于一個要開發的系統來說,E-R圖可以讓別人能更快更輕松的了解此系統的事務及它們之間的關系。根據系統分析階段所得出的結論確定了在學生宿舍管理系統中存在著多個實體分別是用普通用戶、管理員、(宿舍管理、學生管理、宿舍入住、退宿、報修申請管理)系統總體ER圖如下圖所示。
圖4-4系統總體ER圖
管理員(管理員id、用戶名、密碼、權限)
學生用戶(學生用戶id、學生學號、密碼、姓名、性別、身份證號、電話、照片)
數據庫邏輯結構就是將E-R圖在數據庫中用具體的字段進行描述。用字段和數據類型描述來使對象特征實體化,最后形成具有一定邏輯關系的數據庫表結構。學生宿舍管理系統所需要的部分數據結構表如下表所示。
student表:
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| student_id | int | 11 | 是 | 是 | 學生ID |
| student_number | varchar | 64 | 是 | 否 | 學號 |
| gender | varchar | 64 | 否 | 否 | 性別 |
| examine_state | varchar | 16 | 是 | 否 | 審核狀態 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| user_id | int | 11 | 是 | 否 | 用戶ID |
| create_time | datetime | 0 | 是 | 否 | 創建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
student_check_ini表:
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| student_check_in_id | int | 11 | 是 | 是 | 學生入住ID |
| dormitory_name | varchar | 64 | 否 | 否 | 宿舍名稱 |
| dormitory | varchar | 64 | 否 | 否 | 宿舍樓 |
| student | int | 11 | 否 | 否 | 學生 |
| student_number | varchar | 64 | 否 | 否 | 學號 |
| check_in_date | date | 0 | 否 | 否 | 入住日期 |
| examine_state | varchar | 16 | 是 | 否 | 審核狀態 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
excellent_dormitory表:
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| excellent_dormitory_id | int | 11 | 是 | 是 | 優秀宿舍ID |
| dormitory_name | varchar | 64 | 否 | 否 | 宿舍名稱 |
| selection | varchar | 64 | 否 | 否 | 評選 |
| dormitory_members | varchar | 64 | 否 | 否 | 宿舍成員 |
| selection_details | varchar | 64 | 否 | 否 | 評選詳情 |
| examine_state | varchar | 16 | 是 | 否 | 審核狀態 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
electricity_consumption表:
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| electricity_consumption_id | int | 11 | 是 | 是 | 用電ID |
| dormitory_name | varchar | 64 | 否 | 否 | 宿舍名稱 |
| month | varchar | 64 | 否 | 否 | 月份 |
| electricity_consumption | int | 11 | 否 | 否 | 用電度 |
| examine_state | varchar | 16 | 是 | 否 | 審核狀態 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
dormitory表:
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| dormitory_id | int | 11 | 是 | 是 | 宿舍樓ID |
| dormitory_building_name | varchar | 64 | 否 | 否 | 宿舍樓名稱 |
| dormitory_building_no | varchar | 64 | 否 | 否 | 宿舍樓編號 |
| location | varchar | 64 | 否 | 否 | 所在位置 |
| details | text | 0 | 否 | 否 | 詳情簡介 |
| examine_state | varchar | 16 | 是 | 否 | 審核狀態 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
violation_managementi表:
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| violation_management_id | int | 11 | 是 | 是 | 違規管理ID |
| student | int | 11 | 否 | 否 | 學生 |
| reasons_for_violation | varchar | 64 | 否 | 否 | 違規事由 |
| punish | varchar | 64 | 否 | 否 | 處罰 |
| student_number | varchar | 64 | 否 | 否 | 學號 |
| examine_state | varchar | 16 | 是 | 否 | 審核狀態 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
visitors表:
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| visitors_id | int | 11 | 是 | 是 | 來訪人員ID |
| visitor_name | varchar | 64 | 否 | 否 | 來訪者姓名 |
| visit_dormitory | varchar | 64 | 否 | 否 | 訪問宿舍 |
| visiting_students | int | 11 | 否 | 否 | 訪問學生 |
| visiting_time | datetime | 0 | 否 | 否 | 來訪時間 |
| reason_for_visit | varchar | 64 | 否 | 否 | 來訪事由 |
| examine_state | varchar | 16 | 是 | 否 | 審核狀態 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
student_check_out表:
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| student_check_out_id | int | 11 | 是 | 是 | 學生退宿ID |
| dormitory_name | varchar | 64 | 否 | 否 | 宿舍名稱 |
| student | int | 11 | 否 | 否 | 學生 |
| reasons_for_check_out | text | 0 | 否 | 否 | 退宿原因 |
| student_number | varchar | 64 | 否 | 否 | 學號 |
| check_out_date | date | 0 | 否 | 否 | 退宿日期 |
| examine_state | varchar | 16 | 是 | 否 | 審核狀態 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
系統的登錄窗口是用戶的入口,用戶只有在登錄成功后才可以進入訪問。通過在登錄提交表單,后臺處理判斷是否為合法用戶,進行頁面跳轉,進入系統中去。
登錄合法性判斷過程:用戶輸入賬號和密碼后,系統首先確定輸入輸入數據合法性,然后在login.jsp頁面發送登錄請求,調用src下的mainctrl類的dopost方法來驗證。
用戶登錄模塊的IPO如下所示:
輸入:用戶名和密碼。
處理:
1)檢測用戶輸入的賬號、密碼是否正確及在數據庫已對應存在。
2)從數據庫中提取記錄,并儲存在本地的session中(timeout默認=30min)。
3)根據用戶名,將其顯示在系統首頁上。
輸出:是否成功的信息。
登錄流程圖如下所示。
圖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;
????????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, "賬號或密碼不能為空");
????????}
????????if (resultList == null || password == null) {
????????????return error(30000, "賬號或密碼不能為空");
????????}
????????//判斷是否有這個用戶
????????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);
????????//查詢用戶審核狀態
????????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,"該用戶審核未通過");
????????????}
????????}
????????//查詢用戶狀態
????????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, "賬號或密碼不正確");
????????}
}
????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;
}
系統呈現出一種簡潔大方的首頁:界面簡約、鱗次櫛比,用戶能輕車熟路的使用。出于對系統使用群體廣泛的顧慮,應有良好性能的后臺。
學生入住過程中,通過學寢室信息得到寢室數據,將寢室數據賦值給學生,最后查看學生入住記錄。
學生入住流程圖如下所示。
圖5-4學生入住流程圖
學生入住界面如圖所示。
????圖5-5學生入住界面
???學生入住關鍵代碼如下:
@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);
}
宿舍信息模塊,教師通過宿舍信息數據,將宿舍信息數據賦值提交申請,調用CommDAO的insert方法將上交數據插入上交表中,最后查看個人歷史申請記錄,可以銷毀歷史申請數據。
宿舍信息如下所示。
圖5-6宿舍信息流程圖
宿舍信息界面如圖所示。
圖5-7宿舍信息界面
宿舍信息管理界面關鍵代碼如下:
?@RequestMapping("/get_obj")
????public Map<String, Object> obj(HttpServletRequest request) {
????????List resultList = service.selectBaseList(service.select(service.readQuery(request), service.readConfig(request)));
????????if (resultList.size() > 0) {
????????????JSONObject jsonObject = new JSONObject();
????????????jsonObject.put("obj",resultList.get(0));
????????????return success(jsonObject);
????????} else {
????????????return success(null);
????????}
}
學生在yhzhgl查看學生信息,先使用sql語句查詢出所有學生表的數據,然后調用PageManager.getPages(url,4,sql, request ),返回一個ArrayList的對象,在for循環里,使用jsp得到每個ArrayList對象的數據,在jsp頁面中解析ArrayList對象,得到其各個鍵值對的值。
學生管理界面如下圖所示。
圖5-8學生管理界面
系統學生管理關鍵代碼如下所示:
?@PostMapping("/upload")
????public Map<String, Object> upload(@RequestParam(value = "file",required=false) MultipartFile file,HttpServletRequest request) {
????????log.info("進入方法");
????????if (file.isEmpty()) {
????????????return error(30000, "沒有選擇文件");
????????}
????????try {
????????????//判斷有沒路徑,沒有則創建
????????????String filePath = request.getSession().getServletContext().getRealPath("\\") +"upload\\";
// ???????????String filePath = System.getProperty("user.dir") + "\\target\\classes\\static\\upload\\";
????????????File targetDir = new File(filePath);
????????????if (!targetDir.exists() && !targetDir.isDirectory()) {
????????????????if (targetDir.mkdirs()) {
????????????????????log.info("創建目錄成功");
????????????????} else {
????????????????????log.error("創建目錄失敗");
????????????????}
????????????}
// ???????????String path = ResourceUtils.getURL("classpath:").getPath() + "static/upload/";
// ???????????String filePath = path.replace('/', '\\').substring(1, path.length());
????????????String fileName = file.getOriginalFilename();
????????????int lastIndexOf = fileName.lastIndexOf(".");
????????????//獲取文件的后綴名 .jpg
????????????String suffix = fileName.substring(lastIndexOf);
????????????fileName = IdWorker.getId()+suffix;
????????????File dest = new File(filePath + fileName);
????????????log.info("文件路徑:{}", dest.getPath());
????????????log.info("文件名:{}", dest.getName());
????????????file.transferTo(dest);
????????????JSONObject jsonObject = new JSONObject();
????????????jsonObject.put("url", "/api/upload/" + fileName);
????????????return success(jsonObject);
????????} catch (IOException e) {
????????????log.info("上傳失敗:{}", e.getMessage());
????????}
????????return error(30000, "上傳失敗");
}
用戶點擊登錄填寫賬號信息登錄后,會切換內容為“某某用戶歡迎您”和歷史訂單,并給出注銷鏈接。當用戶登錄成功后會將個人信息保存在session作用域中,點擊自己的用戶名時,會跳轉到個人詳細信息頁面,由后臺通過Freemarker取出session作用域中的用戶信息進行動態渲染,例如,郵箱、電話號碼、用戶名等等。同時頁面上會顯示修改個人信息和修改密碼的按鈕,這時客戶可以修改自己的登錄密碼以保障賬號的安全性,防止被人竊取賬號,通過UserController.java的updatePassword()實現,同時也可以根據自己的個人信息是否變動做出相應的修改,通過updateUserInfo()實現。
密碼修改流程圖如下所示。
個人資料管理模塊界面圖如下:
??????????????????????????????圖5-9個人資料管理界面
個人資料管理界面關鍵代碼如下:
??@PostMapping("/add")
????@Transactional
????public Map<String, Object> add(HttpServletRequest request) throws IOException {
????????Map<String,Object> paramMap = service.readBody(request.getReader());
????????this.addMap(paramMap);
????????return success(1);
}
????@Transactional
????public Map<String, Object> addMap(Map<String,Object> map){
????????service.insert(map);
????????return success(1);
}
添加學生退宿時,選擇需要退的寢室編號,進行添加或修改、刪除等操作。學生退宿流程圖如下所示。
圖5-10學生退宿管理流程圖
學生退宿管理界面如下圖所示。
圖5-11學生退宿管理界面
學生退宿管理界面關鍵代碼如下:
????@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);
????}
報修申請管理,輸入需要申請報修的宿舍信息,調用getData方法獲取所有數據并且進行分頁,把獲取到的所有數據顯示到視圖上,這時候只需要用腳本方法便能快速查找,不涉及對數據庫操作。
報修申請管理流程圖如下所示。
圖5-12報修申請管理流程圖
報修申請管理界面如下圖所示。
圖5-13報修申請管理界面
報修申請管理界面的關鍵代碼如下:
???public Map<String, Object> success(Object o) {
????????Map<String, Object> map = new HashMap<>();
????????if (o == null) {
????????????map.put("result", null);
????????????return map;
????????}
????????if (o instanceof List) {
????????????if (((List) o).size() == 1) {
???????????????o = ?((List) o).get(0);
????????????????map.put("result", o);
????????????}else {
????????????????String jsonString = JSONObject.toJSONString(o);
????????????????JSONArray objects service.covertArray(JSONObject.parseArray(jsonString));
????????????????map.put("result", objects);
????????????}
????????} else if (o instanceof Integer || o instanceof String) {
????????????map.put("result", o);
????????} else {
????????????String jsonString = JSONObject.toJSONString(o);
????????????JSONObject jsonObject = JSONObject.parseObject(jsonString);
????????????JSONObject j = service.covertObject(jsonObject);
????????????map.put("result", j);
????????}
????????return map;
}
在對該系統進行完詳細設計和編碼之后,就要對陽光大學宿舍管理系統的程序進行測試,檢測程序是否運行無誤,反復進行測試和修改,使之最后成為完整的軟件,滿足用戶的需求,實現預期的功能。
在軟件的測試過程中,通常測試人員需要針對不同的功能模塊設計多種測試用例。通過測試用例能夠及時發現代碼業務邏輯上是否與真實的業務邏輯相對應,及時發現代碼上或邏輯上的缺陷,以此來來完善系統,提高軟件產品的質量,使軟件具有良好的用戶體驗。
登錄測試用例表如下所示。
表6-1登錄測試用例
| 測試性能 | 用戶或操作員登錄系統 | ||
| 用例目的 | 測試用戶或操作員登錄系統時功能是否正常 | ||
| 前提條件 | 進入用戶登錄頁面或操作員登錄頁面 | ||
| 輸入條件 | 預期輸出 | 實際情況 | |
| 各項信息不予填寫,直接點擊登陸按鈕 | 不允許登錄,提示填寫賬號相關信息 | 一致 | |
| 填寫錯誤的登錄名或密碼后點擊登錄系統 | 提示用戶名或密碼錯誤,要求重新填寫進行登錄 | 一致 | |
| 填寫與驗證碼信息不一致的信息 | 系統顯示出提示信息,表明驗證碼錯誤,要求重新填寫 | 一致 | |
學生入住測試用例表如下所示。
表6-2學生入住測試用例
| 測試性能 | 用戶進行學生入住的操作 | ||
| 用例目的 | 測試用戶進行學生入住操作時,該功能是否正常 | ||
| 前提條件 | 用戶進入學生入住詳情頁,該宿舍能夠被入住 | ||
| 輸入條件 | 預期輸出 | 實際情況 | |
| 對著某宿舍點擊“入住”按鈕 | 界面跳轉至入住界面 | 一致 | |
| 在入住界面,輸入必填項,點擊“提交”按鈕 | 提示“入住成功”,并返回上一級界面 | 一致 | |
| 在入住界面,填寫入住表單的時候未輸入完整,點擊“提交”按鈕 | 提示“入住失敗” | 一致 | |
學生退宿測試用例表如下所示。
表6-2學生退宿測試用例
| 測試性能 | 用戶進行學生退宿的操作 | ||
| 用例目的 | 測試用戶進行學生退宿操作時,該功能是否正常 | ||
| 前提條件 | 用戶進入學生退宿詳情頁,該宿舍能夠被退宿 | ||
| 輸入條件 | 預期輸出 | 實際情況 | |
| 對著某宿舍點擊“退宿”按鈕 | 界面跳轉至退宿界面 | 一致 | |
| 在退宿界面,輸入必填項,點擊“提交”按鈕 | 提示“退宿成功”,并返回上一級界面 | 一致 | |
| 在退宿界面,填寫退宿表單的時候未輸入完整,點擊“提交”按鈕 | 提示“退宿失敗” | 一致 | |
報修申請測試用例表如下所示。
表6-2報修申請測試用例
| 測試性能 | 用戶進行報修申請的操作 | ||
| 用例目的 | 測試用戶進行報修申請操作時,該功能是否正常 | ||
| 前提條件 | 用戶進入報修申請詳情頁,該宿舍能夠被申請 | ||
| 輸入條件 | 預期輸出 | 實際情況 | |
| 對著某宿舍點擊“申請”按鈕 | 界面跳轉至申請界面 | 一致 | |
| 在申請界面,輸入必填項,點擊“提交”按鈕 | 提示“申請成功”,并返回上一級界面 | 一致 | |
| 在申請界面,填寫申請表單的時候未輸入完整,點擊“提交”按鈕 | 提示“申請失敗” | 一致 | |
經過對此系統的測試,得出該系統足以滿足用戶日常需求,在功能項目和操作等方面也能滿足操作員對于其他用戶的管理。但是,還有很多功能有待添加,這個系統僅能滿足大部分的需求,還需要對此系統的功能更進一步的完善,這樣使用起來才能更加的完美。
通過陽光大學宿舍管理系統的開發,本人鞏固了之前學過的知識,如今將平時所學到的知識融合在設計中,在設計過程中,做了很多的準備,首先,在數據庫系統的設計過程中,尤其是在數據庫的工作原理、工作特點,對其深刻的討論,與此同時,對于小型站點來說,最好服務器的選擇,其次,利用所學的知識點分析所做的系統,并在此基礎上設計。
目前本系統已經上線,正在試運行階段,用戶反饋良好,基本完成用戶所需,試運行過程中沒有出現阻斷性問題,有一些不足和小問題也及時予以修正,系統上線后,為了保證數據的安全性,對系統進行了備份操作,系統備份是每兩個月備份一次,數據庫備份為每周備份一次,系統部署在租賃的云平臺服務器中。
本次系統上線成功后,得到了用戶的高度認可,但是在功能上和性能上還需做進一步的研究處理,使其有更高的性能和更好的用戶體驗。
系統在以后的升級過程中,需要解決一系列用戶所提出的問題,例如打印過程中如何避免瀏覽器的兼容性問題,大量用戶訪問時,如何保持較高的響應速度,在系統今后的升級過程中將著重解決這些安全性問題。
參考文獻
[1]孫妃,李可心,劉楠,王曉蘭,孔榮榮,王慧.學生宿舍管理系統的設計與實現[J].江蘇科技信息,2021,38(29):40-42+75.
[2]朱宏斌.智能控電管理系統在高校學生公寓中的應用——以宿遷學院為例[J].數字通信世界,2021(10):194-195.
[3]黃煒鋼.基于移動端的中職學生宿舍管理系統的設計與實現[J].信息與電腦(理論版),2021,33(02):141-144.
[4]馮曉春,陳艷.基于web開發的學生公寓管理系統設計與實現[J].科技創新與應用,2020(31):77-78.
[5]王鋒,金晶.高校學生宿舍水電表管理系統設計與實現[J].智能計算機與應用,2020,10(06):191-194.
[6]辛閱,黃浪塵,李家兒.學生宿舍遠程智能管理系統設計[J].軟件,2020,41(03):79-83.
[7]Xiaochen Geng,Sha Liu. Application of Modular Interface Design in Student Dormitory Management System[C]//Proceedings of 4th International Conference on Culture,Education and Economic Development of Modern Society(ICCESE 2020)(Advances in Social Science,Education and Humanities Research,VOL.416).Proceedings of 4th International Conference on Culture,2020:173-180.
[8]歐暢.宿舍管理系統的前端設計與實現[J].湖北農機化,2020(02):186-187.
[9]賈樹剛.學生宿舍管理系統的設計與實現[J].遼寧師專學報(自然科學版),2019,21(04):44-46+100.
[10]初慶東,張敏霞,崔衛韜.一種新型高校學生信息管理系統的設計與實現[J].信息技術,2019,43(06):69-71+76.
[11]王青.高校宿舍智能管理系統設計[J].微型電腦應用,2019,35(06):135-137.
[12]俞玲.基于數據挖掘的高校學生宿舍管理系統研究與設計[J].信息與電腦(理論版),2019(04):121-122.
[13]徐洋.關于“互聯網+高校學生宿舍”的研究[J].長江叢刊,2019(04):147-148.
[14]黃敏.基于B/S架構的學生宿舍管理系統數據庫設計與實踐[J].電腦知識與技術,2018,14(35):83-84+92.
[15]Wang Xi,Wang De. Research of Student Management Mechanism under the Background of Credit System Based on Student Dormitory[C]//Proceedings of the 14th International Conference on Innovation and Management.,2017:1676-1680.
致謝
伴隨著設計的完成,大學生涯也隨之即將結束。大學期間是我最珍惜的時光,大學時光中學會了很多,也成長了很多,這段時光中每一段回憶都刻在腦海中。感謝一起學習,一起成長同學們,和成長過程悉心教導的老師們,非常感激有你們的陪伴。
首先感謝我的指導老師,設計的完成離不開老師的一系列指導。在畢業設計的完成過程中,老師給出了很多中肯的建議,正是由于老師一絲不茍的工作態度,我的設計才能順利的完成。
最后,感謝在大學生涯中每一位教導我的老師,是你們教給了我豐富的知識,更教會了我遇到問題時,如何去應對并解決。謝謝你們的幫助與支持。
點贊+收藏+關注 ?→ ?私信領取本源代碼、數據庫
總結
以上是生活随笔為你收集整理的SSM+阳光大学宿舍管理系统 毕业设计-附源码211714的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 权限系统的设计模式 ACL RBAC A
- 下一篇: 如何查看网页中的密码星号内容