基于SpringBoot的房屋租赁管理系统的设计与实现
1 绪论
1.1 课题来源
随着社会的不断发展以及大家生活水平的提高,越来越多的年轻人选择在大城市发展。在大城市发展就意味着要在外面有一处安身的地方。在租房的过程中,大家也面临着各种各样的问题,比如需要费时费力去现场看房,价格不透明等等,就对于年轻人们来说,这是一个十分令人头疼的问题。而对于即将要毕业,在外工作的我来说,也面临着租房的问题。所以,想尽自己所学,写一个房屋租赁管理系统。实现租房自由化。
1.2 开发背景和目的
随着科技的不断发展与进步,人们的办公工具由之前的纸质笔记本都已经改变成了计算机,数字化时代,移动设备打破了地域的限制和提供了大量的办公工具,它的使用能大幅度解决我们很多工作上的难题,大大提高我们的办公效率和管理效率。例如:每个高校都有着自己的官网以进行校园的管理。只有有效的管理方法才能满足社会的发展需求,人们的生活需求[1]。面对房源信息层出不穷的冲击,利用现有的技术实现房屋租赁管理系统来提高房屋租赁管理的效率不仅是大势所趋,更是一个有效的方法。
本系统致力把繁琐复杂的房屋租赁变得简单快捷,解决房屋租赁中遇到的各种问题,解决传统方式处理房屋租赁效率不高,浪费人力物力,且人工的因素导致的信息丢失不可靠问题,为房屋租赁提供简单可靠的服务。
1.3 本课题的研究方法及设计思路
在实现此房屋租赁管理系统之前,使用问卷调查的方法对身边的人进行租房等一系列问题的调查。通过调查和分析得知,大多数人觉得线上租房还是不可靠且麻烦,并且就算是已经占据人们生活的安居客软件并没有完全的实现先线上租房,也要在线下进行签约支付。所以,利用现学的技术开发出一款适合年轻人租房的软件是必须趋势。
在实现此房屋租赁管理系统,设计了三层不同的权限的使用者,由高到低分别是管理员、房东(中介),用户。房屋租赁管理系统设计了以下几个模块,分别是房屋管理模块,订单模块,合同管理模块,收支记录模块,新闻公告模块,用户管理模块,角色管理模块这几大模块。不同权限对应着不同的操作,在此系统中,完整的实现租房的整个流程。具体研究内容如下:
第一章是绪论,这里首先介绍了房屋租赁管理系统确定这个课题的来源、开发的背景、研究的目的、国内外研究现状及本课题的研究方法。
第二章是可行性分析,从经济、技术、运行、操作四方面进行了相应的描述。
第三章是系统的总体设计,从系统的非功能性和功能性需求两方面入手,紧接着介绍了系统数据流图,系统数据流程图、系统功能流程图等内容。
第四章是系统的数据库设计,从概念设计、逻辑设计、以及结构设计三个角度对本系统数据库进行了详细的设计。
第五章是系统的设计与实现,先概述了下系统构建所需的硬件条件,再详细的介绍了系统各个模块的功能的设计与实现,从用户接口及方法和界面实现两方面展开叙述。
第六章是系统的运行与测试,在完成编码后,要对系统的功能对应需求进行验证,从系统的测试环境,测试过程两方面进行,用黑盒测试和性能测试方法对系统进行测试。
2系统的总体设计
2.1 系统非功能性需求
为了充分体现出在线租房带来的便捷与高效,此系统的设计需注意如下几点:
(1)高效性。高效性中主要在用户体验感方面,用户在访问的过程中,不会出现卡顿的现象,这适合在设计方面需要整体考虑房屋租赁的整体流程和数据库的访问次数问题,要考虑到数据冗余的设计,达到数据库的高效运行,反应到前台,用户访问起来快速而高效。
(2)安全性。此系统是房屋租赁管理,设计到的用户信息比较重要,例如姓名,身份证号,电话号码,房屋地址等,这些数据都是不能泄露的情况,因此设计系统必须要有安全性和稳定性,那就可以从两个方面来考虑,一是硬件设备的选择,开发系统必须是有很强的容错性。二是系统数据库的设计,利用MySql数据库来进行设计,使系统的体系结构更灵活,此外,考虑到是房屋租赁管理系统,信息量大,数据的管理要考虑到存储和备份。
(3)实用性。开发之初,通过对背景以及国内外现状进行了调查,使用的人群也比较广泛,在设计的过程中要考虑到会不会操作的问题,既要满足准确性和安全性,也要满足操作的简单,界面大方,功能齐全这些方面来进行设计。
2.2 系统功能性需求分析
2.2.1 基本信息描述
在此房屋租赁管理系统中,能够使用本系统的有三类人分别是管理员,房东(中介),用户。管理员具有最高权限,管理着房东(中介)和用户的所有操作,管理员管理着各种信息,例如房源信息,公告信息等。房东(中介)对房屋信息进行着管理,用户在此系统中进行租房,预定房屋,并且可以打电话进行详细咨询,线上合同的签订以及支付租金等功能。此房屋租赁管理系统致力于满足用户的各种需求以及解决房源累积的问题,使得屋尽所用[6]。
2.2.2 房屋租赁流程描述
在此房屋租赁管理系统中,在租房之前,房主(中介)要录入房屋的基本信息,方便用户浏览选房。用户登录系统后,系统显示整租、合租类型的房屋,用户根据自己的需求(房屋朝向,面积,租金,位置选择)选择自己想要的房子,看中哪个房子后,可点击进去,进行房屋信息的详细查看,用户可以与房东(中介)进行电话联系,用户看中房子可进行线上预订,预订成功后,用户进行线上合同签订,并进行支付租金。房东(中介)在后台浏览房屋信息,若是用户预订的房间暂时不能出租,可以提交退租申请,管理员会进行审核后做出处理。房东在后台可以看到房屋信息列表,订单的明细等。在房屋线上租定好后,管理员查询合同,并且查看订单,保证线上租赁的准确无误。至此,一套完整的线上租房流程已经结束。整个租房过程全程线上进行,保证着租房的高效性与安全性[7]。
2.3 系统功能框架图
具有不同的权限的用户就拥有不一样的可操作功能。在此房屋租赁管理系统里面,有三种权限拥有者,分别是管理员,房东(中介),用户。此功能框架图是根据房屋租赁的各大模块来划分的。功能框架图如下所示:
功能描述如下:
(1)管理员权限
①房屋管理模块:对房屋信息进行录入,修改,删除,查询的操作
②订单管理模块:对订单记录进行查询和对退租房屋审核的操作
③合同管理模块:对合同信息进行查看和打印纸质版合同的操作
④租房类型管理模块:对租房类型进行增加,修改,删除,查询的操作
⑤用户管理模块:对房东(中介),用户的基本信息进行管理:录入等;对自己信息的修改,保存,修改登录密码的操作
⑥收支记录模块:对收支记录进行查询操作
⑦新闻公告模块:对新闻公告进行添加,修改,删除,查询的操作
⑧角色管理:进行角色的相对应的操作,例如增加、删除等
⑨权限管理:不同的人具有不同的权限来进行操作
(2)房东(中介)权限
①房屋管理模块:对房屋信息进行录入、删、改、查的操作
②订单管理模块:对订单记录进行查询和对退租房屋申请的操作
③合同管理模块:对合同信息进行查看和打印纸质版合同的操作
④新闻公告模块:对新闻公告进行浏览
⑤收支管理模块:对收支记录进行查看
⑥个人信息模块:对个人信息的管理:基本信息的录入、改等操作
(3)用户权限
①房屋管理模块:对房屋信息进行浏览,预订的操作
②订单管理模块:通过租赁功能生成订单,或者修改(不想租,退租),删除,查询的操作
③合同管理模块:对合同信息进行签订,预览和打印纸质合同
④新闻公告模块:对新闻公告进行浏览
⑤收支管理模块:对收支进行录入,修改,查看的操作
⑥个人信息模块:对个人信息的管理:基本信息的录入、改等操作
2.4 系统数据流图
2.4.1 房屋租赁管理系统顶层数据流图
(1)管理员:具有最高权限,实时更新房源信息。
(2)房东(中介):登录系统,在此系统内房东(中介)对房屋信息信息修改、删除、查询(房屋简介及房屋状态查询),浏览的操作。
(3)用户:进行注册登录,在此系统内进行租房。
2.4.2 房屋租赁管理系统零层数据流图
零层数据流图里面体现出来的是租房的整个流程及数据的变化。零层数据流图如下所示:
2.4.3 房屋租赁管理系统一层数据流图
房东(中介)对房屋信息的更新修改的一层数据流图如下所示:
2.5 系统功能流程图
2.5.1 总体功能流程图
该系统首先是使用者根据自己的权限进入该系统,对于不同的角色,登录后有着不同的使用权限。用户使用时候先进行登录,选择相应的角色,系统通过验证会返回不同的功能菜单,保证了系统数据的安全性。
2.5.2 特有功能
(1)登录管理:程序验证使用者身份信息的入口,只用通过了验证才能对里面的功能进行操作。
(2)查询房屋信息的功能:房屋位置、价格、面积、朝向,这每个要素都可以作为查询点,来查询自己想要的房子。
(3)修改密码:用于用户修改登录密码等。
(4)管理员,房东,用户可以下载合同,保留纸质版合同。
(5)管理员在管理房东和用户基本信息时,可以采用批量上传的方式。
(6)查询房东的信息时,可以通过房东编号等数据项查询信息,且每一数据项都可以作为查询点。
(7)在用户对房子进行预定后,房东因个别原因不想出租时,可以提交退租申请,管理员在接收到退租申请后,可以进行审核。
2.6 数据字典
数据字典是对数据库中数据的描述,在建立之初有一个大概的描述,后期可进行不断的充实和完善。数据字典同时也是数据库设计的重要基准。后期使用中,如果对数据库条目的使用不清楚时,可以通过数据字典查询详细的信息,比如数据项的详细描述,类型等信息。这些可以减少数据之间的不兼容现象。如下表所示为此线上房屋租赁管理系统的数据字典。现从数据项,数据流,数据处理,数据存储分类具体编写:
3 系统的数据库设计
3.1 数据库概念设计
概念设计是整个数据库设计的关键,是对此房屋租赁管理系统的使用者的需求进行分析,概念设计是对第三章系统总体设计中需求分析部分收集到的数据进行归纳整理,确定实体、以及实体的属性和实体之间的联系,形成局部E-R图和全局E-R图[8]。
3.1.2 整体E-R图
3.2 数据库逻辑设计
3.2.1 关系模型的转换
(1)房屋(房屋编号,房东编号,房子描述信息,房子状态,房子描述摘要,缩略图,标题,创建时间,更新时间,创建人,更新人,房间号,轮播图,卧室数,卫生间数,面积,月租金额,日租金额,押金)
(2)城市(城市编号,城市名,创建者,创建时间,修改者,修改时间)
(3)类型(类型编号,类型名,类型种类,创建者,创建时间,修改者,修改时间)
(4)用户(用户编号,用户名,用户密码,状态,创建者,创建时间,修改者,修改时间,电话,电子邮件)
(5)订单(订单编号,用户编号,入住日期,正常退租日期,状态,创建时间,更新时间,创建人,更新人,退租日期,退租价格,押金,日租金,租住天数,总租金,退租状态)
(6)收支记录(收支编号,房屋编号,创建时间,更新时间,创建人,更新人,金额,类型,描述内容)
(7)角色(角色编号,描述,等级,创建时间,变更时间,创建人,更新者)
(8)权限(权限编号,名字,位置,创建时间,变更时间,创建人,更新者)
(9)公告(公告编号,创建时间,变更时间,创建人,更新者,标题,内容,摘要)
3.2.2 关系模型的规范
(1)房屋(房屋编号,房东编号,房子描述信息,房子状态,房子描述摘要,缩略图,标题,创建时间,更新时间,创建人,更新人,房间号,轮播图,卧室数,卫生间数,面积,月租金额,日租金额,押金)
函数依赖集:房屋编号—>房东编号,房东编号—>房屋编号,(房屋编号,房东编号)—>(房子描述摘要,缩略图,标题,创建时间,更新时间,创建人,更新人,房间号,轮播图,卧室数,卫生间数,面积,月租金额,日租金额,押金),(房屋编号,房间号)—>(房子描述摘要,缩略图,标题,创建时间,变更时间,创建人,更新者,房间号,轮播图,卧室数,卫生间数,面积,月租金额,日租金额,押金),至此,它已经没有部分函数依赖和传递函数依赖,达到3NF标准,属于关系模式属于3NF。不用再进行模式分解。
3.3 数据库结构设计
通过对该系统的研究,将系统数据分为一下几个表:category表,city表,finance_record表,notice表,permission表,post表,role表,t_order表,user表等几个表,各表的具体设计结构如下:
(1)房屋类型category表,此表是用来记录房屋类型的必要信息,它的设计结构如表3-1所示:
4 系统的设计与实现
4.1 系统开发环境
此房屋租赁管理系统的架构是B/S架构,下面是详细的介绍了在线房屋租赁管理系统的软硬件环境和开发环境。
操作系统:windows10
CPU:Inteli5
内存:16G
浏览器:Inter*** Explorer、Google Chrome等
集成开发环境:IntelliJ IDEA
Java开发工具集:jdk 1.8
关系型数据库: MYSQL 5.6
非关系型数据库:ElasticSearch 5
Web应用服务器: Apache Tomcat8
4.2 系统各功能模块设计与实现
4.2.1 用户接口及方法设计
分类业务逻辑接口
public interface CategoryService extends BaseService<Category, Long> {
查询所有分类目录,带count和根据level封装name
List findByUserId(Long userId);
获得某个分类的所有房屋数
Integer countPostByCateId(Long cateId);
根据用户ID删除
Integer deleteByUserId(Long userId);
将分类ID列表转成分类
List cateIdsToCateList(List cateIds, Long userId);
}
城市逻辑接口
public interface CityService extends BaseService<City, Long> {
}
收支记录业务逻辑接口
public interface FinanceRecordService extends BaseService<FinanceRecord, Long> {
根据用户ID获得预定列表
Page findByUserId(String startDate, String endDate, Long userId, Page page);
根据时间范围查询总金额
Integer getTotalMoneySum(String startDate, String endDate);
}
邮件发送业务逻辑接口
public interface MailService {
发送邮件
void sendMail(String to, String title, String content) throws MessagingException;
}
公告通知逻辑接口
public interface NoticeService extends BaseService<Notice, Long> {
}
订单业务逻辑接口
public interface OrderService extends BaseService<Order, Long> {
查询总金额
Integer getTotalPriceSum(Order condition);
根据条件查询
Page findAll(Order condition, Page page);
查询有效订单
Order findByPostId(Long postId);
}
权限逻辑接口
public interface PermissionService extends BaseService<Permission, Long> {
根据角色Id获得权限列表
List listPermissionsByRoleId(Long roleId);
获得某个用户的权限URL列表
Set findPermissionUrlsByUserId(Long userId);
获得某个用户的用户ID和资源类型
List findPermissionTreeByUserIdAndResourceType(Long userId, String resourceType);
根据角色ID获得权限列表
List findPermissionByRoleId(Long roleId);
获得所有权限,带有等级
List findPermissionListWithLevel();
统计子节点数量
Integer countChildPermission(Long id);
根据URL获得权限
Permission findByUrl(String url);
}
房屋/页面业务逻辑接口
public interface PostService extends BaseService<Post, Long> {
根据条件获得列表
Page findPostByCondition(Post condition, Page page);
根据租客userId查询
Page findByRentUserId(Long userId, Page page)
获得最新房屋
List getLatestPost(Long cityId, int limit);
根据状态统计
Integer countByStatus(Integer postStatus);
获得合租房屋
List getUnionRentPost(Post post);
}
权限和角色的业务逻辑接口
public interface RolePermissionRefService {
删除某个角色的所有关联
void deleteRefByRoleId(Long roleId);
添加角色和权限关联
void saveByRolePermissionRef(RolePermissionRef rolePermissionRef);
批量添加
void batchSaveByRolePermissionRef(List rolePermissionRefs);
}
角色逻辑接口
public interface RoleService extends BaseService<Role, Long> {
删除某个用户的所有关联
void deleteByUserId(Long userId);
根据编号查询单个权限
Role findByRoleId(Long roleId);
根据编号查询单个权限
Role findByRoleName(String roleName);
根据用户Id获得角色
Role findByUserId(Long userId);
统计这个角色的用户数
Integer countUserByRoleId(Long roleId);
查询某个用户最大的角色等级
Integer findMaxLevelByUserId(Long userId);
查询小于等于该等级的角色
List findByLessThanLevel(Integer level);
获得用户注册默认角色
Role findDefaultRole();
获得用户注册默认角色
Role getMaxRoleByUserId(Long userId);
}
用户和角色的逻辑接口
public interface UserRoleRefService extends BaseService<UserRoleRef, Long> {
根据用户Id删除
void deleteByUserId(Long userId);
}
用户业务逻辑接口
public interface UserService extends BaseService<User, Long> {
根据账号获得用户
User findByUserName(String userName);
根据身份证号码查找用户
User findByIdCard(String idCard);
更新密码
void updatePassword(Long userId, String password);
分页获取所有用户
Page findByRoleAndCondition(String roleName, User condition, Page page);
}
4.2.2 界面实现
(1)用户界面
用户界面功能的实现是根据系统的功能性需求和功能流程图,数据库逻辑设计来实现的。这里选取用户功能中租房这一模块来做详细的说明。用户租房界面如图4.1所示:
选中后的房源信息界面如图4.2所示:
用户在登录之后,会进入房源信息列表界面,房源信息是从后台数据库中取出来的。在房源信息列表中,用户搜索自己喜欢的户型,进行查看。在选中后的房源信息界面,利用数据库中房屋表的轮播图字段来实现房源图片的详细查看。在点击立即租房的确定按钮时,后台数据库中的t_order表中也会生成一条相应的记录,完成部分租房。
在选定好房子之后,用户可见的页面经过a标签跳转到合同页面,正规的房租租赁都要有合同来支撑。用户对合同认同之后,点击"我已阅读并同意上述合同"按钮,跳转到模拟支付的页面,点击按钮表示支付成功。合同和支付界面如图4.3,4.4所示:
进入后台管理模块,t_order表中也就多出一条租房记录,是通过后台数据库传到显示页的。在订单管理这块,用户可以查看电子合同并打印纸质合同,或者是提出退租申请。在这里的订单状态中,若用户签订了合同,订单状态中会显示合同生效,若是退租通过,会显示已退租。订单中具体显示着入住时间,退租时间,总押金,用户姓名,房东姓名,房屋具体地址这些内容。订单页面如图4.5所示:
(2)管理员页面
管理员界面功能的实现是根据系统的功能性需求和功能流程图,数据库逻辑式设计来实现的,这里选取管理员添加房屋这一模块来做详细说明,添加房屋界面如图4.6所示:
房屋发布界面如图4.7所示:
管理员登录系统之后,进入管理员可以操控的后台管理欢迎界面,菜单栏显示着管理员可操作的功能。点击"房屋管理"按钮,显示所有的房屋的信息,包括出租的和未出租的,可以进行筛选。点击"发布新的房屋",进入添加房屋信息界面,在添加时,后台数据库的数据同时也发生改变。添加房屋后,管理员,房东(中介),用户都可以在前台看到新的房屋信息。
管理员界面功能的实现是根据系统的功能性需求和功能流程图,数据库逻辑设计来实现的,这里再选取管理员管理用户这一模块来做详细说明,用户管理界面如图4.8所示:
在这一模块中,有个最大的特点是,管理员可以批量删除用户的信息,同时删除几个用户的信息是可以成功的。
(3)房东(中介)页面
房东(中介)界面功能的实现是根据系统的功能性需求和功能流程图,数据库逻辑设计来实现的,这里再选取房东(中介)管理订单,收支明细和个人信息这三个模块来做详细说明。房东(中介)管理订单界面,如图4.9所示:
在这个模块中,用户申请提前退租时,房东(中介)对订单的操作中有退租审核通过或者拒绝的功能,同时,在用户对房子预订之后,房东(中介)的房子暂时出租不了的情况下,可以提交退租申请给管理员,管理员同意申请,订单会被取消。房东(中介)管理收支明细界面,如图4.10所示:
在这个模块中,每个房东(中介)拥有自己的收支明细表,在这个表里面,有收支类型明细,支出还是收入,备注里面包含订单ID,房屋总金额,押金。房东(中介)管理个人信息界面,如图4.11所示:
在这个模块中,房东可以对自己的基本信息(头像,账号,姓名,身份证号,手机号,电子邮箱,个人描述)进行修改保存,同时可以修改自己的密码。
5结论
总览全文,本论文做了如下工作:
(1)详细说明了我国现有的租房行业的萧条,也简要分析了国内与国外线上租房,实现租房自由化的各种现状以及房租租赁管理系统的可行性分析。
(2)对系统进行了总体设计的详细描述。确定系统中出现的角色以及该角色的可以使用的功能进行设计。
(3)详细阐述了此房屋租赁管理系统的系统设计和实现,系统设计中从基本功能、功能框架图,数据流图、功能流程图这几个方面详细介绍,每个方面的介绍中都是图文结合的形式,方便理解。在数据库的设计中从概念设计,逻辑设计,结构设计多角度详细展开了叙述,层层解剖,深度对数据库进行详细的设计。
(4)对系统的开发环境进行了一定的说明,除此之外,对系统的各个功能进行了完整的分析和实现,从接口设计到界面实现。
(5)最后对系统的功能进行了测试,证明了实现功能的可用性和完整性,并得到结论,此房屋租赁管理系统满足需求分析中所提到的要求。
至此完成了基于Springboot的房屋租赁管理系统的实现,经测试表明,该系统能够满足需求分析中提出的需求。但限于自身能力的不足。系统仍有一些不好的地方,改进的地方如下:
(1)数据库相应表中为租房用户的用户名和头像等属性预留了存储位置,但由于受限于时间,系统目前还不具有社交功能,后续的开发会加入租房用户与房东(中介)的在线聊天功能。
(2)本系统虽然收集了租房用户的房源搜索记录,但目前还没有算法对这些数据进行利用和分析,在后续的工作中会加入数据挖掘、机器学习等方面的算法对接到系统中来。
(3)房源居住的反馈机制还不够完善,租房用户只能举报虚假的房源信息,而不能发表居住后的真实体验。后续的开发工作会给租房用户提供房源评论功能,这样能给其他租客提供参考意见。
(4)商家吸引用户最直接的手段就是打折促销,房屋出租也同样可以借鉴。在后续的系统运营上,会加入房租打折、优惠券等功能。