当前位置: 首页 > news >正文

基于SpringBoot的大学生租房系统

背景

大学生租房系统设计的目的是建立一个高效的平台,采用简洁高效的Java语言与Mysql数据库等技术,设计和开发了本大学生租房系统设计。该系统主要实现了用户和房主通过系统注册用户,登录系统后能够编辑自己的个人信息、查看首页,房屋信息,房屋评价,公告资讯,个人中心,后台管理,意见反馈等,还可以对后台进行操作,以及管理员可以进行首页,个人中心,房主管理,用户管理,房屋类型管理,房屋信息管理,预约看房管理,定金留房管理,租赁订单管理,房屋评价管理等功能的管理。计算机技术在现代管理中的应用,使计算机成为用户应用现代技术的重要工具,能够有效的解决获取信息便捷化、全面化的问题,提高效率。

系统主要包括首页,个人中心,房主管理,用户管理,房屋类型管理,房屋信息管理,预约看房管理,定金留房管理,租赁订单管理,房屋评价管理等功能的操作系统,管理员是整个系统的核心。而用户登录到系统前台,可以对首页,房屋信息,房屋评价,公告资讯,个人中心,后台管理,意见反馈等进行查看以及其他的操作。

相关技术

SpringBoot

SpringBoot是一个全新开源的轻量级框架。基于Spring4.0设计,其不仅继承了Spring框架原来有的优秀特性,而且还通过简化配置文件来进一步简化了Spring应用的整个搭建以及开发过程。另外在原本的Spring中由于随着项目的扩大导入的jar包数量越来越大,随之出现了jar包版本之间的兼容性问题,而此时SpringBoot通过集成大量的框架使得依赖包的版本冲突,以及引用的不稳定性问题得到了很好的解决。

SpringBoot可以看做是Spring的加强版本,但实质上都是Spring的相关技术,有了这些优秀的开源框架,程序员在开发过程中将事半功倍。

vue

Vue是一套用于构建用户界面的渐进式的js框架,发布于2014年2月。与其它大型框架不同的是,Vue被设计为可以自底向上逐层应用。Vue的核心库只关注视图层,不仅易于上手,还便于与第三方库( 如: vue-router,vue-resource,vuex)或既有项目整合。

系统设计

根据大学生租房系统的功能需求,进行系统设计。

前台功能:进入系统可以实现首页,房屋信息,房屋评价,公告资讯,个人中心,后台管理,意见反馈等功能进行操作;
后台主要是管理员,房主和用户,主要功能包括首页,个人中心,房主管理,用户管理,房屋类型管理,房屋信息管理,预约看房管理,定金留房管理,租赁订单管理,房屋评价管理等。

系统对这些功能进行整合,产生的功能结构图如下:

在这里插入图片描述

数据库设计

ER图是由实体及其关系构成的图,通过E/R图可以清楚地描述系统涉及到的实体之间的相互关系。在系统中对一些主要的几个关键实体如下图:

1.用户注册实体
用户注册实体包括用户名,密码,确认密码,姓名,手机,身份证等属性。用户注册实体图如图4-2所示:

在这里插入图片描述
2.房屋信息实体
房屋信息实体包括房屋类型,地区,位置,朝向,楼层,楼号,房屋面积,房屋设施,房屋状态,房屋租金,房主账号,房主姓名等属性。房屋信息实体图如图4-3所示:

在这里插入图片描述
数据库概念结构设计后,可以数据库概念转化实际的数据模型,这是一种数据库的逻辑结构,就是将概念结构与支持数据库管理系统的模型相符合。具体的表设计如下所示。此处只展示部分表。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

系统详细设计

系统功能模块

大学生租房系统,在系统首页可以查看首页,房屋信息,房屋评价,公告资讯,个人中心,后台管理,意见反馈等内容,并进行详细操作。
在这里插入图片描述
房屋信息,在房屋信息页面可以查看房屋类型,地区,位置,朝向,楼层,楼号,房屋面积,房屋设施,房屋状态,房屋租金,房主账号,房主姓名等内容,并可以进行预约看房,定金留房等操作。

在这里插入图片描述

管理员模块

