基于SpringBoot+vue的租房网站设计与实现

news2024/12/24 0:36:55

  博主介绍

大家好,我是一名在Java圈混迹十余年的程序员,精通Java编程语言,同时也熟练掌握微信小程序、Python和Android等技术,能够为大家提供全方位的技术支持和交流。
我擅长在JavaWeb、SSH、SSM、SpringBoot等框架下进行项目开发,具有丰富的项目经验和开发技能。我的代码风格规范、优美、易读性强,同时也注重性能优化、代码重构等方面的实践和经验总结。
我有丰富的成品Java毕设项目经验,能够为学生提供各类个性化的开题框架和实际运作方案。同时我也提供相关的学习资料、程序开发、技术解答、代码讲解、文档报告等专业服务。

🍅文末获取源码联系🍅

👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟

Java项目精品实战案例(300套)

租房网站源码下载地址:

https://download.csdn.net/download/weixin_54828627/87717319

一、前言介绍

在网络高速发展的时代,众多的软件被开发出来,给用户带来了很大的选择余地,而且人们越来越追求更个性的需求。在这种时代背景下,房东只能以用户为导向,所以开发租房网站是必须的。

系统采用了Java技术,将所有业务模块采用以浏览器交互的模式,选择MySQL作为系统的数据库,开发工具选择 eclipse来进行系统的设计。对系统进行测试后,改善了程序逻辑和代码。同时确保系统中所有的程序都能正常运行,所有的功能都能操作,并且该系统有很好的操作体验,实现了租房网站。

二、主要技术

技术名作用
SpringBoot后端框架
Vue前端框架
MySQL数据库

三、系统设计(部分)

3.1、主要功能模块设计         

本系统有管理员;首页、个人中心、用户管理、房屋类型管理、房屋信息管理、预约看房管理、在线签约管理、租赁评价管理、交流论坛、系统管理,用户;首页、个人中心、预约看房管理、在线签约管理、租赁评价管理、我的收藏管理,前台首页;首页、房屋信息、交流论坛、房屋资讯、个人中心、后台管理、在线客服等功能。

3.2、系统登录设计

四、数据库设计(部分)

数据库的功能就是对系统中所有的数据进行存储和管理。所有的数据可以在数据库中产时间的进行存储,方便用户的使用。而且所有的数据库中的数据也应该具有一定的共享性,任何的系统可以对一些数据进行使用,同时还应该保持一定的独立性,每一个数据库中的数据都有很强的安全性,可以被很好的存放到数据库,没有进行身份的验证是不能对这些数据进行查看和使用的。数据库的设计需要明确每一个实体之间的联系,系统的E-R图如下图所示::

管理员实体主要存储管理信息包括用户名、密码、角色。管理员信息属性图如图4-4所示。

图4-4 管理员信息实体属性图

在线签约信息实体图如图4-5所示:

五、运行截图

5.1、管理员登录

管理员输入个人的用户名、密码、角色登录系统,这时候系统的数据库就会在进行查找相关的信息,如果我们输入的用户名、密码、角色不正确,数据库就会提示出错误的信息提示,同时会提示管理员重新输入自己的用户名、密码、角色,直到账号密码输入成功后,会提登录成功的信息。网站管理员登录效果图如图5-1所示:

图5-1管理员登录界面

5.2、管理员功能模块

5.2.1、用户管理

管理员对用户管理进行详情、删除、修改操作。程序成效图如下图5-2所示:

图5-2用户管理界面图

5.2.2、房屋类型管理

图5-3房屋类型管理界面

5.2.3、房屋信息管理

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

5.2.4、房屋资讯

图5-5房屋资讯界面

5.2.5预约看房管理

图5-6预约看房管理界面

5.2.6在线签约管理

图5-7在线签约管理界面

5.2.7交流论坛

图5-8交流论坛界面

5.3、用户功能模块

用户进入系统可以对首页、个人中心、预约看房管理、在线签约管理、租赁评价管理、我的收藏管理进行相对应操作。程序成效图如下图5-9所示:

图5-9用户功能界面图

5.3.1预约看房管理

