基于Springboot的旅游网站设计与实现(论文+调试+源码)

项目描述

临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问题,今天给在家介绍一篇基于Springboot的旅游网站设计与实现。

功能需求

随着我国人民生活水平的不断提高,旅游已成为人们生活的重要活动,通过旅游网站进行旅游景点查询,旅游线路预订等,可以为游客出行提供极大的方便。

旅游网站的设计是面向现实需求的一个实用系统,本课题的目标是为游客和旅游网站提供一个友好的、便捷的交流平台。能实现网站前端的相关旅游信息的查询与展示以及后端的数据库增删改查功能,能满足一般用户的旅游攻略需求。

具备以下功能:

本旅游网站基于MVC模式开发,分为前端和后端。前端是一个信息展示网站,可以给用户提供基本的旅游信息查询功能,主要分为五个模块:旅游咨询模块,旅游线路模块,线路查询模块,热点线路模块;后端是管理模块,可以实现对前端网站的模块管理、内容管理和用户管理等功能。

  • 旅游咨询模块
    地点查询:搜索地名关键字会显示景点。
    酒店查询:通过所示酒店名,显示其价格。
    线路查询:搜索地名,显示路线。
  • 旅游线路模块
    线路查询功能:输入地名可以查找到不同路线图。
    线路删除功能:删除已有的线路。
    线路添加功能:输入地名,插入对应路线图。
    线路修改功能:修改添加错误的路线名及路线图。
  • 线路查询模块
    用户通过输入地名,可以查询到对应地点的路线图。
  • 热点线路模块
    热点路线查询功能:点击到热点路线板块,会显示热点路线地名。
    热点路线删除功能:对已存在的热点路线进行删除。
  • 后端管理模块
    管理人员能够对整个的系统进行管理包含:用户管理、旅行社管理、酒店管理、路线管理,预定支付管理、留言管理。
    用户管理:管理员能够对用户进行查看和删除。
    旅行社管理:对旅行社的信息进行增添、改正、删除。
系统设计
部分效果图

登录注册界面:

用户首页




后端功能截图


开发架构

B/S架构即浏览器/服务器结构,Browser指的是Web浏览器,很少数的事务逻辑是在前端中实现的,主要的事务逻辑是在服务器端中实现,B/S架构的系统不需要特别的安装,有Web浏览器就可以。

B/S架构的分层:

与C/S架构的两层不同,B/S架构有三层,分别为:表现层、逻辑层和数据层。

(1)表现层:完成用户和后台的交互实现最终查询结果的输出。

(2)逻辑层:利用服务器实现客户端的应用逻辑。

(3)数据层:接受客户端请求后独立的进行各种计算。

B/S架构图如下图2.2所示。

图2.2 B/S架构图

B/S架构的优点:

(1)客户端上免安装,有Web浏览器即可。

(2)可直接放在广域网上,实现多用户访问的目的,交互性强。

(3)BS架构不用升级客户端,升级服务器就行。

B/S架构的缺点:

(1)在跨浏览器上,B/S架构不太优秀。

(2)在速度以及安全性上需花费巨额设计成本。

(3)BS的交互是请求-响应模式,需要刷新页面。