管理员登录系统后,可以对首页,个人中心,房主管理,用户管理,房屋类型管理,房屋信息管理,预约看房管理,定金留房管理,租赁订单管理,房屋评价管理等功能进行相应的操作。

在这里插入图片描述
房主管理,在房主管理页面可以对索引,房主账号,房主姓名,性别,照片,联系电话,身份证等内容进行详情,修改和删除等操作。

在这里插入图片描述

代码实现

由于代码较多,此处只展示部分代码。

房屋信息接口

/*** 房屋信息* 后端接口* @author * @email * @date 2022-04-10 15:56:44*/
@RestController
@RequestMapping("/fangwuxinxi")
public class FangwuxinxiController {@Autowiredprivate FangwuxinxiService fangwuxinxiService;@Autowiredprivate StoreupService storeupService;/*** 后端列表*/@RequestMapping("/page")public R page(@RequestParam Map<String, Object> params,FangwuxinxiEntity fangwuxinxi,HttpServletRequest request){String tableName = request.getSession().getAttribute("tableName").toString();if(tableName.equals("fangzhu")) {fangwuxinxi.setFangzhuzhanghao((String)request.getSession().getAttribute("username"));}EntityWrapper<FangwuxinxiEntity> ew = new EntityWrapper<FangwuxinxiEntity>();PageUtils page = fangwuxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, fangwuxinxi), params), params));return R.ok().put("data", page);}/*** 前端列表*/@IgnoreAuth@RequestMapping("/list")public R list(@RequestParam Map<String, Object> params,FangwuxinxiEntity fangwuxinxi, HttpServletRequest request){EntityWrapper<FangwuxinxiEntity> ew = new EntityWrapper<FangwuxinxiEntity>();PageUtils page = fangwuxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, fangwuxinxi), params), params));return R.ok().put("data", page);}/*** 列表*/@RequestMapping("/lists")public R list( FangwuxinxiEntity fangwuxinxi){EntityWrapper<FangwuxinxiEntity> ew = new EntityWrapper<FangwuxinxiEntity>();ew.allEq(MPUtil.allEQMapPre( fangwuxinxi, "fangwuxinxi")); return R.ok().put("data", fangwuxinxiService.selectListView(ew));}/*** 查询*/@RequestMapping("/query")public R query(FangwuxinxiEntity fangwuxinxi){EntityWrapper< FangwuxinxiEntity> ew = new EntityWrapper< FangwuxinxiEntity>();ew.allEq(MPUtil.allEQMapPre( fangwuxinxi, "fangwuxinxi")); FangwuxinxiView fangwuxinxiView =  fangwuxinxiService.selectView(ew);return R.ok("查询房屋信息成功").put("data", fangwuxinxiView);}/*** 后端详情*/@RequestMapping("/info/{id}")public R info(@PathVariable("id") Long id){FangwuxinxiEntity fangwuxinxi = fangwuxinxiService.selectById(id);fangwuxinxi.setClicktime(new Date());fangwuxinxiService.updateById(fangwuxinxi);return R.ok().put("data", fangwuxinxi);}/*** 前端详情*/@IgnoreAuth@RequestMapping("/detail/{id}")public R detail(@PathVariable("id") Long id){FangwuxinxiEntity fangwuxinxi = fangwuxinxiService.selectById(id);fangwuxinxi.setClicktime(new Date());fangwuxinxiService.updateById(fangwuxinxi);return R.ok().put("data", fangwuxinxi);}/*** 后端保存*/@RequestMapping("/save")public R save(@RequestBody FangwuxinxiEntity fangwuxinxi, HttpServletRequest request){fangwuxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());//ValidatorUtils.validateEntity(fangwuxinxi);fangwuxinxiService.insert(fangwuxinxi);return R.ok();}/*** 前端保存*/@RequestMapping("/add")public R add(@RequestBody FangwuxinxiEntity fangwuxinxi, HttpServletRequest request){fangwuxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());//ValidatorUtils.validateEntity(fangwuxinxi);fangwuxinxiService.insert(fangwuxinxi);return R.ok();}/*** 修改*/@RequestMapping("/update")public R update(@RequestBody FangwuxinxiEntity fangwuxinxi, HttpServletRequest request){//ValidatorUtils.validateEntity(fangwuxinxi);fangwuxinxiService.updateById(fangwuxinxi);//全部更新return R.ok();}/*** 删除*/@RequestMapping("/delete")public R delete(@RequestBody Long[] ids){fangwuxinxiService.deleteBatchIds(Arrays.asList(ids));return R.ok();}/*** 提醒接口*/@RequestMapping("/remind/{columnName}/{type}")public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request, @PathVariable("type") String type,@RequestParam Map<String, Object> map) {map.put("column", columnName);map.put("type", type);if(type.equals("2")) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Calendar c = Calendar.getInstance();Date remindStartDate = null;Date remindEndDate = null;if(map.get("remindstart")!=null) {Integer remindStart = Integer.parseInt(map.get("remindstart").toString());c.setTime(new Date()); c.add(Calendar.DAY_OF_MONTH,remindStart);remindStartDate = c.getTime();map.put("remindstart", sdf.format(remindStartDate));}if(map.get("remindend")!=null) {Integer remindEnd = Integer.parseInt(map.get("remindend").toString());c.setTime(new Date());c.add(Calendar.DAY_OF_MONTH,remindEnd);remindEndDate = c.getTime();map.put("remindend", sdf.format(remindEndDate));}}Wrapper<FangwuxinxiEntity> wrapper = new EntityWrapper<FangwuxinxiEntity>();if(map.get("remindstart")!=null) {wrapper.ge(columnName, map.get("remindstart"));}if(map.get("remindend")!=null) {wrapper.le(columnName, map.get("remindend"));}String tableName = request.getSession().getAttribute("tableName").toString();if(tableName.equals("fangzhu")) {wrapper.eq("fangzhuzhanghao", (String)request.getSession().getAttribute("username"));}int count = fangwuxinxiService.selectCount(wrapper);return R.ok().put("count", count);}/*** 前端智能排序*/@IgnoreAuth@RequestMapping("/autoSort")public R autoSort(@RequestParam Map<String, Object> params,FangwuxinxiEntity fangwuxinxi, HttpServletRequest request,String pre){EntityWrapper<FangwuxinxiEntity> ew = new EntityWrapper<FangwuxinxiEntity>();Map<String, Object> newMap = new HashMap<String, Object>();Map<String, Object> param = new HashMap<String, Object>();Iterator<Map.Entry<String, Object>> it = param.entrySet().iterator();while (it.hasNext()) {Map.Entry<String, Object> entry = it.next();String key = entry.getKey();String newKey = entry.getKey();if (pre.endsWith(".")) {newMap.put(pre + newKey, entry.getValue());} else if (StringUtils.isEmpty(pre)) {newMap.put(newKey, entry.getValue());} else {newMap.put(pre + "." + newKey, entry.getValue());}}params.put("sort", "clicktime");params.put("order", "desc");PageUtils page = fangwuxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, fangwuxinxi), params), params));return R.ok().put("data", page);}/*** 协同算法(按收藏推荐)*/@RequestMapping("/autoSort2")public R autoSort2(@RequestParam Map<String, Object> params,FangwuxinxiEntity fangwuxinxi, HttpServletRequest request){String userId = request.getSession().getAttribute("userId").toString();String inteltypeColumn = "fangwuleixing";List<StoreupEntity> storeups = storeupService.selectList(new EntityWrapper<StoreupEntity>().eq("type", 1).eq("userid", userId).eq("tablename", "fangwuxinxi").orderBy("addtime", false));List<String> inteltypes = new ArrayList<String>();Integer limit = params.get("limit")==null?10:Integer.parseInt(params.get("limit").toString());List<FangwuxinxiEntity> fangwuxinxiList = new ArrayList<FangwuxinxiEntity>();//去重if(storeups!=null && storeups.size()>0) {for(StoreupEntity s : storeups) {fangwuxinxiList.addAll(fangwuxinxiService.selectList(new EntityWrapper<FangwuxinxiEntity>().eq(inteltypeColumn, s.getInteltype())));}}EntityWrapper<FangwuxinxiEntity> ew = new EntityWrapper<FangwuxinxiEntity>();params.put("sort", "id");params.put("order", "desc");PageUtils page = fangwuxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, fangwuxinxi), params), params));List<FangwuxinxiEntity> pageList = (List<FangwuxinxiEntity>)page.getList();if(fangwuxinxiList.size()<limit) {int toAddNum = (limit-fangwuxinxiList.size())<=pageList.size()?(limit-fangwuxinxiList.size()):pageList.size();for(FangwuxinxiEntity o1 : pageList) {boolean addFlag = true;for(FangwuxinxiEntity o2 : fangwuxinxiList) {if(o1.getId().intValue()==o2.getId().intValue()) {addFlag = false;break;}}if(addFlag) {fangwuxinxiList.add(o1);if(--toAddNum==0) break;}}}page.setList(fangwuxinxiList);return R.ok().put("data", page);}}

