基于 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 配置时注明时间分明且避免遗漏,还有对重要代码或修改多次的代码养成写注释的习惯,对以后调试的时候有所帮助。
  • 遇到的问题及建议:前面一部分的代码只实现了一个表,到后面完善全部功能时都要重头开始,这样效率不高,而且代码容易写错,调试很长时间才找出细节上的小错误,因此一开始就要较全面的分析系统功能,一步步完整地实现各个模块,这样才有利于最后的其他功能的拓展和实现页面的美观性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/96162.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/96162.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/96162.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第六天~提取Arxml中CAN采样点信息Creat_ECU--Standard

⏱️ ARXML探秘:解码CAN采样点的精准艺术 在汽车电子的交响乐中,CAN采样点(Sample Point) 如同指挥家挥棒的关键时刻——它决定了何时"聆听"总线上的信号。这个看似微小的百分比数值,却是保障整车通信可靠性的核心密码。本文将带您深入ARXML中的采样点配置世界…

Windows Git安装配置

进入git官网Git - Downloading Package 点击下载&#xff08;可复制链接到迅雷&#xff09; 双击运行exe安装包 选择安装目录 下一步 选择 Git 默认编辑器&#xff0c;下一步设置初始化新项目(仓库)的主干名字 让Git决定&#xff08;Let Git decide&#xff09;使用默认的…

面试经验分享-某电影厂

java会吗&#xff1f;不会。。。。。hdfs读文件写文件的流程 数据写入 1-客户端向NameNode发起请求 2-NameNode审核权限和剩余空间&#xff0c;满足条件即允许写入&#xff0c;并告知客户端写入的DataNode地址 3-客户端向指定的DataNode发送数据包 4-被写入数据的DataNode同时完…

数据清理后续

前篇&#xff1a;Python 项目里的数据清理工作&#xff08;数据清洗步骤应用&#xff09; 一&#xff0c;先接上文添加两种数据填充的方法 1、线性回归填充 def lr_train_fill(train_data,train_label):train_data_all pd.concat([train_data, train_label], axis1)train_d…

nuc设置脚本开机自启动

在终端执行gnome-session-properties这个是带有图型化页面的设置开机自启动的软件没有这个软件的可以直接下载sudo apt update sudo apt install gnome-startup-applications一般都有&#xff0c;ubunutu自带的右边有添加&#xff0c;名称和注释随便写&#xff0c;只需要把命令…

JavaScript 性能优化实战大纲

JavaScript 性能优化实战大纲 核心优化方向 减少主线程阻塞 避免长任务&#xff08;Long Tasks&#xff09;拆分计算密集型操作使用 Web Workers 处理后台任务优先使用 requestIdleCallback 或 requestAnimationFrame 内存管理 避免内存泄漏&#xff08;如未清理的定时器、闭包…

openssl生成自签名证书的方法

因为开发中查询过各种命令&#xff0c;失败过很多次&#xff0c;所以记录一下正确的命令&#xff1a; 生成私钥-不要密码 openssl genpkey -algorithm RSA -out ssl/key.pem 生成自签名证书 openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -…

电影购票+票房预测系统 - 后端项目介绍(附源码)

电影购票预测系统 - 后端项目介绍 项目概述 本项目是一个基于Spring BootVue的前后端分离电影购票系统&#xff0c;包含完整的前台用户功能和后台管理功能&#xff0c;并提供数据可视化和电影预测功能。本文档将详细介绍后端项目的架构、功能模块、技术栈和使用方法。 项目源…

专利服务系统平台|个人专利服务系统|基于java和小程序的专利服务系统设计与实现(源码+数据库+文档)

专利服务系统平台 目录 基于java和小程序的专利服务系统设计与实现 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道师&#x…

【HTML】3D动态凯旋门

目录 版本1.0&#xff1a;简易版本 版本2.0&#xff1a;建筑渲染 版本3.0&#xff1a;优化建筑群 版本4.0&#xff1a;增加公路和车流 版本5.0&#xff1a;去除压在公路上的建筑 版本6.0&#xff1a;优化车流群 版本7.0&#xff1a;添加烟花效果 版本8.0&#xff1a;添…

(论文阅读)FedViT:边缘视觉转换器的联邦持续学习

