基于Spring Boot框架的在线导游预约系统

2024-02-13 13:59

本文主要是介绍基于Spring Boot框架的在线导游预约系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

源码获取:私聊回复【SpringBoot、导游预约】获取
更多选题参考:
Java练手项目 & 个人学习等选题参考

文章目录

  • 前言
  • 一、背景及意义
    • 1、编写目的
    • 2、项目背景
    • 3、程序描述
    • 4、主要系统功能(分角色介绍)
      • 游客功能
      • 导游功能
      • 管理员功能
  • 二、总体设计
    • 1、需求规定
    • 2、运行环境
    • 3、使用说明
      • 部分页面截图展示
      • 管理员模块
      • 导游模块
      • 游客模块
  • 三、部分代码展示


前言

提示:这里可以添加本文要记录的大概内容:

因为一些导游的自私,为了蝇头小利而使游客处于尴尬境地。所以,想着玩的好,又想着少花钱,追求一个经济实惠的旅游。那么如何选择一个靠谱的导游是一个困难的问题。


提示:以下是本篇文章正文内容,下面案例可供参考

一、背景及意义

1、编写目的

本次项目设计目的是构建一个在线导游预约系统,主要完成游客在出门旅游时对导游的预定和对旅游类型的选择等操作。近年来,随着人们旅游活动日益增加,旅游产业的逐渐扩大,对于导游人员的需求量更是与日递增。旅游也成为了老百姓的所需。

导游服务是出门旅游活动中举足轻重的环节,人们外出旅游,是出于不同的动机,但究其本质旅游活动是为了满足人类精神需求,满足人们对自然美,艺术美,生活美的欣赏与享受。编写这样一个系统,符合人们旅游时选择导游所需,把优质的导游,不同类型的导游呈现在游客面前,让人们出行旅游省时省力。

实现旅游信息的交流和共享,为喜爱旅游的人们提供旅游经验的分享平台,带给用户不一样的分享体验,让用户畅游在平台为其构建的旅行空间之中

2、项目背景

导游的存在源于为游客提供服务,解决出行问题的。站在一个游客角度来看,首先就得思考在接下来的旅游中,将会遇到什么问题,从而思索导游存在是否能够解决。

那么,以以往出行经验来看,游客在旅游时,常遇到的问题包括,去哪玩?去哪吃?去哪住?怎么去?去哪买?基本围绕的就是旅游的这几大要素形成的服务需求。而这六要素需求的解决对于大部分人来说,又是基于价格对比考虑的,即大部分的人面临着钱不多,心不小的尴尬境地。

既想着玩的好,又想着少花钱,追求一个经济实惠的旅游。那么如何选择一个靠谱的导游是一个困难的问题,现在导游水平参差不齐,乱收费,强行买卖,人们很难选择到一个优质,安心的导游,做此项目,把导游评分,全部导游,全部透明的显示在游客面前,无二次收费,给游客一次好的导游预约体验。

3、程序描述

该程序段是以在线导游预约系统的登入页面设计,用于区分用户的身份,使用户以自己的身份(游客、导游或管理员)登入进该系统,登入页面不同,所执行的功能也不同。
要求所有用户在使用本系统之前都必须通过自己的用户名和密码登入,才能进行操作,该子系统主要判断用户登入时用户名和密码的正确性。
在这里插入图片描述

4、主要系统功能(分角色介绍)

游客功能

游客可以选择或者系统推荐当季热门、周边游、国内游、海外游等分类;

游客登陆后可以在导游预约中进行预约导游,对某个导游下订单的功能;

游客可以在订单中心查看订单,但不能进行任何操作;

游客可以对导游以及旅游景点进行留言评价;

游客可以查看自己的个人信息及对密码的修改;

导游功能

导游除了可以浏览其他用户的游记,还可以上传自己的旅游照片、视频,分享旅游心得,推荐旅游路线等;

游客和导游均可以查看管理员发布的旅游资讯和旅游活动;

导游可以在订单中心查看订单,但不能进行任何操作;

导游可以查看并管理全部预约信息;

导游可以对游客的留言评价进行恢复;

导游可以查看自己个人信息及对密码的修改;

管理员功能

管理员可以对导游及游客进行管理;

管理员对旅游分类进行管理;

管理员可以查看并管理全部预约信息;

管理员可管理导游及游客的留言评价并进行回复操作;

管理员可以查看自己个人信息及对密码的修改;

二、总体设计

1、需求规定

每个用户都有自己的用户名和密码,这是区分用户身份的有效凭证,只有正确输入用户名和密码才能登入系统开始使用,并且要完善用户的个人信息要求正确,方便管理员进行管理。管理员离职后,账号将注销,不能使用。

2、运行环境

包括开发软件、硬件环境,运行软件环境、硬件环境
开发软件:idea
操作系统:windows 10/11或者 Mac OS
数据库:mysql-8.0.11-winx64、mysql-8.0.21-winx64版本及以上,越高越好
开发环境: IntelliJ IDEA 2022.2.2、IntelliJ IDEA 2021.1.2 x64
服务器:apache-tomcat-9.0.22 或 apache-tomcat-9.0.56、apache-maven-3.3.3 或 apache-maven-3.8.4
浏览器:qq浏览器或 Win10自带浏览器或者其他浏览器都可以

