基于 MVC 的房屋租賃系統的設計與實現
摘 要:房屋租賃管理系統與網絡相結合,給用戶提供更加周到和人性化的服務。網站模式為 MVC 模式,基于 MySQL 數據庫,采用 JSP,Session 繪畫跟蹤、JavaScript 等技術,實現了普通用戶可以瀏覽、查看房屋信息,可以注冊成為網站用戶、登錄網站,然后查看個人信息,還可以查看該系統下的房子出租情況等,管理員可以對普通用戶、房屋信息進行管理等功能。
1.目的與意義
隨著計算機科學的發展,數據庫技術在 Internet 中的應用越來越廣泛為廣大網絡用戶提供了更加周到和人性化的服務。個性化已逐漸成為當今 Web 應用的朝流。簡單的租賃服務已經不能滿足人們的需求,利用先進的管理手段,提高租賃管理的效率,是當今社會所面臨的一個重要課題,為此我想設計一個房屋租賃管理系統實現用戶和房子的增刪查改,使得房子租賃更加有效率,也使租客租用房子更加便利。
2.理論基礎及技術路線
2.1 、MVC
MVC 是 Model-View-Controller 的縮寫,它能很好地使數據層與表示層進行分離,應用程序的輸入、輸出和處理流程。其模式分為三部分,Model(模型)是用于處理應用程序數據邏輯的部分,負責在數據庫中存取數據;View(視圖)是處理數據顯示部分,依據模型數據而創建;Controller(控制器)是處理用戶交互的部分,負責從視圖讀取數據,控制用戶輸入并發送數據。
以普通用戶房東的注冊為例:
2.2、 JSP
- JSP 是基于 Java Servlet 以及整個 Java 體系的 Web 開發技術,具有動態頁面與靜態頁面分離,能夠脫離硬件平臺的束搏,以及編譯后運行的優點,可以建立安全、跨平臺的先進動態網站。
2.3 、Servlet
- Servlet 是一種獨立于操作系統平臺和網絡傳輸協議的服務器端的 Java 應用程序,具有獨立于平臺和協議的特性,主要功能在于交互式地瀏覽和生成數據,生成動態 Web 內容。
- Servlet 運行在包含 Web 容器的 Web 服務器上,Web 容器給客戶端的請求傳給 Servlet,并將 Servlet 的響應返回給客戶端。
2.4 、其他技術
運用 Session 會話跟蹤技術,通過在服務器端記錄信息確定用戶的身份,用來記錄以及跟蹤用戶在登錄網頁后的整個會話。同時通過配置文件,利用 Servlet 過濾器,使用他們來它們攔截請求和響應,比如利用過濾器判斷用戶是否為管理員才決定他們能否進入后臺管理界面。例如 admin 網頁用到“歡迎來到管理員頁面”的標簽語句,也可以采用自定義標簽技術。
3、模塊總體設計
3.1 、系統主體模塊
“房屋租賃管理系統系統”的主要功能模塊分別前臺與后臺,前端有:首頁、注冊注銷、房子介紹、子頁面(房東、租客、管理員);后臺有:用戶管理、房子管理等功能。系統功能如圖所示:
3.2 、功能介紹
- 首頁:顯示網站欄目與網站介紹,并根據當前用戶權限對其提供子頁面的鏈接,進入個人主頁面或后臺管理頁面,統一提供注銷功能。
- 房子介紹:根據客戶需求,提供個別房子簡介,一來吸引眼球,再者可以幫助用戶更快地了解到房子信息。
- 用戶管理:前端提供用戶進行注冊信息,管理員在該系統后臺進行查看用戶詳細信息并修改、刪除或增加等操作管理。
- 房子管理:普通用戶房東有房子需招租,通過管理員添加房子信息,招租,出租完成后修改房子出租狀態,更新房子信息。
3.3 、數據庫表定義
房東信息表 | |||
列名 | 數據類型 | 可否為空 | 說明 |
fId | Varchar(3) | not null | 房東編號 |
fName | Varchar(10) | not null | 房東姓名 |
fPassword | Varchar(10) | not nul | 房東密碼 |
fSuper | integer | null | 房東權限 |
fPn | Varchar(20) | not nul | 房東電話 |
租客信息表 | |||
列名 | 數據類型 | 可否為空 | 說明 |
cId | Varchar(3) | not null | 租客編號 |
cName | Varchar(10) | not null | 租客姓名 |
cPassword | Varchar(10) | not nul | 租客密碼 |
cSuper | Integer | null | 租客權限 |
cPn | Varchar(20) | not nul | 租客電話 |
房子信息表 | |||
列名 | 數據類型 | 可否為空 | 說明 |
hId | Varchar(10) | not null | 房子編號 |
fId | Varchar(3) | not null | 房東編號 |
fName | Varchar(10) | not null | 房東姓名 |
dz | Varchar(50) | not null | 房子地址 |
Pri | Varchar(5) | not null | 租金 |
hSta | Integer | not null | 房子出租狀態 |
fPn | Varchar(20) | not null | 房東電話 |
cId | Varchar(3) | null | 租客編號 |
3.4 、系統 E-R 圖
- 主題: 房屋租賃管理系統
- 用況:普通用戶(房東、租客)注冊、登錄,查看房子信息,修改個人信息等功能;管理員對普通用戶和房子進行增刪查改操作。
4、系統實現
4.1 、開發環境工程目錄截圖
- 開發工具:Eclipse
- 數據庫:MySQL
- 調式環境:火狐瀏覽器、IE 瀏覽器
- 適用環境:支持任何瀏覽器。
- 說明:dao 包:業務邏輯層,實現對數據庫操作;dto 包:get 和 set 方法,實現對數據存取操作;filter 包:過濾器,實現通過用戶信息進行過濾;servlet 包:存儲 servlet,擔當客戶請求與服務器響應的中間層;tag 包:標簽的事例;test 包:在控制臺運行,檢測業務邏輯運行的正確性;util 工具包:存儲連接數據庫、自定義標簽等工具類;另外還有 XML 與 xsd 配置文件。
- 開發文件夾截圖:
- 其他文件:admin:后臺管理員的登錄,增刪查改功能的操作;fowner:普通用戶的查看房子信息和個人信息;home、homepage:首頁、注冊頁面以及各樣式的設計;index.html 為登錄頁面,register.jsp 為房東注冊頁面,reg1.jsp 為租客注冊頁面;如下圖:
- 主要界面介紹
1.登錄:根據用戶名和密碼進行登錄,當用戶輸入完畢點擊登錄后,LoginServlet 會將用戶名與密碼傳入 DAO 驗證,如果返回為 0 則跳轉到 error.html 并提示用戶登錄失敗,否則將用戶的權限存入 session 中,然后跳轉到首頁,如果用戶直接點擊管理員頁面,則提示你的權限不夠,請用管理員賬號登陸訪問頁面!
核心代碼(登錄功能:LoginServlet.java)
//1.獲取客戶端提交的參數
String username = req.getParameter("username");
String password = req.getParameter("password");
System.out.println("LoginServlet:"+username+" "+password);
//2.處理一下參數,調用業務邏輯
FownerDAO fn = new FownerDAO();
CustomerDAO cu = new CustomerDAO();
int fSuper = fn.Login(username,password);
HttpSession f = req.getSession();
setAttribute("fSuper", fSuper);
setAttribute("fName", username);
//3.根據返回的結果處理
if(fSuper!=0) {resp.sendRedirect(req.getContextPath()+"/homepage/shouye.html");
} else {int cSuper = cu.Login(username,password);HttpSession c = req.getSession();setAttribute("cSuper", cSuper);setAttribute("cName", username);if(cSuper!=0) {resp.sendRedirect(req.getContextPath()+"/homepage/shouye.html");} else {resp.sendRedirect(req.getContextPath()+"/error.html");}
2.首頁:登錄成功后進入首頁,可預覽當前個別房子信息,根據不同用戶進入不同子頁面即自己的主頁面。
普通用戶頁面:注冊,查看房子信息,查看或修改個人信息
管理員頁面:對房東,租客,房子信息的增刪查改操作。
其一的核心代碼(UpdateHouseServlet.java):
//1
String s = req.getParameter("s");
boolean flag = false;
HouseDAO hd = new HouseDAO();
if(s==null) { //修改String hid = req.getParameter("hid");String fid = req.getParameter("fid");String fname = new String(req.getParameter("fname").getBytes("ISO-8859-1"),"GBK");// System.out.println(fname);String cid =req.getParameter("cid");String dz = new String(req.getParameter("dz").getBytes("ISO-8859-1"),"GBK");String pri = req.getParameter("pri");int hsta = Integer.parseInt(req.getParameter("hsta"));String fpn = req.getParameter("fpn");House h = new House();sethId(hid);setfId(fid);setfName(fname);setcId(cid);setDz(dz);setPri(pri);sethSta(hsta);setfPn(fpn);hd = new HouseDAO();flag= hd.updateHouse(h);
} else { //刪除if(s.equals("delall")) { //批量刪除String[] allhid = req.getParameterValues("shaosen");System.out.println(allhid);String[] temp = allhid[0].split(",");for(String a:temp) {System.out.println(a);hd.deleteHouse(a);}flag = true;} else { //刪除一條記錄String hid = req.getParameter("hid");flag = hd.deleteHouse(hid);}
}
//2
Vector<House> v = hd.findAllHouse();
HttpSession session = req.getSession();
session.setAttribute("allhouse", v);
//3
if(flag)resp.sendRedirect(req.getContextPath()+"/admin/allhouse.jsp");
elseresp.sendRedirect(req.getContextPath()+"/error.html");
5、 總結
- 通過一學期的 javaweb 課程學習,知道 Java 對數據庫的鏈接,操作等,進一步了解 Java,MySQL 和 JDBC 的關系,銘記 JDBC 常做的三件事:連接數據庫;發送 SQL 語句,處理執行后的結果。
- 在本課程中懂得了養成良好的編程習慣,類如針對不同的數據庫中的表以及功能創建不同的類放入不同的包中,“表名 +DAO”的類放入 cn.edu.lingnan.dao 包下面,Web 配置時注明時間分明且避免遺漏,還有對重要代碼或修改多次的代碼養成寫注釋的習慣,對以后調試的時候有所幫助。
- 遇到的問題及建議:前面一部分的代碼只實現了一個表,到后面完善全部功能時都要重頭開始,這樣效率不高,而且代碼容易寫錯,調試很長時間才找出細節上的小錯誤,因此一開始就要較全面的分析系統功能,一步步完整地實現各個模塊,這樣才有利于最后的其他功能的拓展和實現頁面的美觀性。