项目介绍
随着旅游业的迅速发展,传统的旅游信息查询方式,已经无法满足用户需求,因此,结合计算机技术的优势和普及,针对安康旅游,特开发了本基于JSP的安康旅游网站。
本论文首先对安康旅游网站进行需求分析,从系统开发环境、系统目标、设计流程、功能设计等几个方面进行系统的总体设计,开发出本基于Vue的安康旅游网站,主要实现了游客功能模块和管理员功能模块两大部分,游客可查看景点信息、旅游线路、特产信息、酒店信息等,注册登录后可进行景点购票、酒店预订、特产购买等操作,同时管理员可进入系统后台对系统进行全面管理操作。通过对系统的功能进行测试,测试结果证明该系统界面友好、功能完善,有着较高的使用价值,具有庞大的潜在用户群体和较广阔的应用前景。
本安康旅游网站基于Springboot框架、Vue技术、Java编程语言、MYSQL数据库开发完成,“操作简单,功能实用”这是本软件设计的核心理念,本系统力求创造最好的用户体验。
开发环境
编程语言: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.1景点信息管理界面
管理员可添加、修改和删除景点信息信息,景点信息管理界面展示如图5.2所示,添加景点信息信息界面展示如图5.3所示。
图5.2 景点信息管理界面
图5.3 添加景点信息信息界面
5.2.2酒店信息管理界面
管理员可增删改查酒店信息,酒店信息管理界面展示如图5.4所示。
图5.4 酒店信息管理界面
5.2.3特产管理界面
管理员可增删改查特产信息,特产管理界面展示如图5.5所示。
图5.5 特产管理界面
5.2.4游客管理界面
管理员可查看、添加、修改和删除游客信息,游客管理界面展示如图5.6所示。
图5.6 游客管理界面
5.2.5景点购票订单管理界面
管理员可查看景点购票订单信息,并可对其进行审核、修改和删除操作,景点购票订单管理界面展示如图5.7所示。
图5.7 景点购票订单管理界面
5.3游客功能模块的实现
5.3.1系统主界面
游客进入本系统可查看系统信息,系统主界面展示如图5.8所示。
图5.8 系统主界面
5.3.2游客注册界面
未有账号的游客可进入注册界面进行注册操作,游客注册界面展示如图5.9所示。
图5.9 游客注册界面
5.3.3景点信息详情界面
游客可选择景点信息查看景点信息详情信息,登录后可进行购票操作,景点信息详情界面展示如图5.10所示。
图5.10景点信息详情界面
5.3.4酒店详情界面
游客可选择酒店查看详情信息,登录后可进行预订下单操作,酒店详情界面展示如图5.11所示。
图5.11酒店详情界面
5.3.5特产详情界面
游客可选择特产查看详情信息,登录后可进行购买操作,特产详情界面展示如图5.12所示。
图5.12 特产详情界面
核心代码
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.format.annotation.DateTimeFormat;
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.JiudianxinxiEntity;
import com.entity.view.JiudianxinxiView;
import com.service.JiudianxinxiService;
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("/jiudianxinxi")
public class JiudianxinxiController {
@Autowired
private JiudianxinxiService jiudianxinxiService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,JiudianxinxiEntity jiudianxinxi,
HttpServletRequest request){
EntityWrapper<JiudianxinxiEntity> ew = new EntityWrapper<JiudianxinxiEntity>();
PageUtils page = jiudianxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, jiudianxinxi), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,JiudianxinxiEntity jiudianxinxi,
HttpServletRequest request){
EntityWrapper<JiudianxinxiEntity> ew = new EntityWrapper<JiudianxinxiEntity>();
PageUtils page = jiudianxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, jiudianxinxi), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( JiudianxinxiEntity jiudianxinxi){
EntityWrapper<JiudianxinxiEntity> ew = new EntityWrapper<JiudianxinxiEntity>();
ew.allEq(MPUtil.allEQMapPre( jiudianxinxi, "jiudianxinxi"));
return R.ok().put("data", jiudianxinxiService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(JiudianxinxiEntity jiudianxinxi){
EntityWrapper< JiudianxinxiEntity> ew = new EntityWrapper< JiudianxinxiEntity>();
ew.allEq(MPUtil.allEQMapPre( jiudianxinxi, "jiudianxinxi"));
JiudianxinxiView jiudianxinxiView = jiudianxinxiService.selectView(ew);
return R.ok("查询酒店信息成功").put("data", jiudianxinxiView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
JiudianxinxiEntity jiudianxinxi = jiudianxinxiService.selectById(id);
jiudianxinxi.setClicknum(jiudianxinxi.getClicknum()+1);
jiudianxinxi.setClicktime(new Date());
jiudianxinxiService.updateById(jiudianxinxi);
return R.ok().put("data", jiudianxinxi);
}
/**
* 前端详情
*/
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
JiudianxinxiEntity jiudianxinxi = jiudianxinxiService.selectById(id);
jiudianxinxi.setClicknum(jiudianxinxi.getClicknum()+1);
jiudianxinxi.setClicktime(new Date());
jiudianxinxiService.updateById(jiudianxinxi);
return R.ok().put("data", jiudianxinxi);
}
/**
* 赞或踩
*/
@RequestMapping("/thumbsup/{id}")
public R vote(@PathVariable("id") String id,String type){
JiudianxinxiEntity jiudianxinxi = jiudianxinxiService.selectById(id);
if(type.equals("1")) {
jiudianxinxi.setThumbsupnum(jiudianxinxi.getThumbsupnum()+1);
} else {
jiudianxinxi.setCrazilynum(jiudianxinxi.getCrazilynum()+1);
}
jiudianxinxiService.updateById(jiudianxinxi);
return R.ok("投票成功");
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody JiudianxinxiEntity jiudianxinxi, HttpServletRequest request){
jiudianxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(jiudianxinxi);
jiudianxinxiService.insert(jiudianxinxi);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody JiudianxinxiEntity jiudianxinxi, HttpServletRequest request){
jiudianxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(jiudianxinxi);
jiudianxinxiService.insert(jiudianxinxi);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody JiudianxinxiEntity jiudianxinxi, HttpServletRequest request){
//ValidatorUtils.validateEntity(jiudianxinxi);
jiudianxinxiService.updateById(jiudianxinxi);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
jiudianxinxiService.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<JiudianxinxiEntity> wrapper = new EntityWrapper<JiudianxinxiEntity>();
if(map.get("remindstart")!=null) {
wrapper.ge(columnName, map.get("remindstart"));
}
if(map.get("remindend")!=null) {
wrapper.le(columnName, map.get("remindend"));
}
int count = jiudianxinxiService.selectCount(wrapper);
return R.ok().put("count", count);
}
/**
* 前端智能排序
*/
@IgnoreAuth
@RequestMapping("/autoSort")
public R autoSort(@RequestParam Map<String, Object> params,JiudianxinxiEntity jiudianxinxi, HttpServletRequest request,String pre){
EntityWrapper<JiudianxinxiEntity> ew = new EntityWrapper<JiudianxinxiEntity>();
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 = jiudianxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, jiudianxinxi), params), params));
return R.ok().put("data", page);
}
}
论文参考
目 录
目 录 I
摘 要 III
Abstract IV
第一章 绪论 1
1.1 研究现状 1
1.2 设计原则 1
1.3 研究内容 2
第二章 相关技术简介 1
2.1 JSP技术 1
2.2 Java技术 2
2.3 MYSQL数据库 2
2.4 B/S结构 3
2.5 Spring Boot框架 4
第三章 系统分析 5
3.1可行性分析 5
3.1.1技术可行性 5
3.1.2 操作可行性 5
3.1.3 经济可行性 5
3.1.4 法律可行性 5
3.2系统性能分析 6
3.3系统功能分析 6
3.4系统流程分析 6
3.4.1注册流程 6
3.4.2 登录流程 7
3.5系统架构分析 8
第四章 系统设计 10
4.1系统结构设计 10
4.2系统顺序图设计 10
4.3数据库设计 11
4.3.1 数据库实体(E-R图) 11
4.3.2 数据库表设计 14
第五章 系统实现 16
5.1登录模块的实现 16
5.2管理员功能模块的实现 16
5.2.1景点信息管理界面 16
5.2.2酒店信息管理界面 17
5.2.3特产管理界面 18
5.2.4游客管理界面 18
5.2.5景点购票订单管理界面 19
5.3游客功能模块的实现 19
5.3.1系统主界面 19
5.3.2游客注册界面 20
5.3.3景点信息详情界面 20
5.3.4酒店详情界面 21
5.3.5特产详情界面 22
第六章 系统测试 23
6.1测试环境 23
6.2测试方法 23
6.3测试计划 24
6.4测试结论 24
第七章 结论 25
参考文献 26
致 谢 27