0
点赞
收藏
分享

微信扫一扫

SpringMVC+vue实现前后端分离的旅游管理系统



文末获取源码 

开发语言:Java

开发工具:IDEA /​​Eclipse​​

数据库:MYSQL5.7

应用服务:Tomcat7/Tomcat8

使用​​框架​​​​ssm​​+vue

JDK版本:jdk1.8


前言介绍 

目前许多人仍将传统的纸质工具作为信息管理的主要工具,而网络技术的应用只是起到辅助作用。在对网络工具的认知程度上,较为传统的office软件等仍是人们使用的主要工具,而相对全面且专业的旅游管理系统的信息管理软件仍没有得到大多数人的了解或认可。本选题则旨在通过标签分类管理等方式,管理员;首页、个人中心、用户管理,景点介绍管理,路线推荐管理,特色产品管理、酒店预约管理、论坛管理、系统管理、订单管理,用户前台;首页、景点介绍、路线推荐、特色产品、酒店预约、论坛信息、景点资讯、我的、跳转到后台、购物车、客服,用户后台;首页、个人中心、我的收藏管理、订单管理等信息管理功能,从而达到对旅游管理系统的高效管理。

系统体系结构

旅游管理系统的结构图

SpringMVC+vue实现前后端分离的旅游管理系统_vue

 登录系统结构图,如图

SpringMVC+vue实现前后端分离的旅游管理系统_vue_02

 系统结构图,如图

SpringMVC+vue实现前后端分离的旅游管理系统_旅游_03

数据库设计原则

管理员信息属性图如图

SpringMVC+vue实现前后端分离的旅游管理系统_前端_04

路线推荐管理实体属性图如图

SpringMVC+vue实现前后端分离的旅游管理系统_旅游_05 

 管理员功能实体属性图如图

SpringMVC+vue实现前后端分离的旅游管理系统_前端_06

用户信息实体属性图如图 

SpringMVC+vue实现前后端分离的旅游管理系统_旅游_07

 景点介绍管理实体属性图如图

SpringMVC+vue实现前后端分离的旅游管理系统_后端_08

 数据表

将数据库概念设计的E-R图转换为关系数据库。在关系数据库中,数据关系由数据表组成,但是表的结构表现在表的字段上

allusers表


列名



数据类型



长度



约束



id



int



11



NOT NULL



username



varchar



50



default NULL



pwd



varchar



50



default NULL



cx



varchar



50



default NULL


jingdianjieshao表


列名



数据类型



长度



约束



id



 int



11



NOT NULL



addtime



varchar



50



default NULL



jingdianmingcheng



varchar



50



default NULL



jingdianleixing



varchar



50



default NULL



jingdiandengji



varchar



50



default NULL



chuyoujijie



varchar



50



default NULL



jiaotongzhuangkuang



varchar



50



default NULL



jingdianzhaopian



varchar



50



default NULL



xiangxidizhi



varchar



50



default NULL



jingdianjieshao



varchar



50



default NULL



jingdianxiangqing



varchar



50



default NULL


jiudianyuyue表


列名



数据类型



长度



约束



id



int



11



NOT NULL



addtime



varchar



50



default NULL



jiudianmingcheng



varchar



50



default NULL



jiudianxingji



varchar



50



default NULL



jiudianweizhi



varchar



50



default NULL



zhoubianjingdian



varchar



50



default NULL



kefangleixing



varchar



50



default NULL



kefangmianji



varchar



50



default NULL



mianfeikuandai



varchar



50



default NULL



jiudianzhaopian



varchar



50



default NULL



jiudianjieshao



varchar



50



default NULL


yonghu表


列名



数据类型



长度



约束



id



 int



11



NOT NULL



addtime



varchar



50



 default NULL



yonghuming



varchar



50



 default NULL



mima



varchar



50



 default NULL



xingming



varchar



50



 default NULL



xingbie



varchar



50



 default NULL



nianling



varchar



50



 default NULL



lianxidianhua



varchar



50



 default NULL



dianziyouxiang



varchar



50



 default NULL



shenfenzhenghao



varchar



50



 default NULL



gerenzhaopian



varchar



10



 default


系统详细设计

用户前台功能模块

旅游管理系统,在旅游管理系统可以查看首页、景点介绍、路线推荐、特色产品、酒店预约、论坛信息、景点资讯、我的、跳转到后台、购物车、客服等内容,如图

SpringMVC+vue实现前后端分离的旅游管理系统_vue_09

