【开源】基于Vue和SpringBoot的民宿预定管理系统

news2024/11/18 3:36:51

在这里插入图片描述

项目编号: S 058 ,文末获取源码。 \color{red}{项目编号:S058,文末获取源码。} 项目编号:S058,文末获取源码。


目录

  • 一、摘要
    • 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. 必须了解使用本软件的风险,博主不承诺提供一对一的技术支持、使用担保,也不承担任何因本软件而产生的难以预料的问题的相关责任。

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

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

相关文章

什么是 802.1X?它是如何工作的?

什么是 802.1X&#xff1f;它是如何工作的&#xff1f; 什么是IEEE 802.1X&#xff1f;802.1X是如何工作的&#xff1f;802.1X EAP安全是什么&#xff1f;802.1X用在哪里&#xff1f;IEEE 802.1X和Wi-Fi是否相同&#xff1f;什么是有线802.1X&#xff1f; 802.1X的安全性有多高…

(论文阅读)TiDB:一款基于Raft的HTAP数据库

引言 混合事务分析处理&#xff08;HTAP&#xff09;数据库要求隔离处理事务查询和分析查询&#xff0c;以消除它们之间的干扰。要实现这一点&#xff0c;有必要维护为这两种查询类型指定的数据的不同副本。然而&#xff0c;为存储系统中的分布式副本提供一致的视图是一项挑战…

滚雪球学Java(09-3):Java中的逻辑运算符,你真的掌握了吗?

咦咦咦&#xff0c;各位小可爱&#xff0c;我是你们的好伙伴——bug菌&#xff0c;今天又来给大家普及Java SE相关知识点了&#xff0c;别躲起来啊&#xff0c;听我讲干货还不快点赞&#xff0c;赞多了我就有动力讲得更嗨啦&#xff01;所以呀&#xff0c;养成先点赞后阅读的好…

7.docker运行redis容器

1.准备redis的配置文件 从上一篇运行MySQL容器我们知道&#xff0c;需要给容器挂载数据卷&#xff0c;来持久化数据和配置&#xff0c;相应的redis也不例外。这里我们以redis6.0.8为例来实际说明下。 1.1 查找redis的配置文件redis.conf 下面这个网址有各种版本的配置文件供…

Android Studio Error “Unsupported class file major version 61“---异常信息记录

编译时异常信息 原因及解决办法 问题出在JAVA 17上&#xff0c;并且使用的Gradle JDK是&#xff1a;Android Studio java home版本17.0.1将其更改为&#xff1a;Android Studio默认JDK版本11.0.10 即可解决 操作步骤 1 2 3

基于STC12C5A60S2系列1T 8051单片的IIC总线器件模数芯片PCF8591实现模数转换应用

基于STC12C5A60S2系列1T 8051单片的IIC总线器件模数芯片PCF8591实现模数转换应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍IIC总线器件模数芯片PCF8591介绍通过I…

RT-Thread STM32F407 PWM

为了展示PWM效果&#xff0c;这里用ADC来采集PWM输出通道的电平变化 第一步&#xff0c;进入RT-Thread Settings配置PWM驱动 第二步&#xff0c;进入board.h&#xff0c;打开PWM宏 第三步&#xff0c;进入STM32CubeMX&#xff0c;配置时钟及PWM 第四步&#xff0c;回到R…

免费开源的区域屏幕录制(gif转换)工具(支持编辑功能)

软件优点&#xff1a;区域截屏&#xff0c;直接转换为gif即刻分享&#xff0c;免费开源&#xff0c;支持编辑功能 它可以让你轻松地录制屏幕&#xff0c;摄像头或画板的动画&#xff0c;并编辑、保存为 GIF&#xff0c;视频或其他格式。 下载并安装 ScreenToGif 首先&#xf…

CentOS挂载:解锁文件系统的力量

目录 引言1 挂载简介2 挂载本地分区3 挂载网络共享文件系统4 使用CIFS挂载结论 引言 在CentOS&#xff08;一种基于Linux的操作系统&#xff09;上挂载文件系统是一项常见而重要的任务&#xff0c;无论是将新的磁盘驱动器添加到系统&#xff0c;还是挂载网络共享资源&#xff…

C#检查服务状态,以及进行服务启停

