基于Vue+SpringBoot的厦门旅游电子商务预订系统 开源项目

在这里插入图片描述
项目编号: S 030 ,文末获取源码。 \color{red}{项目编号:S030,文末获取源码。} 项目编号:S030,文末获取源码。


目录

  • 一、摘要
    • 1.1 项目介绍
    • 1.2 项目录屏
  • 二、功能模块
    • 2.1 景点类型模块
    • 2.2 景点档案模块
    • 2.3 酒店管理模块
    • 2.4 美食管理模块
  • 三、系统设计
    • 3.1 用例设计
    • 3.2 数据库设计
      • 3.2.1 学生表
      • 3.2.2 学生表
      • 3.2.3 学生表
      • 3.2.4 学生表
  • 四、系统展示
  • 五、核心代码
    • 5.1 新增景点类型
    • 5.2 查询推荐的景点
    • 5.3 查询单个景点
    • 5.4 查询评价前10的景点
    • 5.5 新增景点评价
  • 六、免责说明


一、摘要

1.1 项目介绍

基于Vue+SpringBoot+MySQL的厦门旅游电子商务预订系统包含景点类型模块、景点档案模块、景点评分模块、景点收藏模块、酒店模块、美食模块,拥有用户网页端和管理后台端,包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,厦门旅游电子商务预订系统基于角色的访问控制,给景点管理员、游客使用,可将权限精确到按钮级别,您可以自定义角色并分配权限,系统适合设计精确的权限约束需求,项目编号S030。

1.2 项目录屏

源码下载


二、功能模块

在这里插入图片描述

2.1 景点类型模块

景点类型模块是一个用于对旅游景点中不同类型的旅游景点进行分类和管理的模块,旅游景点类型模块允许用户按主题和类型组织和管理旅游景点,以便用户能够快速找到自己感兴趣的旅游景点,景点类型模块为用户提供个性化的推荐服务,并根据用户选择的类型和偏好推荐相应的旅游景点和路线。景点类型模块不同通过分析每种类型的旅游景点统计数据,可以了解每种类型旅游景点的流量和知名度,优化旅游资源的利用效率,旅游景点类型模块有助于旅游目的地更好地表达自身特色和品牌形象,从而提高旅游目的地的知名度和影响力,景点类型模块对于旅游网站和应用程序来说是非常必要的,通过景点类型模块,更容易搜索用户,提供个性化服务,优化旅游资源利用,更好地表达旅游地区的特色,提高用户体验和旅游电子商务预订管理系统的价值。

2.2 景点档案模块

景点档案模块是旅游电子商务预订管理系统中,用于管理和显示各种旅游目的地信息、历史背景、地理位置、交通路线等详细资料、旅游目的地介绍、书面信息、相关信息,以便您能够更好地了解和选择用户感兴趣的目的地,改善旅行体验,旅游景点档案模块为用户提供交通路线、周边食宿、票价等详细信息,用户可以制定出行计划和预算,旅游景点档案模块包含了大量的旅游信息和相关信息,可以为平台提供更全面、更丰富的内容,提高平台的信息量和可靠性。推介客源和景点,提升旅游知名度和影响力,促进旅游经济发展,了解各类旅游景点的流量和知名度,优化旅游资源利用效率。旅游景点模块有助于旅游目的地更好地表达自身特色和品牌形象,从而提高旅游目的地的知名度和影响力,景点模块对于旅游网站和应用程序来说是非常必要的,通过景点模块,更容易搜索用户,提供个性化服务,优化旅游资源利用,更好地表达旅游地区的特色,提高用户体验和平台价值。

2.3 酒店管理模块

