基于SpringBoot的民宿预定管理系统 JAVA简易版

在这里插入图片描述


目录

  • 一、摘要
    • 1.1 项目介绍
    • 1.2 项目录屏
  • 二、功能模块
    • 2.1 用例设计
    • 2.2 功能设计
      • 2.2.1 租客角色
      • 2.2.2 房主角色
      • 2.2.3 系统管理员角色
  • 三、系统展示
  • 四、核心代码
    • 4.1 查询民宿
    • 4.2 新增民宿
    • 4.3 新增民宿评价
    • 4.4 查询留言
    • 4.5 新增民宿订单
  • 五、免责说明


一、摘要

1.1 项目介绍

基于JAVA+Vue+SpringBoot+MySQL的民宿预定管理系统,包含了民宿档案模块、民宿订单模块、民宿评价模块、民宿留言模块,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,民宿预定管理系统基于角色的访问控制,给民宿管理员、旅客使用,可将权限精确到按钮级别,您可以自定义角色并分配权限,系统适合设计精确的权限约束需求。

1.2 项目录屏


二、功能模块

2.1 用例设计

民宿预订管理系统,使用Spring Boot、Vue.js 框架进行开发,后台服务器使用了Tomcat,数据库使用MySQL。

该系统实现了登录注册、上传房源、预订民宿、我的留言、评价功能、订单生成等模块功能。

本系统分为以下三种用户类型。

租客:指那些在平台上注册的想要租民宿的消费者。

房主:指上传房源的当前民宿经营者。

系统管理员:指管理房源、用户与评论,帮助租客和房主解决问题的系统管理者。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.2 功能设计

民宿预订管理系统本系统分为使用用户类型分为租客、房主、系统管理员三种,具体功能结构如下。

2.2.1 租客角色

  1. 注册、登录功能
  2. 搜索功能:根据某些特定项模糊匹配民宿。
  3. 预订功能:在线预订民宿房间。
  4. 留言和评论功能:可以跟其他角色留言、评论民宿房间。
  5. 订单功能:查看生成的订单详情,进行退订操作。

2.2.2 房主角色

  1. 注册、登录功能
  2. 搜索功能:根据某些特定项模糊匹配民宿。
  3. 民宿房源管理功能:修改房源状态与信息、上传房源照片、新增房源、搜索房源。
  4. 留言和评论功能:可以跟其他角色留言、评论民宿房间。
  5. 订单功能:可以查看生成的订单信息。

2.2.3 系统管理员角色

  1. 注册、登录功能
  2. 搜索功能:根据某些特定项模糊匹配民宿。
  3. 用户管理:按条件查询所有类型的用户,删除用户,修改自己的信息。
  4. 房源管理:修改房源上下线状态。
  5. 留言和评论管理:可以回复租客和房主的问题且可以删除评论。

三、系统展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


四、核心代码

4.1 查询民宿

@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
@ApiOperation(value = "查询民宿")
public Result<IPage<Homestay>> getByPage(@ModelAttribute Homestay homestay ,@ModelAttribute PageVo page){
    QueryWrapper<Homestay> qw = new QueryWrapper<>();
    User currUser = securityUtil.getCurrUser();
    // 如果是房主,自己看自己
    QueryWrapper<User> userQw = new QueryWrapper<>();
    userQw.eq("id",currUser.getId());
    userQw.inSql("id","SELECT user_id FROM a_user_role WHERE del_flag = 0 and role_id = '1635922262441988096'");
    if(iUserService.count(userQw) > 0L) {
        qw.eq("user_id",currUser.getId());
    }
    if(!ZwzNullUtils.isNull(homestay.getTitle())) {
        qw.like("title",homestay.getTitle());
    }
    if(!ZwzNullUtils.isNull(homestay.getStatus())) {
        qw.eq("status",homestay.getStatus());
    }
    IPage<Homestay> data = iHomestayService.page(PageUtil.initMpPage(page),qw);
    return new ResultUtil<IPage<Homestay>>().setData(data);
}

4.2 新增民宿

