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

news2024/9/28 7:21:51

在这里插入图片描述
项目编号: 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>() {
        @Override
        public 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.coloradmin.cn/o/1223025.html

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

相关文章

ubuntu中用docker部署jenkins,并和码云实现自动化部署

1.部署jenkins docker network create jenkins docker run --name jenkins-docker --rm --detach \--privileged --network jenkins --network-alias docker \--env DOCKER_TLS_CERTDIR/certs \--volume jenkins-docker-certs:/certs/client \--volume jenkins-data:/var/jen…

vite2.9.15版本不显示el-table致命问题

1.版本说明 说明&#xff1a;vite版本为2.9.15&#xff1b;element-ui版本为2.15.14。 2.不显示 3.降低elementui版本 说明&#xff1a;不兼容&#xff0c;降低elementui版本为2.8.2 npm i element-ui2.8.2 4.显示

PS学习笔记——初识PS界面

文章目录 PS界面 PS界面 我使用的是PS2021&#xff0c;可能不同版本界面有所不同&#xff0c;但大体来说没有太多差异 可以看到下面这个图就是ps的主界面&#xff0c;大体分为菜单栏、选项栏、工具栏、面板、以及最中央的工作区。 ps中的操作基本都能在菜单栏中找到 可以从菜…

数位和相等数对的最大和【教3妹学编程-算法题】数位和相等数对的最大和

3妹&#xff1a;2哥&#xff0c;你有没有看到新闻“18岁父亲为4岁儿子落户现身亲子鉴定” 2哥 : 啥&#xff1f;18岁就当爹啦&#xff1f; 3妹&#xff1a;确切的说是14岁好吧。 2哥 : 哎&#xff0c;想我30了&#xff0c; 还是个单身狗。 3妹&#xff1a;别急啊&#xff0c; 2…

python计算脚长 青少年电子学会等级考试 中小学生python编程等级考试一级真题答案解析2022年9月

目录 python字符串输出 一、题目要求 1、编程实现 2、输入输出 二、解题思路 1、案例分析 三、程序代码 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python字符串输出 2022年9月 python编程等级考试一级编程…

小米真无线耳机 Air 2s产品蓝牙配对ubuntu20.04 笔记本电脑

小米真无线耳机 Air 2s产品蓝牙配对ubuntu20.04 笔记本电脑 1.我的笔记本是 22款联想拯救者y9000k&#xff0c;安装了双系统&#xff0c;ubuntu20.04。 2.打开耳机&#xff0c;按压侧面按钮2秒&#xff0c;指示灯显示白色闪烁。 3.打开ubunru20.04 系统右上角wifi的位置&…

基于ssm的房屋租售网站(有报告)。Javaee项目,ssm项目。

演示视频&#xff1a; 基于ssm的房屋租售网站(有报告)。Javaee项目&#xff0c;ssm项目。 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 项目介绍&#xff1a; 采用M&#xff08;mode…

Leetcode 【2342. 数位和相等数对的最大和】

给你一个下标从 0 开始的数组 nums &#xff0c;数组中的元素都是 正 整数。请你选出两个下标 i 和 j&#xff08;i ! j&#xff09;&#xff0c;且 nums[i] 的数位和 与 nums[j] 的数位和相等。 请你找出所有满足条件的下标 i 和 j &#xff0c;找出并返回 nums[i] nums[j]…

Guitar Pro2024吉他软件好不好用?

吉他&#xff0c;这把魔幻的弹奏利器&#xff0c;既需要技术&#xff0c;又需要技巧。 是的&#xff0c;它不会自己跳入你的手中&#xff0c;除非你敲对了密码&#xff1a;练习&#xff01; 今天就来看看&#xff0c;大家是不是已经找到了快速掌握吉他的门道呢&#xff1f; …

企业如何实现降本增效——数字化转型

说到企业数字化转型&#xff0c;不可避免要围绕企业降本增效。企业们都在积极寻找降本增效解决之道&#xff0c;以实现降本增效的目标。数字化转型也成为了很多企业降本增效的重要手段。通过引入云计算、大数据、人工智能等技术&#xff0c;企业们实现了业务流程的数字化和智能…

BLIP:统一视觉语言理解与生成的预训练模型

Li J, Li D, Xiong C, et al. Blip: Bootstrapping language-image pre-training for unified vision-language understanding and generation[C]//International Conference on Machine Learning. PMLR, 2022: 12888-12900. BLIP 是 Salesforce 在 2022 年的工作&#xff0c;文…

.NET 8.0 中有哪些新的变化?

1性能提升 .NET 8在整个堆栈中带来了数千项性能改进 。默认情况下会启用一种名为动态配置文件引导优化 (PGO) 的新代码生成器&#xff0c;它可以根据实际使用情况优化代码&#xff0c;并且可以将应用程序的性能提高高达 20%。现在支持的 AVX-512 指令集能够对 512 位数据向量执…

(c语言进阶)内存函数

一.memcpy(void* dest,void* src,int num) &#xff0c;操作单位为字节&#xff0c;完成复制且粘贴字符串 1.应用 #include <stdio.h> #include<string.h> int main() {int arr1[] { 1,2,3,4,5,6,7,8,9,10 };int arr2[20] { 0 };memcpy(arr2, arr1, 20);//从…

gti拉取普通idea Java项目module没有build的问题

在不断完成一个项目的时候&#xff0c;会有不断新加的module&#xff0c;我们用git拉取时会发生没有识别新module的情况。 解决方法是右键项目名称&#xff0c;然后点击Open Module Settings 接下来&#xff0c;点击Module&#xff0c;加号&#xff0c;新建Module的名字就是在g…

elasticsearch 概述

初识elasticsearch 了解ES elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎&#xff0c;具备非常多强大功能&#xff0c;可以帮助我们从海量数据中快速找到需要的内容 例如&#xff1a; 在GitHub搜索代码 在电商网站搜索商品 ELK技术栈 elasticsearc…

回 溯 法

一、&#xff08;what&#xff1f;&#xff09; 二、&#xff08;why&#xff1f;&#xff09; 三、&#xff08;how&#xff1f;&#xff09; 四、典型例题分析&#xff1a; 例题1&#xff1a;大卖场购物车2——0-1背包问题 问题分析&#xff1a; 算法设计&#xff1a; 图…

美团外卖18元神券节红包优惠券怎么抢?

美团外卖红包天天免费领取活动规则 1、每月18日可领美团外卖18元神券节红包优惠券&#xff1b; 2、每月15、16、17日可领美团外卖神券节预热12元红包优惠券&#xff1b; 3、每周星期一、星期三可领美团外卖节9元红包优惠券&#xff1b; 4、每天可领美团外卖天天神券3-7元美…

SHELL中的循环语句

快捷查看指令 ctrlf 进行搜索会直接定位到需要的知识点和命令讲解&#xff08;如有不正确的地方欢迎各位小伙伴在评论区提意见&#xff0c;博主会及时修改&#xff09; 循环结构 连续出现的功能性代码 shell循环有四种: while 条件成立,循环就开始 直到循环条件不满足或者跳出…

cp: can‘t stat ‘/usr/share/zoneinfo/Asia/Shanghai‘: No such file or directory

目录 问题描述问题分析解决方案容器时区验证 问题描述 使用下面的 Dockerfile 为 youlai-boot 项目制作镜像设置容器时区报错。 # 基础镜像 FROM openjdk:17-jdk-alpine # 时区修改 RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&& echo Asia/Sha…

动 态 规 划

一、&#xff08;what&#xff1f;&#xff09; 二、&#xff08;why&#xff1f;&#xff09; 三、&#xff08;how&#xff1f;&#xff09; 四、典型例题分析&#xff1a; 例题1&#xff1a;神奇的兔子序列 输入&#xff1a;月数 输出&#xff1a;兔子数 思路&#xff1…