首页 > 编程语言 >厦门旅游电子商务预订系统 JAVA开源项目 毕业设计

厦门旅游电子商务预订系统 JAVA开源项目 毕业设计

时间:2023-10-29 11:31:51浏览次数:45  
标签:JAVA 模块 int evaluate vo 开源 景点 毕业设计 new

厦门旅游电子商务预订系统 JAVA开源项目 毕业设计_管理系统

https://gf.bilibili.com/item/detail/1104090029

为了帮助小白入门 Java,博主录制了本项目配套的《项目手把手启动教程》,希望能给同学们带来帮助。

厦门旅游电子商务预订系统 JAVA开源项目 毕业设计_java_02



一、摘要

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


二、功能模块

厦门旅游电子商务预订系统 JAVA开源项目 毕业设计_课程设计_03

2.1 景点类型模块

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

2.2 景点档案模块

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

2.3 酒店管理模块

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

2.4 美食管理模块

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


三、系统设计

3.1 用例设计

厦门旅游电子商务预订系统 JAVA开源项目 毕业设计_毕业设计_04

3.2 数据库设计

3.2.1 学生表

厦门旅游电子商务预订系统 JAVA开源项目 毕业设计_java_05

3.2.2 学生表

厦门旅游电子商务预订系统 JAVA开源项目 毕业设计_java_06

3.2.3 学生表

厦门旅游电子商务预订系统 JAVA开源项目 毕业设计_java_07

3.2.4 学生表

厦门旅游电子商务预订系统 JAVA开源项目 毕业设计_课程设计_08


四、系统展示

厦门旅游电子商务预订系统 JAVA开源项目 毕业设计_java_09

厦门旅游电子商务预订系统 JAVA开源项目 毕业设计_毕业设计_10

厦门旅游电子商务预订系统 JAVA开源项目 毕业设计_课程设计_11

厦门旅游电子商务预订系统 JAVA开源项目 毕业设计_课程设计_12

厦门旅游电子商务预订系统 JAVA开源项目 毕业设计_大学生_13

厦门旅游电子商务预订系统 JAVA开源项目 毕业设计_java_14

厦门旅游电子商务预订系统 JAVA开源项目 毕业设计_毕业设计_15

厦门旅游电子商务预订系统 JAVA开源项目 毕业设计_课程设计_16

厦门旅游电子商务预订系统 JAVA开源项目 毕业设计_大学生_17


五、核心代码

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

厦门旅游电子商务预订系统 JAVA开源项目 毕业设计_课程设计_18

标签:JAVA,模块,int,evaluate,vo,开源,景点,毕业设计,new
From: https://blog.51cto.com/u_16322671/8078863

相关文章

  • java 数组浅拷贝与深拷贝
    publicclassdemo{publicvoidfunc(int[]nums){int[]tempNums=newint[]{1,1,1,1,1,1};//浅拷贝//nums=tempNums;//深拷贝for(intj=0;j<nums.length;j++){nums[j]=tempNums[......
  • Java21的新表达式类型-模板表达式
    大家好,我是老七,点个关注吧,将持续更新更多精彩内容!在Java编程语言里,模板表达式这个新玩意儿给大家带来了全新的表达式类型。这篇文章会给大家详细讲解模板表达式是什么,如何用它,以及通过具体的代码示例来展示它的优点。什么是模板表达式模板表达式是Java21里新出的一个表达式类型。它......
  • 手把手教你:如何用Java多线程模拟银行叫号服务
    大家好,我是小米!今天,我将和大家一起探讨一个非常有趣的话题——Java多线程模拟银行叫号服务。这不仅是一个有趣的编程练习,还可以帮助我们更好地理解多线程编程和并发控制。在这篇文章中,我将带领大家一步步实现一个模拟银行叫号服务系统,包括三个窗口、按叫号顺序依次到窗口服务、每个......
  • Java 基础篇day01
    使用你正在使用的语言输出HelloWord!这是振奋人心的一节课,你的码农人生从此处开始。这里是一切的开始,少年。Java是一门高级编程语言,电脑无法直接识别,需要先将java文件编译成class字节码文件,电脑才可以识别。(使用javac编译命令,java运行)我们可以用现在市场上的主流Java编辑器ID......
  • JavaScript复习——02
    代码块写法:{}使用代码块,可以对代码进行分组,同一个代码块中的代码就是同一组代码,一个代码块中的代码,要么都执行,要么都不执行let和var的区别在JS中,let声明的变量具有块级作用域var声明的变量,不具有块级作用域var声明的变量会将变量的声明提至最前对象原始值只能表示......
  • JavaScript代码,鼠标放上去显示一张图片
     <!DOCTYPEhtml> <html>  <head>    <metacharset="utf-8">    <title>FirstC</title>     </head>  <body>    <h1 >helloworld</h1>    <inputtype=&q......
  • 详述Java内存屏障,透彻理解volatile
    一般来说内存屏障分为两层:编译器屏障和CPU屏障,前者只在编译期生效,目的是防止编译器生成乱序的内存访问指令;后者通过插入或修改特定的CPU指令,在运行时防止内存访问指令乱序执行。下面简单说一下这两种屏障。1、编译器屏障编译器屏障如下:asmvolatile("":::"memory")内联汇......
  • 深入理解Java IO流: 包括字节流和字符流的用法、文件读写实践
    (文章目录)......
  • Java List 添加元素要用拷贝
    学Java遇到一个坑,那就是往ArrayList(别的collection应该也类似)中添加元素时,如果这个元素后面又改变了,之前添加的值也会被改变:List<String>newString=newArrayList<>();StringmyString="hello";newString.add(myString);System.out.println("newString=%s",newString[0......
  • Java基础 线程池
    线程池主要核心原理:①创建一个池子,池子中是空的②提交任务时,池子会创建新的线程对象来执行任务,当任务执行完毕,线程会还给池子,下回再次提交任务时,不需要创建新的线程,直接复用已有的线程即可③但是如果提交任务时,池子中没有空闲线程,并且也无法创建新的线程的时候,任务就会排队......