Java实现民宿预定管理系统 JAVA+Vue+SpringBoot+MySQL

news2024/11/16 23:45:33

在这里插入图片描述


目录

  • 一、摘要
    • 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/1438536.html

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

相关文章

幻兽帕鲁官方服务器不稳定怎么办?5秒钟自建幻兽帕鲁服务器

幻兽帕鲁太火了&#xff0c;官方palworld服务器不稳定&#xff1f;不如自建服务器&#xff0c;基于腾讯云幻兽帕鲁服务器成本32元全自动部署幻兽帕鲁服务器&#xff0c;超简单有手就行&#xff0c;全程自动化一键部署10秒钟即可搞定&#xff0c;无需玩家手动部署幻兽帕鲁游戏程…

时光峰峦文物璀璨,预防性保护筑安全

在璀璨的历史长河中&#xff0c;珍贵文物如同时间的印记&#xff0c;承载着过往的辉煌。《人文山水时光峰峦——多彩贵州历史文化展》便是这样一场文化的盛宴&#xff0c;汇聚了众多首次露面的宝藏。然而&#xff0c;文物的保存对环境要求极为苛刻&#xff0c;温湿度波动都可能…

十六、Vben框架table内部合并行

在vben项目中合并内部的行是一个常规的操作,以前我们说过如果是一条数据内部只需要分割拿高撑开就可以实现,在第三章的时候我们已经讲过了,那么如果是不定的条数合并为一条数据呢,怎么能够实现呢,下面我们就来讲讲。 先看效果图 如图,能看到是三条数据,其实是…

用keytool 生成JWT的RSA非对称密钥

写在前面 JWT 令牌 可以由 X.509 证书或 256 位非对称密钥签名来充当&#xff0c;为了获得合法的JWT 令牌&#xff0c;我们可以使用JDK中的keytool.exe工具来生成。 本例的操作环境是Windows系统&#xff0c;操作的前置条件需要先安装好JDK&#xff0c;并配置好环境变量&…

Unity类银河恶魔城学习记录4-4 4-5 P57-58 On Hit Impactp- Attack‘direction fix源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Entity.cs using System.Collections; using System.Collections.Generic;…

计算机视觉讲座PPT分享

最近在电子工业出版社做的《计算机视觉入门路线图》讲座的部分PPT。 主要介绍了计算机视觉的学习基本路线。

yolov8使用旋转框自己做数据集检测

主要在数据集制作&#xff0c;训练的步骤和目标检测是一样的 1.数据集标注主要使用rolabelimg工具&#xff0c;这个工具不能在线安装 得下载源代码 然后运行 标注好数据保存会是一个xml文件 2.把xml文件转换成dota的xml文件&#xff0c;然后把dota的xml文件转换成dota的txt文件…

如何决定K8S Pod的剔除优先级

在Kubernetes&#xff08;k8s&#xff09;中&#xff0c;当节点资源面临压力时&#xff0c;如何决定Pod的优先级是一个关键问题。在Kubernetes 1.8版本之后&#xff0c;引入了基于Pod优先级的调度策略&#xff0c;即Pod Priority Preemption。这种策略允许在资源不足的情况下&a…

docker部署docker运维工具

简介 主要功能:管理容器,管理镜像,管理容器网络 安装 拉取镜像 docker pull joinsunsoft/docker.ui:1.0.1 启动容器 docker run -d --name docker.ui --restart always -v /var/run/docker.sock:/var/run/docker.sock -p 10039:8999 joinsunsoft/docker.ui:1.0.1 使用 打…

Swift Combine 从入门到精通一

1. Combine 简介 用 Apple 官方的话来说&#xff0c;Combine 是: a declarative Swift API for processing values over time. Combine 是 Apple 用来实现函数响应式编程的库&#xff0c; 类似于 RxSwift。 RxSwift 是 ReactiveX 对 Swift 语言的实现。 Combine 使用了许多可以…