图5-10预约看房管理界面

5.3.2在线签约管理

图5-11在线签约管理界面

5.3.2租赁评价管理

图5-12租赁评价管理界面

5.4、前台首页功能模块

 租房网站,在租房网站可以查看首页、房屋信息、交流论坛、房屋资讯、个人中心、后台管理、在线客服等内容,如图5-13所示。

图5-13系统首页界面图

5.4.1、用户登录、用户注册

图5-14用户登录、用户注册界面图

5.4.2、个人中心

图5-15个人中心界面图

5.4.3、预约看房

图5-16预约看房界面图

七、代码参考

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.ChatEntity;
import com.entity.view.ChatView;

import com.service.ChatService;
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 2021-03-11 14:12:56
 */
@RestController
@RequestMapping("/chat")
public class ChatController {
    @Autowired
    private ChatService chatService;
    


    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,ChatEntity chat,
		HttpServletRequest request){
    	if(!request.getSession().getAttribute("role").toString().equals("管理员")) {
    		chat.setUserid((Long)request.getSession().getAttribute("userId"));
    	}
        EntityWrapper<ChatEntity> ew = new EntityWrapper<ChatEntity>();
		PageUtils page = chatService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, chat), params), params));

        return R.ok().put("data", page);
    }
    
    /**
     * 前端列表
     */
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,ChatEntity chat, HttpServletRequest request){
    	if(!request.getSession().getAttribute("role").toString().equals("管理员")) {
    		chat.setUserid((Long)request.getSession().getAttribute("userId"));
    	}
        EntityWrapper<ChatEntity> ew = new EntityWrapper<ChatEntity>();
		PageUtils page = chatService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, chat), params), params));
        return R.ok().put("data", page);
    }

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

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(ChatEntity chat){
        EntityWrapper< ChatEntity> ew = new EntityWrapper< ChatEntity>();
 		ew.allEq(MPUtil.allEQMapPre( chat, "chat")); 
		ChatView chatView =  chatService.selectView(ew);
		return R.ok("查询在线客服成功").put("data", chatView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        ChatEntity chat = chatService.selectById(id);
        return R.ok().put("data", chat);
    }

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



    /**
     * 后端保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody ChatEntity chat, HttpServletRequest request){
    	chat.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(chat);
    	if(StringUtils.isNotBlank(chat.getAsk())) {
			chatService.updateForSet("isreply=0", new EntityWrapper<ChatEntity>().eq("userid", request.getSession().getAttribute("userId")));
    		chat.setUserid((Long)request.getSession().getAttribute("userId"));
    		chat.setIsreply(1);
    	}
    	if(StringUtils.isNotBlank(chat.getReply())) {
    		chatService.updateForSet("isreply=0", new EntityWrapper<ChatEntity>().eq("userid", chat.getUserid()));
    		chat.setAdminid((Long)request.getSession().getAttribute("userId"));
    	}
        chatService.insert(chat);
        return R.ok();
    }
    
    /**
     * 前端保存
     */
    @RequestMapping("/add")
    public R add(@RequestBody ChatEntity chat, HttpServletRequest request){
    	chat.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(chat);
    	chat.setUserid((Long)request.getSession().getAttribute("userId"));
    	if(StringUtils.isNotBlank(chat.getAsk())) {
			chatService.updateForSet("isreply=0", new EntityWrapper<ChatEntity>().eq("userid", request.getSession().getAttribute("userId")));
    		chat.setUserid((Long)request.getSession().getAttribute("userId"));
    		chat.setIsreply(1);
    	}
    	if(StringUtils.isNotBlank(chat.getReply())) {
    		chatService.updateForSet("isreply=0", new EntityWrapper<ChatEntity>().eq("userid", chat.getUserid()));
    		chat.setAdminid((Long)request.getSession().getAttribute("userId"));
    	}
        chatService.insert(chat);
        return R.ok();
    }

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

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        chatService.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<ChatEntity> wrapper = new EntityWrapper<ChatEntity>();
		if(map.get("remindstart")!=null) {
			wrapper.ge(columnName, map.get("remindstart"));
		}
		if(map.get("remindend")!=null) {
			wrapper.le(columnName, map.get("remindend"));
		}


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


}

