基于java+springboot+vue的旅游网站

项目介绍

随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势,旅游网站当然也不能排除在外,随着旅游网站的不断成熟,它彻底改变了过去传统的旅游网站方式,不仅使旅游管理难度变低了,还提升了旅游网站的灵活性。这种个性化的旅游网站特别注重交互协调经营与管理的相互配合,激发了管理人员的创造性与主动性,对旅游管理的管理而言非常有利。

本文首先分析了旅游网站的发展背景和意义,简要阐述了旅游网站系统开发的主要内容和优势,然后简要介绍了国内外旅游网站系统的研究和应用现状,并对系统开发技术,系统分析和总体设计,实现详细功能等。

本旅游网站系统采用的数据库是MYSQL,使用Vue技术开发,在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。

在这里插入图片描述

开发环境

编程语言:Java
数据库 :Mysql
系统架构:B/S
后端框架:SpringBoot
编译工具:idea或者eclipse,jdk1.8,maven
支持定做:java/php/python/android/小程序vue/爬虫/c#/asp.net

系统实现

5.1登录界面
登录窗口,用户通过登录窗口可以进行登录或注册。还没注册的用户可以进行填写用户名、密码进行注册操作,如图5-1所示,
在这里插入图片描述

图5-1登录窗口界面

5.2管理员功能模块
用户登录成功后,可以进行查看个人中心、用户管理、路线分类管理、旅游路线管理、最新路线管理、系统管理、订单管理等功能模块。进行相对应操作。
旅游路线管理:通过列表可以获取路线名称、路线分类、封面图、景点名称、出发地、目的地、交通方式、出行时间、费用包含、价格等信息,进行查看旅游详情或修改、查看评论操作,或新增、删除,如图5-2所示。
在这里插入图片描述

图5-2旅游路线界面

旅游资讯:管理员通过列表可以进行查看标题、简介、图片等信息,进行详情、修改或删除操作,并通过新增进行添加旅游资讯信息或删除操作,如图5-3所示。
在这里插入图片描述

图5-3旅游资讯界面

订单管理:管理员通过列表可以进行查看订单编号、商品名称、商品图片、购买数量、价格、折扣价格、总价格、支付类型、地址等信息,进行详情、发货或删除操作,并通过输入进行订单编号、商品名称操作,如图5-4所示。
在这里插入图片描述

图5-4订单管理界面

客服管理:管理员通过列表可以进行查看新消息或状态等信息,进行查看或回复操作,如图5-5所示。

在这里插入图片描述

图5-5客服管理界面图

5.3用户功能模块
用户登录成功后,可以进行查看旅游路线、最新线路、旅游资讯、个人中心、后台管理、购物车、客服等功能模块。进行相对应操作。如图5-6所示。
在这里插入图片描述

图5-6前台首页界面

个人中心:通过列表可以进行查看个人中心、我的订单、我的地址、我的收藏等功能,进行相对应操作,个人中心:通过页面可以进行修改用户名、密码、姓名、头像、性别、联系电话、余额等信息,进行更新信息操作,如图5-7所示。
在这里插入图片描述

图5-7个人中心界面

个人中心:通过列表可以进行查看个人中心、我的订单、我的地址、我的收藏等功能,进行相对应操作,个人中心:通过页面可以进行修改用户名、密码、姓名、头像、性别、联系电话、余额等信息,进行更新信息操作,如图5-8所示。我的地址:通过列表可以进行查看联系人、手机号码、默认地址等信息、进行添加地址或重置操作,如图5-9所示。
在这里插入图片描述

图5-8个人中心界面
在这里插入图片描述

图5-9我的地址界面图

购物车:通过列表可以进行查看购买商品、价格、数量、总价等信息、进行查看或删除操作,如图5-10所示。
在这里插入图片描述

图5-10购物车界面图

旅游线路:通过列表可以进行查看路线名称、价格、路线分类、景点名称、出发地、目的地、交通方式、出行时间、费用包含、点击次数等信息、进行添加购物车或立即购买、收藏操作,如图5-11所示。用户通过点击立即购买进入页面可以进行选择收货地址进行查看订单信息,进行在线支付操作,如图5-12所示。
在这里插入图片描述