用户注册,通过用户注册获取用户名、密码、姓名、年龄、联系电话、电子邮箱、身份证号等信息进行注册,如图

SpringMVC+vue实现前后端分离的旅游管理系统_旅游_10 登录,在登录页面可以填写账号、密码、类型等信息,如图

SpringMVC+vue实现前后端分离的旅游管理系统_旅游_11

 景点介绍,在景点介绍页面可以查看价格、景点类型、景点等级、交通状况、景点介绍等如图

SpringMVC+vue实现前后端分离的旅游管理系统_vue_12

路线推荐

SpringMVC+vue实现前后端分离的旅游管理系统_后端_13

特色产品,在特色产品页面可以查看价格、特产类型、特产规格、特产介绍等如图

SpringMVC+vue实现前后端分离的旅游管理系统_java_14 

酒店预约

SpringMVC+vue实现前后端分离的旅游管理系统_vue_15 

 论坛信息

SpringMVC+vue实现前后端分离的旅游管理系统_前端_16

景点资讯

SpringMVC+vue实现前后端分离的旅游管理系统_旅游_17 

管理员功能模块 

管理员登录,通过填写用户名、密码、角色等信息,输入完成后选择登录即可进入旅游管理系统,如图

SpringMVC+vue实现前后端分离的旅游管理系统_旅游_18

管理员登录进入首页、个人中心、用户管理,景点介绍管理,路线推荐管理,特色产品管理、酒店预约管理、论坛管理、系统管理、订单管理等内容,如图

SpringMVC+vue实现前后端分离的旅游管理系统_后端_19

用户管理,在用户管理页面可以查看用户名、密码、姓名、性别、年龄、联系电话、电子邮箱、身份证号、个人照片等信息,并可根据需要对用户管理进行详情,修改,删除或查看详细内容等操作,如图

SpringMVC+vue实现前后端分离的旅游管理系统_旅游_20

管理员在景点介绍管理页面可以查看景点名称、景点类型、景点等级、交通状况、景点图片等信息,并可根据需要对景点介绍管理进行详情,删除或查看详细内容等操作,如图

SpringMVC+vue实现前后端分离的旅游管理系统_前端_21 

路线推荐管理,在路线推荐管理页面可以查看攻略标题、景点名称、景点类型、景点等级、出发城市等信息,并可根据需要对路线推荐管理进行详情,删除或查看详细内容操作,如图

SpringMVC+vue实现前后端分离的旅游管理系统_前端_22 

特色产品管理,在特色产品管理页面可以查看特产名称、特产类型、特产规格、特产照片、特产介绍等内容,并可根据需要对特色产品管理进行详情、修改、删除或查看详细内容等操作,如图

SpringMVC+vue实现前后端分离的旅游管理系统_vue_23 

酒店预约管理,在酒店预约管理页面可以查看酒店名称、酒店星级、酒店位置等信息,并可根据需要对酒店预约管理进行详情,修改,删除或查看详细内容等操作,如图

SpringMVC+vue实现前后端分离的旅游管理系统_旅游_24 

订单管理,在订单管理页面可以查看订单编号、商品名称、商品图片、购买数量、价格/积分、折扣价格、总价格/总积分、折扣总价格、支付类型、状态、地址等内容,并可根据需要对订单管理进行详情,修改,删除和查看详细内容等操作,如图

SpringMVC+vue实现前后端分离的旅游管理系统_java_25 

用户后台功能模块

用户登录进入旅游管理系统可以查看首页、个人中心、我的收藏管理、订单管理等内容,如图

SpringMVC+vue实现前后端分离的旅游管理系统_vue_26


个人中心,在个人中心页面可以填写原密码、新密码、确认密码进行修改如图

SpringMVC+vue实现前后端分离的旅游管理系统_旅游_27 

我的收藏管理,在我的收藏管理页面可以查看收藏、收藏名称、收藏图片等信息,并可根据需要对我的收藏管理进行查看、收藏等操作,如图

SpringMVC+vue实现前后端分离的旅游管理系统_前端_28 

订单管理,在订单管理页面可以查看订单编号、商品名称、商品图片、购买数量、价格/积分、折扣价格、总价格/总积分、折扣总价格、支付类型、状态、地址等信息,并可根据需要对订单管理进行查看等操作,如图

SpringMVC+vue实现前后端分离的旅游管理系统_前端_29 

部分核心代码: 

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.YonghuEntity;
import com.entity.view.YonghuView;

