基于java+springboot+vue的房屋租赁系统

项目介绍

房屋是人类生活栖息的重要场所,随着城市中的流动人口的增多,人们对房屋租赁需求越来越高,为满足用户查询房屋、预约看房、房屋租赁的需求,特开发了本基于Spring Boot的房屋租赁系统。

本文重点阐述了房屋租赁系统的开发过程,以实际运用为开发背景,基于Spring Boot框架,运用了Java技术和MYSQL数据库进行开发,充分保证系统的安全性和稳定性。本系统界面良好,操作简单方便,通过系统概述、系统分析、系统设计、数据库设计、系统测试这几个部分,详细的说明了系统的开发过程,最后并对整个开发过程进行了总结,实现了房屋租赁的功能。

本基于Spring Boot的房屋租赁系统运行效果稳定,操作方便、快捷,界面友好,是一个功能全面、实用性好、安全性高,并具有良好的可扩展性、可维护性的房屋租赁平台。

在这里插入图片描述

开发环境

编程语言:Java
数据库 :Mysql
系统架构:B/S
后端框架:SpringBoot
编译工具:idea或者eclipse,jdk1.8,maven
支持定做:java/php/python/android/小程序vue/爬虫/c#/asp.net

系统实现

5.1 租客功能模块的实现
5.1.1 系统主界面
租客进入本系统可查看系统信息,包括首页公告信息以及房屋信息等,系统主界面展示如图5-1所示:
在这里插入图片描述

图5-1 系统主界面图

5.1.2 租客注册界面
未有账号的租客可进入注册界面进行注册操作,租客注册界面展示如图5-2所示:
在这里插入图片描述

图5-2 租客注册界面图

5.1.3 租客登录界面
租客在登录界面可输入登录信息进行登录系统,租客登录界面展示如图5-3所示:
在这里插入图片描述

图5-3 租客登录界面图

5.1.4 房屋详情界面
租客可选择房屋查看房屋详情信息,登录可进行看房申请操作,房屋详情界面展示如图5-4所示:
在这里插入图片描述

图5-4 房屋详情界面图

5.1.5 看房申请界面
租客登录后可选择房屋进行看房申请,看房申请界面展示如图5-5所示。
在这里插入图片描述

图5-5 看房申请界面图

5.1.6 租赁合同界面
租客登录后还可查看租赁合同信息,租赁合同界面展示如图5-6所示。
在这里插入图片描述

图5-6 租赁合同界面图

5.1.7 收租信息界面
租客可进入收租信息界面查看收租信息,收租信息界面展示如图5-7所示。
在这里插入图片描述

图5-7 收租信息界面图

5.2 管理员功能模块的实现
5.2.1 管理员登录界面
管理员要想进入系统后台对系统进行管理操作,必须登录系统后台,管理员登录界面展示如图5-8所示。
在这里插入图片描述

图5-8 管理员登录界面图

5.2.2 租客管理界面
管理员可查看、修改和删除租客信息,租客管理界面展示如图5-9所示。
在这里插入图片描述

图5-9租客管理界面图

5.2.3 户主管理界面
管理员在户主管理界面可查看已有户主信息,对已有户主信息管理员可进行编辑和删除操作,同时管理员也可添加户主信息,户主管理界面展示如图5-10所示。
在这里插入图片描述

图5-10 户主管理界面图

5.2.4 房屋信息管理界面
管理员可增删改查房屋信息,房屋信息管理界面展示如图5-11所示。
在这里插入图片描述

图5-11 房屋信息管理界面图

5.2.5 看房申请管理界面
管理员可查看用户看房申请信息,并可对其进行审核操作,看房申请管理界面展示如图5-12所示。
在这里插入图片描述

图5-12 看房申请管理界面图

5.2.6 租赁合同管理界面
管理员可增删改查租赁合同信息,租赁合同管理界面展示如图5-13所示。
在这里插入图片描述

图5-13 租赁合同管理界面图

5.2.7 收租信息管理界面
管理员能够添加、修改和删除收租信息,收租信息管理界面展示如图5-14所示。
在这里插入图片描述

图5-14 收租信息管理界面图

核心代码

package com.controller;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;

import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;

import com.entity.KanfangshenqingEntity;
import com.entity.view.KanfangshenqingView;

import com.service.KanfangshenqingService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;


/**
 * 看房申请
 * 后端接口
 * @author 
 * @email 
 * @date 
 */
