毕业设计|SpringBoot+Vue项目旅游信息推荐系统【源码开源】

今天又来给大家分享项目了是一个基于SpringBoot+Vue前后端分离的旅游信息推荐系统,非常值得大家去学习,点赞、收藏、评论多多支持一下
源码在文章末尾链接获取
目录
前言介绍
数据库表结构
前台首页功能模块
首页
旅游新闻
新闻详情
景区信息?
美食信息 ?
美食详情
旅游线路
线路详情
在线留言?
管理员功能模块
账号管理
地区管理
景点信息管理
地方美食管理
旅游线路管理
订单信息管理
新闻管理
?编辑系统管理?
用户功能模块
线路预定管理
个人中心
部分核心代码:
AdminsController.java
CommonController.java
YouqinglianjieController.java
源码链接
链接:https://pan.baidu.com/s/1oklSr-y1IefhtWmvisSSoQ 提取码:cijf

前言介绍 本系统采用了Java技术,将所有业务模块采用以浏览器交互的模式,选择MySQL作为系统的数据库,开发工具选择IntelliJ IDEA来进行系统的设计。基本实现了旅游信息推荐系统应有的主要功能模块,本系统有管理员和用户。
1.首页:首页,旅游新闻(行业资讯,站内新闻),景区信息(境外,境内,本地),美食信息,旅游线路,在线路,在线留言,注册。
2.管理员:账号管理,地区管理,景点信息管理,地方美食管理,旅游线路管理,订单信息管理,新闻管理,系统管理等等功能

数据库表结构
【收藏记录】模块,表名:shoucangjilu
字段名
字段类型
名称
id
int
(主键)
username
varchar(255)
收藏用户
xwid
int
对应模块id
biao
varchar(255)
收藏得模块
biaoti
varchar(255)
显示的标题
url
varchar(512)
收藏URL
ziduan
varchar(255)
对应模块字段
addtime
timestamp
添加时间
【收藏记录】模块,表名:shoucangjilu
字段名
字段类型
名称
id
int
(主键)
username
varchar(255)
收藏用户
xwid
int
对应模块id
biao
varchar(255)
收藏得模块
biaoti
varchar(255)
显示的标题
url
varchar(512)
收藏URL
ziduan
varchar(255)
对应模块字段
addtime
timestamp
添加时间

【管理员】模块,表名:admins
字段名
字段类型
名称
id
int
(主键)
username
varchar(50)
帐号
pwd
varchar(50)
密码
addtime
timestamp
添加时间
【用户】模块,表名:yonghu
字段名
字段类型
名称
id
int
(主键)
yonghuming
varchar(50)
用户名
mima
varchar(50)
密码
xingming
varchar(50)
姓名
xingbie
varchar(255)
性别
shouji
varchar(50)
手机
youxiang
varchar(50)
邮箱
shenfenzheng
varchar(50)
身份证
touxiang
varchar(255)
头像
addtime
timestamp
添加时间

【新闻分类】模块,表名:xinwenfenlei
字段名
字段类型
名称
id
int
(主键)
fenleimingcheng
varchar(50)
分类名称
addtime
timestamp
添加时间
【景点信息】模块,表名:jingdianxinxi
字段名
字段类型
名称
id
int
(主键)
jingdianbianhao
varchar(50)
景点编号
jingdianmingcheng
varchar(255)
景点名称
suoshudiqu
int
所属地区
tupian
text
图片
kaifangshijian
varchar(255)
开放时间
fujinmeishi
text
附近美食
dizhi
varchar(255)
地址
piaojia
decimal(18, 2)
票价
liulanliang
int
浏览量
miaoshu
longtext
描述
addtime
timestamp
添加时间
设置索引, 字段:suoshudiqu , 关联表【diqu】中的id 字段