@RequestMapping(value = "/insert", method = RequestMethod.POST)
@ApiOperation(value = "新增民宿")
public Result<Homestay> insert(Homestay homestay){
    User currUser = securityUtil.getCurrUser();
    homestay.setUserId(currUser.getId());
    iHomestayService.saveOrUpdate(homestay);
    return new ResultUtil<Homestay>().setData(homestay);
}

4.3 新增民宿评价

@RequestMapping(value = "/insert", method = RequestMethod.POST)
@ApiOperation(value = "新增评价")
public Result<Appraise> insert(Appraise appraise){
    Homestay h = iHomestayService.getById(appraise.getDormId());
    if(h == null) {
        return ResultUtil.error("民宿不存在");
    }
    appraise.setDormName(h.getTitle());
    User currUser = securityUtil.getCurrUser();
    appraise.setUserId(currUser.getId());
    appraise.setUserName(currUser.getNickname());
    iAppraiseService.saveOrUpdate(appraise);
    return new ResultUtil<Appraise>().setData(appraise);
}

4.4 查询留言

@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
@ApiOperation(value = "查询留言")
public Result<IPage<Message>> getByPage(@ModelAttribute Message message ,@ModelAttribute PageVo page){
    QueryWrapper<Message> qw = new QueryWrapper<>();
    User currUser = securityUtil.getCurrUser();
    // 如果是租客,自己看自己
    QueryWrapper<User> userQw = new QueryWrapper<>();
    userQw.eq("id",currUser.getId());
    userQw.inSql("id","SELECT user_id FROM a_user_role WHERE del_flag = 0 and role_id = '1536606659751841795'");
    if(iUserService.count(userQw) > 0L) {
        qw.eq("user_id",currUser.getId());
    }
    if(!ZwzNullUtils.isNull(message.getContent())) {
        qw.like("content",message.getContent());
    }
    if(!ZwzNullUtils.isNull(message.getUserName())) {
        qw.like("user_name",message.getUserName());
    }
    IPage<Message> data = iMessageService.page(PageUtil.initMpPage(page),qw);
    return new ResultUtil<IPage<Message>>().setData(data);
}

4.5 新增民宿订单

@RequestMapping(value = "/insert", method = RequestMethod.POST)
@ApiOperation(value = "新增订单")
public Result<Order> insert(Order order){
    Homestay h = iHomestayService.getById(order.getDormId());
    if(h == null) {
        return ResultUtil.error("民宿不存在");
    }
    order.setDormName(h.getTitle());
    User currUser = securityUtil.getCurrUser();
    order.setUserId(currUser.getId());
    order.setUserName(currUser.getNickname());
    order.setUserMobile(currUser.getMobile());
    order.setDate(DateUtil.today());
    iOrderService.saveOrUpdate(order);
    return new ResultUtil<Order>().setData(order);
}

五、免责说明

  • 本项目仅供个人学习使用,商用授权请联系博主,否则后果自负。
  • 博主拥有本软件构建后的应用系统全部内容所有权及独立的知识产权,拥有最终解释权。
  • 如有问题,欢迎在仓库 Issue 留言,看到后会第一时间回复,相关意见会酌情考虑,但没有一定被采纳的承诺或保证。

下载本系统代码或使用本系统的用户,必须同意以下内容,否则请勿下载!

  1. 出于自愿而使用/开发本软件,了解使用本软件的风险,且同意自己承担使用本软件的风险。
  2. 利用本软件构建的网站的任何信息内容以及导致的任何版权纠纷和法律争议及后果和博主无关,博主对此不承担任何责任。
  3. 在任何情况下,对于因使用或无法使用本软件而导致的任何难以合理预估的损失(包括但不仅限于商业利润损失、业务中断与业务信息丢失),博主概不承担任何责任。
  4. 必须了解使用本软件的风险,博主不承诺提供一对一的技术支持、使用担保,也不承担任何因本软件而产生的难以预料的问题的相关责任。

在这里插入图片描述er>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

6款文章改写神器免费修改文章效果好