@RestController
@RequestMapping("/kanfangshenqing")
public class KanfangshenqingController {
    @Autowired
    private KanfangshenqingService kanfangshenqingService;
    


    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,KanfangshenqingEntity kanfangshenqing,
		HttpServletRequest request){
		String tableName = request.getSession().getAttribute("tableName").toString();
		if(tableName.equals("zuke")) {
			kanfangshenqing.setZhanghao((String)request.getSession().getAttribute("username"));
		}
        EntityWrapper<KanfangshenqingEntity> ew = new EntityWrapper<KanfangshenqingEntity>();
		PageUtils page = kanfangshenqingService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, kanfangshenqing), params), params));

        return R.ok().put("data", page);
    }
    
    /**
     * 前端列表
     */
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,KanfangshenqingEntity kanfangshenqing, HttpServletRequest request){
        EntityWrapper<KanfangshenqingEntity> ew = new EntityWrapper<KanfangshenqingEntity>();
		PageUtils page = kanfangshenqingService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, kanfangshenqing), params), params));
        return R.ok().put("data", page);
    }

	/**
     * 列表
     */
    @RequestMapping("/lists")
    public R list( KanfangshenqingEntity kanfangshenqing){
       	EntityWrapper<KanfangshenqingEntity> ew = new EntityWrapper<KanfangshenqingEntity>();
      	ew.allEq(MPUtil.allEQMapPre( kanfangshenqing, "kanfangshenqing")); 
        return R.ok().put("data", kanfangshenqingService.selectListView(ew));
    }

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(KanfangshenqingEntity kanfangshenqing){
        EntityWrapper< KanfangshenqingEntity> ew = new EntityWrapper< KanfangshenqingEntity>();
 		ew.allEq(MPUtil.allEQMapPre( kanfangshenqing, "kanfangshenqing")); 
		KanfangshenqingView kanfangshenqingView =  kanfangshenqingService.selectView(ew);
		return R.ok("查询看房申请成功").put("data", kanfangshenqingView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        KanfangshenqingEntity kanfangshenqing = kanfangshenqingService.selectById(id);
        return R.ok().put("data", kanfangshenqing);
    }

    /**
     * 前端详情
     */
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id){
        KanfangshenqingEntity kanfangshenqing = kanfangshenqingService.selectById(id);
        return R.ok().put("data", kanfangshenqing);
    }
    



    /**
     * 后端保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody KanfangshenqingEntity kanfangshenqing, HttpServletRequest request){
    	kanfangshenqing.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(kanfangshenqing);
        kanfangshenqingService.insert(kanfangshenqing);
        return R.ok();
    }
    
    /**
     * 前端保存
     */
    @RequestMapping("/add")
    public R add(@RequestBody KanfangshenqingEntity kanfangshenqing, HttpServletRequest request){
    	kanfangshenqing.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(kanfangshenqing);
        kanfangshenqingService.insert(kanfangshenqing);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody KanfangshenqingEntity kanfangshenqing, HttpServletRequest request){
        //ValidatorUtils.validateEntity(kanfangshenqing);
        kanfangshenqingService.updateById(kanfangshenqing);//全部更新
        return R.ok();
    }
    

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        kanfangshenqingService.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<KanfangshenqingEntity> wrapper = new EntityWrapper<KanfangshenqingEntity>();
		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("zuke")) {
			wrapper.eq("zhanghao", (String)request.getSession().getAttribute("username"));
		}

		int count = kanfangshenqingService.selectCount(wrapper);
		return R.ok().put("count", count);
	}
	


}

论文参考

在这里插入图片描述

目 录
摘 要 I
Abstract II
1 绪论 1
1.1 研究背景 1
1.2 设计原则 1
1.3 研究内容 2
2 关键技术简介 3
2.1 JAVA技术 3
2.2 B/S结构 3
2.3 SQL数据库 4
3 系统分析 5
3.1 可行性分析 5
3.1.1 技术可行性 5
3.1.2 经济可行性 5
3.1.3 操作可行性 5
3.1.4 时间可行性 5
3.2 系统性能分析 6
3.3 系统功能分析 6
3.3.1租客功能分析 6
3.3.2管理员功能分析 6
3.4 系统流程分析 7
3.4.1 注册登录流程 7
3.4.2添加信息流程 8
4 系统设计 9
4.1 系统概要设计 9
4.2 系统结构设计 9
4.3 系统顺序图设计 10
4.4 数据库设计 11
4.4.1 数据库E-R图设计 11
4.4.2 数据库表设计 14
5 系统的实现 17
5.1 租客功能模块的实现 17
5.1.1 系统主界面 17
5.1.2 租客注册界面 17
5.1.3 租客登录界面 18
5.1.4 房屋详情界面 19
5.1.5 看房申请界面 19
5.1.6 租赁合同界面 20
5.1.7 收租信息界面 20
5.2 管理员功能模块的实现 21
5.2.1 管理员登录界面 21
5.2.2 租客管理界面 21
5.2.3 户主管理界面 22
5.2.4 房屋信息管理界面 22
5.2.5 看房申请管理界面 23
5.2.6 租赁合同管理界面 23
5.2.7 收租信息管理界面 24
6 系统测试 25
6.1 测试定义 25
6.2 测试目的 25
6.3 测试特性 26
6.4测试结果 26
7 结论 28
参考文献 29
致 谢 30

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_3306428634

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值