今天又来给大家分享项目了是一个基于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 |
文章图片
旅游新闻
文章图片
新闻详情
文章图片
景区信息
文章图片
美食信息
文章图片
美食详情
文章图片
旅游线路
文章图片
线路详情
文章图片
在线留言
文章图片
管理员功能模块 账号管理
文章图片
地区管理
文章图片
景点信息管理
文章图片
地方美食管理
文章图片
旅游线路管理
文章图片
订单信息管理
文章图片
新闻管理
文章图片
系统管理
文章图片
用户功能模块 线路预定管理
文章图片
个人中心
文章图片
部分核心代码: 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
欢迎各位小伙伴们点赞,评论,收藏,关注博主以后会出更多项目分享给大家
推荐阅读
- LeetCode|LeetCode_Array_42. Trapping Rain Water 接雨水【双指针】【Java】【困难】
- Linux|Linux常用命令解析
- 微服务|SpringCloud Alibaba微服务实战四 - 限流熔断
- java|java 微服务 优势_微服务是什么?微服务主要优势是什么?
- spring|23.Spring Cloud + Spring Boot + Mybatis + Uniapp分布式、微服务、云架构企业快速开发架构之Shell 函数
- 架构|Spring Cloud Alibaba+saas企业架构技术选型+架构全景业务图 + 架构典型部署方案
- IDEA|将eclipse中的动态项目导入Idea中运行(配置和启动)
- 数据库|Java连接Mysql数据库存取图片
- IDEA中一个项目的.idea文件夹,.iml文件,src文件夹,out文件夹