SpringBoot旅游网源码和论文java旅游管理系统

news2024/11/15 13:37:40

随着人们生活水平的不断提升,人们对旅游的需求越来越旺盛,对旅游产品 和服务的质量要求也越来越高。伴随着计算机技术、网络技术的不断普及与应用, 人们通过网络浏览旅游信息,预订旅游产品,交流旅游体验的活动越来越多。旅 游在线预订系统应运而生。但是,当前的旅游在线预订系统存在诸多不足,包括: 系统界面不够美观,对用户没有吸引力;系统操作比较复杂,降低了潜在客户升 级为顾客的可能性;对旅游路线、导游、旅行团的管理比较粗放等;系统性能不 能满足用户不断提高的需求的要求。

针对旅游在线预订的背景以及目前存在的问题,论文从理论分析和项目实践 两方面进行阐述。在理论分析方面,论文介绍了国内外旅游在线预订系统的产生、 发展和运行现状,重点介绍了国内外学者对旅游在线预订行为的研究现状,通过 分析,明确了系统设计应紧密结合用户在线预订行为特征,确定了系统设计的基 本原则和方向。随后,在理论研究和用户需求分析的基础上,论文介绍了旅游在 线系统的相关技术、设计、开发、测试、评价的整个过程。系统技术上,采用轻 量级 Java EE 开发技术,及 Springboot,数据库采用 MySQL 数 据库管理系统,系统设计上,分别从总体设计、业务流程设计、 页面设计、数据库设计等方面进行了论述。在系统开发上,分别从普通用户、旅 行团管理员、超级管理员等角色出发,对系统页面实现、 Action 文件、 DAO 文 件和其他文件及核心源代码进行了阐述。最后,通过不同的角色,不同的角度对 系统进行了测试,结果表明,系统基本能够满足用户在线预订旅游产品的需求。

通过研究,本文对旅游在线预订系统的理论研究具有一定的参考价值,对旅 游在线预订系统的设计与开发具有一定的借鉴意义。

系统演示视频:

【java毕业设计】SpringBoot旅游网源码和论文java旅游管理系统

### **主要功能介绍**

用户登录、注册、个人资料、景点列表、相册墙、购买景点、评论、酒店管理和一整套后台管理系统等。

### 软件架构

1.数据库:MySql5.7

2.前端:Layui,BootStrap,Echars等技术

3.后台:SpringBoot、SpringDataJpa等

4.架构模式:

5.模板引擎:thymeleaf

6.项目管理:Maven

7、JDK版本:1.8

8、QQ邮箱验证服务

9、主要算法:Twitter雪花算法(ID生成策略)、Bcrypt(密码加密)、JPA排序、推荐算法

 

 

 

 

随着我国经济的快速发展和人民生活水平的不断提升,旅游已经成为人们生 活不可或缺的需求。旅游业已经从一般性产业上升为国家战略性支柱产业。据统 计,2009 -2017 年,国内旅游人次和旅游收入增长态势明显,旅游总收入年均增 长率始终在 10%以上。2013 年,国务院批准发布的《国民旅游休闲纲要》文件, 明确指出了与小康社会相配套的现代旅游体系的愿景。据乐观的估计,2020 年, 我国旅游产业规模将会在2012 年的水平基础上再翻一番,达到60 亿人次[1]

随着信息技术、网络技术的迅速发展和国内旅游消费环境不断升级与优化, 我国在线旅游市场的规模正在不断扩大。1999年,携程网率先将中国带入在线旅 游时代,随后社会资本不断注入旅游行业,在线旅游迎来了新一轮高速发展的黄 金时代[2]。应用不断普及的互联网技术为游客行前查询资料、预订出游产品、行中 获取实时信息、行后分享旅游心得与体会提供了很好的技术平台。近年来,各种 各样的旅游网站不断涌现,综合性网站中旅游栏目内容越来越丰富,界面越来越 诱人。据统计,国内已拥有5000多家具有一定资讯服务实力的旅游网站,可以提 供食、住、行、游、购、娱等方面的网上旅游服务[3]