import com.service.YonghuService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MPUtil;
import com.utils.CommonUtil;


/**
* 用户
* 后端接口
* @author
* @email
* @date 2020-12-09 12:04:08
*/
@RestController
@RequestMapping("/yonghu")
public class YonghuController {
@Autowired
private YonghuService yonghuService;

@Autowired
private TokenService tokenService;

/**
* 登录
*/
@IgnoreAuth
@RequestMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
YonghuEntity user = yonghuService.selectOne(new EntityWrapper<YonghuEntity>().eq("yonghuming", username));
if(user==null || !user.getMima().equals(password)) {
return R.error("账号或密码不正确");
}
String token = tokenService.generateToken(user.getId(), username,"yonghu", "用户" );
return R.ok().put("token", token);
}

/**
* 注册
*/
@IgnoreAuth
@RequestMapping("/register")
public R register(@RequestBody YonghuEntity yonghu){
//ValidatorUtils.validateEntity(yonghu);
YonghuEntity user = yonghuService.selectOne(new EntityWrapper<YonghuEntity>().eq("yonghuming", yonghu.getYonghuming()));
if(user!=null) {
return R.error("注册用户已存在");
}
Long uId = new Date().getTime();
yonghu.setId(uId);
yonghuService.insert(yonghu);
return R.ok();
}

/**
* 退出
*/
@RequestMapping("/logout")
public R logout(HttpServletRequest request) {
request.getSession().invalidate();
return R.ok("退出成功");
}

/**
* 获取用户的session用户信息
*/
@RequestMapping("/session")
public R getCurrUser(HttpServletRequest request){
Long id = (Long)request.getSession().getAttribute("userId");
YonghuEntity user = yonghuService.selectById(id);
return R.ok().put("data", user);
}

/**
* 密码重置
*/
@IgnoreAuth
@RequestMapping(value = "/resetPass")
public R resetPass(String username, HttpServletRequest request){
YonghuEntity user = yonghuService.selectOne(new EntityWrapper<YonghuEntity>().eq("yonghuming", username));
if(user==null) {
return R.error("账号不存在");
}
user.setMima("123456");
yonghuService.updateById(user);
return R.ok("密码已重置为:123456");
}


/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,YonghuEntity yonghu, HttpServletRequest request){

EntityWrapper<YonghuEntity> ew = new EntityWrapper<YonghuEntity>();
PageUtils page = yonghuService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, yonghu), params), params));
return R.ok().put("data", page);
}

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

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

/**
* 查询
*/
@RequestMapping("/query")
public R query(YonghuEntity yonghu){
EntityWrapper< YonghuEntity> ew = new EntityWrapper< YonghuEntity>();
ew.allEq(MPUtil.allEQMapPre( yonghu, "yonghu"));
YonghuView yonghuView = yonghuService.selectView(ew);
return R.ok("查询用户成功").put("data", yonghuView);
}

/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") String id){
YonghuEntity yonghu = yonghuService.selectById(id);
return R.ok().put("data", yonghu);
}

/**
* 前端详情
*/
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") String id){
YonghuEntity yonghu = yonghuService.selectById(id);
return R.ok().put("data", yonghu);
}




/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody YonghuEntity yonghu, HttpServletRequest request){
yonghu.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(yonghu);
YonghuEntity user = yonghuService.selectOne(new EntityWrapper<YonghuEntity>().eq("yonghuming", yonghu.getYonghuming()));
if(user!=null) {
return R.error("用户已存在");
}

yonghu.setId(new Date().getTime());
yonghuService.insert(yonghu);
return R.ok();
}

/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody YonghuEntity yonghu, HttpServletRequest request){
yonghu.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(yonghu);
YonghuEntity user = yonghuService.selectOne(new EntityWrapper<YonghuEntity>().eq("yonghuming", yonghu.getYonghuming()));
if(user!=null) {
return R.error("用户已存在");
}

yonghu.setId(new Date().getTime());
yonghuService.insert(yonghu);
return R.ok();
}

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


/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
yonghuService.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<YonghuEntity> wrapper = new EntityWrapper<YonghuEntity>();
if(map.get("remindstart")!=null) {
wrapper.ge(columnName, map.get("remindstart"));
}
if(map.get("remindend")!=null) {
wrapper.le(columnName, map.get("remindend"));
}


int count = yonghuService.selectCount(wrapper);
return R.ok().put("count", count);
}



}


举报

相关推荐

0 条评论