当前位置: 首页 > article >正文

今天给在家介绍一篇基于jsp的旅游网站设计与实现

项目描述

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

功能需求

随着我国人民生活水平的不断提高,旅游已成为人们生活的重要活动,通过旅游网站进行旅游景点查询,旅游线路预订等,可以为游客出行提供极大的方便。
旅游网站的设计是面向现实需求的一个实用系统,本课题的目标是为游客和旅游网站提供一个友好的、便捷的交流平台。能实现网站前端的相关旅游信息的查询与展示以及后端的数据库增删改查功能,能满足一般用户的旅游攻略需求。

具备以下功能:

本旅游网站基于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的交互是请求-响应模式,需要刷新页面。
在这里插入图片描述

部分代码
   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;
其它软件:截图工具、常用浏览器;


http://www.kler.cn/a/390197.html

相关文章:

  • Flutter Getx状态管理
  • 计算机毕业设计Python+Neo4j知识图谱医疗问答系统 大模型 机器学习 深度学习 人工智能 大数据毕业设计 Python爬虫 Python毕业设计
  • leetcode hot100【LeetCode 114.二叉树展开为链表】java实现
  • java导出pdf
  • Blender进阶:图像纹理节点和映射节点
  • kafka消费数据太慢了,给优化下
  • 基于PyQt Python的深度学习图像处理界面开发(一)
  • YOLO即插即用---PConv
  • 【go从零单排】通道select、通道timeout、Non-Blocking Channel Operations非阻塞通道操作
  • CNN实现地铁短时客流预测
  • 解非线性方程
  • 【MPC-Simulink】EX03 基于非线性系统线性化模型MPC仿真(MIMO)
  • 光流法(Optical Flow)
  • 云岚到家 秒杀抢购
  • VCSVerdi:KDB文件的生成和导入
  • QT Unknown module(s) in QT 以及maintenance tool的更详细用法(qt6.6.0)
  • P1打卡-使用Pytorch实现mnist手写数字识别
  • 解锁高效直播新体验:第三代 AI 手机自动直播工具,开启直播高效运作新时代!
  • 网页web无插件播放器EasyPlayer.js点播播放器遇到视频地址播放不了的现象及措施
  • 设计模式(主要的五种)
  • 软件设计师 - 层次化存储
  • 大数据-216 数据挖掘 机器学习理论 - KMeans 基于轮廓系数来选择 n_clusters
  • 鸿蒙UI开发——小图标的使用
  • 使用API有效率地管理Dynadot域名,列表形式查看账户whois联系人信息
  • Dubbo负载均衡
  • Baget 私有化nuget