本文选题基于以上背景,拟根据游客在线预订行为特征,设计和开发一种旅 游在线平台,从而满足人们在线预订旅游产品的迫切需求。同时,论文选题来源 于国内某一小型旅行社旅游信息系统。选题拟从对旅行团游客在线旅游预订行为 特征的研究出发,分析旅游社对旅行团管理、导游管理、旅游线路管理、系统管 理等方面的需求,利用Java EE技术,设计并开发一种旅游高效快捷在线预订系 统,满足旅行团对旅游在线预订的需求。

  1. 研究意义与价值

论文针对当前旅游现状和需求,详细的分析游客在线预订旅游产品的行为, 根据分析结论,设计和开发一种在线旅游预订系统。其研究意义和应用价值主要 体现在:

  1. 论文在国内外对游客在线预订旅游产品的行为研究的基础上,分析影响 旅行团游客购买旅游产品的诸多因素,针对这些因素,针对性的设计系统的主要 功能,这对旅游在线研究具备一定的研究意义,也为类似平台的开发提供一定的 参考。
  2. 系统采用了目前比较流行的 Java EE 技术和 Struts2、Spring、Hibernate 框架技术,有利于系统快捷方便的部署在服务器上,便于系统的实施、普及与推 广。
  3. 线路管理模块使得旅行社方便快捷的为旅行团设计科学合理、灵活自由的 旅游线路,尤其为旅行团在预订阶段提供了重要的参考资料,便于旅行团的旅游 决策。
  4. 系统的设计、实施和应用,方便了旅行团在线预订旅游产品和服务,使得 旅行社能够顺应时代潮流,转变工作理念和方式,在市场经济不断变化的情况下, 处于主动的地位,赢得利润和实现价值。
  1. 国内外研究现状