部分代码
java 复制代码
   public Result login(SysUser sysUser, HttpServletResponse response) {


        SysUser sysUserByUsrname = sysUserRepository.findSysUserByUsername(sysUser.getUsername());
        if (sysUserByUsrname == null) {
            return ResultGenerator.genFailResult("用户名错误!");
        } else {
            if (sysUser.getPassword().equals(sysUserByUsrname.getPassword())) {
                CookieUitl.set(response, "sysUsername", sysUser.getUsername(), 3600);
                return ResultGenerator.genSuccessResult();
            } else {
                return ResultGenerator.genFailResult("密码错误");
            }
        }

    }

    public void logout(HttpServletRequest request, HttpServletResponse response) {
        Cookie cookie = CookieUitl.get(request, "sysUsername");
        if (cookie != null) {
            CookieUitl.set(response, "sysUsername", null, 0);
        }
    }

    public Page<User> getUserPage(Pageable pageable) {
        Page<User> userPage = userRepository.findAll((root, query, cb) -> {
            List<Predicate> predicates = new ArrayList<>();
            query.where(predicates.toArray(new Predicate[]{}));
            query.orderBy(cb.desc(root.get("id")));
            return null;
        }, pageable);
        return userPage;
    }

    @Transactional(rollbackFor = Exception.class)
    public Result saveUser(User user) {

        System.out.println(user.getId());


        if (StringUtils.isEmpty(user.getId())) {//没有id的情况
            user.setId(IdGenerator.id());
        } else {
            User oldUser = getUserById(user.getId());
            user.setUsername(oldUser.getUsername());
            user.setName(oldUser.getName());
            oldUser.setPassword(user.getPassword());
        }

        userRepository.saveAndFlush(user);
        return ResultGenerator.genSuccessResult();
    }

    public User getUserById(String id) {
        User user = userRepository.findById(id).orElseThrow(() -> new ServiceException("用户ID错误"));
        return user;
    }


    public Page<Hotel> getHotelPage(Pageable pageable) {
        Page<Hotel> hotelPage = hotelRepository.findAll((root, query, cb) -> {
            List<Predicate> predicates = new ArrayList<>();
            query.where(predicates.toArray(new Predicate[]{}));
            query.orderBy(cb.desc(root.get("createDate")));
            return null;
        }, pageable);
        return hotelPage;
    }

    @Transactional(rollbackFor = Exception.class)
    public Result saveHotel(Hotel hotel) {

        if (StringUtils.isEmpty(hotel.getId())) {//没有id的情况
            hotel.setId(IdGenerator.id());
            hotel.setStatus(StatusEnum.DOWM_STATUS.getCode());
            hotel.setCreateDate(new Date());
            int i = random.nextInt(100);
            hotel.setImage("MY_kezhan_0" + (i % 8 + 1));
        } else {
            //有id的情况
            Hotel oldHotel = getHotelById(hotel.getId());
            hotel.setStatus(oldHotel.getStatus());
            hotel.setCreateDate(oldHotel.getCreateDate());
            hotel.setImage(oldHotel.getImage());
        }
        hotelRepository.saveAndFlush(hotel);
        return ResultGenerator.genSuccessResult();
    }

    public Hotel getHotelById(String id) {
        Hotel hotel = hotelRepository.findById(id).orElseThrow(() -> new ServiceException("酒店ID错误!"));
        return hotel;
    }

    public Result updateStatus(String id) {
        Hotel hotel = getHotelById(id);
        if (hotel.getStatus().equals(StatusEnum.DOWM_STATUS.getCode())) {
            //改变状态
            hotel.setStatus(StatusEnum.UP_STATUS.getCode());
        } else {
            hotel.setStatus(StatusEnum.DOWM_STATUS.getCode());
        }
        hotelRepository.saveAndFlush(hotel);
        return ResultGenerator.genSuccessResult();
    }

    public Page<Attractions> getAttractionsPage(Pageable pageable) {
        Page<Attractions> attractionsPage = attractionsRepository.findAll((root, query, cb) -> {
            List<Predicate> predicates = new ArrayList<>();
            query.where(predicates.toArray(new Predicate[]{}));
            query.orderBy(cb.desc(root.get("createDate")));
            return null;
        }, pageable);
        return attractionsPage;
    }

    public Attractions getAttractionsById(String id) {
        Attractions attractions = attractionsRepository.findById(id).orElseThrow(() -> new ServiceException("景点ID错误"));
        return attractions;
    }

    public Result updateAttractionsStatus(String id) {
        Attractions attractions = getAttractionsById(id);
        if (attractions.getStatus().equals(StatusEnum.DOWM_STATUS.getCode())) {
            //改变状态
            attractions.setStatus(StatusEnum.UP_STATUS.getCode());
        } else {
            attractions.setStatus(StatusEnum.DOWM_STATUS.getCode());
        }
        attractionsRepository.saveAndFlush(attractions);
        return ResultGenerator.genSuccessResult();
    }
安装部署需求

eclipse、idea运行启动

系统部署

系统开发后,在生产环境配置项目运行环境,具体步骤如下:

安装linux或者windows10操作系统;

安装JDK1.8并配置环境变量;

安装MySQL5.7版本以上版本数据库,创建数据库并执行脚本创建表;

在IDEA中编辑进行打包;

下载并配置Tomcat8.0服务器,配置系统服务,上传项目打包文件

本项目用到的技术和框架

(1)开发工具:ideal、tomcat

(2)使用的语言:Java、JSP、Javascript、html、CSS

(3)操作系统:windows操作系统

(4)数据库:Mysql

本项目中的关键点

此系统的开发采用java语言开发,基于B/S结构,这些开发环境使系统更加完善。使用到的工具和技术都是开源免费的。

环境工具

开发工具 Eclipse/IDEA

语言 JDK1.8 、jsp、Springboot 、mybatis

硬件:笔记本电脑;

软件:Tomcat8.0 Web服务器、Navicat数据库客户端、MySQL;

操作系统:Windows 10;

其它软件:截图工具、常用浏览器;

相关推荐
骆晨学长23 分钟前
基于springboot的智慧社区微信小程序
java·数据库·spring boot·后端·微信小程序·小程序
AskHarries28 分钟前
利用反射实现动态代理
java·后端·reflect
bjzhang7530 分钟前
SpringBoot开发——整合SpringDoc实现在线接口文档
spring boot·springdoc
Flying_Fish_roe1 小时前
Spring Boot-Session管理问题
java·spring boot·后端
赚钱给孩子买茅台喝1 小时前
智能BI项目第四期
java·spring boot·spring cloud·aigc
hai405872 小时前
Spring Boot中的响应与分层解耦架构
spring boot·后端·架构
Adolf_19933 小时前
Flask-JWT-Extended登录验证, 不用自定义
后端·python·flask
叫我:松哥3 小时前
基于Python flask的医院管理学院,医生能够增加/删除/修改/删除病人的数据信息,有可视化分析
javascript·后端·python·mysql·信息可视化·flask·bootstrap
洛阳泰山3 小时前
如何使用Chainlit让所有网站快速嵌入一个AI聊天助手Copilot
人工智能·ai·llm·copilot·网站·chainlit·copliot
海里真的有鱼3 小时前
Spring Boot 项目中整合 RabbitMQ,使用死信队列(Dead Letter Exchange, DLX)实现延迟队列功能
开发语言·后端·rabbitmq