✌全网粉丝20W+,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌
🍅文末获取项目下载方式🍅
一、项目背景介绍:
开发过程中,我们注意到目前租房市场存在一些问题,如信息不对称、租金纠纷、租赁合同管理不规范等。为了解决这些问题,我们决定开发一个全新的房屋租赁系统。
首先,我们选择了SpringBoot作为后端框架。SpringBoot是一个快速开发、简化配置的Java开发框架,它提供了丰富的功能和强大的生态系统,可以帮助我们快速搭建稳定、高效的后端服务。同时,SpringBoot也具有良好的扩展性和可维护性,方便后期系统的升级和维护。
其次,为了提供良好的用户体验和友好的界面,我们选择了Vue作为前端框架。Vue是一种轻量级、渐进式的JavaScript框架,它具有简单易学、灵活高效的特点,可以帮助我们快速构建交互式的前端页面。通过Vue的组件化开发方式,我们可以更好地管理和复用前端代码,提高开发效率。
在系统的设计中,我们注重用户体验和功能完善。用户可以通过系统浏览各种房源信息,并进行筛选、比较和预订。同时,系统还提供了租赁合同管理、支付结算和评价反馈等功能,以保证租房过程的安全和顺利进行。
总之,基于SpringBoot+Vue的前后端分离架构,该房屋租赁系统具有稳定、高效的性能,同时提供了丰富的功能和良好的用户体验。我们希望通过这个系统,能够为用户提供一个便捷、安全的房屋租赁服务平台,促进租房市场的健康发展。
二、项目技术简介:
- JAVA:Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
- Vue:Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的JavaScript框架。它基于标准HTML、CSS和JavaScript构建,并提供了一套声明式的、组件化的编程模型,帮助开发者高效地开发用户界面。
Vue是一个独立的社区驱动的项目,它是由尤雨溪在2014年作为其个人项目创建, 是一个成熟的、经历了无数实战考验的框架,它是目前生产环境中使用最广泛的JavaScript框架之一,可以轻松处理大多数web应用的场景,并且几乎不需要手动优化,并且Vue完全有能力处理大规模的应用。 - Element-UI:Element,一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库。
- Spring:Spring框架是一个开放源代码的J2EE应用程序框架,由Rod Johnson发起,是针对bean的生命周期进行管理的轻量级容器(lightweight container)。 Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。Spring可以单独应用于构筑应用程序,也可以和Struts、Webwork、Tapestry等众多Web框架组合使用,并且可以与 Swing等桌面应用程序AP组合。因此, Spring不仅仅能应用于J2EE应用程序之中,也可以应用于桌面应用程序以及小应用程序之中。Spring框架主要由七部分组成,分别是 Spring Core、 Spring AOP、 Spring ORM、 Spring DAO、Spring Context、 Spring Web和 Spring Web MVC。
- SpringBoot:Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
- Mybatis-Plus:MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为 简化开发、提高效率而生。
三、系统功能模块介绍:
四、数据库设计:
1:apply(apply)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
apply_id | int | NULL | 申请看房 |
house_id | varchar | NULL | |
address | varchar | NULL | |
area | double | NULL | |
price | double | NULL | |
apply_date | datetime | NULL | |
status | varchar | NULL | |
user_id | int | NULL |
2:applyout(applyout)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
aoid | int | NULL | 退租申请 |
house_id | varchar | NULL | |
address | varchar | NULL | |
status | varchar | NULL | |
user_id | int | NULL |
3:checkout(checkout)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
cid | int | NULL | 退租申请 |
house_id | varchar | NULL | |
address | varchar | NULL | |
status | varchar | NULL | |
user_id | int | NULL |
4:hetong(hetong)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int | NULL | |
chuzu | varchar | NULL | |
chuzu_idcard | varchar | NULL | |
zuke | varchar | NULL | |
zuke_idcard | varchar | NULL | |
fromdate | varchar | NULL | |
todate | varchar | NULL | |
price | double | NULL | |
address | varchar | NULL | |
house_id | varchar | NULL | |
payday | int | NULL |
5:houselist(houselist)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int | NULL | |
houseid | varchar | NULL | |
address | varchar | NULL | |
area | double | NULL | |
price | double | NULL | |
status | varchar | NULL |
6:music(music)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
name | varchar | NULL | |
url | varchar | NULL | |
artist | varchar | NULL | |
cover | varchar | NULL |
7:paid(paid)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int | NULL | 已缴租金 |
house_id | varchar | NULL | |
address | varchar | NULL | |
price | double | NULL | |
date | date | NULL | |
paydate | date | NULL | |
name | varchar | NULL | |
user_id | int | NULL | |
status | varchar | NULL |
8:schedule(schedule)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int | NULL | |
date | varchar | NULL | |
content | text | NULL |
9:solve(solve)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int | NULL | |
house_id | varchar | NULL | |
address | varchar | NULL | |
date | timestamp | NULL | |
detail | text | NULL | |
name | varchar | NULL | |
user_id | int | NULL | |
status | varchar | NULL |
10:topaid(topaid)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int | NULL | |
house_id | varchar | NULL | |
address | varchar | NULL | |
price | double | NULL | |
date | date | NULL | |
name | varchar | NULL | |
user_id | int | NULL | |
status | varchar | NULL |
11:user(user)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int | NULL | |
username | varchar | NULL | |
password | varchar | NULL | |
type | varchar | NULL | |
nickname | varchar | NULL |
12:userlist(userlist)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int | NULL | |
name | varchar | NULL | |
idcard | varchar | NULL | |
phone | varchar | NULL | |
user_id | int | NULL | |
nickname | varchar | NULL | 昵称 |
13:wrong(wrong)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int | NULL | |
house_id | varchar | NULL | |
address | varchar | NULL | |
date | timestamp | NULL | |
detail | text | NULL | |
name | varchar | NULL | |
user_id | int | NULL | |
status | varchar | NULL |
14:zulist(zulist)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
zid | int | NULL | |
house_id | varchar | NULL | |
price | double | NULL | |
address | varchar | NULL | |
user_id | int | NULL | |
contract_id | int | NULL |
五、功能模块:
登录:在登录界面用户可以选择当前登录的权限是房东还是租客,选在对应的权限然后输入账号密码进入到的系统所能使用的功能是不一致的
房东首页-日程提醒:
房源菜单:房源列表用于管理房源,添加房源菜单用于添加房源
租赁及合同信息:在租列表可以查看合同/修改合同打印合同/终止合同
看房及退租记录:
保障模块:
租金信息:我要收租/租客待缴租金/租客已经缴租金
租金信息:查看日程/ 添加日程
房源菜单:房源列表
租赁及合同信息:在租列表/已退租列表
看房及退租记录:看房记录/退租记录
保障模块:我要保障/待处理保障/已经处理保障
租金信息:待缴租金/已缴租金
六、代码示例:
@GetMapping("/captchaImage")
public AjaxResult getCode(HttpServletResponse response) throws IOException
{
AjaxResult ajax = AjaxResult.success();
boolean captchaEnabled = configService.selectCaptchaEnabled();
ajax.put("captchaEnabled", captchaEnabled);
if (!captchaEnabled)
{
return ajax;
} // 保存验证码信息
String uuid = IdUtils.simpleUUID();
String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + uuid;
String capStr = null, code = null;
BufferedImage image = null;
String captchaType = RuoYiConfig.getCaptchaType();
if ("math".equals(captchaType))
{
String capText = captchaProducerMath.createText();
capStr = capText.substring(0, capText.lastIndexOf("@"));
code = capText.substring(capText.lastIndexOf("@") + 1);
image = captchaProducerMath.createImage(capStr);
}
else if ("char".equals(captchaType))
{
capStr = code = captchaProducer.createText();
image = captchaProducer.createImage(capStr);
}
redisCache.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);
// 转换流信息写出
FastByteArrayOutputStream os = new FastByteArrayOutputStream();
try
{
ImageIO.write(image, "jpg", os);
}
catch (IOException e)
{
return AjaxResult.error(e.getMessage());
}
ajax.put("uuid", uuid);
ajax.put("img", Base64.encode(os.toByteArray()));
return ajax;
}
/**
通用的本地文件上传
@param multipartFile 文件对象@return 文件访问链接URL
*/
@PostMapping("/file")
public SimpleResponse uploadImg(@RequestParam("file") MultipartFile file) {
// 文件后缀
String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".") + 1);
File savePathFile = new File(newTomcatFolder);
if (!savePathFile.exists()) {
// 若不存在该目录,则创建目录
savePathFile.mkdir();
}
// 通过UUID生成唯一文件名
String filename = UUID.randomUUID() + "." + suffix;
try {
// 将文件保存指定目录
file.transferTo(new File(newTomcatFolder + filename));
} catch (Exception e) {
e.printStackTrace();
return SimpleResponse.error("保存文件异常");
}
// 返回访问链接
return SimpleResponse.success(newTomcatHost + filename);
}
/**用户登录
*/
@PostMapping("/login")
public ReturnMsg manageLogin(@RequestBody Map<String, String> param) {
if (StrUtil.isEmpty(param.get("username")) || StrUtil.isEmpty(param.get("password"))) {
return ReturnMsg.error("用户名或密码错误!");
}
ManageDTO manageDTO = new ManageDTO();
manageDTO.setUserName(param.get("username"));
manageDTO.setPassWord(param.get("password"));
QueryWrapper<ManageDTO> manageDTOQueryWrapper = new QueryWrapper<>(manageDTO);
manageDTOQueryWrapper.last("limit 1");
ManageDTO adminDTOS = manageService.getOne(manageDTOQueryWrapper);
if (adminDTOS == null) return ReturnMsg.error("用户名或密码错误!");
Map<String, Object> map = new HashMap<>();
map.put("avatar", StrUtil.isNotBlank(adminDTOS.getPhotoImg()) ? adminDTOS.getPhotoImg() : "https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif");
map.put("introduction", adminDTOS.getName() + ",你好!");
map.put("name", adminDTOS.getName());
map.put("roles", Arrays.asList("admin"));
map.put("type", adminDTOS.getStatus());
Map<String, String> returnMap = new HashMap<>();
String uuid = UUID.randomUUID().toString();
returnMap.put("token", uuid);
userInfoMap.put(uuid, JSON.toJSONString(map));
return ReturnMsg.ok(returnMap);
}
七、项目总结:
之前在教材内容读书过程中开发设计技术专业知识,对研究过程的认知,对开发设计设计课程学习,及其如何有效开展系统的市场分析和设计。老师还选了更具有标志性管理方案系统来解读教学过程,课下安排工作使们进行练习。在这段时间,老师还应当掌握系统地完成和测试。应对餐厅点餐管理系统的开发,的脑海里的确有一个清晰的认知。在系统制做及配套文本文件撰写中,按照软件开发流程一步步做好本职工作。
从系统的角度看,依据餐厅点餐管理系统生产,其艰难在于功能清楚、系统构造设计、设计使用性能数据库系统、挑选核心技术进行系统功能等,这种都是自己的难题。针对这一艰难,实行了一些防范措施。当也不知道系统的功能时,在网上找到很多相似的系统,做好记录了一些系统的一般功能,并用了这一系统的高效功能的一部分。除此之外,在在网络上得到了很多关于系统设计的前提知识,包含系统模块划分、设计规范、数据库表的设计和创建,及其程序流程编码的专业技能知识,包含撰写与使用数据和信息加上、删掉和变更编码控制器。在系统序号进行相关功能后,认真的试了系统中所有功能,最后发现自己研发的系统符合规定,能接受。系统功能与系统剖析设计高度一致,系统质量稳定。为应对客户的实际操作不正确,还设有不恰当反馈机制,系统性能稳定。唯一的最大的缺点是系统数据报表的设计不健全,字段名称相匹配的引用类型不正确,一部分系统编码很多地方并没有注解,编码不足简易。
从文本文件的角度看,依据基于SpringBoot+Vue的前后端分离的房屋租赁系统生产后,应叙述生产过程的需求,包含怎样进行数据分析报告、怎样进行系统设计及其系统功能的具体运作实际效果。在这期间,用了接近一个月的时间来做。要实现院校标准化的文档排版标准,多次在老师的建议下学习办公软件使用和排版设计设计。坚持就是收益。经过长时间的的撰写和优化,的文档终于完成。
总而言之,尽管制做经历了太多阶段,但如果认真完成这件事情,们将在每一个环节得到许多知识,在每一个环节的操作过程中锻练们自己的实践技能。根据该项目的制做,开始明白,许多知识不但来源于书籍,来源于教师在课堂教学中讲的知识,还来源于各种网络学习平台和社会实践。到现在为止,将继续努力,维持新知识的深入学习习惯性
八、源码获取:
大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻获取项目下载链接,博主联系方式👇🏻👇🏻👇🏻
链接点击直达:下载链接