今天又来给大家分享项目了是一个基于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 |
varchar(50) |
预订人姓名 |
lianxifangshi |
varchar(50) |
联系方式 |
zhuangtai |
varchar(50) |
状态 |
beizhu |
text |
备注 |
yudingren |
varchar(50) |
预订人 |
addtime |
timestamp |
添加时间 |
iszf |
varchar(10) |
是否支付 |
设置索引, 字段:lvyouxianluid , 关联表【lvyouxianlu】中字段id |
/**
* 管理员 */
@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 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"));//弹出删除成功,并跳回上一页
}
}
/**
* 公共路由
*/
@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 "";
}
/**
* 获取表的某行数据
* @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){
JSONObject where = JSON.parseObject(Request.get("where"));
for(Map.Entry entry:where.entrySet())
{
String key = (String)entry.getKey();
Object value = entry.getValue();
if(value instanceof JSONObject)
{
JSONObject w = (JSONObject) value;
query.where(key , w.getString("exp") , w.getString("value"));
}else if(value instanceof JSONArray){
JSONArray w = (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 = 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){
JSONArray w = (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);
}
}
/**
* 友情链接 */
@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 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"));//弹出删除成功,并跳回上一页
}
}
欢迎各位小伙伴们点赞,评论,收藏,关注博主以后会出更多项目分享给大家