ssm基于WEB的房屋出租管理系统的设计与实现161620
房屋出租管理系統的設計與實現
摘?要
信息化社會內需要與之針對性的信息獲取途徑,但是途徑的擴展基本上為人們所努力的方向,由于站在的角度存在偏差,人們經常能夠獲得不同類型信息,這也是技術最為難以攻克的課題。針對房屋出租管理等問題,對房屋出租管理進行研究分析,然后開發設計出房屋出租管理系統以解決問題。
房屋出租管理系統主要功能模塊包括用戶管理、房屋資訊、資訊分類、房型管理、地區管理、房屋信息、租賃登記、租賃合同、房產信息、房屋咨詢,采取面對對象的開發模式進行軟件的開發和硬體的架設,能很好的滿足實際使用的需求,完善了對應的軟體架設以及程序編碼的工作,采取MySQL作為后臺數據的主要存儲單元,采用SSM框架、Java技術、Ajax技術進行業務系統的編碼及其開發,實現了本系統的全部功能。本次報告,首先分析了研究的背景、作用、意義,為研究工作的合理性打下了基礎。針對房屋出租管理系統的各項需求以及技術問題進行分析,證明了系統的必要性和技術可行性,然后對設計系統需要使用的技術軟件以及設計思想做了基本的介紹,最后來實現房屋出租管理系統和部署運行使用它。
關鍵詞:房屋出租管理;SSM框架;MySQL數據庫
Design and implementation of house rental management systemAbstract
In the information society, there is a need for targeted information access, but the expansion of access is basically the direction of people's efforts. Due to the deviation of the perspective, people can often obtain different types of information, which is also the most difficult subject for technology to overcome. Aiming at the problems of house rental management, this paper studies and analyzes the house rental management, and then develops and designs the house rental management system to solve the problems.
The software development and management mode of housing information, including the development of housing information, the establishment of housing information and the use of housing management system, can meet the needs of users, and the real estate information management system, MySQL is used as the main storage unit of background data, and SSM framework, Java technology and Ajax technology are used to code and develop the business system, which realizes all the functions of the system. This report first analyzes the background, function and significance of the research, which lays a foundation for the rationality of the research work. This paper analyzes the various requirements and technical problems of the house rental management system, proves the necessity and technical feasibility of the system, and then makes a basic introduction to the technical software and design idea required by the design system. Finally, it realizes the house rental management system and deploys it.
Key words:?Housing rental management; SSM framework; Mysql database
目 ?錄
第1章 緒論
1.1?研究背景與意義
1.2?開發現狀
1.3?研究方法
第2章 相關技術介紹
2.1開發技術
2.2 MVVM模式
2.3?MySQL數據庫
2.4 B/S結構
2.5?SSM框架
2.6?Vue.js主要功能
第3章 系統分析
3.1?可行性分析
3.2?功能需求分析
3.2.1?前臺用戶功能
3.2.2?后臺管理員功能
3.3?非功能需求分析
3.4?安全性需求分析
3.4.1?系統的安全性
3.4.2?數據的安全性
3.5?數據流程分析
第4章 系統設計
4.1?系統架構設計
4.2?系統總體設計
4.3?系統功能設計
4.4?數據庫設計
4.4.1?數據需求分析
4.4.2?數據庫概念設計
4.4.3?數據庫表設計
第5章 系統實現
5.1?數據庫訪問層的實現
5.2?注冊模塊的實現
5.3?登錄模塊的實現
5.4?用戶資料修改模塊的實現
5.5租賃合同數據管理模塊的實現
5.6房產信息管理模塊的實現
5.7房屋信息管理模塊的實現
5.8房型管理模塊的實現
第6章 系統測試
6.1?測試目的
6.2?功能測試
6.3?性能測試
第7章 總結與展望
參考文獻
致謝
近年來人民群眾對住房的剛性需求一直處在上升趨勢,政府現在又提倡保障人們群眾的剛性住房需求,所以房地產行業還是很有前景的。房地產管理部門面臨的工作量日益繁多, 房屋管理中的龐大數據量及更新速度快同傳統的手工辦理、紙制檔案管理模式之間的矛盾已經越來越突出。如何有效地管理龐大復雜的房地產信息資源, 科學地規范房地產的管理工作, 已經成為房地產管理部門提高自身管理以及服務水平的關鍵所在。如何讓房屋變成公司的流動資金,是一個公司競爭中的重中之重。在現在網絡飛速發展的背景下,設計房屋出租管理系統來促進房產交易也是一個很好的手段。當前形勢下,僅僅靠原始的手工管理或簡單的單機管理是不夠的,部門面對大量的信息,無法有效率地將其中的重要部分提取出來,并做出相應的判斷和處理。公司管理者的決策只能依據報表數據,在浪費大量人力、物力的同時無法做到實時監控,難以保證數據的準確性和及時性。因此,先進的管理思想在商業中實現就成為了一個可望而不可及的目標。公司集團非常急需一套既有先進管理思想又適合國內大小房地產企業的房屋出租管理系統,作為實現目標和提高現有水平的一種重要手段。房屋出租管理系統是一個房屋租賃公司不可缺少的部分,它的執行對于公司的決策者和管理者來說是很有幫助的, 隨著科學技術的不斷提高,計算機科學日漸成熟,其強大的功能已為人們深刻認識,它已進入人類社會的各個領域并發揮著越來越重要的作用。
房屋租賃在國內外都是一個已經發展了很久的行業,關于房屋租賃的各種系統也是多樣化的,系統的人性化設計是加強了客戶和租賃者之間聯系,使用戶在租賃房屋之前就和租賃方有了溝通,對自己中意的房屋也很了解。由于我國經濟的發展迅速,帶動了房地產業的進步,對系統的設計也是向多功能方面發展。"公正、公平、合理"的商業管理理念和商業管理水平的提高,使社會對房屋出租管理系統有了更高的需求;同時由于個人電腦的普及,數據庫技術、客戶/服務器技術,特別是Internet/Intranet技術的發展,使得第三代房屋出租管理系統的出現成為必然。房屋出租管理系統的特點是從房屋租賃管理的角度出發,用集中的數據庫將幾乎所有與商品相關的數據統一管理起來,形成了集成的信息源。在國內外房屋租賃方面來看,利用好網絡是公司成功的基石。中國加入WTO后,中國的房地產企業面臨的服務領域的競爭壓力更大。如何推進房屋租賃管理的現代化、專業化、市場化是所有房屋公司面臨的緊迫課題。面對激烈的競爭和愈發挑剔的租房者,房地產發展商也在不斷的尋找能夠加強自身競爭力的手段。這時一個比較完善高效的房屋出租管理系統就越發顯得重要了!
首先,通過引擎搜索或者查閱相關文獻資料,了解了本系統開發的背景以及設計系統的意義所在,收集用戶需求信息。其次,在開發工具上,最終確定選用Java平臺來設計開發本系統,MySQL作為設計數據庫的工具。即利用Java語言實現用戶界面,并同數據庫連接起來實現完整的通信功能。之后,設計出系統大致的功能模塊。主要從方便系統用戶和系統管理員的角度進行分析,明確該系統應該具有的功能。最終是測試系統,通過用例測試發現存在的問題并找到解決的方案。利用現有的開發平臺,結合自己所學的知識,在老師的指導幫助下來完成該設計,確保系統的可用性、實用性。
本系統前端框架采用了比較流行的漸進式JavaScript框架Vue.js。使用Vue-Router和Vuex實現動態路由和全局狀態管理,Ajax實現前后端通信,Element UI組件庫使頁面快速成型。后端部分:采用ssm作為開發框架,同時集成MyBatis、Redis等相關技術。
MVVM是Model-View-ViewModel的簡寫。它本質上就是MVVM 的改進版。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的新特性糅合進去,以應對客戶日益復雜的需求變化。
科技的進步,給日常帶來許多便利:教室的投影器用到了虛擬成像技術,數碼相機用到了光電檢測技術,比如超市貨物進出庫的記錄需要一個信息倉庫.這個信息倉庫就是數據庫,而這次的在線電商購物系統設計也需要這項技術的支持.
用MySQL這個軟件,是因為它能接受多個使用者訪問,而且里面存在Archive等.它會先把數據進行分類,然后分別保存在表里,這樣的特別操作就會提高數據管理系統自身的速度,讓數據庫能被靈活運用.MySQL的代碼是公開的,而且允許別人二次編譯升級.這個特點能夠降低使用者的成本,再搭配合適的軟件后形成一個良好的網站系統.雖然它有缺點,但是綜合各方面來說,它是使用者的主流運用的對象.
B/S(Browser/Server)比前身架構更為省事的架構.它借助Web server完成數據的傳遞交流.只需要下載瀏覽器作為客戶端,那么工作就達到“瘦身”效果, 不需要考慮不停裝軟件的問題.
SSM即SpringMVC+Spring+Mybatis,這三個框架有各自最獨有的優勢,那么將它們組合在一起能夠碰撞出很強的火花.設計者在不需消耗大量功夫,能做出Web應用程序,而且這個程序還具有層次清晰、升級更新操作不影響正常使用的、允許多次使用的特點.這個復合框架形成一個有著結構完整、功能強大和結構良好的體系:SpringMVC使各板塊分離,Spring使開發更靈活方便,使用Mybatis讓開發者直接對對象進行操縱,各層次分工明細,并實現各個層次間的解耦,讓代碼更加的靈活精簡.這個框架使程序員能夠規避在開發時期避免個別錯誤導致整體被破壞,也能在后期應對客戶對產品提出的新需求.
Vue.js是一套構建用戶界面的漸進式框架。與其他重量級框架不同的是,Vue采用自底向上增量開發的設計。Vue 的核心庫只關注視圖層,并且非常容易學習,非常容易與其它庫或已有項目整合。另一方面,Vue 完全有能力驅動采用單文件組件和Vue生態系統支持的庫開發的復雜單頁應用。
Vue.js 的目標是通過盡可能簡單的 API 實現響應的數據綁定和組合的視圖組件。
Vue.js 自身不是一個全能框架——它只聚焦于視圖層。因此它非常容易學習,非常容易與其它庫或已有項目整合。另一方面,在與相關工具和支持庫一起使用時,Vue.js 也能驅動復雜的單頁應用。
技術性方面,采用當前主流的JavaEE框架進行系統主體框架的搭建,前臺使用jquery,ajax,實現前臺頁面的設計與美觀調整,以上技術,均由本人經過系統學習,并且都是在課程設計中實踐過的,可以使得開發更加便捷和系統。從技術角度看,這個系統是完全可以實現的。
實用性方面,本次設計的主要任務是在房屋出租管理系統內用戶管理、房屋資訊、資訊分類、房型管理、地區管理、房屋信息、租賃登記、租賃合同、房產信息、房屋咨詢等,符合當前潮流的發展。從用戶角度出發,同時也考慮系統運營成本和人力資源,采用網絡上的便捷方式,實現線上業務,使得業務流程更系統,也更方便用戶的體驗,比較實用。
經濟性方面,由于本課題中設計的房屋出租管理系統的主要目的是為了能夠更加方便及快捷的進行信息的查詢管理及檢索服務,也就是能夠可以直接投入使用的信息化軟件。系統的主要成本主要是集中在對使用數據后期繼續維護及其管理更新這個操作上。但是一旦系統投入到實際的運行及使用之后就能夠很好的提高信息查詢檢索的效率,同時也需要有效的保證查詢者的信息方面的安全性,同時這個房屋出租管理系統所帶來的實際應用方面的價值是遠遠的超過了實際系統進行開發與維護方面的成本,因此,從經濟上來說開發這個軟件是可行的。
房屋出租管理系統的功能主要分為前臺用戶根據自己的需求進行注冊登錄,瀏覽房源信息并對選中的房源進行租賃操作。后臺系統管理員因職責的不同,分為普通管理員和超級管理員,普通管理員主要對租賃單進行處理,處理房源預約看房單,而超級管理員主要對注冊用戶,用戶管理、房屋資訊、資訊分類、房型管理、地區管理、房屋信息、租賃登記、租賃合同、房產信息、房屋咨詢進行處理。
系統用例圖如下所示。
?
圖3-1 系統用例圖
前臺用戶可分為未注冊用戶需求和已注冊用戶需求。
未注冊用戶的功能如下:
注冊賬號:用戶填寫個人信息,并驗證手機號碼。
瀏覽房屋資訊:用戶可以根據房屋資訊瀏覽房屋的信息,并選中某個房屋資訊查看詳情。
已注冊用戶的功能如下:
登錄:根據賬號密碼進行登錄操作。
維護個人信息:用戶因個人信息的變更可以隨時修改自己注冊信息。
房屋信息:用戶根據自己的需求選中某個房屋信息進行查詢操作。
后臺管理員可分為普通管理員和超級管理員。
普通管理員功能如下。
修改密碼:管理員可以隨時修改自己進入系統的登錄密碼,以保證系統的安全性。
對租賃登記信息進行處理:查看租賃信息,辦理租賃登記審核等。
超級管理員功能如下:
修改密碼:管理員可以隨時修改自己進入系統的登錄密碼,以保證系統的安全性。
對租賃合同信息進行處理:辦理租賃合同審核等。
管理普通管理員:對普通管理員進行管理。調動相關工作人員時可以添加或刪除普通管理員。
房產信息管理:對房產信息進行維護,添加、刪除、修改信息。
對房屋咨詢信息進行處理:辦理房屋咨詢審核等。
租賃合同數據信息管理:發布、刪除相關的租賃合同數據信息。
首先主要考慮的是系統功能軟件,在具體設計的環節上,是不是能夠較好的滿足各類用戶的基本功能需求,如果不能較好的滿足用戶需求,那么這個系統的存在是沒有價值的。軟件系統的非功能性求分析,從7個方面展開,一個是性能分析,針對系統;一個是安全分析,針對系統,一個是完整度分析,針對系統,一個是可維護分析,針對系統,一個是可擴展性分析,針對系統,一個是適應業務的性能分析。面對房屋出租管理系統存在的性能、安全、擴展、完整度等7個方面性能綜合比對分析后發現,需要相應的非功能性需求分析。
安全性對每一個系統來說都是非常重要的。安全性很好的系統可以保護企業的信息和用戶的信息不被竊取。提高系統的安全性不僅是對用戶的負責,更是對企業的負責。尤其針對于房屋出租管理系統來說,必須要有很好的安全性來保障整個系統。
系統具有對使用者有權限控制,針對角色的不通限制使用者的權限,以此來確保系統的安全性。
數據庫中的數據是從外界輸入的,當數據的輸入時,由于種種原因,輸入的數據會無效,或者是臟數據。因此,怎樣保證輸入的數據符合規定,成為了數據庫系統,尤其是多用戶的關系數據庫系統首要關注的問題。
因此,在寫入數據庫時,要保證數據完整性、正確性和一致性。
對系統的數據流進行分析,系統的使用者分為二類,一般用戶,管理員。系統主要對界面信息傳送,登錄信息的驗證,注冊信息的接收,用戶各種操作的響應做處理。
系統頂層數據流圖如下圖所示。
?
圖3-2 頂層數據流圖
要判斷用戶是是什么身份,是根據登錄的數據來判斷后,跳轉到對應的功能界面。在系統的內部用戶就可以對數據進行操作,數據庫中心就可以接收到系統傳輸的有效數據流來對數據sql語句進行對應操作。
系統底層數據流圖如下圖所示。
?圖3-3 底層數據流圖
?
系統可以分為前臺和后臺兩部分,每一種操作后系統都返回操作結果。前臺和后臺的數據連接主要通過數據庫,既分別對數據庫做不同的操作。
本房屋出租管理系統的架構設計主要分為可以3層,主要有Web層,業務層,Model層。其中web層還包括View層和Controller層,Model層包括元數據擴展層和數據訪問層。
系統架構如下圖所示。
?
圖4-1 系統架構
房屋出租管理系統總體分為前臺用戶模塊和后臺管理員模塊。
兩個模塊表現上是分別獨立存在,但是訪問的數據庫是一樣的。每一個模塊的功能都是根據先前完成的需求分析,并查閱相關資料后整理制作的。
綜上所述,系統功能結構圖如下圖所示。
?
圖4-2 系統功能結構圖
登錄模塊:登錄模塊是進入系統的入口,所有用戶必須登錄后才能訪問系統。登錄需要輸入用戶名和密碼,如果多次嘗試登錄需要輸入驗證碼。登錄時需要選擇用戶的角色,是一般用戶還是管理員登錄等。登錄成功后,會通過數據庫獲取用戶的權限,并跳轉至用戶的主頁面。
租賃合同數據模塊:可分為租賃合同數據瀏覽、租賃合同數據檢索、租賃合同數據維護三個模塊,管理員對租賃合同數據有維護的權限,發布新的租賃合同數據、更新已有的租賃合同數據等。
房屋管理模塊:房屋管理分為房屋添加、修改和房屋租賃和預約看房。房屋信息由管理員進行修改、添加、刪除操作;房屋租賃、房屋信息查詢由普通用戶來執行。
從前面可以分析到數據庫中最重要的是房源信息,用戶信息表,房屋信息表,房東表,房租賃合同表,租賃登記表,房產信息表、地區管理表、房型管理表。分析可以得到如下數據描述:
注冊用戶:用于記錄用戶的各種信息,包括用戶名、審核狀態等數據項。
管理員:記錄管理員的登錄信息。包括用戶名,密碼,權限等數據項。
房型管理:存放給房型的內容,包括房型等數據項。
房產信息:存儲用戶的房產信息。包括房產的房型、地區、狀態、每月租金、押金、租賃月數、開始時間、房東編號等數據項。
租賃登記。存儲用戶的租賃登記信息。包括租賃登記的訂單號、標題、房型、地區、租金、房東編號、用戶名、聯系電話、審核狀態、審核回復等數據項。
租賃合同:存儲用戶的租賃合同。包括訂單號、標題、房型、地區、租金、用戶名、房東編號、地址、租賃月數、押金、開始時間、到期時間、合同、租賃須知等數據項。
房東:存儲用戶內的房東內容。包括房東編號、房東姓名、審核狀態、用戶ID等數據項。
房屋信息:存儲用戶的房屋信息。包括標題、房型、地區、照片、租金、房東編號、便利設施、交通指南、房屋展示、點擊數、點贊數等數據項。
根據前面的數據流程圖,結合系統的功能模塊設計,設計出符合系統的各信息實體。
系統ER圖如下圖所示。
?
圖4-3 系統ER圖
房屋出租管理系統所擁有的數據表有以下:用戶信息表,房屋信息表,房東表,房租賃合同表,租賃登記表,房產信息表、地區管理表、房型管理表。
由于數據表較多,只展示系統主要數據表,如下表所示。
room_type_management表:
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| room_type_management_id | int | 11 | 是 | 是 | 房型管理ID |
| layout_of_a_house_or_an_apartment | varchar | 64 | 否 | 否 | 房型 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
| registered_user表: | |||||
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| registered_user_id | int | 11 | 是 | 是 | 注冊用戶ID |
| user_name | varchar | 64 | 是 | 否 | 用戶名 |
| examine_state | varchar | 16 | 是 | 否 | 審核狀態 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| user_id | int | 11 | 是 | 否 | 用戶ID |
| create_time | datetime | 0 | 是 | 否 | 創建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
| regional_management表: | |||||
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| regional_management_id | int | 11 | 是 | 是 | 地區管理ID |
| region | varchar | 64 | 否 | 否 | 地區 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
| real_estate_information_表: | |||||
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| real_estate_information_id | int | 11 | 是 | 是 | 房產信息ID |
| layout_of_a_house_or_an_apartment | varchar | 64 | 否 | 否 | 房型 |
| region | varchar | 64 | 否 | 否 | 地區 |
| state | varchar | 64 | 否 | 否 | 狀態 |
| monthly_rent | varchar | 64 | 否 | 否 | 每月租金 |
| deposit | varchar | 64 | 否 | 否 | 押金 |
| months_of_lease | varchar | 64 | 否 | 否 | 租賃月數 |
| start_time | date | 0 | 否 | 否 | 開始時間 |
| landlord_number | int | 11 | 否 | 否 | 房東編號 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
| lease_registration表: | |||||
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| lease_registration_id | int | 11 | 是 | 是 | 租賃登記ID |
| order_number | varchar | 64 | 否 | 否 | 訂單號 |
| title | varchar | 64 | 否 | 否 | 標題 |
| layout_of_a_house_or_an_apartment | varchar | 64 | 否 | 否 | 房型 |
| region | varchar | 64 | 否 | 否 | 地區 |
| rent | varchar | 64 | 否 | 否 | 租金 |
| landlord_number | int | 11 | 否 | 否 | 房東編號 |
| user_name | int | 11 | 否 | 否 | 用戶名 |
| contact_number | varchar | 64 | 否 | 否 | 聯系電話 |
| examine_state | varchar | 16 | 是 | 否 | 審核狀態 |
| examine_reply | varchar | 16 | 否 | 否 | 審核回復 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
| lease_contract表: | |||||
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| lease_contract_id | int | 11 | 是 | 是 | 租賃合同ID |
| order_number | varchar | 64 | 否 | 否 | 訂單號 |
| title | varchar | 64 | 否 | 否 | 標題 |
| layout_of_a_house_or_an_apartment | varchar | 64 | 否 | 否 | 房型 |
| region | varchar | 64 | 否 | 否 | 地區 |
| rent | varchar | 64 | 否 | 否 | 租金 |
| user_name | int | 11 | 否 | 否 | 用戶名 |
| landlord_number | int | 11 | 否 | 否 | 房東編號 |
| address | varchar | 64 | 否 | 否 | 地址 |
| months_of_lease | int | 11 | 否 | 否 | 租賃月數 |
| deposit | int | 11 | 否 | 否 | 押金 |
| start_time | date | 0 | 否 | 否 | 開始時間 |
| expiration_time | date | 0 | 否 | 否 | 到期時間 |
| contract | varchar | 255 | 否 | 否 | 合同 |
| lease_notice | text | 0 | 否 | 否 | 租賃須知 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
| landlord_or_landlady表: | |||||
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| landlord_or_landlady_id | int | 11 | 是 | 是 | 房東ID |
| landlord_number | varchar | 64 | 是 | 否 | 房東編號 |
| landlord_name | varchar | 64 | 否 | 否 | 房東姓名 |
| examine_state | varchar | 16 | 是 | 否 | 審核狀態 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| user_id | int | 11 | 是 | 否 | 用戶ID |
| create_time | datetime | 0 | 是 | 否 | 創建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
| house_information表: | |||||
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| house_information_id | int | 11 | 是 | 是 | 房屋信息ID |
| title | varchar | 64 | 否 | 否 | 標題 |
| layout_of_a_house_or_an_apartment | varchar | 64 | 否 | 否 | 房型 |
| region | varchar | 64 | 否 | 否 | 地區 |
| photo | varchar | 255 | 否 | 否 | 照片 |
| address | varchar | 64 | 否 | 否 | 地址 |
| rent | int | 11 | 否 | 否 | 租金 |
| landlord_number | int | 11 | 否 | 否 | 房東編號 |
| amenities | text | 0 | 否 | 否 | 便利設施 |
| traffic_guide | text | 0 | 否 | 否 | 交通指南 |
| house_display | longtext | 0 | 否 | 否 | 房屋展示 |
| hits | int | 11 | 是 | 否 | 點擊數 |
| praise_len | int | 11 | 是 | 否 | 點贊數 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
該系統是通過jdbc和MySQL達成連接的,新建一個jdbc.properties文件來填寫與數據庫連接所需要的驅動和參數。
jdbc.driverClass=com.MySQL.jdbc.Driver
jdbc.url=jdbc:MySQL://localhost:3306/tsi
jdbc.username=root
jdbc.password=123
第一個參數代表MySQL數據庫的驅動,第二個參數代表要連接的數據庫,第三個和第四個參數代表數據庫連接名和密碼。
后臺與數據庫訪問主要是通過HQL語句來進行查詢的,查詢語句中的表名是表格的實體類名,在這種查詢語句中*是不允許使用的,除非適合聚合函數一起使用才可以。
用戶在填寫數據的時候必須與注冊頁面上的驗證相匹配否則會注冊失敗,注冊頁面的表單驗證是通過JavaScript進行驗證的,用戶名的長度必須在6到18之間,郵箱必須帶有@符號,密碼和密碼確認必須相同,你輸入的密碼,系統會根據你輸入密碼的強度給出指定的值,電話號碼和身份證號碼必須要求輸入格式與生活相符合,當你前臺驗證通過的時候你點擊注冊,表單會將你輸入的值通過name值傳遞給后臺并保存到數據庫中。
用戶注冊流程圖如下圖所示。
?
圖5-1用戶注冊流程圖
用戶注冊界面如下圖所示。
?
圖5-2用戶注冊界面
用戶注冊的關鍵代碼如下。
/**
?????* 注冊
?????* @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);
}
主要由兩部分組成,登錄前的登錄界面以及登錄后的用戶功能界面。登錄界面,要求用戶輸入用戶名和密碼,當用戶名和密碼其中一個輸入為空時,給出提示“用戶名,密碼不能為空”。獲取用戶名和密碼后到數據庫中查找,如果用戶名存在,以及對應的密碼正確,則登錄成功,否則登錄失敗。登錄失敗后給出提示,并把焦點停在文本框中。登錄成功后將該次會話的全局變量username設置為用戶名。登錄成功后進入會員的功能模塊,主要有會員基本信息修改,已經發布房源信息管理,發布信息,和退出功能。退出功能是清除全局變量username的值,并跳回到首頁。
登錄流程圖如下圖所示。
?
圖5-4登錄流程圖
用戶登錄界面如下圖所示。
?
圖5-5用戶登錄界面
用戶登錄的關鍵代碼如下。
/**
?????* 登錄
?????* @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;
}
用戶登錄/注冊成功之后可以修改自己的基本信息。修改頁面的表單中每一個input的name值都要與實體類中的參數相匹配,在用戶點擊修改頁面的時候,如果改后用戶名與數據庫里面重復了,頁面會提示該用戶名已經存在了,否則通過Id來查詢用戶,并將用戶的信息修改為表單提交的數據。
如果租賃合同數據的信息需要修改,管理員可以通過查詢租賃合同數據的基本信息來查詢租賃合同數據,查詢租賃合同數據是通過ajax技術來進行查詢的,需要傳遞租賃合同數據的標題、編號等參數然后在返回到該頁面中,可以選中要修改或刪除的那條信息,如果選中了超過一條數據,頁面會挑一個窗口提醒只能選擇一條數,如果沒有選中數據會挑一個窗口題型必須選擇一條數據。當選擇確認修改的時候,后臺會根據傳過來的id到數據庫查詢,并將結果返回到修改頁面中,可以在修改頁面中修改剛剛選中的信息當點擊確認的時候from表單會將修改的數據提交到后臺并保存到數據庫中,就是說如果提交的數據數據庫中存在就修改,否則就保存。
租賃合同數據展示界面如下圖所示。
?
圖5-6租賃合同數據展示界面
用戶房產信息后后臺會自動生成房產信息列表。從session中取出該用戶信息,前臺發起請求,將對應的用戶信息、baozhangpId參數信息從前臺傳遞BaozhangController類里,匹配到create()方法,create()方法調用BaozhangServiceImpl類的createBaozhang()方法獲取數據,調用本類的getCartBaozhangItem()方法得到房產信息列表。
房產信息界面如下所示。
?
圖5-1房產信息界面
房屋信息功能整體流程:用戶瀏覽房屋信息時,同時會顯示房屋源的狀態,系統會在其顯示詳細信息的頁面時便會判斷房屋的狀態,若房源狀態為可房屋信息,則會顯示房屋信息的鏈接按鈕。在用戶點擊房屋信息按鈕時,會先通過攔截器判斷用戶是否登錄,若未登錄,會跳轉至登錄頁面,提示用戶先登錄,若為登錄用戶就會跳轉至填寫房屋信息信息的頁面,填寫好房屋信息信息之后,點擊提交按鈕,房屋信息成功之后返回提示信息,告知用戶房屋信息成功。
房屋信息流程圖如下圖所示。
?
圖5-12房屋信息流程圖
房屋信息界面如下圖所示。
?
圖5-15房屋信息界面
此頁面的關鍵是編寫房型信息,包括房型編號,名稱,詳情等。單擊提交按鈕以完成信息的添加。如果未寫入完整的房型信息,例如,如果未寫入房型編號,系統將給出相應的錯誤提示,并且無法成功輸入。數據以概念的形式以onsubmit =“return checkForm()”的形式寫入以進行檢查,checkForm()函數是一種用于寫入數據的不同類型的校對方法,是不是為空也是經過form表單中的οnsubmit=”return checkForm()來檢查。
管理員點擊左側菜單“房型信息管理”,頁面跳轉到房型信息管理外觀,調用后臺房型查詢所有房型信息。并將信息密封到數據集合List,綁定到請求對象,然后頁面跳轉到相應的jsp,顯示出房型信息,單擊刪除按鈕完成房型信息的刪除。
房型管理流程圖如下圖所示。
?
圖5-17房型管理流程圖
房型添加界面如下圖所示。
?
圖5-18房型添加界面
房型管理界面如下圖所示。
?
圖5-19房型管理界面
房型發布的關鍵代碼如下。
@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);
????}
對任何系統而言,測試都是必不可少的環節,測試可以發現系統存在的很多問題,所有的軟件上線之前,都應該進行充足的測試之后才能保證上線后不會Bug頻發,或者是功能不滿足需求等問題的發生。下面分別從單元測試,功能測試和用例測試來對系統進行測試以保證系統的穩定性和可靠性。
下表是系統登錄功能測試用例,檢測了用戶名和密碼的不同的輸入情況,觀察系統的響應情況。得出該功能達到了設計目標。
表6-1 系統登錄功能測試用例
| 功能描述 | 用于系統登錄 | |
| 測試目的 | 檢測登錄時的合法性檢查 | |
| 測試數據以及操作 | 預期結果 | 實際結果 |
| 輸入的用戶名和密碼帶有非法字符 | 提示用戶名或者密碼錯誤 | 與預期結果一致 |
| 輸入的用戶名或者密碼為空 | 提示用戶名或者密碼錯誤 | 與預期結果一致 |
| 輸入的用戶名和密碼不存在 | 提示用戶名或者密碼錯誤 | 與預期結果一致 |
| 輸入正確的用戶名和密碼 | 登錄成功 | 與預期結果一致 |
下表是注冊功能測試用例,檢測了各種數據的輸入情況,觀察系統的響應情況。得出該功能達到了設計目標。
表6-2 注冊功能測試用例
| 功能描述 | 用于用戶注冊 | |
| 測試目的 | 檢測用戶注冊時的合法性檢查 | |
| 測試數據以及操作 | 預期結果 | 實際結果 |
| 輸入的手機號不合法 | 提示請輸入正確的手機號碼 | 與預期結果一致 |
| 輸入的字段為空 | 提示必填項不能為空 | 與預期結果一致 |
| 輸入的密碼少于6位 | 提示密碼必須為6-12位 | 與預期結果一致 |
| 輸入的密碼大于12位 | 提示密碼必須為6-12位 | 與預期結果一致 |
下表是房型管理功能的測試用例,檢測了房型管理中對房型信息的增加,刪除,修改,查詢操作是否成功運行。觀察系統的響應情況,得出該功能也達到了設計目標,系統運行正確。
前置條件;用戶登錄系統。
表6-3 房型管理的測試用例
| 功能描述 | 用于房型管理 | |
| 測試目的 | 檢測房型管理時的各種操作的運行情況 | |
| 測試數據以及操作 | 預期結果 | 實際結果 |
| 點擊添加房型,必填項合法輸入,點擊保存 | 提示添加成功 | 與預期結果一致 |
| 點擊添加房型,必填項輸入不合法,點擊保存 | 提示必填項不能為空 | 與預期結果一致 |
| 點擊修改房型,必填項修改為空,點擊保存 | 提示必填項不能為空 | 與預期結果一致 |
| 點擊修改房型,必填項輸入不合法,點擊保存 | 提示必填項不能為空 | 與預期結果一致 |
| 點擊刪除房型,選擇房型刪除 | 提示刪除成功 | 與預期結果一致 |
| 點擊搜索房型,輸入存在的房型名 | 查找出房型 | 與預期結果一致 |
| 點擊搜索房型,輸入不存在的房型名 | 不顯示房源 | 與預期結果一致 |
下表是租賃管理功能的測試用例,檢測了租賃管理中租賃單的操作是否成功運行。觀察系統的響應情況,得出該功能也達到了設計目標,系統運行正確。
前置條件;用戶登錄系統。
表6-5 租賃管理的測試用例
| 功能描述 | 用于租賃管理 | |
| 測試目的 | 檢測租賃管理時各種操作的情況 | |
| 測試數據以及操作 | 預期結果 | 實際結果 |
| 未選擇房源,點擊提交 | 提示請選擇房源 | 與預期結果一致 |
| 未輸入時間,點擊提交 | 提示請輸入時間 | 與預期結果一致 |
使用阿里云PTS(Performance Testing Service)性能測試服務對線上系統進行壓力測試。線上服務器環境為:1核心CPU,1G內存,1Mbps公網帶寬,Centos7.0操作系統。
壓測過程中使用了2臺并發機器,每臺機器20個用戶并發,對系統主頁,登錄,數據查詢和數據維護等模塊進行并發訪問,測試結果是有40個用戶并發時,數據管理相關頁面的響應時間甚至達到了7s,通過查看服務器出網流量發現已經達到1381kb/s,可以看出服務器的帶寬已經達到峰值,如果系統使用5Mbps的帶寬,系統的響應時間和TPS將會大大增加。在整個測試的過程中,CPU的使用率占用僅8%,也提現出帶寬瓶頸對系統的影響非常嚴重。
隨著計算機互聯網技術的迅猛發展,各行各業都已經實現采用計算機相關技術對日益放大的數據進行管理。該課題是房屋出租管理系統為核心展開的,主要是為了實現租房信息化管理和用戶在線預訂房源的需求。
房屋出租管理系統的開發是以Java編程語言作為基礎,在Eclipse平臺上完成編碼工作,系統整體為B/S架構,數據庫系統使用MySQL。文中詳細分析了房屋出租管理系統的研究背景、研究目的和意義、開發工具和相關技術以及系統需求、系統詳細設計和系統測試等等一系列內容。系統實現了房屋出租管理系統所需的一些基本功能,并通過測試對這些實現的功能進行了完善,進而提高了系統整體的實用性。整個系統的開發過程中大量使用了Java相關的知識以及前端開發使用的html和javascript等,同時涉及到了很多開源框架和組件,例如后臺系統中運用的MVC架構、Freemarker模板引擎等,前端運用的UI框架等。
系統投入運行時,各功能均運行正常。系統的每個界面的操作符合常規邏輯,對使用者來說操作簡單,界面友好。整個系統的各個功能設計合理,體現了人性化。
但是由于自己在系統開發過程中對一些用到的相關知識和技術掌握不夠牢固,再加上自身開發經驗欠缺,因此系統在有些方面的功能還不夠完善,考慮的不夠全面,因此整個系統還有待日后逐步完善。
參考文獻
[1]李艷杰.基于JAVA與MySQL數據庫的移動端題庫練習系統的設計與實現[J].黑龍江科學,2022,13(02):56-57.
[2]郭楊, 人口管理 出租房屋管理創新. 操太盛 主編,北京昌平年鑒,新華出版社,2021,330,年鑒.
[3]張杰, 人口管理 出租房屋管理整治. 操太盛 主編,北京昌平年鑒,新華出版社,2021,330,年鑒.
[4]姜海.亭林派出所的出租屋管理“方程式”[J].派出所工作,2022(01):43-44.
[5]馮凱.“MySQL數據庫”課程教學中常見問題探析[J].無線互聯科技,2021,18(24):158-159.
[6]陳潔.“MySQL數據庫安全”課程教學方法優化分析[J].無線互聯科技,2021,18(24):160-161.
[7]郭璨,方文暉.高校房屋出租出借分類管理探析[J].高校后勤研究,2021(12):46-50.
[8]舒雯,萬曉霞. 村委會當“中介” 破解出租屋管理難題[N]. 南昌日報,2021-12-19(001).DOI:10.28591/n.cnki.nncrb.2021.003575.
[9]不公告發明人. 一種基于區塊鏈的房屋租賃系統及方法[P]. 江蘇省:CN112365031B,2021-11-16.
[10]吳志明. 房屋出租托管 小心變脫管[N]. 泉州晚報,2021-11-05(005).
[11]He Xinbin,Bai Yongbin,Yue Lisen,Wang Haixiao,Liu Yi. Design and Implementation of Information System Based on Java Technology Platform[J]. Journal of Physics: Conference Series,2021,2033(1).
[12]安國祥,張佳.后疫情時代如何做好水利事業單位房屋出租管理[J].當代會計,2020(24):104-105.
[13]熊雨治.企業出租自有房屋全流程管理研究[J].廣西質量監督導報,2020(12):177-178.
[14]楊昭. 個人出租房屋稅收征管問題研究[D].江西財經大學,2020.
[15]Lei Yu,Cheng Li,Lei Wei,Hu WenYa. Marine biological monitoring and managing system based on Java technology[J]. MIPPR 2019: REMOTE SENSING IMAGE PROCESSING, GEOGRAPHIC INFORMATION SYSTEMS, AND OTHER APPLICATIONS,2020,11432.
[16]Xuchun Chen. Design and Implementation of University Art Education Management System Based on JAVA Technology[J]. International Journal of Emerging Technologies in Learning (iJET),2018,13(10).
致謝
本次設計歷時3個月。在這個畢業設計中,它離不開指導教師的指導,使事情基本順利。指導老師無論是在畢業設計歷經中,還是在論文做完中都給了了我特別大的助益。另1個方面,教師認真負責的工作姿態,謹慎的教學精神厚重的理論水準都使我獲益匪淺。他勤懇謹慎的教學育人學習姿態也給我留下了特別特別深的感覺。我從老師那里學到了很多東西。在理論和實踐中,我的技能得到了特別大的提高。在此,特向教師表示由衷的感激。
經過對該畢業設計的全部研究和開發,我的系統研發經歷了從需求分析到實現詳細功能,再到最終測試和維護的特殊進展。讓我對系統研發有了更深層次的認識。如今我的動手本領單獨處理疑惑的本領也獲取到了特別大的演練學習增多,這是這次畢業設計最好的收獲。
最后,在整個系統開發過程中,我周圍的同學和朋友給了我很多意見,所以我很快就確認了系統的商業思想。在次,我由衷的向他們表示感激。
免費領取本源代碼,請關注點贊+私信
總結
以上是生活随笔為你收集整理的ssm基于WEB的房屋出租管理系统的设计与实现161620的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: @postconstruct注解方法没有
- 下一篇: webgl获取鼠标形状_三模无线搭配对称