八、技术交流

大家点赞、收藏、关注、评论啦 、查看文章结尾👇🏻获取联系方式👇🏻

精彩专栏推荐订阅:下方专栏👇🏻👇🏻👇🏻👇🏻

Java项目精品实战案例(300套)

​​​​

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python中的Time和DateTime

Python在处理与时间相关的操作时有两个重要模块&#xff1a;time和datetime。在本文中&#xff0c;我们介绍这两个模块并为每个场景提供带有代码和输出的说明性示例。 time模块主要用于处理时间相关的操作&#xff0c;例如获取当前时间、时间的计算和格式化等。它提供了一些函数…

老胡的周刊(第093期)

老胡的信息周刊[1]&#xff0c;记录这周我看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。 &#x1f3af; 项目 dm-ticket[2] 大麦网自动购票, 支持 docker …

4、数据库:MySQL部署 - 系统部署系列文章

MySQL数据库在其它博文中有介绍&#xff0c;包括学习规划系列。今天就讲讲MySQL的部署事情。 一、先下载MySQL数据库&#xff1b; 到下面这个网址去下载数据库&#xff0c;这里下载的社区版&#xff1a; https://dev.mysql.com/downloads/installer/ 二、安装数据库&#xff1b…

读改变未来的九大算法笔记04_公钥加密

1. 加密的目的就是传输秘密 2. 分块密码&#xff08;Block Cipher&#xff09;的现代加密技术使用了相加把戏的变体 2.1. 加法得出的结果能用于统计分析&#xff0c;这意味着一些人能通过分析你的大量加密消息来得到密钥 2.2. 任何知道密钥的人都能用相反的步骤运行所有操作…

MathType7中文标准版数学公式编辑工具

MathType 是一款专业的数学公式编辑工具,提供交互式编辑器&#xff0c; 让你在编辑数学试卷、书籍、报刊、论文、幻灯演示等文档轻松输入各种复杂的数学公式和符号。当您准备坐下来撰写科学或技术论文&#xff0c;测试&#xff0c;幻灯片演示文稿或任何想要包括数学符号的地方时…

互联网野蛮生长,但金三银四好像消失了!

每次看到程序员字眼&#xff0c;就是秃头&#xff0c;肥胖&#xff0c;宅男、996&#xff0c;程序员&#xff0c;但是耐不住工资高啊&#xff01;但只有程序员才知道&#xff0c;干IT的&#xff0c;都有一个自己的程序员梦&#xff0c;梦想着能用 “代码改变世界”。 代码能不…

音视频实战开源项目学习第二期!

前言&#xff1a; 大家好&#xff0c;今天继续分享音视频开源学习第二期&#xff0c;在前面的一期里面&#xff0c;我已经给大家演示了如何去跑起这个开源项目&#xff0c;包括源码下载&#xff1b; 音视频实战开源项目学习第一期&#xff01; 今天继续来讲解这个开源项目。 不…

chatgpt赋能python:Python多行连一行:简便省事的代码优化方法

Python多行连一行&#xff1a;简便省事的代码优化方法 在Python编程中&#xff0c;经常会遇到多行代码的情况&#xff0c;这不仅降低了代码的可读性&#xff0c;也增加了调试的难度。为了解决这个问题&#xff0c;Python提供了多行连一行&#xff08;以反斜杠\结尾&#xff09…

Mocha AE:工具栏

Mocha AE 工具栏&#xff08;经典模式&#xff09;中的工具及视图选项。 保存 Save the project 保存项目 快捷键&#xff1a;Ctrl S 选取类工具 Pick Tool 选取工具 --Marquee Selection 矩形框选 --Lasso Selection 套索选取 Move inner and edge points 移动内部点和边缘…

YOLOv8 训练自己的数据集

本范例我们使用 ultralytics中的YOLOv8目标检测模型训练自己的数据集&#xff0c;从而能够检测气球。 #安装 !pip install -U ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple import ultralytics ultralytics.checks() 一&#xff0c;准备数据 公众号算法美食屋后…

