目录

前言介绍

数据库表结构 

前台首页功能模块 

首页

旅游新闻

新闻详情

景区信息  ​

美食信息 ​

美食详情

旅游线路

线路详情 

在线留言​

管理员功能模块

账号管理

地区管理

景点信息管理 

地方美食管理 

旅游线路管理 

订单信息管理

新闻管理

​编辑系统管理​

用户功能模块 

线路预定管理

个人中心 

部分核心代码: 

AdminsController.java

CommonController.java

YouqinglianjieController.java


前言介绍

本系统采用了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

前台首页功能模块 

首页

 5bb82b00a01d4e66b260cb20d2ac7950.png

540ca37452a74ed5999b4851ce005e9c.png

 45e66dc3cb9d44cbb033ad1ad41e6f52.png

旅游新闻

6a1b880a4b5b410193e34c8d7d66fc9c.png

新闻详情

 311fcb9372ea4e539aed87b4fda8fcb9.png

景区信息  962b34d15c214edba7afaca73ae1a1a6.png

美食信息 dab7e32057684deea5b3ef1c9222c1f7.png

美食详情

54299c4243b348199c4a8335245ae981.png

旅游线路

b045d52af1ce47e68a0428163d30bccb.png

线路详情 

4d4ab84f89334e7fb1313ca12e16854b.png

在线留言647429d2498641c0b905fb4cba74d6d2.png

管理员功能模块

账号管理

1260f943255d4206a959432fe49ba6f5.png

地区管理

641d4ef4137f41539aced827d4bb64ae.png

景点信息管理 

b45e0c334d934cbb86c2d6c57f6c7276.png

地方美食管理 

3d12cc045ee04c77bf20430d7f69be68.png

旅游线路管理 

7724d92bd7524908893b621f5648049f.png

订单信息管理

a2f237851f904ecd9242e382154d199f.png

新闻管理

d234c78fbca0471c8a44cac77d23a828.png系统管理58cae48691df41e899d1c4c97eadf55c.png

用户功能模块 

线路预定管理

a2cd23f7f84e4a549a49ab5583046bb8.png

个人中心 

319c1a0bf3624b75aa7efd73bba8dc1d.png

部分核心代码: 

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"));//弹出删除成功,并跳回上一页
    }
}
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