1. linux环境 linux环境通过执行bash命令直接执行&#xff1a; public string RunCmdLinux(string cmd){var proc new Process();System.Console.Write($"Run Linux cmd > [{cmd}] START!");proc.StartInfo.CreateNoWindow true;proc.StartInfo.FileName &…

【如何学习Python自动化测试】—— 自动化测试环境搭建

1、 自动化测试环境搭建 1.1 为什么选择 Python 什么是python&#xff0c;引用python官方的说法就是“一种解释型的、面向对象、带有励志语义的高级程序设计语言”&#xff0c;对于很多测试人员来说&#xff0c;这段话包含了很多术语&#xff0c;而测试人员大多是希望利用编程…

机器学习:十大算法快速回顾

一、说明 对于机器学习的是个经典算法&#xff0c;本篇将展示一个回顾&#xff0c;注意&#xff0c;本篇不是具体原理信息介绍&#xff0c;没有代码&#xff0c;但是对于初学者是一个有益的导读。 二. 线性回归 2.1 算法描述 有没有想过数据奇才如何预测未来&#xff1f;输入线…

【spring】ApplicationContext的实现

目录 一、ClassPathXmlApplicationContext1.1 说明1.2 代码示例1.3 截图示例 二、FileSystemXmlApplicationContext2.1 说明2.2 代码示例2.3 加载xml的bean定义示例 三、AnnotationConfigApplicationContext3.1 说明3.2 代码示例3.3 截图示例 四、AnnotationConfigServletWebSe…

40 _ 初识动态规划:如何巧妙解决“双十一”购物时的凑单问题?

淘宝的“双十一”购物节有各种促销活动,比如“满200元减50元”。假设你女朋友的购物车中有n个(n>100)想买的商品,她希望从里面选几个,在凑够满减条件的前提下,让选出来的商品价格总和最大程度地接近满减条件(200元),这样就可以极大限度地“薅羊毛”。作为程序员的你…

【汇编】栈及栈操作的实现

文章目录 前言一、栈是什么&#xff1f;二、栈的特点三、栈操作四、8086cpu操作栈4.1 汇编指令4.2 汇编代码讲解问题&#xff1a;回答&#xff1a; 4.3 栈的操作4.3 push 指令和pop指令的执行过程执行入栈(push)时&#xff0c;栈顶超出栈空间执行出栈(pop)时&#xff0c;栈顶超…

Bert浅谈

优点 首先&#xff0c;bert的创新点在于利用了双向transformer&#xff0c;这就跟openai的gpt有区别&#xff0c;gpt是采用单向的transformer&#xff0c;而作者认为双向transformer更能够融合上下文的信息。这里双向和单向的区别在于&#xff0c;单向只跟当前位置之前的tocke…

【小收获】数组在声明时整体赋值的细节

在C中&#xff0c;在全局区声明的数组会自动初始化 如果没有为全局区的整数类型的数组指定初始值&#xff0c;那么它的元素都会被自动初始化为0。该特性适用于所有整数类型的数组&#xff0c;包括char、short、int、long等。&#xff08;注:char类型数组自动初始化为0&#xff…

CCF ChinaSoft 2023 论坛巡礼 | CCF-华为胡杨林基金-软件工程专项(海报)论坛

2023年CCF中国软件大会&#xff08;CCF ChinaSoft 2023&#xff09;由CCF主办&#xff0c;CCF系统软件专委会、形式化方法专委会、软件工程专委会以及复旦大学联合承办&#xff0c;将于2023年12月1-3日在上海国际会议中心举行。 本次大会主题是“智能化软件创新推动数字经济与社…

MySQL数据库——存储过程-游标(介绍-声明游标、打开游标、获取游标记录、关闭游标,案例)

目录 介绍 声明游标 打开游标 获取游标记录 关闭游标 案例 介绍 游标&#xff08;CURSOR&#xff09;是用来存储查询结果集的数据类型 , 在存储过程和函数中可以使用游标对结果集进行循环的处理。 游标的使用包括游标的声明、OPEN、FETCH 和 CLOSE&#xff0c;其语法…

机器学习第8天:线性SVM分类

文章目录 介绍 特征缩放 示例代码 硬间隔与软间隔分类 主要代码 代码解释 结语 介绍 作用&#xff1a;判别种类 原理&#xff1a;找出一个决策边界&#xff0c;判断数据所处区域来识别种类 简单介绍一下SVM分类的思想&#xff0c;我们看下面这张图&#xff0c;两种分类都…