文章写作对于很多人来说&#xff0c;写作并不是一件轻松的事情。尤其是在需要频繁产出大量文章的时候&#xff0c;如何保持文章的原创性和质量就成了一个挑战。但是方法还是有的&#xff0c;如今许多免费的文章改写神器可以通过改写文章的方式生成全新的原创文章&#xff0c;从…

MyBatis-Plus的进阶:乐观锁和悲观锁、逻辑删除、分页和查询构造器

目录 1.乐观锁和悲观锁 1.1.什么是乐观锁和悲观锁 1.2.乐观锁和悲观锁的区别 1.3.综合案例 2.逻辑删除 2.1.什么是逻辑删除 2.2.为什么使用逻辑删除 2.3.综合案例 2.3.1.官方提示 2.3.2.配置方式 2.3.3.案例演示 3.分页和查询构造器 3.1.查询构造器 3.2.分页 1.乐…

YOLOv5改进 | 检测头篇 | 利用DynamicHead增加辅助检测头进行针对性检测(让小目标无所遁形)

一、本文介绍 本文给大家带来的改进机制是针对性的改进,针对于小目标检测增加P2层,利用DynamicHead(原版本一比一复现,全网独一份,不同于网上魔改版本)进行检测,其中我们增加P2层其拥有更高的分辨率,这使得模型能够更好地捕捉到小尺寸目标的细节。在这些的基础上配合Dyn…

一、Flask学习之HTML

一、Flask学习之HTML 1.运行简单页面 首先需要搭建环境&#xff1a; pip install flaskfrom flask import Flaskapp Flask(__name__)# 创建了网址 /show/info 和函数index之间的对应关系&#xff0c;以后用户在浏览器上访问/show/info&#xff0c;网站自动执行index函数 ap…

npm超详细安装(包括配置环境变量)!!!npm安装教程(node.js安装教程)