大部分配置都是越高越好,但难免有些新出版本不稳定,所以一定要选稳定的

3、使用说明

logout
http://localhost:8181/login
退出登录另一账户即可

部分页面截图展示

管理员模块

管理员登录模块实现 password:【admin】
在这里插入图片描述

导游管理
在这里插入图片描述

会员管理
在这里插入图片描述

旅游管理
在这里插入图片描述

订单管理
在这里插入图片描述

预约管理
在这里插入图片描述

导游模块

游客登录模块实现 user:【a】、password:【1】
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

游客模块

游客登录模块实现 password:【aa】、【bb】,密码与用户名一样
在这里插入图片描述

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

三、部分代码展示

@RestController
@RequestMapping("/classification")
@Slf4j
public class ClassificationController {@ResourceClassificationService classificationService;/*** 添加分类* @param name* @return*/@PostMapping("/add")public Result addClassification(@RequestParam("name") String name){Classification classification = new Classification();classification.setName(name);if(classificationService.addClassification(classification)){return Result.success("创建成功!");}return Result.error("创建失败!");}/*** 删除分类* @param id* @return*/@DeleteMapping("/delete/{id}")public Result deleteClassification(@PathVariable Integer id){if(classificationService.deleteClassificationById(id)) {return Result.success("删除成功!");}return Result.error("创建失败!");}/*** 分类分页* @param current* @param size* @return*/@GetMapping("/page/{current}/{size}")public Result classificationPage(@PathVariable Integer current, @PathVariable Integer size){IPage<Classification> page = classificationService.page(current, size);return Result.success("返回分页。", page);}/*** 全部分类* @return*/@GetMapping("/all")public Result allClassification(){List<Classification> list = classificationService.getAllClassification();return Result.success("返回全部分类。", list);}

@Service
@Slf4j
public class TableServiceImpl implements TableService {@ResourceDiningTableMapper diningTableMapper;@ResourceOrderMapper orderMapper;@ResourceReservationService reservationService;@Overridepublic List<DiningTable> listInfo() {List<DiningTable> tables = listForShow();for(DiningTable table : tables){table.setOrder(orderMapper.selectById(table.getOrderId()));table.setReservationInfoList(reservationService.getReservationByTableId(table.getId()));}return tables;}@Overridepublic List<DiningTable> listForShow() {QueryWrapper<DiningTable> wrapper = new QueryWrapper<>();wrapper.eq("open", true);return diningTableMapper.selectList(wrapper);}@Overridepublic List<DiningTable> list() {return diningTableMapper.selectList(null);}@Overridepublic Boolean createTable(String tableName, Integer capacity, Boolean open) {DiningTable table = TableBuilder.create().pushTableName(tableName).pushCapacity(capacity).pushOpen(open).finish();return diningTableMapper.insert(table) == 1;}@Overridepublic Boolean updateTable(Integer id, String tableName, Integer capacity, Boolean open) {DiningTable table = getTableOfThrow(id);table.setName(tableName);table.setCapacity(capacity);table.setOpen(open);return diningTableMapper.updateById(table) == 1;}@Overridepublic Boolean deleteTable(Integer id) {DiningTable table = getTableOfThrow(id);if(table.getUsed()){throw new UnmessageException("导游正忙!");}return diningTableMapper.deleteById(id) == 1;}@Overridepublic boolean tableUsed(Integer tableId, Integer orderId){DiningTable table = getTableOfThrow(tableId);log.info("tableId:{} orderId:{} used:{}", tableId, orderId, table.getUsed());if(!table.getOpen()){throw new UnmessageException("导游未开放!");}if(table.getUsed()){throw new UnmessageException("导游正忙。");}table.setOrderId(orderId);table.setUsed(true);return diningTableMapper.updateById(table) == 1;}@Overridepublic boolean tableUnused(Integer tableId, Integer orderId) {DiningTable table = getTableOfThrow(tableId);log.info("tableId:{} orderId:{} used:{}", tableId, orderId, table.getUsed());if(!table.getUsed()){throw new UnmessageException("导游空闲。");}if(!table.getOrderId().equals(orderId)){throw new UnmessageException("订单号未对应。");}table.setOrderId(0);table.setUsed(false);return diningTableMapper.updateById(table) == 1;}@Overridepublic DiningTable getTableOfThrow(Integer id) {DiningTable table = diningTableMapper.selectById(id);if(table == null){throw new UnmessageException("导游不存在");}return table;}
}
public interface TableService {List<DiningTable> listForShow();List<DiningTable> listInfo();List<DiningTable> list();Boolean createTable(String tableName, Integer capacity, Boolean open);Boolean updateTable(Integer id, String tableName,Integer capacity, Boolean open);Boolean deleteTable(Integer id);/*** 设置导游正在使用中* @param tableId* @param orderId* @return*/boolean tableUsed(Integer tableId, Integer orderId);/*** 设置导游空闲* @param tableId* @param orderId* @return*/boolean tableUnused(Integer tableId, Integer orderId);DiningTable getTableOfThrow(Integer id);
}

这篇关于基于Spring Boot框架的在线导游预约系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/705722

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,