图5-11旅游路线界面图
在这里插入图片描述

图5-12购买界面图

我的订单:通过列表可以进行查看订单编号、商品、价格、数量、总价、地址等信息、进行查看订单信息或退款操作,如图5-13所示。
在这里插入图片描述

图5-13我的订单界面图

旅游资讯:通过旅游资讯可以进行查看订标题、资讯图片、新出路线、等信息、进行查看查看信息或发布旅游资讯信息操作,如图5-14所示。

在这里插入图片描述

图5-14旅游资讯界面图

核心代码

package com.controller;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;

import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;

import com.entity.LvyouxianluEntity;
import com.entity.view.LvyouxianluView;

import com.service.LvyouxianluService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;


/**
 * 旅游线路
 * 后端接口
 * @author 
 * @email 
 * @date 
 */
@RestController
@RequestMapping("/lvyouxianlu")
public class LvyouxianluController {
    @Autowired
    private LvyouxianluService lvyouxianluService;
    


    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,LvyouxianluEntity lvyouxianlu, HttpServletRequest request){
        EntityWrapper<LvyouxianluEntity> ew = new EntityWrapper<LvyouxianluEntity>();
		PageUtils page = lvyouxianluService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, lvyouxianlu), params), params));

        return R.ok().put("data", page);
    }
    
    /**
     * 前端列表
     */
	@IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,LvyouxianluEntity lvyouxianlu, HttpServletRequest request){
        EntityWrapper<LvyouxianluEntity> ew = new EntityWrapper<LvyouxianluEntity>();
		PageUtils page = lvyouxianluService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, lvyouxianlu), params), params));
        return R.ok().put("data", page);
    }

	/**
     * 列表
     */
    @RequestMapping("/lists")
    public R list( LvyouxianluEntity lvyouxianlu){
       	EntityWrapper<LvyouxianluEntity> ew = new EntityWrapper<LvyouxianluEntity>();
      	ew.allEq(MPUtil.allEQMapPre( lvyouxianlu, "lvyouxianlu")); 
        return R.ok().put("data", lvyouxianluService.selectListView(ew));
    }

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(LvyouxianluEntity lvyouxianlu){
        EntityWrapper< LvyouxianluEntity> ew = new EntityWrapper< LvyouxianluEntity>();
 		ew.allEq(MPUtil.allEQMapPre( lvyouxianlu, "lvyouxianlu")); 
		LvyouxianluView lvyouxianluView =  lvyouxianluService.selectView(ew);
		return R.ok("查询旅游线路成功").put("data", lvyouxianluView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        LvyouxianluEntity lvyouxianlu = lvyouxianluService.selectById(id);
		lvyouxianlu.setClicknum(lvyouxianlu.getClicknum()+1);
		lvyouxianlu.setClicktime(new Date());
		lvyouxianluService.updateById(lvyouxianlu);
        return R.ok().put("data", lvyouxianlu);
    }

    /**
     * 前端详情
     */
	@IgnoreAuth
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id){
        LvyouxianluEntity lvyouxianlu = lvyouxianluService.selectById(id);
		lvyouxianlu.setClicknum(lvyouxianlu.getClicknum()+1);
		lvyouxianlu.setClicktime(new Date());
		lvyouxianluService.updateById(lvyouxianlu);
        return R.ok().put("data", lvyouxianlu);
    }
    



    /**
     * 后端保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody LvyouxianluEntity lvyouxianlu, HttpServletRequest request){
    	lvyouxianlu.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(lvyouxianlu);
        lvyouxianluService.insert(lvyouxianlu);
        return R.ok();
    }
    
    /**
     * 前端保存
     */
    @RequestMapping("/add")
    public R add(@RequestBody LvyouxianluEntity lvyouxianlu, HttpServletRequest request){
    	lvyouxianlu.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(lvyouxianlu);
        lvyouxianluService.insert(lvyouxianlu);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody LvyouxianluEntity lvyouxianlu, HttpServletRequest request){
        //ValidatorUtils.validateEntity(lvyouxianlu);
        lvyouxianluService.updateById(lvyouxianlu);//全部更新
        return R.ok();
    }
    

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        lvyouxianluService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
    
    /**
     * 提醒接口
     */
	@RequestMapping("/remind/{columnName}/{type}")
	public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request, 
						 @PathVariable("type") String type,@RequestParam Map<String, Object> map) {
		map.put("column", columnName);
		map.put("type", type);
		
		if(type.equals("2")) {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			Calendar c = Calendar.getInstance();
			Date remindStartDate = null;
			Date remindEndDate = null;
			if(map.get("remindstart")!=null) {
				Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
				c.setTime(new Date()); 
				c.add(Calendar.DAY_OF_MONTH,remindStart);
				remindStartDate = c.getTime();
				map.put("remindstart", sdf.format(remindStartDate));
			}
			if(map.get("remindend")!=null) {
				Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
				c.setTime(new Date());
				c.add(Calendar.DAY_OF_MONTH,remindEnd);
				remindEndDate = c.getTime();
				map.put("remindend", sdf.format(remindEndDate));
			}
		}
		
		Wrapper<LvyouxianluEntity> wrapper = new EntityWrapper<LvyouxianluEntity>();
		if(map.get("remindstart")!=null) {
			wrapper.ge(columnName, map.get("remindstart"));
		}
		if(map.get("remindend")!=null) {
			wrapper.le(columnName, map.get("remindend"));
		}


		int count = lvyouxianluService.selectCount(wrapper);
		return R.ok().put("count", count);
	}
	
	/**
     * 前端智能排序
     */
	@IgnoreAuth
    @RequestMapping("/autoSort")
    public R autoSort(@RequestParam Map<String, Object> params,LvyouxianluEntity lvyouxianlu, HttpServletRequest request,String pre){
        EntityWrapper<LvyouxianluEntity> ew = new EntityWrapper<LvyouxianluEntity>();
        Map<String, Object> newMap = new HashMap<String, Object>();
        Map<String, Object> param = new HashMap<String, Object>();
		Iterator<Map.Entry<String, Object>> it = param.entrySet().iterator();
		while (it.hasNext()) {
			Map.Entry<String, Object> entry = it.next();
			String key = entry.getKey();
			String newKey = entry.getKey();
			if (pre.endsWith(".")) {
				newMap.put(pre + newKey, entry.getValue());
			} else if (StringUtils.isEmpty(pre)) {
				newMap.put(newKey, entry.getValue());
			} else {
				newMap.put(pre + "." + newKey, entry.getValue());
			}
		}
		params.put("sort", "clicknum");
        params.put("order", "desc");
		PageUtils page = lvyouxianluService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, lvyouxianlu), params), params));
        return R.ok().put("data", page);
    }


}

论文参考

在这里插入图片描述

目 录
摘 要 2
Abstract 3
1.1 课题开发的背景 4
1.2 课题研究的意义 4
1.3 研究内容 5
第二章 系统开发关键技术 6
2.1 JSP技术介绍 6
2.2 JAVA简介 6
2.3 MyEclipse开发环境 7
2.4 Tomcat服务器 7
2.5 Spring Boot框架 7
2.6 MySQL数据库 8
第三章 系统分析 9
3.1 系统可行性研究 9
3.2 性能分析 10
3.3 业务流程分析 10
第四章 系统的总体设计 13
4.1 系统功能结构设计 13
4.2 数据库概述 14
4.2.1 数据库概念设计 14
4.2.2 数据库逻辑设计 15
第五章 系统的实现 18
5.1登录界面 18
5.2管理员功能模块 18
5.3用户功能模块 20
第六章 系统测试 25
6.1系统测试的目的 25
6.2测试方法 25
6.3系统测试模块 25
总 结 27
参考文献 28
致 谢 29

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

q_2781179521

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值