SpringBoot+Vue项目旅游信息推荐系统【源码开源】

今天又来给大家分享项目了是一个基于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

前台首页功能模块 

首页

 

 SpringBoot+Vue项目旅游信息推荐系统【源码开源】_第1张图片

旅游新闻

SpringBoot+Vue项目旅游信息推荐系统【源码开源】_第2张图片

新闻详情

 SpringBoot+Vue项目旅游信息推荐系统【源码开源】_第3张图片

景区信息  SpringBoot+Vue项目旅游信息推荐系统【源码开源】_第4张图片

美食信息 SpringBoot+Vue项目旅游信息推荐系统【源码开源】_第5张图片

美食详情

SpringBoot+Vue项目旅游信息推荐系统【源码开源】_第6张图片

旅游线路

SpringBoot+Vue项目旅游信息推荐系统【源码开源】_第7张图片

线路详情 

SpringBoot+Vue项目旅游信息推荐系统【源码开源】_第8张图片

在线留言SpringBoot+Vue项目旅游信息推荐系统【源码开源】_第9张图片

管理员功能模块

账号管理

SpringBoot+Vue项目旅游信息推荐系统【源码开源】_第10张图片

地区管理

SpringBoot+Vue项目旅游信息推荐系统【源码开源】_第11张图片

景点信息管理 

SpringBoot+Vue项目旅游信息推荐系统【源码开源】_第12张图片

地方美食管理 

SpringBoot+Vue项目旅游信息推荐系统【源码开源】_第13张图片

旅游线路管理 

SpringBoot+Vue项目旅游信息推荐系统【源码开源】_第14张图片

订单信息管理

SpringBoot+Vue项目旅游信息推荐系统【源码开源】_第15张图片

新闻管理

SpringBoot+Vue项目旅游信息推荐系统【源码开源】_第16张图片系统管理SpringBoot+Vue项目旅游信息推荐系统【源码开源】_第17张图片

用户功能模块 

线路预定管理

SpringBoot+Vue项目旅游信息推荐系统【源码开源】_第18张图片

个人中心 

SpringBoot+Vue项目旅游信息推荐系统【源码开源】_第19张图片

部分核心代码: 

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 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 "";
    }

    /**
     * 获取表的某行数据
     * @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 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

 欢迎各位小伙伴们点赞,评论,收藏,关注博主以后会出更多项目分享给大家

你可能感兴趣的:(毕业设计,课程设计,spring,boot,前端,后端,vue,java)