项目介绍
随着旅游业的迅速发展,传统的旅游资讯查询方式,已经无法满足用户需求,因此,结合计算机技术的优势和普及,特开发了本亿互游在线平台。
本文研究的亿互游在线平台基于SSM框架,采用JSP技术、Java语言和MYSQL数据库设计开发。通过本系统,满足了不同权限用户的需求,包括管理员、用户和前台,用户通过本系统可查看旅游信息,注册登录后还可进行酒店预订、美食购买等,前台注册登录后可实现景点信息管理、路线规划管理、景点美食管理以及住宿信息管理功能,管理员可登录系统后台对系统进行全面管理,确保系统正常稳定运行,更好的为用户服务。
本系统经过测试,运行效果稳定,操作方便、快捷,是一个功能全面、实用性好、安全性高,并具有良好的可扩展性、可维护性的亿互游在线平台。
开发环境
编程语言:Java
数据库 :Mysql
系统架构:B/S
后端框架:SSM
编译工具:idea或者eclipse,jdk1.8,maven
支持定做:java/php/python/android/小程序ue/爬虫/c#/asp.net
系统实现
5.1 用户功能模块的实现
用户进入本系统可查看系统信息,系统前台主界面展示如图5-1所示。
图5-1系统主界面图
5.1.1用户注册界面
未有账号的用户可进入注册界面进行注册操作,用户注册界面展示如图5-2所示。
图5-2用户注册界面图
5.1.2用户登录界面
用户要想进行景点、美食以及酒店的购买操作,必须登录系统,用户登录界面展示如图5-3所示。
图5-3用户登录界面图
5.1.3景点美食详情界面
用户在景点美食详情界面可查看景点美食详细信息,登录后可加入购物车或者立即购买操作,景点美食详情界面展示如图5-4所示。
图5-4 景点美食详情界面图
5.1.4景点详情界面
用户可选择景点查看详情信息,登录后可进行添加购物车或者购买操作,景点详情界面展示如图5-5所示。
图5-5 景点详情界面图
5.1.5住址详情界面
用户还可选择住宿查看详情,登录后也可购买或者加入购物车,住宿详情界面展示如图5-6所示。
图5-6 住宿详情界面图
5.1.6留言反馈界面
用户登录后可留言反馈,留言反馈界面展示如图5-7所示。
图5-7 留言反馈界面图
5.1.7我的订单界面
用户可进入我的订单界面查看个人已有订单信息,其界面展示如图5-8所示。
图5-8 我的订单界面图
5.2管理员功能模块的实现
5.2.1管理员登录界面
管理员要想进入系统后台对系统进行管理操作,必须进行登录系统,管理员登录界面展示如图5-9所示。
图5-9管理员管理界面图
5.2.2前台管理界面
管理员可查看所有前台信息,并可对其进行删除操作,前台界面展示如图5-10所示。
图5-10 前台管理界面图
5.2.3用户管理界面
管理员可查看和删除用户信息,用户管理界面展示如图5-11所示。
图5-11 用户管理界面图
5.2.4邀请信息管理界面
管理员可增删改查邀请信息,邀请信息管理界面展示如图5-12所示。
图5-12 邀请信息管理界面图
5.2.5留言板管理管理界面
管理员可查看用户留言信息,并可对其进行回复、修改和删除操作,留言板管理界面展示如图5-13所示。
图5-13 留言板管理界面图
5.3前台功能模块的实现
5.3.1前台注册界面
没有账号的前台也可进行注册操作,前台注册界面展示如图5-14所示。
图5-14 前台注册界面图
5.3.2景点信息管理界面
前台可增删改查景点信息,景点信息管理界面展示如图5-15所示。
图5-15 景点信息管理界面图
5.3.3景点美食管理界面
前台能添加、修改和删除景点美食信息,景点美食管理界面展示如图5-16所示。
图5-16 景点美食管理界面图
5.3.4住宿信息管理界面
前台可以添加、修改和删除住宿信息,住宿信息管理界面展示如图5-17所示。
图5-17 住宿信息管理界面图
核心代码
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.JingdianxinxiEntity;
import com.entity.view.JingdianxinxiView;
import com.service.JingdianxinxiService;
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("/jingdianxinxi")
public class JingdianxinxiController {
@Autowired
private JingdianxinxiService jingdianxinxiService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,JingdianxinxiEntity jingdianxinxi,
HttpServletRequest request){
EntityWrapper<JingdianxinxiEntity> ew = new EntityWrapper<JingdianxinxiEntity>();
PageUtils page = jingdianxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, jingdianxinxi), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("st")
public R list(@RequestParam Map<String, Object> params,JingdianxinxiEntity jingdianxinxi, HttpServletRequest request){
EntityWrapper<JingdianxinxiEntity> ew = new EntityWrapper<JingdianxinxiEntity>();
PageUtils page = jingdianxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, jingdianxinxi), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("sts")
public R list( JingdianxinxiEntity jingdianxinxi){
EntityWrapper<JingdianxinxiEntity> ew = new EntityWrapper<JingdianxinxiEntity>();
ew.allEq(MPUtil.allEQMapPre( jingdianxinxi, "jingdianxinxi"));
return R.ok().put("data", jingdianxinxiService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(JingdianxinxiEntity jingdianxinxi){
EntityWrapper< JingdianxinxiEntity> ew = new EntityWrapper< JingdianxinxiEntity>();
ew.allEq(MPUtil.allEQMapPre( jingdianxinxi, "jingdianxinxi"));
JingdianxinxiView jingdianxinxiView = jingdianxinxiService.selectView(ew);
return R.ok("查询景点信息成功").put("data", jingdianxinxiView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
JingdianxinxiEntity jingdianxinxi = jingdianxinxiService.selectById(id);
jingdianxinxi.setClicknum(jingdianxinxi.getClicknum()+1);
jingdianxinxi.setClicktime(new Date());
jingdianxinxiService.updateById(jingdianxinxi);
return R.ok().put("data", jingdianxinxi);
}
/**
* 前端详情
*/
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
JingdianxinxiEntity jingdianxinxi = jingdianxinxiService.selectById(id);
jingdianxinxi.setClicknum(jingdianxinxi.getClicknum()+1);
jingdianxinxi.setClicktime(new Date());
jingdianxinxiService.updateById(jingdianxinxi);
return R.ok().put("data", jingdianxinxi);
}
/**
* 赞或踩
*/
@RequestMapping("/thumbsup/{id}")
public R thumbsup(@PathVariable("id") String id,String type){
JingdianxinxiEntity jingdianxinxi = jingdianxinxiService.selectById(id);
if(type.equals("1")) {
jingdianxinxi.setThumbsupnum(jingdianxinxi.getThumbsupnum()+1);
} else {
jingdianxinxi.setCrazilynum(jingdianxinxi.getCrazilynum()+1);
}
jingdianxinxiService.updateById(jingdianxinxi);
return R.ok();
}
/**
* 后端保存
*/
@RequestMapping("ve")
public R save(@RequestBody JingdianxinxiEntity jingdianxinxi, HttpServletRequest request){
jingdianxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(jingdianxinxi);
jingdianxinxiService.insert(jingdianxinxi);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody JingdianxinxiEntity jingdianxinxi, HttpServletRequest request){
jingdianxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(jingdianxinxi);
jingdianxinxiService.insert(jingdianxinxi);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody JingdianxinxiEntity jingdianxinxi, HttpServletRequest request){
//ValidatorUtils.validateEntity(jingdianxinxi);
jingdianxinxiService.updateById(jingdianxinxi);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
jingdianxinxiService.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<JingdianxinxiEntity> wrapper = new EntityWrapper<JingdianxinxiEntity>();
if(map.get("remindstart")!=null) {
wrapper.ge(columnName, map.get("remindstart"));
}
if(map.get("remindend")!=null) {
wrapper.le(columnName, map.get("remindend"));
}
int count = jingdianxinxiService.selectCount(wrapper);
return R.ok().put("count", count);
}
/**
* 前端智能排序
*/
@IgnoreAuth
@RequestMapping("/autoSort")
public R autoSort(@RequestParam Map<String, Object> params,JingdianxinxiEntity jingdianxinxi, HttpServletRequest request,String pre){
EntityWrapper<JingdianxinxiEntity> ew = new EntityWrapper<JingdianxinxiEntity>();
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 = jingdianxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, jingdianxinxi), params), params));
return R.ok().put("data", page);
}
}
论文参考
目 录
摘 要 I
Abstract II
1 绪论 1
1.1研究背景 1
1.2设计原则 1
1.3论文主要内容 1
2 相关技术简介 3
2.1 JSP技术 3
2.2 B/S结构 3
2.3 MYSQL数据库 4
2.4 JAVA技术 4
2.5 Tomcat简介 4
3 系统分析 6
3.1 可行性分析 6
3.1.1 技术可行性 6
3.1.2 经济可行性 6
3.1.3 操作可行性 6
3.1.4 时间可行性 6
3.2 系统性能分析 7
3.3 系统功能分析 7
3.4 系统流程分析 8
3.4.1注册流程 8
3.4.2登录流程 9
4 系统设计 10
4.1 系统架构设计 10
4.2 系统结构设计 10
4.3 数据库设计 11
4.3.1数据库E-R图设计 11
4.3.2数据库表设计 14
5 系统实现 17
5.1 用户功能模块的实现 17
5.1.1用户注册界面 17
5.1.2用户登录界面 18
5.1.3景点美食详情界面 19
5.1.4景点详情界面 19
5.1.5住址详情界面 20
5.1.6留言反馈界面 21
5.1.7我的订单界面 21
5.2管理员功能模块的实现 22
5.2.1管理员登录界面 22
5.2.2前台管理界面 23
5.2.3用户管理界面 23
5.2.4邀请信息管理界面 23
5.2.5留言板管理管理界面 24
5.3前台功能模块的实现 24
5.3.1前台注册界面 24
5.3.2景点信息管理界面 25
5.3.3景点美食管理界面 25
5.3.4住宿信息管理界面 26
6 系统测试 27
6.1 测试定义 27
6.2 性能测试 27
6.3 测试原理 27
6.4 测试分析 28
总结 29
参考文献 30
致谢 31