预约看房

/*** 预约看房* 后端接口* @author * @email * @date 2022-04-10 15:56:44*/
@RestController
@RequestMapping("/yuyuekanfang")
public class YuyuekanfangController {@Autowiredprivate YuyuekanfangService yuyuekanfangService;/*** 后端列表*/@RequestMapping("/page")public R page(@RequestParam Map<String, Object> params,YuyuekanfangEntity yuyuekanfang,HttpServletRequest request){String tableName = request.getSession().getAttribute("tableName").toString();if(tableName.equals("fangzhu")) {yuyuekanfang.setFangzhuzhanghao((String)request.getSession().getAttribute("username"));}if(tableName.equals("yonghu")) {yuyuekanfang.setYonghuming((String)request.getSession().getAttribute("username"));}EntityWrapper<YuyuekanfangEntity> ew = new EntityWrapper<YuyuekanfangEntity>();PageUtils page = yuyuekanfangService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, yuyuekanfang), params), params));return R.ok().put("data", page);}/*** 前端列表*/@IgnoreAuth@RequestMapping("/list")public R list(@RequestParam Map<String, Object> params,YuyuekanfangEntity yuyuekanfang, HttpServletRequest request){EntityWrapper<YuyuekanfangEntity> ew = new EntityWrapper<YuyuekanfangEntity>();PageUtils page = yuyuekanfangService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, yuyuekanfang), params), params));return R.ok().put("data", page);}/*** 列表*/@RequestMapping("/lists")public R list( YuyuekanfangEntity yuyuekanfang){EntityWrapper<YuyuekanfangEntity> ew = new EntityWrapper<YuyuekanfangEntity>();ew.allEq(MPUtil.allEQMapPre( yuyuekanfang, "yuyuekanfang")); return R.ok().put("data", yuyuekanfangService.selectListView(ew));}/*** 查询*/@RequestMapping("/query")public R query(YuyuekanfangEntity yuyuekanfang){EntityWrapper< YuyuekanfangEntity> ew = new EntityWrapper< YuyuekanfangEntity>();ew.allEq(MPUtil.allEQMapPre( yuyuekanfang, "yuyuekanfang")); YuyuekanfangView yuyuekanfangView =  yuyuekanfangService.selectView(ew);return R.ok("查询预约看房成功").put("data", yuyuekanfangView);}/*** 后端详情*/@RequestMapping("/info/{id}")public R info(@PathVariable("id") Long id){YuyuekanfangEntity yuyuekanfang = yuyuekanfangService.selectById(id);return R.ok().put("data", yuyuekanfang);}/*** 前端详情*/@IgnoreAuth@RequestMapping("/detail/{id}")public R detail(@PathVariable("id") Long id){YuyuekanfangEntity yuyuekanfang = yuyuekanfangService.selectById(id);return R.ok().put("data", yuyuekanfang);}/*** 后端保存*/@RequestMapping("/save")public R save(@RequestBody YuyuekanfangEntity yuyuekanfang, HttpServletRequest request){yuyuekanfang.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());//ValidatorUtils.validateEntity(yuyuekanfang);yuyuekanfangService.insert(yuyuekanfang);return R.ok();}/*** 前端保存*/@RequestMapping("/add")public R add(@RequestBody YuyuekanfangEntity yuyuekanfang, HttpServletRequest request){yuyuekanfang.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());//ValidatorUtils.validateEntity(yuyuekanfang);yuyuekanfangService.insert(yuyuekanfang);return R.ok();}/*** 修改*/@RequestMapping("/update")public R update(@RequestBody YuyuekanfangEntity yuyuekanfang, HttpServletRequest request){//ValidatorUtils.validateEntity(yuyuekanfang);yuyuekanfangService.updateById(yuyuekanfang);//全部更新return R.ok();}/*** 删除*/@RequestMapping("/delete")public R delete(@RequestBody Long[] ids){yuyuekanfangService.deleteBatchIds(Arrays.asList(ids));return R.ok();}/*** 提醒接口*/@RequestMapping("/remind/{columnName}/{type}")public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request, @PathVariable("type") String type,@RequestParam Map<String, Object> map) {map.put("column", columnName);map.put("type", type);if(type.equals("2")) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Calendar c = Calendar.getInstance();Date remindStartDate = null;Date remindEndDate = null;if(map.get("remindstart")!=null) {Integer remindStart = Integer.parseInt(map.get("remindstart").toString());c.setTime(new Date()); c.add(Calendar.DAY_OF_MONTH,remindStart);remindStartDate = c.getTime();map.put("remindstart", sdf.format(remindStartDate));}if(map.get("remindend")!=null) {Integer remindEnd = Integer.parseInt(map.get("remindend").toString());c.setTime(new Date());c.add(Calendar.DAY_OF_MONTH,remindEnd);remindEndDate = c.getTime();map.put("remindend", sdf.format(remindEndDate));}}Wrapper<YuyuekanfangEntity> wrapper = new EntityWrapper<YuyuekanfangEntity>();if(map.get("remindstart")!=null) {wrapper.ge(columnName, map.get("remindstart"));}if(map.get("remindend")!=null) {wrapper.le(columnName, map.get("remindend"));}String tableName = request.getSession().getAttribute("tableName").toString();if(tableName.equals("fangzhu")) {wrapper.eq("fangzhuzhanghao", (String)request.getSession().getAttribute("username"));}if(tableName.equals("yonghu")) {wrapper.eq("yonghuming", (String)request.getSession().getAttribute("username"));}int count = yuyuekanfangService.selectCount(wrapper);return R.ok().put("count", count);}}
http://www.lryc.cn/news/67022.html