【旅游线路】模块,表名:lvyouxianlu
字段名
字段类型
名称
id
int
(主键)
xianlubianhao
varchar(50)
线路编号
xianlumingcheng
varchar(255)
线路名称
tupian
text
图片
chufadi
varchar(255)
出发地
tujingdi
varchar(255)
途经地
zhongdian
varchar(255)
终点
jiage
decimal(18, 2)
价格
liulanliang
int
浏览量
xianlutese
longtext
线路特色
xianlujianjie
longtext
线路简介
addtime
timestamp
添加时间
【预定】模块,表名:yuding
字段名
字段类型
名称
id
int
(主键)
lvyouxianluid
int
旅游线路id
xianlubianhao
varchar(50)
线路编号
xianlumingcheng
varchar(255)
线路名称
chufadi
varchar(255)
出发地
tujingdi
varchar(255)
途经地
zhongdian
varchar(255)
终点
jiage
decimal(18, 2)
价格
dingdanhao
varchar(50)
订单号
yudingshijian
varchar(25)
预订时间
yudingrenxingming
【毕业设计|SpringBoot+Vue项目旅游信息推荐系统【源码开源】】varchar(50)
预订人姓名
lianxifangshi
varchar(50)
联系方式
zhuangtai
varchar(50)
状态
beizhu
text
备注
yudingren
varchar(50)
预订人
addtime
timestamp
添加时间
iszf
varchar(10)
是否支付
设置索引, 字段:lvyouxianluid , 关联表【lvyouxianlu】中字段id
前台首页功能模块 首页


毕业设计|SpringBoot+Vue项目旅游信息推荐系统【源码开源】
文章图片


旅游新闻 毕业设计|SpringBoot+Vue项目旅游信息推荐系统【源码开源】
文章图片


新闻详情 毕业设计|SpringBoot+Vue项目旅游信息推荐系统【源码开源】
文章图片


景区信息毕业设计|SpringBoot+Vue项目旅游信息推荐系统【源码开源】
文章图片

美食信息 毕业设计|SpringBoot+Vue项目旅游信息推荐系统【源码开源】
文章图片
美食详情 毕业设计|SpringBoot+Vue项目旅游信息推荐系统【源码开源】
文章图片

旅游线路 毕业设计|SpringBoot+Vue项目旅游信息推荐系统【源码开源】
文章图片

线路详情毕业设计|SpringBoot+Vue项目旅游信息推荐系统【源码开源】
文章图片

在线留言毕业设计|SpringBoot+Vue项目旅游信息推荐系统【源码开源】
文章图片
管理员功能模块 账号管理 毕业设计|SpringBoot+Vue项目旅游信息推荐系统【源码开源】
文章图片

地区管理 毕业设计|SpringBoot+Vue项目旅游信息推荐系统【源码开源】
文章图片

景点信息管理毕业设计|SpringBoot+Vue项目旅游信息推荐系统【源码开源】
文章图片

地方美食管理毕业设计|SpringBoot+Vue项目旅游信息推荐系统【源码开源】
文章图片

旅游线路管理毕业设计|SpringBoot+Vue项目旅游信息推荐系统【源码开源】
文章图片

订单信息管理 毕业设计|SpringBoot+Vue项目旅游信息推荐系统【源码开源】
文章图片

新闻管理 毕业设计|SpringBoot+Vue项目旅游信息推荐系统【源码开源】
文章图片
系统管理毕业设计|SpringBoot+Vue项目旅游信息推荐系统【源码开源】
文章图片
用户功能模块 线路预定管理 毕业设计|SpringBoot+Vue项目旅游信息推荐系统【源码开源】
文章图片

个人中心毕业设计|SpringBoot+Vue项目旅游信息推荐系统【源码开源】
文章图片