FedViT&#xff1a;边缘视觉转换器的联邦持续学习 FedViT: Federated continual learning of vision transformer at edge (北京理工大学-2023年发表于《Future Generation Computer Systems》中科院二区) highlight&#xff1a; •提出一种轻量级的客户端联合持续学习方法。 •…

微算法科技(NASDAQ: MLGO)研究利用PBFT中的动态视图变换机制,实现区块链系统高效运转

随着区块链技术的飞速发展&#xff0c;其去中心化、透明性、不可篡改等特性使得它在金融、供应链管理、物联网等多个领域得到了广泛应用。然而&#xff0c;区块链系统在高并发场景下的性能瓶颈问题一直是制约其大规模应用的关键因素。传统的共识算法如PoW&#xff08;工作量证明…

从数据汇总到高级分析,SQL 查询进阶实战(下篇)—— 分组、子查询与窗口函数全攻略

引言&#xff1a;从 “提取数据” 到 “洞察价值”&#xff0c;SQL 进阶之路 在掌握了基础查询与多表关联后&#xff0c;你是否曾遇到这样的挑战&#xff1a;如何按部门统计平均薪资&#xff1f;怎样找出每个岗位薪资最高的员工&#xff1f;或者如何计算销售额的月度环比增长率…

Spring 和 Lettuce 源码分析 Redis 节点状态检查与失败重连的工作原理

关键步骤&#xff1a;Spring Boot 启动时创建 LettuceConnectionFactory根据配置类型&#xff08;集群/哨兵/单机&#xff09;初始化客户端对于集群模式&#xff1a;创建 RedisClusterClient调用 setOptions(getClusterClientOptions(configuration)) 应用配置2. 节点状态检查机…

从ChatGPT到智能助手:Agent智能体如何颠覆AI应用

从ChatGPT到智能助手&#xff1a;Agent智能体如何颠覆AI应用 更多大模型知识分享&#xff0c;尽在>>>GitHub<<< Agent 智能体是什么 简单来说&#xff0c;Agent 智能体是一种能够感知环境&#xff0c;并根据自身目标自主采取行动的智能实体。它就像是一个拥…

Spring Boot应用实现图片资源服务

在这篇文章中&#xff0c;我们将介绍如何使用Spring Boot创建一个REST API来提供服务器上的静态图片资源。该API包括路径安全检查、文件存在性验证以及缓存控制等功能&#xff0c;并且代码包含详细的注释以帮助理解。Maven依赖 首先&#xff0c;在您的pom.xml文件中添加以下依赖…

Word 中 MathType 公式编号问题与解决

注&#xff1a;本文为 “Word 中 MathType 公式编号” 相关合辑。 图片清晰度受引文原图所限。 略作重排&#xff0c;未整理去重。 如有内容异常&#xff0c;请看原文。 【Word】解决 MathType 已插入公式按新章节开始编号的问题 Allan326 于 2020-03-25 15:30:08 发布 问题…

19. 大数据-产品概念

文章目录前言一、数据库1. 简介2. 使用场景3. 数据库类型4. 数据类型二、数据仓库1. 简介2. 使用场景3. 数据仓库架构三、数据平台1. 简介2. 使用场景3. 数据仓库架构四、数据中台1. 简介2. 使用场景3. 数据中台架构五、数据湖1. 简介2. 使用场景3. 数据湖架构六、总结1. 区别2…

python学习DAY46打卡

DAY 46 通道注意力(SE注意力) 内容&#xff1a; 不同CNN层的特征图&#xff1a;不同通道的特征图什么是注意力&#xff1a;注意力家族&#xff0c;类似于动物园&#xff0c;都是不同的模块&#xff0c;好不好试了才知道。通道注意力&#xff1a;模型的定义和插入的位置通道注意…

Ansible 中的文件包含与导入机制

Ansible 中的文件包含与导入机制本文介绍了在 Ansible 中如何通过模块化方式管理复杂的 Playbook&#xff0c;包括使用 include 和 import 系列语句来拆分和重用代码。概述 当 Playbook 变得冗长或复杂时&#xff0c;可以将其拆分为多个小文件以提高可管理性。Ansible 提供了模…