酒店管理模块是用于旅游电子商务预订管理系统钟处理酒店预订和管理系统中的酒店订单、客房、服务等信息的模块,酒店管理模块可以通过向酒店提供订单管理、客户管理、客房管理、设备管理等自动化管理工具,提高酒店的管理效率,可以提供餐饮服务等更先进的服务系统。通过提高酒店的服务质量和用户满意度,酒店管理模块可以实现管理自动化,减少人力资源和物力消耗,更好地控制酒店的运营成本和风险,记录并分析酒店运营数据和运营状态,帮助酒店经理做出决策并优化运营。

2.4 美食管理模块

美食管理模块是旅游电子商务预订管理系统中用于管理和显示美食信息的模块,美食管理模块让用户更容易了解食物、价格、口味等信息,让用户吃得上。美食管理模块可以提高选择项目的满意度,美食管理模块可以展示餐厅的美食形象和介绍,吸引更多潜在顾客的兴趣和参与,美食管理模块可以对不同的菜肴进行分类和定价,可以执行确定和库存管理等操作,为了给餐饮企业提供更便捷的管理模式,美食管理模块可以通过分析客户偏好和订单记录,为餐饮企业制定科学准确的营销策略,提高市场竞争力和盈利能力。


三、系统设计

3.1 用例设计

在这里插入图片描述

3.2 数据库设计

3.2.1 学生表

在这里插入图片描述

3.2.2 学生表

在这里插入图片描述

3.2.3 学生表

在这里插入图片描述

3.2.4 学生表

在这里插入图片描述


四、系统展示

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


五、核心代码

5.1 新增景点类型

@RequestMapping(value = "/insert", method = RequestMethod.POST)
@ApiOperation(value = "新增景点类型")
public Result<ScenicSpotType> insert(ScenicSpotType scenicSpotType){if(scenicSpotType.getSortOrder() == null || Objects.equals(0,scenicSpotType.getSortOrder().compareTo(BigDecimal.ZERO))) {scenicSpotType.setSortOrder(BigDecimal.valueOf(iScenicSpotTypeService.count() + 1));}iScenicSpotTypeService.saveOrUpdate(scenicSpotType);return new ResultUtil<ScenicSpotType>().setData(scenicSpotType);
}

5.2 查询推荐的景点

@RequestMapping(value = "/getRecommendList2OnWeb", method = RequestMethod.GET)
@ApiOperation(value = "查询推荐的景点")
public Result<List<ScenicSpot>> getRecommendList2(){List<ScenicSpot> spotList = iScenicSpotService.list();int[] arr = new int[spotList.size()];for(int i = 1; i < spotList.size(); i ++) {arr[i - 1] = i;}int[] ints = selectM(arr, 10);List<ScenicSpot> ans = new ArrayList<>();for (int i : ints) {ans.add(spotList.get(i));}return new ResultUtil<List<ScenicSpot>>().setData(ans);
}public static int[] selectM(int[] arr,int m){int len=arr.length;if(m>arr.length) {throw new RuntimeException("xxxxx");}int[] res=new int[m];for(int i=0;i<m;i++){int randomIndex=len-1-new Random().nextInt(len-i);res[i]=arr[randomIndex];int tmp=arr[randomIndex];arr[randomIndex]=arr[i];arr[i]=tmp;}return res;
}

5.3 查询单个景点