部分核心代码: AdminsController.java
/** * 管理员 */ @Controller public class AdminsController extends BaseController { @Autowired private AdminsMapper dao; @Autowired private AdminsService service; /** *后台列表页 * */ @RequestMapping("/admins_list") public String list() {// 检测是否有登录,没登录则跳转到登录页面 if(!checkLogin()){ return showError("尚未登录" , "./login.do"); }String order = Request.get("order" , "id"); // 获取前台提交的URL参数 order如果没有则设置为id String sort= Request.get("sort" , "desc"); // 获取前台提交的URL参数 sort如果没有则设置为desc intpagesize = Request.getInt("pagesize" , 12); // 获取前台一页多少行数据 Example example = new Example(Admins.class); //创建一个扩展搜索类 Example.Criteria criteria = example.createCriteria(); // 创建一个扩展搜索条件类 String where = " 1=1 "; // 创建初始条件为:1=1 where += getWhere(); // 从方法中获取url 上的参数,并写成 sql条件语句 criteria.andCondition(where); // 将条件写进上面的扩展条件类中 if(sort.equals("desc")){// 判断前台提交的sort 参数是否等于desc倒序是则使用倒序,否则使用正序 example.orderBy(order).desc(); // 把sql 语句设置成倒序 }else{ example.orderBy(order).asc(); // 把 sql 设置成正序 } int page = request.getParameter("page") == null ? 1 : Integer.valueOf(request.getParameter("page")); // 获取前台提交的URL参数 page如果没有则设置为1 page = Math.max(1 , page); // 取两个数的最大值,防止page 小于1 List list = service.selectPageExample(example , page , pagesize); // 获取当前页的行数// 将列表写给界面使用 assign("totalCount" , request.getAttribute("totalCount")); assign("list" , list); assign("orderby" , order); // 把当前排序结果写进前台 assign("sort" , sort); // 把当前排序结果写进前台 return json(); // 将数据写给前端 }public String getWhere() { _var = new LinkedHashMap(); // 重置数据 String where = " "; // 以下也是一样的操作,判断是否符合条件,符合则写入sql 语句 if(!Request.get("username").equals("")) { where += " AND username LIKE '%"+Request.get("username")+"%' "; } return where; }@RequestMapping("/admins_add") public String add() { _var = new LinkedHashMap(); // 重置数据return json(); // 将数据写给前端 }@RequestMapping("/admins_updt") public String updt() { _var = new LinkedHashMap(); // 重置数据 int id = Request.getInt("id"); // 获取行数据,并赋值给前台jsp页面 Admins mmm = service.find(id); assign("mmm" , mmm); assign("updtself" , 0); return json(); // 将数据写给前端 } @RequestMapping("/admins_updtself") public String updtself() { _var = new LinkedHashMap(); // 重置数据 // 更新个人资料 int id = (int)request.getSession().getAttribute("id"); Admins mmm = service.find(id); assign("mmm" , mmm); assign("updtself" , 1); return json(); // 将数据写给前端 } /** * 添加内容 * @return */ @RequestMapping("/adminsinsert") public String insert() { _var = new LinkedHashMap(); // 重置数据 String tmp=""; Admins post = new Admins(); // 创建实体类 // 设置前台提交上来的数据到实体类中 post.setUsername(Request.get("username")); post.setPwd(Request.get("pwd")); post.setAddtime(Info.getDateStr()); service.insert(post); // 插入数据 int charuid = post.getId().intValue(); if(isAjax()){ return jsonResult(post); } return showSuccess("保存成功" , Request.get("referer").equals("") ? request.getHeader("referer") : Request.get("referer")); }/** * 更新内容 * @return */ @RequestMapping("/adminsupdate") public String update() { _var = new LinkedHashMap(); // 重置数据 // 创建实体类 Admins post = new Admins(); // 将前台表单数据填充到实体类 if(!Request.get("username").equals("")) post.setUsername(Request.get("username")); if(!Request.get("pwd").equals("")) post.setPwd(Request.get("pwd")); if(!Request.get("addtime").equals("")) post.setAddtime(Request.get("addtime")); post.setId(Request.getInt("id")); service.update(post); // 更新数据 int charuid = post.getId().intValue(); if(isAjax()){ return jsonResult(post); } if(Request.getInt("updtself") == 1){ return showSuccess("保存成功" , "admins_updtself.do"); }return showSuccess("保存成功" , Request.get("referer")); // 弹出保存成功,并跳转到前台提交的 referer 页面 } /** *删除 */ @RequestMapping("/admins_delete") public String delete() { _var = new LinkedHashMap(); // 重置数据 if(!checkLogin()){ return showError("尚未登录"); } int id = Request.getInt("id"); // 根据id 删除某行数据 HashMap map = Query.make("admins").find(id); service.delete(id); // 根据id 删除某行数据 return showSuccess("删除成功",request.getHeader("referer")); //弹出删除成功,并跳回上一页 } }

CommonController.java
/** * 公共路由 */ @Controller public class CommonController extends BaseController{/** * 使用ajax 检测某表中某个字段是否已存在,已存在则无法提交 * @return */ @RequestMapping(value = "https://www.it610.com/checkno") @ResponseBody public String checkon() { String table = request.getParameter("table"); String col= request.getParameter("col"); String checktype = request.getParameter("checktype"); String value = https://www.it610.com/article/request.getParameter(col); if(checktype.equals("insert")){ if(Query.make(table).where(col , value).count() > 0){ return "false"; }else{ return "true"; } }else if(checktype.equals("update")){ String id = request.getParameter("id") == null ? "" : request.getParameter("id"); if(Query.make(table).where(col , value).where("id" , "neq" , id).count() > 0){ return "false"; }else{ return "true"; } } return "false"; }/** * 审核数据,将是否审核改为已审核状态,点击一下 是 则变否, 点击一下 否 变为是 * @return */ @RequestMapping("/sh") @ResponseBody public String sh() { String yuan=request.getParameter("yuan"); String id=request.getParameter("id"); String tablename=request.getParameter("tablename"); String sql=""; if(yuan.equals("是")) { sql="update "+tablename+" set issh='否' where id="+id; } else { sql="update "+tablename+" set issh='是' where id="+id; } new CommDAO().commOper(sql); if(isAjax()) { jsonResult("ok"); return ""; } return ""; }/** * 获取表的某行数据 * @return */ @RequestMapping("/tableAjax") @ResponseBody public String tableFind() { String table = request.getParameter("table"); String id = request.getParameter("id"); Map map = Query.make(table).where("id" , id).find(); //JSONObject json = JSONObject.parse(map); return JSON.toJSONString(map); //.toString(); }/** *获取某表得某行数据 * */ @RequestMapping("/selectView") public String selectView() { String key = request.getParameter("key"); String table = request.getParameter("table"); String value = https://www.it610.com/article/request.getParameter("value"); Map data = https://www.it610.com/article/Query.make(table).where(key,value).find(); return jsonResult(data); }/** *获取某表得所有数据 * */ @RequestMapping("/selectAll") public String selectAll() { String table = request.getParameter("table"); Query query = Query.make(table); if(request.getParameter("where") != null){ JSONObject where = JSON.parseObject(Request.get("where")); for(Map.Entry entry:where.entrySet()) { String key = (String)entry.getKey(); Object value = https://www.it610.com/article/entry.getValue(); if(value instanceof JSONObject) { JSONObject w = (JSONObject) value; query.where(key , w.getString("exp") , w.getString("value")); }else if(value instanceof JSONArray){ JSONArrayw = (JSONArray) value; query.where(key , (String) w.get(0) , w.get(1)); }else{ query.where(key , value); } } } if(request.getParameter("limit")!=null) { query.limit(Request.get("limit")); } if(request.getParameter("order")!=null) { query.order(Request.get("order")); } if(request.getParameter("field")!=null) { query.field(Request.get("field")); } List list = query.select(); return jsonResult(list); }/** * 搜索下拉某表的数据 * @return */ @RequestMapping("/selectUpdateSearch") @ResponseBody public String selectUpdateSearch() { String table = Request.get("table"); Query query = Query.make(table); String limit = "50"; JSONObject where = JSON.parseObject(Request.get("where")); for(Map.Entry entry:where.entrySet()) { String key = (String)entry.getKey(); Object value = https://www.it610.com/article/entry.getValue(); if("limit".equals(key)){ limit = String.valueOf(value); }else{ if(value instanceof JSONObject) { JSONObject w = (JSONObject) value; query.where(key , w.getString("exp") , w.getString("value")); }else if(value instanceof JSONArray){ JSONArrayw = (JSONArray) value; query.where(key , (String) w.get(0) , w.get(1)); }else{ query.where(key , value); } } } List list = query.order("id desc").limit(limit).select(); return JSON.toJSONString(list); }}

YouqinglianjieController.java
/** * 友情链接 */ @Controller public class YouqinglianjieController extends BaseController { @Autowired private YouqinglianjieMapper dao; @Autowired private YouqinglianjieService service; /** *后台列表页 * */ @RequestMapping("/youqinglianjie_list") public String list() {// 检测是否有登录,没登录则跳转到登录页面 if(!checkLogin()){ return showError("尚未登录" , "./login.do"); }String order = Request.get("order" , "id"); // 获取前台提交的URL参数 order如果没有则设置为id String sort= Request.get("sort" , "desc"); // 获取前台提交的URL参数 sort如果没有则设置为desc intpagesize = Request.getInt("pagesize" , 12); // 获取前台一页多少行数据 Example example = new Example(Youqinglianjie.class); //创建一个扩展搜索类 Example.Criteria criteria = example.createCriteria(); // 创建一个扩展搜索条件类 String where = " 1=1 "; // 创建初始条件为:1=1 where += getWhere(); // 从方法中获取url 上的参数,并写成 sql条件语句 criteria.andCondition(where); // 将条件写进上面的扩展条件类中 if(sort.equals("desc")){// 判断前台提交的sort 参数是否等于desc倒序是则使用倒序,否则使用正序 example.orderBy(order).desc(); // 把sql 语句设置成倒序 }else{ example.orderBy(order).asc(); // 把 sql 设置成正序 } int page = request.getParameter("page") == null ? 1 : Integer.valueOf(request.getParameter("page")); // 获取前台提交的URL参数 page如果没有则设置为1 page = Math.max(1 , page); // 取两个数的最大值,防止page 小于1 List list = service.selectPageExample(example , page , pagesize); // 获取当前页的行数// 将列表写给界面使用 assign("totalCount" , request.getAttribute("totalCount")); assign("list" , list); assign("orderby" , order); // 把当前排序结果写进前台 assign("sort" , sort); // 把当前排序结果写进前台 return json(); // 将数据写给前端 }public String getWhere() { _var = new LinkedHashMap(); // 重置数据 String where = " "; // 以下也是一样的操作,判断是否符合条件,符合则写入sql 语句 return where; }@RequestMapping("/youqinglianjie_add") public String add() { _var = new LinkedHashMap(); // 重置数据return json(); // 将数据写给前端 }@RequestMapping("/youqinglianjie_updt") public String updt() { _var = new LinkedHashMap(); // 重置数据 int id = Request.getInt("id"); // 获取行数据,并赋值给前台jsp页面 Youqinglianjie mmm = service.find(id); assign("mmm" , mmm); assign("updtself" , 0); return json(); // 将数据写给前端 } /** * 添加内容 * @return */ @RequestMapping("/youqinglianjieinsert") public String insert() { _var = new LinkedHashMap(); // 重置数据 String tmp=""; Youqinglianjie post = new Youqinglianjie(); // 创建实体类 // 设置前台提交上来的数据到实体类中 post.setWangzhanmingcheng(Request.get("wangzhanmingcheng")); post.setWangzhi(Request.get("wangzhi")); post.setAddtime(Info.getDateStr()); service.insert(post); // 插入数据 int charuid = post.getId().intValue(); if(isAjax()){ return jsonResult(post); } return showSuccess("保存成功" , Request.get("referer").equals("") ? request.getHeader("referer") : Request.get("referer")); }/** * 更新内容 * @return */ @RequestMapping("/youqinglianjieupdate") public String update() { _var = new LinkedHashMap(); // 重置数据 // 创建实体类 Youqinglianjie post = new Youqinglianjie(); // 将前台表单数据填充到实体类 if(!Request.get("wangzhanmingcheng").equals("")) post.setWangzhanmingcheng(Request.get("wangzhanmingcheng")); if(!Request.get("wangzhi").equals("")) post.setWangzhi(Request.get("wangzhi")); if(!Request.get("addtime").equals("")) post.setAddtime(Request.get("addtime")); post.setId(Request.getInt("id")); service.update(post); // 更新数据 int charuid = post.getId().intValue(); if(isAjax()){ return jsonResult(post); }return showSuccess("保存成功" , Request.get("referer")); // 弹出保存成功,并跳转到前台提交的 referer 页面 } /** *删除 */ @RequestMapping("/youqinglianjie_delete") public String delete() { _var = new LinkedHashMap(); // 重置数据 if(!checkLogin()){ return showError("尚未登录"); } int id = Request.getInt("id"); // 根据id 删除某行数据 HashMap map = Query.make("youqinglianjie").find(id); service.delete(id); // 根据id 删除某行数据 return showSuccess("删除成功",request.getHeader("referer")); //弹出删除成功,并跳回上一页 } }

源码链接 链接:https://pan.baidu.com/s/1oklSr-y1IefhtWmvisSSoQ
提取码:cijf
欢迎各位小伙伴们点赞,评论,收藏,关注博主以后会出更多项目分享给大家

    推荐阅读