国外学者对旅游在线预订行为的研究比较早,Ajzen等人率先提出一种理性 行为理论(TRA)[4]。该理论假设人们的行为完全是由理性支撑的,消费需求直接反 映了人的动机[5]。后来,Davis改进了 TRA,创建了技 术接 受模型TAM[6]TAM模型认识到网站能够部分的影响消费者的消费意愿[7。后续,Ajzen又完善 了 TRA,创设了计划行为理论TPB[8],该理论深入分析了消费者的理性行为°Matzler 等人发现火车票订票网站的可用性与消费者订票行为有着比较紧密的关系[9]Cosmaa等人深入分析了罗马尼亚人的在线预订偏好,认为罗马尼亚人更偏向于通 过线下渠道选购旅游服务[10]

国内对于旅游在线预订行为的研究起步比较晚,研究者侧重于分析和比较网 络环境下游客预订行为与传统消费行为的不同。刘子龙等人认为游客在进行旅游 决策时主观性更强,消费行为更加理性[11]。而张猛等人则发现游客在网络中能够 更加主动的使用旅游搜索服务来选订旅游产品[12]。安蓉等人指出互联网背景下游 客对旅游服务的信任的建立相对于线下更加复杂[13]

package com.xingying.travel.controller.User;

import com.xingying.travel.common.Result;
import com.xingying.travel.dao.HotelDao;
import com.xingying.travel.dao.ScenicDao;
import com.xingying.travel.pojo.Hotel;
import com.xingying.travel.pojo.Hotel_orders;
import com.xingying.travel.pojo.Scenic;
import com.xingying.travel.service.HotelService;
import com.xingying.travel.service.Hotel_ordersService;
import com.xingying.travel.service.ScenicService;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.data.domain.Page;

import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import java.util.*;

/**
 *
 * @Date:2019
 */
@Controller
@CrossOrigin
@RequestMapping("/travel")
public class RecomTravelController {

    @Autowired
    private ScenicService scenicService;

    @Autowired
    private ScenicDao scenicDao;

    @Autowired
    private HotelService hotelService;

    @Autowired
    private HotelDao hotelDao;

    /**
     * 查询所有景点
     * @return
     */
    @RequestMapping("/test")
    public String all_attrs1(Model model){
        return "page/test.html";
    }


    /**
     *查询星级
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/star",method = RequestMethod.POST)
    public Result judgeStar(String id,String start){
        System.out.println(id+"===="+start);
        Optional<Scenic> s = scenicDao.findById(id);
        if (s.isPresent()){
            Scenic scenic = s.get();
            int valuestar = (Integer.valueOf(start)+Integer.valueOf(scenic.getStart()))/2;
            scenic.setStart(valuestar);
            scenicDao.save(scenic);
            System.out.println("数据不为空!");
            return new Result(true,1,"","");
        }else {
            System.out.println("数据为空!");
            return new Result(false,0,"","");

        }

    }


    /**
     *查询酒店
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/hotel",method = RequestMethod.POST)
    public Result judgeHotelStar(String id,String start){
        System.out.println(id+"===="+start);
        Hotel scenic = hotelService.findById(id);
        if (scenic!=null){
            int valuestar = (Integer.valueOf(start)+Integer.valueOf(scenic.getStar()))/2;
            scenic.setStar(valuestar);
            hotelDao.save(scenic);
            System.out.println("数据不为空!");
            return new Result(true,1,"","");
        }else {
            System.out.println("数据为空!");
            return new Result(false,0,"","");

        }

    }

    /**
     * 查询所有景点
     * @return
     */
    @RequestMapping("/AllAttrs")
    public String all_attrs(Model model){
        List<Scenic> attrs=scenicService.findAll();
        System.out.println("进入查询!"+attrs.toString());
        model.addAttribute("attrs",attrs);
        return "page/travel::table_refresh";
    }

    /**
     * 景点分页
     * @param start
     * @param limit
     * @return
     */
    @RequestMapping("/page_attrs")
    public String page_attrs(Model model,@RequestParam(value = "start" ,defaultValue = "0")Integer start,
                                   @RequestParam(value = "limit" ,defaultValue = "6")Integer limit){
        start=start<0?0:start;
        Sort sort=new Sort(Sort.DEFAULT_DIRECTION,"id");
        Pageable pageable=PageRequest.of(start,limit,sort);
        Page<Scenic> page=scenicDao.findAll(pageable);
        model.addAttribute("attrs",page);
        model.addAttribute("number",page.getNumber());
        model.addAttribute("numberOfElements",page.getNumberOfElements());
        model.addAttribute("size",page.getSize());
        model.addAttribute("totalElements",page.getTotalElements());
        model.addAttribute("totalPages",page.getTotalPages());
        model.addAttribute("first",page.isFirst());
        model.addAttribute("last",page.isLast());
        return "page/travel::table_refresh";
    }


    /**
     * 查询单个景点
     * @param model
     * @param id
     * @return
     */
    @RequestMapping("/oneAttr")
    public String One_attr(Model model,String id){
        System.out.println("id为:"+id);
        Scenic scenic=scenicService.findById(id).get();
        System.out.println(scenic.toString());
        model.addAttribute("oneAttr",scenic);
        //return "page/product::table_refresh";
        return "page/product.html";
    }


    /**
     * 景点模糊查询分页
     * @param model
     * @param start
     * @param limit
     * @param search_key
     * @return
     */
    @RequestMapping("/search_attrs")
    public String search_attrs(Model model,@RequestParam(value = "start" ,defaultValue = "0")Integer start,
                             @RequestParam(value = "limit" ,defaultValue = "6")Integer limit,
                               @RequestParam String search_key){
        start=start<0?0:start;
        Sort sort=new Sort(Sort.Direction.DESC,"id");
        Pageable pageable=PageRequest.of(start,limit,sort);
        Specification specification=new Specification() {
            @Override
            public Predicate toPredicate(Root root, CriteriaQuery criteriaQuery, CriteriaBuilder criteriaBuilder) {
                List<Predicate> scenics=new ArrayList<>();
                if (StringUtils.isNotBlank(search_key)){
                    scenics.add( criteriaBuilder.like(root.get("name"),"%"+search_key+"%"));
                }
                return criteriaBuilder.and(scenics.toArray(new Predicate[scenics.size()]));
            }
        };
        Page<Scenic> page=scenicDao.findAll(specification,pageable);

        model.addAttribute("attrs",page);
        model.addAttribute("number",page.getNumber());
        model.addAttribute("numberOfElements",page.getNumberOfElements());
        model.addAttribute("size",page.getSize());
        model.addAttribute("totalElements",page.getTotalElements());
        model.addAttribute("totalPages",page.getTotalPages());
        model.addAttribute("first",page.isFirst());
        model.addAttribute("last",page.isLast());
        return "page/travel";
    }

    @RequestMapping("/local")
    public String localRefresh(Model model,String id) {
        System.out.println("id::====="+id);
        Scenic scenic=scenicService.findById(id).get();
        //	Sort sort=new Sort(Sort.Direction.DESC,"star");
        System.out.println(scenic.toString());
        List<Hotel> hotels=hotelService.findByCountryLike(scenic.getContry());
        System.out.println("2222"+hotels.toString());
        Collections.sort(hotels, new Comparator<Hotel>() {
            @Override
            public int compare(Hotel o1, Hotel o2) {
                if (o1.getStar()<o2.getStar()){
                    return 2;
                }
                if (o1.getStar().equals(o2.getStar()) ){
                    return 1;
                }
                return -1;
            }
        });
        if (hotels.size()>=4){
            List newList=hotels.subList(0,3);
            model.addAttribute("scenics",newList);
            System.out.println("个数:"+newList.size());
        }else {
            model.addAttribute("scenics",hotels);
            System.out.println("个数2:"+hotels.size());

        }
        return "page/product::table_refresh";
    }



}

 

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

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

相关文章

AI生命科学绘图(4):质粒图谱的绘制

学习来源 &#xff1a;B站生信师兄 内容&#xff1a;质粒图谱绘制 质粒绘制思路 1.绘制俩个正圆轮廓&#xff0c;修改描边颜色和粗细 选择椭圆工具&#xff1a;按住shift绘制一个正圆&#xff0c;然后Alt拖动复制 拖动使得俩个圆重合 2.使用剪刀工具&#xff0c;修剪掉不需要…

[附源码]计算机毕业设计右脑开发教育课程管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

1 FPGA ZYBO Xilinx 按键控制LED灯 key_led

视频教程&#xff1a;第11.1讲 按键控制LED灯实验原理讲解_哔哩哔哩_bilibili 约束文件&#xff1a;digilent-xdc/Zybo-Master.xdc at master Digilent/digilent-xdc (github.com) 原理图&#xff1a;Zybo Z7 - Digilent Reference B 实验任务 使用ZYBO上的PL端按键&#…

AD域控服务器部署

AD服务器部署 一、主域控的部署&#xff08;主域控名2012DC1&#xff0c;ip192.168.15.1&#xff09;&#xff1a; 1、添加角色和功能向导 2、基于角色或基于功能的安装 3、从服务器池中选择服务器 4、选择Active Directory域服务 5、默认&#xff0c;下一步 6、默认&#xff0…

区间信息维护与查询【分块】 - 原理 分块详解

区间信息维护与查询【分块】 - 原理 分块详解 树状数组和线段树虽然非常方便&#xff0c;但维护的信息必须满足信息合并特性&#xff08;如区间可加、可减&#xff09;&#xff0c;若不满足此特性&#xff0c;则不可以使用树状数组和线段树。分块算法可以维护一些线段树维护不…

简单入门编写html登录界面

<!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>你好呀&#xff0c;登录吧</title><style&…

MySQL锁,锁的到底是什么

作者&#xff1a;蝉沐风 博客站点&#xff1a;https://www.chanmufeng.com 公众号&#xff1a;蝉沐风的码场 本文目录1. 资源的竞争方式2. 读—写/写—读下的问题2.1. 幻读2.2. 不可重复读2.3. 脏读2.4. 锁与MVCC的关系2.5. 锁与事务的关系3. 写—写情况4. 锁的粒度5. 锁的基本…

[附源码]计算机毕业设计JAVA校园失物招领管理系统

[附源码]计算机毕业设计JAVA校园失物招领管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM my…

[附源码]计算机毕业设计JAVA新闻发布和评论管理系统

[附源码]计算机毕业设计JAVA新闻发布和评论管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM …

ELK日志平台搭建

平时查看错误日志&#xff0c;都是登录到服务器&#xff0c;然后用命令进行查看&#xff0c;不是很好的定位问题&#xff0c;决定搭建一个ELK的日志查看平台。ELK是Elasticsearch、Logstash、Kibana三个的简称。Elasticsearch是一个分布式的实时搜索引擎&#xff0c;Logstash是…

室内定位:5G定位开启高精度定位新纪元

“5G定位”作为一个新的方向将会对于解决室外到室内的“最后一公里”高精度定位问题发挥更强的赋能和带动作用。 室内定位作为室外定位的技术延伸&#xff0c;弥补了传统定位技术的不足&#xff0c;而5G定位正推动信息社会数字化步入快车道的大趋势&#xff0c;赋能千行百业。 …

DNS查询流程

&#x1f468;‍&#x1f4bb;个人主页&#xff1a; 才疏学浅的木子 &#x1f647;‍♂️ 本人也在学习阶段如若发现问题&#xff0c;请告知非常感谢 &#x1f647;‍♂️ &#x1f4d2; 本文来自专栏&#xff1a; 计算机网络 ❤️ 支持我&#xff1a;&#x1f44d;点赞 &#…

精选20个爆火的Python实战项目(含源码),直接拿走不谢

今天给大家介绍20个非常实用的Python项目&#xff0c;帮助大家更好的学习Python。 ① 猜字游戏 在这个游戏中&#xff0c;你必须一个字母一个字母的猜出秘密单词。 如果你猜错了一个字母&#xff0c;你将丢掉一条命。 正如游戏名那样&#xff0c;你需要仔细选择字母&#x…

Vue笔记_03组件_mavonEditor(基于vue)

目录下载mavonEditor导入并注册mavonEditor组件[1] 全局注册[2]局部注册使用mavonEditor属性修改举例说明1-不展示预览分屏工具栏修改举例说明-根据配置显示工具栏编辑器插槽举例说明-自定义工具栏按钮函数监听下载mavonEditor 使用命令 npm install mavon-editor --s 进行下载…

[附源码]Python计算机毕业设计SSM抗包虫病药物查询与推荐系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

[附源码]计算机毕业设计预约挂号appSpringboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【Flink】flink 状态恢复 because the operator is not available in the new program

1.概述 感谢您抽出 一个flink环境做状态恢复报错:because the operator is not available in the new program。详细错误如下 2.源码分析 2.1 restoreSavepoint restoreSavepoint 是从给定的检查点进行恢复。主要做了如下步骤 检测恢复路径是否存在从外部存储获取 Checkpoi…

【Linux】常用命令

文章目录Linux 常用命令目录结构命令结构目录操作文件操作用户操作通配符Linux 常用命令 目录结构 Windows 以存储介质为主&#xff0c;以盘符&#xff08;C盘D盘&#xff09;分区实现文件管理。Linux 以树形目录为主构建系统&#xff0c;大部分目录结构已规定。Linux中一切皆…

将本地项目添加到github中的其他办法

目录 1.在github上创建一个新仓库 2.git clone 3.将本地的文件夹里面的所有内容拷贝到新克隆下来的文件夹中 4.打开克隆下来的文件 5.git add . 6.git commit -am “注释” 7.git push -u origin master 1.在github上创建一个新仓库 2.git clone 本地克隆刚才创建的项目 3.…

C++数据结构X篇_04_单向链表框架搭建、实现和测试(链表的定义,常用操作的实现等)

接上篇C数据结构X篇_03_线性表的顺序存储和动态数组案例&#xff08;基本概念&#xff1b;操作要点&#xff1b;顺序存储算法&#xff1b;动态数组案例实现&#xff09;&#xff0c;本篇将会开始介绍线性表的链式存储。 参考博文&#xff1a;最详细的C单向链表实现&#xff0c;…