今天又来给大家分享项目了是一个基于SpringBoot+Vue前后端分离的旅游信息推荐系统,非常值得大家去学习,点赞、收藏、评论多多支持一下
源码在文章末尾链接获取
目录
链接: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 |
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
-
int pagesize = 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<Admins> 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 =
"/checkno")
-
@ResponseBody
-
public
String
checkon(
)
-
{
-
String table = request.
getParameter(
"table");
-
String col = request.
getParameter(
"col");
-
String checktype = request.
getParameter(
"checktype");
-
String value = 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
"<script>location.href='"+request.
getHeader(
"Referer")+
"';</script>";
-
}
-
-
/**
-
* 获取表的某行数据
-
* @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 = request.
getParameter(
"value");
-
Map data =
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){
-
JSON
Object where =
JSON.
parseObject(
Request.
get(
"where"));
-
for(
Map.
Entry
entry:where.
entrySet())
-
{
-
String key = (
String)entry.
getKey();
-
Object value = entry.
getValue();
-
if(value
instanceof
JSON
Object)
-
{
-
JSON
Object w = (
JSON
Object) value;
-
query.
where(key , w.
getString(
"exp") , w.
getString(
"value"));
-
}
else
if(value
instanceof
JSON
Array){
-
JSON
Array w = (
JSON
Array) 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";
-
JSON
Object where =
JSON.
parseObject(
Request.
get(
"where"));
-
for(
Map.
Entry
entry:where.
entrySet())
-
{
-
String key = (
String)entry.
getKey();
-
Object value = entry.
getValue();
-
if(
"limit".
equals(key)){
-
limit =
String.
valueOf(value);
-
}
else{
-
if(value
instanceof
JSON
Object)
-
{
-
JSON
Object w = (
JSON
Object) value;
-
query.
where(key , w.
getString(
"exp") , w.
getString(
"value"));
-
}
else
if(value
instanceof
JSON
Array){
-
JSON
Array w = (
JSON
Array) 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
-
int pagesize = 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<Youqinglianjie> 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
欢迎各位小伙伴们点赞,评论,收藏,关注博主以后会出更多项目分享给大家
转载:https://blog.csdn.net/m0_49113107/article/details/125414731