@RequestMapping(value = "/getOneOnWeb", method = RequestMethod.GET)
@ApiOperation(value = "查询单个景点")
public Result<ScenicSpot> getOneOnWeb(@RequestParam String id){ScenicSpot vo = iScenicSpotService.getById(id);if(vo == null) {return ResultUtil.error("景点不存在");}// 评分BigDecimal evaluateSum = BigDecimal.ZERO;QueryWrapper<Evaluate> evalQw = new QueryWrapper<>();evalQw.eq("spot_id",vo.getId());List<Evaluate> evaluateList = iEvaluateService.list(evalQw);for (Evaluate evaluate : evaluateList) {evaluateSum = evaluateSum.add(evaluate.getLevel());}if(evaluateList.size() > 0) {vo.setStar(evaluateSum.divide(BigDecimal.valueOf(evaluateList.size()),2, RoundingMode.DOWN));} else {vo.setStar(BigDecimal.valueOf(-1));}// 收藏QueryWrapper<Collection> coQw = new QueryWrapper<>();coQw.eq("spot_id",vo.getId());vo.setCollection(iCollectionService.count(coQw));String viewStr = redisTemplate.get("SPOT_VIEW:" + vo.getId());if(!ZwzNullUtils.isNull(viewStr)) {try {long viewNumber = Long.parseLong(viewStr);redisTemplate.set("SPOT_VIEW:" + vo.getId(),(viewNumber + 1) + "");} catch (Exception e) {}} else {redisTemplate.set("SPOT_VIEW:" + vo.getId(), "1");}return new ResultUtil<ScenicSpot>().setData(vo);
}

5.4 查询评价前10的景点

@RequestMapping(value = "/getTopEvaluate", method = RequestMethod.GET)
@ApiOperation(value = "查询评价前10的景点")
public Result<List<ScenicSpot>> getTopEvaluate(){List<ScenicSpot> spotList = iScenicSpotService.list();for (ScenicSpot vo : spotList) {BigDecimal evaluateSum = BigDecimal.ZERO;QueryWrapper<Evaluate> evalQw = new QueryWrapper<>();evalQw.eq("spot_id",vo.getId());List<Evaluate> evaluateList = iEvaluateService.list(evalQw);for (Evaluate evaluate : evaluateList) {evaluateSum = evaluateSum.add(evaluate.getLevel());}if(evaluateList.size() > 0) {vo.setStar(evaluateSum.divide(BigDecimal.valueOf(evaluateList.size()),2, RoundingMode.DOWN));} else {vo.setStar(BigDecimal.ZERO);}}Collections.sort(spotList, new Comparator<ScenicSpot>() {@Overridepublic int compare(ScenicSpot o1, ScenicSpot o2) {return o2.getStar().compareTo(o1.getStar());}});if(spotList.size() > 10) {spotList = spotList.subList(0,10);}return new ResultUtil<List<ScenicSpot>>().setData(spotList);
}

5.5 新增景点评价

@RequestMapping(value = "/addEvaluate", method = RequestMethod.GET)
@ApiOperation(value = "新增评价")
public Result<Evaluate> addEvaluate(@RequestParam String id, @RequestParam BigDecimal level, @RequestParam String message){ScenicSpot ss = iScenicSpotService.getById(id);if(ss == null) {return ResultUtil.error("景点不存在");}User currUser = securityUtil.getCurrUser();QueryWrapper<Evaluate> qw = new QueryWrapper<>();qw.eq("spot_id",ss.getId());qw.eq("user_id",currUser.getId());qw.last("limit 1");Evaluate evaluate = iEvaluateService.getOne(qw);if(evaluate == null) {evaluate = new Evaluate();evaluate.setSpotId(ss.getId());evaluate.setSpotName(ss.getTitle());evaluate.setUserId(currUser.getId());evaluate.setUserName(currUser.getNickname());}evaluate.setLevel(level);evaluate.setMessage(message);evaluate.setTime(DateUtil.now());iEvaluateService.saveOrUpdate(evaluate);return ResultUtil.success();
}

六、免责说明

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

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

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

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

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

相关文章

Zookeeper实战案例(1)

前置知识&#xff1a; Zookeeper学习笔记&#xff08;1&#xff09;—— 基础知识-CSDN博客 Zookeeper学习笔记&#xff08;2&#xff09;—— Zookeeper API简单操作-CSDN博客 Zookeeper 服务器动态上下线监听案例 需求分析 某分布式系统中&#xff0c;主节点可以有多台&am…

【linux】nmon 工具使用

