目录
前言介绍
本系统采用了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){
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);
}
}
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"));//弹出删除成功,并跳回上一页
}
}