JavaScript之DOM(九)

JavaScript之DOM 1、节点类型2、常用的属性与方法2.1、访问节点的常用方法2.2、增删改节点的常用方法2.3、class的常用方法2.4、css相关操作 DOM – Document Object Model (文档对象模型)&#xff0c;是 JS 操作 HTML 文档的接口&#xff0c;它最大的特点就是将文档表示为节点…

CloudQuery一体化数据库SQL操作安全管控平台

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; CloudQuery一体化数据库SQL操作安全管控平台 导读 CloudQuery作为业界领先的面向企业的数据库安全解决方案&#xff0c;CloudQuery致力于打造一站式安全可靠的数据操…

【C++】右值引用和移动语义

1.左值和右值 在C中&#xff0c;每个表达式或者是左值&#xff0c;或者是右值。 左值(lvalue)&#xff1a;可以出现在赋值表达式左侧的值&#xff0c;例如变量名a、数据成员a.m、下标表达式a[n]、解引用表达式*p等。左值可以被赋值和取地址。右值(rvalue)&#xff1a;只能出现…

jdk动态代理源码分析

jdk动态代理源码分析 前言动态代理----demo 案例jdk动态代理源码创建代理对象获取类把二进制流生成文件 jdk 动态代理的原理 前言 上一篇中我们知道动态代理的使用, Javase 专题之 静态代理和动态代理 我们只知道其中的使用,但是原理是什么? 不明白原理只知皮毛不是我们的目的…

chatgpt赋能python:Python在原图上继续画的SEO

Python在原图上继续画的SEO Python是一种高级的多范式编程语言&#xff0c;它使用简单、易于阅读的语法以及丰富和强大的数据结构使其成为工程师的首选。Python已经成为了一种非常流行的编程语言&#xff0c;它用于多种应用领域&#xff0c;包括Web开发、数据科学、机器学习、…

区间预测 | MATLAB实现基于QRCNN-LSTM卷积长短期记忆神经网络多变量时间序列区间预测

区间预测 | MATLAB实现基于QRCNN-LSTM卷积长短期记忆神经网络多变量时间序列区间预测 目录 区间预测 | MATLAB实现基于QRCNN-LSTM卷积长短期记忆神经网络多变量时间序列区间预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 1.Matlab实现基于QRCNN-LSTM卷积神经…

注解、原生Spring、SchemaBased三种方式实现AOP【附详细案例】

目录 一、注解配置AOP 1. 开启注解支持 2. 在类和方法加入注解 3. 测试 4. 为一个类下的所有方法统一配置切点 二、原生Spring实现AOP 1. 引入依赖 2. 编写SpringAOP通知类 3. 编写配置类bean2.xml 4 测试 三、SchemaBased实现AOP 1. 配置切面 2. 测试 往期专栏…

音视频技术开发周刊 | 296

每周一期&#xff0c;纵览音视频技术领域的干货。 新闻投稿&#xff1a;contributelivevideostack.com。 22字声明、近400名专家签署、AI教父Hinton与OpenAI CEO领头预警&#xff1a;AI可能灭绝人类&#xff01; 这份声明一经发布&#xff0c;便迅速得到了多伦多大学计算机科学…

基于zookeeper的kafka中间件

一、Zookeeper 概述 1、Zookeeper 定义 Zookeeper是一个开源的分布式的&#xff0c;为分布式框架提供协调服务的Apache项目。 2、Zookeeper 工作机制 Zookeeper从设计模式角度来理解&#xff1a;是一个基于观察者模式设计的分布式服务管理框架&#xff0c;它负责存储和管理…

昨天,小灰做了人生的第一次直播!

熟悉小灰的朋友们都知道&#xff0c;小灰是一个非常腼腆的人。虽然我比较擅长写东西&#xff0c;但完全不擅长口头表达&#xff0c;在公开场合讲话很容易紧张。 因此&#xff0c;对于网上直播&#xff0c;小灰在以前完全不敢想象。 但是&#xff0c;人终究需要成长的。就在昨天…