nmon 介绍 nmon是奈杰尔的性能监视器的缩写&#xff0c;适用于POWER、x86、x86_64、Mainframe和现在的ARM&#xff08;Raspberry Pi&#xff09;上的Linux。同样适用于nmon for AIX的工具&#xff08;与IBM的AIX一起提供&#xff09;。njmon与之类似&#xff0c;但将数据保存为…

Node.js环境配置级安装vue-cli脚手架

一、下载安装Node.js (略) 二、验证node.js并配置 1、下载安装后&#xff0c;cmd面板输入node -v查询版本、npm -v ,查看npm是否安装成功&#xff08;有版本号就行了&#xff09; 2、选择npm镜像&#xff08;npm config set registry https://registry.npm.taobao.org&…

optee4.0.0 qemu_v8的环境搭建篇(ubuntu20.10)

快速链接: . 👉👉👉 个人博客笔记导读目录(全部) 👈👈👈 付费专栏-付费课程 【购买须知】:【精选】ARMv8/ARMv9架构入门到精通-[目录] 👈👈👈文章目录 前提条件1、拉取代码2、下载工具链3、编译4、运行

kubernetes|云原生| 如何优雅的重启和更新pod---pod生命周期管理实务

前言&#xff1a; kubernetes的管理维护的复杂性体现在了方方面面&#xff0c;例如&#xff0c;&#xff50;&#xff4f;&#xff44;的管理&#xff0c;服务的管理&#xff0c;用户的管理&#xff08;&#xff32;&#xff22;&#xff21;&#xff23;&#xff09;&#xf…

通付盾Web3专题 | KYT/AML:Web3合规展业的必要条件

与传统证券一样&#xff0c;基于区块链技术发展出来的虚拟资产交易所经历了快速发展而缺乏有效监管的行业早期。除了科技光环加持的各种区块链项目方、造富神话之外&#xff0c;交易所遭到黑客攻击、内部偷窃作恶、甚至经营主体异常而致使投资人血本无归的案例亦令人触目惊心。…

802.11-2020协议学习__专题__TxTime-Calculation__HR/DSSS

802.11-2020协议学习__专题__TxTime-Calculation__HR/DSSS 16.2.2 PPDU format16.2.2.1 General16.2.2.2 Long PPDU format16.2.2.3 Short PPDU format 16.3.4 HR/DSSS TXTIME calculation PREV&#xff1a; TBD NEXT&#xff1a; TBD 16.2.2 PPDU format 16.2.2.1 General 定…

ubuntu 20.04安装 Anaconda教程