安装node.js:(建议选择相对低一点的版本&#xff0c;相对稳定)​下载完成直接点击next即可(安装过程中会直接添加path的系统变量&#xff0c;变量值是自己的安装路径&#xff0c;可自行选择&#xff0c;比如&#xff1a;D:\software\)​安装完成:winR打开电脑控制台&#xff0c…

python依赖安装、执行、打包

python依赖安装、执行、编译打包 本文介绍python项目的依赖安装、执行、以及使用pyinstaller编译打包成可执行文件的命令。 python项目执行部署有两种方式&#xff0c;具体步骤&#xff1a; 一、python环境安装 --> 安装pip --> 依赖包安装 --> 执行python程序 二、使…

操作系统课程设计-Linux 进程间通信

目录 前言 1 实验题目 2 实验目的 3 实验内容 3.1 步骤 3.2 关键代码 3.2.1 Server和Client的创建 3.2.2 Server核心代码 3.2.3 Server核心代码 4 实验结果与分析 5 代码 前言 本实验为课设内容&#xff0c;博客内容为部分报告内容&#xff0c;仅为大家提供参考&…

如何在CentOS下使用Docker部署Halo博客网站并结合内网穿透远程访问

文章目录 ⛳️ 推荐1. Docker部署Halo1.1 检查Docker版本如果未安装Docker可参考已安装Docker步骤&#xff1a;1.2 在Docker中部署Halo 2. Linux安装Cpolar2.1 打开服务器防火墙2.2 安装cpolar内网穿透 3. 配置Halo个人博客公网地址4. 固定Halo公网地址 ⛳️ 推荐 前些天发现了…

关于LIN总线,同步间隔段最大时间及各种间隔符最大时间的解释,与说明

1&#xff1a;LIN同步间隔段的最小长度 如果问&#xff01;LIN同步间隔段的最小长度&#xff1f;大多数同学会一口答出">13bit位的显性位" 那如果问&#xff01;最大长度是多少&#xff1f; 则很少有同学会会突然懵逼&#xff01; 资料上给出的答案&#xff0…

2024杭州国际智慧城市,人工智能,安防展览会(杭州智博会)

在智能化浪潮的冲击下&#xff0c;我们的生活与环境正在经历一场深刻的变革。这是一场前所未有的技术革命&#xff0c;它以前所未有的速度和广度&#xff0c;改变着我们的生活方式、工作方式、思维方式和社会结构。在这场变革中&#xff0c;有的人选择激流勇进&#xff0c;拥抱…

JDBC概述和使用详解

文章目录 JDBC如何使用JDBC?Java 操作 数据库 JDBC 概述&#xff1a;Java Database Connectivity , Java数据库连接&#xff0c;通过Java语言操作数据库JDBC本质&#xff1a;官方定义的一套操作所有关系型数据库的规则&#xff0c;即接口。 各个数据库厂商去实现这套接口&…

pl/sql程序块的使用

-- Created on 2024-01-15 by ADMINISTRATOR declare -- Local variables hererecord_tablename varchar2(100);---test_record表名record_StartNo integer(19);---test_record开始编号temp_No integer(19);maxnbbh integer(19);nCnt integer : 20;fi…

安卓开发-day

一、安卓项目结构 1、manifests文件夹 Android系统配置文件夹&#xff0c;包含一个AndroidManifest.xml文件&#xff1b; AndroidMainifest.xml文件是每个android项目必须要包含的文件&#xff08;项目唯一&#xff09;&#xff0c;创建项目时默认就会生成这个文件&#xff0…

RDMA Send Receive操作详解

1. 前言 RDMA指的是远程直接内存访问&#xff0c;这是一种通过网络在两个应用程序之间搬运缓冲区里的数据的方法。RDMA与传统的网络接口不同&#xff0c;因为它绕过了操作系统。这允许实现了RDMA的程序具有如下特点&#xff1a; 绝对的最低时延 最高的吞吐量 最小的CPU足迹 &a…

人工智能 AI 如何让我们的生活更加便利

每个人都可以从新技术中获益&#xff0c;一想到工作或生活更为便利、简捷且拥有更多空余时间&#xff0c;谁会不为之高兴呢&#xff1f;借助人工智能&#xff0c;每天能够多一些空余时间&#xff0c;或丰富自己的业余生活&#xff0c;为培养日常兴趣爱好增添一点便利。从电子阅…

ubuntu18.04 安装mysql(命令)

1.安装MySQL #命令1 sudo apt-get update #命令2 sudo apt-get install mysql-server 2.配置MySQL sudo mysql_secure_installation 2.2 检查mysql服务状态 systemctl status mysql.service 3.配置远程访问 在Ubuntu下MySQL缺省是只允许本地访问的 3.1 首先用根用户进入…

CentOS安装maxwell

CentOs安装maxwell 一、简介二、准备工作三、安装1、下载安装包2、解压3、编写配置文件4、启动maxwell5、验证6、停止maxwell 四、说明1、更新数据2、插入数据3、删除数据 五、遇到问题 一、简介 maxwell是由美国Zendesk公司开源&#xff0c;它通过读取mysql的binlog日志&#…

大语言模型系列-Transformer

文章目录 前言一、Attention二、Transformer结构三、Transformer计算过程1. 编码器&#xff08;Encoder&#xff09;1&#xff09;Self-Attention层2&#xff09;Multi-Head-Attention层3&#xff09;Add & Norm层 2. 解码器&#xff08;Decoder&#xff09;1&#xff09;M…

CC工具箱使用指南:【坡度细碎图斑融合】

一、简介 这算是一个定制的工具&#xff0c;可惜没用上&#xff0c;扔掉也可惜&#xff0c;就放出来&#xff0c;可能会有同样需求的人用得上。 在ArcGIS中通过DEM生成的坡度是栅格格式的&#xff0c;再经过栅格转矢量后&#xff0c;会存在一些碎图斑。 这个工具的目的是&am…

从零开始学习Zeppelin:大数据可视化分析的交互式开发系统!

介绍&#xff1a;Apache Zeppelin是一个基于Web的交互式开发系统&#xff0c;主要用于进行大数据可视化分析。其核心概念是notebook&#xff0c;所有的操作都可以在notebook中完成。Zeppelin提供了一套非常全面的数据分析解决方案&#xff0c;支持数据采集、数据发现、数据分析…