相关文章:

  • NetApp 利用适用于混合云的实时解决方案解决芯片设计方面的数据管理挑战
  • Rust + WASM 入门
  • 【操作系统】内存空间
  • 详解静态、动态代理以及应用场景
  • ChatGLM-6B本地cpu部署
  • 算法修炼之练气篇——练气七层
  • vscode常用快捷方式
  • 如何压缩mp3文件大小,5分钟学会4种方法
  • 从0搭建Vue3组件库(十二):引入现代前端测试框架 Vitest
  • 使用Handler创建一个Android秒表应用
  • node-sass安装失败解决方法总结
  • C++特殊类设计
  • 常用的python gpu加速方法
  • SpringCloud-Gateway
  • 【C++ qt4】操作json学习笔记
  • 【牛客刷题专栏】0x25:JZ24 反转链表(C语言编程题)
  • useEffect
  • 如何利用splice()和slice()方法操作数组
  • 一文读懂ChatGPT(全文由ChatGPT撰写)
  • 如何提升应届生职场竞争力
  • David Silver Lecture 5: Model-Free Control
  • MySQL-----事务管理
  • chatGPT润色中英论文软件-文章修改润色器
  • MacOS下安装和配置Nginx
  • 采用UWB(超宽频)技术开发的java版智慧工厂定位系统源码
  • 【2023华为OD笔试必会20题--C语言版】《04 日志采集系统》——数组
  • MySQL数据库——MySQL修改存储过程(ALTER PROCEDURE)
  • ASEMI代理ADV7125JSTZ330原装ADI车规级ADV7125JSTZ330
  • 86盒IP对讲一键报警器
  • 【高数+复变函数】傅里叶积分