在安装Anaconda之前需要先安装ros(防止跟conda冲突&#xff0c;先装ros)。提前安装好cuda 和cudnn。 本博客参考&#xff1a;ubuntu20.04配置ros noetic和cuda&#xff0c;cudnn&#xff0c;anaconda&#xff0c;pytorch深度学习的环境 安装完conda后&#xff0c;输入: pyth…

Mysql -常见函数

目录 字符串函数 数值函数 日期函数 流程函数 字符串函数 -- 拼接 SELECT CONCAT(Hello, World); -- 小写 SELECT LOWER(Hello); -- 大写 SELECT UPPER(Hello); -- 左填充 SELECT LPAD(01, 5, -); -- 右填充 SELECT RPAD(01, 5, -); -- 去除空格 SELECT TRIM( Hello World )…

Flume学习笔记(2)—— Flume进阶

Flume进阶 Flume 事务 事务处理流程如下&#xff1a; Put doPut&#xff1a;将批数据先写入临时缓冲区putListdoCommit&#xff1a;检查channel内存队列是否足够合并。doRollback&#xff1a;channel内存队列空间不足&#xff0c;回滚数据 Take doTake&#xff1a;将数据取…

数学建模 | 灰色预测原理及python实现

目录 一、灰色预测的原理 二、灰色预测的应用及python实现 一、灰色预测的原理 灰色预测是以灰色模型为基础&#xff0c;灰色模型GM(n,h)是微分方程模型&#xff0c;可用于描述对象做长期、连续、动态的反应。其中&#xff0c;n代表微分方程式的阶数&#xff0c;h代表微分方…

Spring Framework IOC依赖查找 - 按名称查找解析

IoC按名称查找共分为三类&#xff1a; 按名称按类型按集合 按名称查找 在Spring Framework中&#xff0c;实时加载和延迟加载是指在容器启动时是否立即实例化bean的不同策略。下面我们将分别介绍这两种加载方式及其应用场景。 tips: 当涉及到懒加载和延时加载时&#xff0…

windows排除故障工具pathping、MTR、sysinternals

pathping 基本上可以认为它是ping和tracert的功能合体。 pathping首先对目标执行tracert&#xff0c;然后使用ICMP对每一跳进行100次ping操作。 如图&#xff0c;是一个对8.8.8.8进行pathing操作。 MTR MTR是另一个多工具合体工具。 winmtr是mtr的windows版本。 这个工具…

vscode设置latex

vscode配置latex 1.安装vscode,并添加环境变量路径 2.安装latex,bin文件夹添加到环境变量路径 3.vscode安装插件 4.vscode->文件->首选项->显示配置内容->setting.json文件&#xff0c;查看其位置目录&#xff0c;通过我的电脑找到此文件&#xff08;不要使用v…

OpenCV快速入门:图像形态学操作

文章目录 前言一、图像形态学基础1.1 背景介绍1.2 像素距离1.2.1 什么是像素距离&#xff1f;1.2.2 常见的像素距离度量方法1.2.3 计算像素距离的代码实现 1.3 图像连通性1.3.1 什么是图像连通性&#xff1f;1.3.2 连通类型1.3.3 连通组件标记1.3.4 连通性在图像处理中的应用 1…

在 el-table 中嵌入 el-checkbox el-input el-upload 多组件,实现复杂业务场景

由于业务场景的复杂性&#xff0c;需实现&#xff1a;在 el-table 表格中 嵌入 el-checkbox 多选框 及 el-input 输入框 及 el-upload 上传组件 &#xff0c;先附上实现效果图。 从图片可以看出其实就是一个规格可以带有多个属性的规格表&#xff0c;实现此效果需涉及到的知识点…

【机器学习基础】对数几率回归(logistic回归)

&#x1f680;个人主页&#xff1a;为梦而生~ 关注我一起学习吧&#xff01; &#x1f4a1;专栏&#xff1a;机器学习 欢迎订阅&#xff01;后面的内容会越来越有意思~ &#x1f4a1;往期推荐&#xff1a; 【机器学习基础】机器学习入门&#xff08;1&#xff09; 【机器学习基…

ADS村田电感.mod(spice netlist文件)和.s2p模型导入与区别

ADS村田电感.mod&#xff08;spice netlist文件&#xff09;和.s2p模型导入与区别 简介环境过程s2pspice netlist&#xff08;.mod文件&#xff09;导入和结果对比 简介 记录了ADS村田电感.mod&#xff08;spice netlist文件&#xff09;和.s2p模型导入与区别 环境 ADS2020 …

什么是UV贴图?

UV 是与几何图形的顶点信息相对应的二维纹理坐标。UV 至关重要&#xff0c;因为它们提供了表面网格与图像纹理如何应用于该表面之间的联系。它们基本上是控制纹理上哪些像素对应于 3D 网格上的哪个顶点的标记点。它们在雕刻中也很重要。 为什么UV映射很重要&#xff1f; 默认情…

opencv(2): 视频采集和录制

视频采集 相关API VideoCapture()cap.read()&#xff1a; 返回两个值&#xff0c;第一个参数&#xff0c;如果读到frame&#xff0c;返回 True. 第二个参数为相应的图像帧。cap.release() VideoCapture cv2.VideoCapture(0) 0 表示自动检测&#xff0c;如果在笔记本上运行&…