泰克示波器——TBS2000系列界面整体介绍

目录 1.1 通道区域面板标识1.2 示波器测试输出&#xff08;检测探针与设置的好坏&#xff09;1.3 面板其他快捷按钮1.4 波器整体界面 1.1 通道区域面板标识 在通道面板的下方标识有示波器的通道属性以及参数值&#xff0c;如我使用的型号为“TBS2104X”的示波器&#xff0c;面…

Spring速成(三)

文章目录 Spring速成&#xff08;三&#xff09;1&#xff0c;AOP简介1.1 什么是AOP?1.2 AOP作用1.3 AOP核心概念 2&#xff0c;AOP入门案例2.1 需求分析2.2 思路分析2.3 环境准备2.4 AOP实现步骤步骤1:添加依赖步骤2:定义接口与实现类步骤3:定义通知类和通知步骤4:定义切入点…

中科大计网学习记录笔记(六):应用层概述 | 应用层原理

前言&#xff1a; 学习视频&#xff1a;中科大郑烇、杨坚全套《计算机网络&#xff08;自顶向下方法 第7版&#xff0c;James F.Kurose&#xff0c;Keith W.Ross&#xff09;》课程 该视频是B站非常著名的计网学习视频&#xff0c;但相信很多朋友和我一样在听完前面的部分发现信…

基于SSM的餐厅点菜管理系统(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的餐厅点菜管理系统&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring …

作业2.7

一、填空题 1、在下列程序的空格处填上适当的字句&#xff0c;使输出为&#xff1a;0&#xff0c;2&#xff0c;10。 #include <iostream> #include <math.h> class Magic {double x; public: Magic(double d0.00):x(fabs(d)) {} Magic operator(__const Magic&…

【前端web入门第四天】03 显示模式+综合案例热词与banner效果

文章目录: 1. 显示模式 1.1 块级元素,行内元素,行内块元素 1.2 转换显示模式 综合案例 综合案例一 热词综合案例二 banner效果 1. 显示模式 什么是显示模式 标签(元素)的显示方式 标签的作用是什么? 布局网页的时候&#xff0c;根据标签的显示模式选择合适的标签摆放内容。…

微服务介绍、使用 Nacos 实现远程调用以及 OpenFeign 的使用

1 微服务的概念 区别于单体项目 单体项目拆分成微服务项目的目标&#xff1a;高内聚、低耦合 拆分思路 纵向拆分&#xff1a;根据功能模块 横向拆分&#xff1a;抽取可复用模块 2 微服务拆分——远程调用 背景&#xff1a;微服务单一职责&#xff0c;每个服务只有自己的功能…

海岛火山:可视化技术下的自然奇观

当我们谈论大自然的奇观时&#xff0c;海岛火山总是能引起人们无限的遐想&#xff0c;它们像是大海深处的秘密守护者&#xff0c;时而宁静&#xff0c;时而狂暴&#xff0c;用它们独特的方式诠释着大自然的魅力和力量。 海岛火山是大自然的画家&#xff0c;用火与土绘制出一幅幅…

CSS Transition:为网页元素增添优雅过渡效果

随着互联网的发展&#xff0c;网页的视觉效果和用户体验变得尤为重要。CSS Transition作为一种能够让网页元素在状态改变时呈现平滑过渡效果的工具&#xff0c;受到了广大前端开发者的青睐。本文将详细介绍CSS Transition的基本概念、使用方法以及常见应用&#xff0c;帮助读者…

使用 WMI 查询安全软件信息

在这篇文章中&#xff0c;我们将详细介绍如何使用 Windows Management Instrumentation (WMI) API 来查询当前计算机上安装的安全软件的基本信息。我们将分析代码的各个部分&#xff0c;并解释每个步骤所涉及的技术和原理。 一、什么是 WMI&#xff1f; WMI 是 Windows Manag…