基于协同过滤算法的旅游推荐系统

news2024/11/26 1:44:47

博主主页:猫头鹰源码

博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万+、专注Java技术领域和毕业设计项目实战

主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询

文末联系获取

项目介绍: 

该系统基于springboot技术,数据层为MyBatis,mysql数据库,具有完整的业务逻辑,适合选题:推荐算法、协同过滤、旅游推荐、推荐系统、算法、Java项目、javaweb等。

项目功能:

系统构架是指在确定了系统的要求之后,对系统的调用关系,层次结构,操作模式等进行定义。与该系统相结合,需要对后台进行频繁的维护和升级。采用B/S模式作为网站后台架构,其属于浏览器模式,可在服务器上运行系统功能,提升系统的开发效率,便于维护、开发与使用系统[15]。

根据系统需求分析,整个项目分为前台用户界面和后台管理员用户界面。前台用户界面分为:首页展示,热门景点预览,旅游推荐预览,注册和登录,留言反馈交流和用户菜单。后台管理员界面分为:管理账号管理,用户管理,热门城市管理,热门景点管理,留言反馈管理,旅游主题管理和旅游推荐咨询管理。

系统包含技术:

后端:springboot、mybatis
前端:xadmin、js、css等
开发工具:idea
数据库:mysql 5.7
JDK版本:jdk1.8
语言:Java语言
是否Maven:是
页面类型:jsp

部分截图说明:

下面是首页

旅游推荐页面

查看旅游详情

热门景点查看

留言交流

用户登陆

算法推荐

用户列表

热门景点列表

留言交流列表

部分代码:

// 留言交流
    @RequestMapping("bbs.action")
    public String bbs(HttpServletRequest request, Map<String, Object> map) {
        this.front();
        Map<String, Object> parameter = new HashMap<String, Object>();


        String keyword = request.getParameter("keyword");//搜索关键词
        if (keyword != null && keyword != "") parameter.put("keyword", keyword);//搜索参数


        String bbstypeid = request.getParameter("bbstypeid");//搜索关键词
        if (bbstypeid != null && bbstypeid != "") parameter.put("bbstypeid", bbstypeid);//搜索参数


        int rowCountTotal = bbsService.getRowSize(parameter);//获取总数
        int pageSize = 10;// 分页大小
        int pageNumber = 1; //设定页面参数,传递给JSP页面

        if (request.getParameter("pageNumber") != null && request.getParameter("pageNumber") != "") {
            pageNumber = Integer.parseInt(request.getParameter("pageNumber"));//当前页
        }
        parameter.put("limit", pageSize);//搜索参数
        parameter.put("start", (pageNumber - 1) * pageSize);//搜索参数
        List<Bbs> bbsList = bbsService.getAll(parameter);


        //设定页面参数,传递给JSP页面
        Map<String, Object> pager = new HashMap<String, Object>();
        int pageCount = 1;// 总页数
        // 计算总页数
        if (rowCountTotal % pageSize == 0) {
            pageCount = rowCountTotal / pageSize;
        } else {
            pageCount = rowCountTotal / pageSize + 1;
        }
        pager.put("pageNumber", pageNumber);//当前页
        pager.put("pageCount", pageCount);//总页数
        pager.put("rowCountTotal", rowCountTotal);//记录总条数

        map.put("keyword", keyword);
        map.put("pager", pager);


        map.put("bbsList", bbsList);
        return "bbs";//跳转到WebContent目录下对应的JSP页面
    }

    // 发布留言
    @RequestMapping("addbbs.action")
    public String addbbs(Map<String, Object> map) {
        this.front();
        if (getRequest().getSession().getAttribute("usersid") == null) {
            return "redirect:/web/preLogin.action";//跳转到action
        }
        String usersid = (String) getRequest().getSession().getAttribute("usersid");
        Bbs bbs = new Bbs();
        bbs.setAddtime(new Date());
        bbs.setContents(getRequest().getParameter("contents"));
        bbs.setHits("0");
        bbs.setRepnum("0");
        bbs.setTitle(getRequest().getParameter("title"));
        bbs.setUsersid(usersid);

        bbs.setBbstypeid(getRequest().getParameter("bbstypeid"));

        bbsService.insert(bbs);
        return "redirect:/web/bbs.action";//跳转到action
    }

    // 查看回复
    @RequestMapping("bbsDetail.action")
    public String bbsDetail(HttpServletRequest request, Map<String, Object> map) {
        this.front();
        Bbs bbs = bbsService.getById(getRequest().getParameter("id"));
        bbs.setHits("" + (Integer.parseInt(bbs.getHits()) + 1));//增加主贴的浏览量
        bbsService.update(bbs);
        map.put("bbs", bbs);


        //-------------------------------------------获取回帖
        Map<String, Object> parameter = new HashMap<String, Object>();


        String keyword = request.getParameter("keyword");//搜索关键词
        if (keyword != null && keyword != "") parameter.put("keyword", keyword);//搜索参数


        parameter.put("bbsid", bbs.getBbsid());//搜索参数


        int rowCountTotal = rebbsService.getRowSize(parameter);//获取总数
        int pageSize = 10;// 分页大小
        int pageNumber = 1; //设定页面参数,传递给JSP页面

        if (request.getParameter("pageNumber") != null && request.getParameter("pageNumber") != "") {
            pageNumber = Integer.parseInt(request.getParameter("pageNumber"));//当前页
        }
        parameter.put("limit", pageSize);//搜索参数
        parameter.put("start", (pageNumber - 1) * pageSize);//搜索参数
        List<Rebbs> rebbsList = rebbsService.getAll(parameter);


        //设定页面参数,传递给JSP页面
        Map<String, Object> pager = new HashMap<String, Object>();
        int pageCount = 1;// 总页数
        // 计算总页数
        if (rowCountTotal % pageSize == 0) {
            pageCount = rowCountTotal / pageSize;
        } else {
            pageCount = rowCountTotal / pageSize + 1;
        }
        pager.put("pageNumber", pageNumber);//当前页
        pager.put("pageCount", pageCount);//总页数
        pager.put("rowCountTotal", rowCountTotal);//记录总条数

        map.put("keyword", keyword);
        map.put("pager", pager);

        map.put("rebbsList", rebbsList);
        return "bbsDetail";//跳转到WebContent目录下对应的JSP页面
    }

    // 回复留言
    @RequestMapping("rebbs.action")
    public String rebbs(Map<String, Object> map) {
        this.front();
        if (getRequest().getSession().getAttribute("usersid") == null) {
            return "redirect:/web/preLogin.action";//跳转到action
        }
        String usersid = (String) getRequest().getSession().getAttribute("usersid");
        Rebbs rebbs = new Rebbs();
        rebbs.setAddtime(new Date());
        rebbs.setContents(getRequest().getParameter("contents"));
        rebbs.setBbsid(getRequest().getParameter("bbsid"));
        rebbs.setUsersid(usersid);
        rebbsService.insert(rebbs);
        Bbs bbs = bbsService.getById(rebbs.getBbsid());
        bbs.setRepnum("" + (Integer.parseInt(bbs.getRepnum()) + 1));//增加主贴的回复数
        bbsService.update(bbs);
        String path = "redirect:/web/bbsDetail.action?id=" + bbs.getBbsid();
        return path;//跳转到ACTION
    }

以上就是部分功能展示,从整体上来看,本系统功能是十分完整的,界面设计简洁大方,交互友好,数据库设计也很合理,规模适中,代码工整,清晰,适合学习使用。

好了,今天就到这儿吧,小伙伴们点赞、收藏、评论,一键三连走起呀,下期见~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1009350.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

接口自动化测试中解决接口间数据依赖

在实际的测试工作中&#xff0c;在做接口自动化测试时往往会遇到接口间数据依赖问题&#xff0c;即API_03的请求参数来源于API_02的响应数据&#xff0c;API_02的请求参数又来源于API_01的响应数据。 因此通过自动化方式测试API_03接口时&#xff0c;需要预先请求API_02接口&a…

马来西亚市场最全开发攻略

东盟有十个国家&#xff0c;人口接近6亿&#xff0c;已连续13年成为我国最大贸易伙伴之一。数据显示&#xff0c;1-7月中国与东盟贸易总值为3.59万亿元&#xff0c;同比增长2.8%。东盟成员国中&#xff0c;与中国前三大贸易伙伴依次为越南、马来西亚和印度尼西亚。 今天来聊一…

2023.8.13百度之星(第二场)第一题官方题解注释说明

第一题&#xff1a;星际航行 #include<bits/stdc.h> using namespace std; int n, a[3][100010]; int tmp[100010]; long long calc(int *a,int opt){//opt等于0表示回合到同一个点花费的最小代价&#xff0c;opt等于1表示将数列排序成连续的整数数列for(int i1;i<n;i…

Spring基础(2w字---学习总结版)

目录 一、Spirng概括 1、什么是Spring 2、什么是容器 3、什么是IoC 4、模拟实现IoC 4.1、传统的对象创建开发 5、理解IoC容器 6、DI概括 二、创建Spring项目 1、创建spring项目 2、Bean对象 2.1、创建Bean对象 2.2、存储Bean对象&#xff08;将Bean对象注册到容器…

DevEco Studio中如何设置HarmonyOS/OpenHarmony应用开发

DevEco Studio内置有帮助中心&#xff0c;初学HarmonyOS 及OpenHarmony应用、元服务的开发者&#xff0c;通过内置的帮助中去系统的学习相关内容&#xff0c;是边练边学&#xff0c;快速上手的最佳方式。 一、帮助 二、快速开始 三、HarmonyOS应用、元服务开发相关 四、OpenHa…

c语言练习57:浮点数在内存中的存储

浮点数在内存中的存储 上⾯的代码中&#xff0c; num 和 *pFloat 在内存中明明是同⼀个数&#xff0c;为什么浮点数和整数的解读结果会差别 这么⼤&#xff1f; 要理解这个结果&#xff0c;⼀定要搞懂浮点数在计算机内部的表⽰⽅法。 根据国际标准IEEE&#xff08;电⽓和电⼦⼯…

自建私人图床方案:使用Cpolar+树洞外链轻松部署超轻量级图床,实现高效图片存储

文章目录 1.前言2. 树洞外链网站搭建2.1. 树洞外链下载和安装2.2 树洞外链网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar临时数据隧道3.2 Cpolar稳定隧道&#xff08;云端设置&#xff09;3.3 Cpolar稳定隧道&#xff08;本地设置&#xff09; 4.公网访问测试5.结语…

Linux上防火墙操作

开放关闭防火墙 查看防火墙状态的命令&#xff1a;systemctl status firewalld 或者 firewall-cmd --state 暂时关闭防火墙的命令&#xff1a;systemctl stop firewalld 暂时开启防火墙的命令&#xff1a;systemctl start firewalld 永久关闭防火墙(禁用开机自启)下次启动&a…

[Linux]进程信号

[Linux]进程信号 文章目录 [Linux]进程信号进程信号的定义信号的特点信号的生命过程发送信号的原理进程处理信号的方式分类使用指令查看Linux系统定义的信号信号产生使用终端按键产生信号使用指令向进程发送信号调用系统调用向进程发送信号由软件条件产生信号硬件异常产生信号 …

超轻巧的电竞鼠标,手感不错反应精准,雷柏VT9Pro体验

作为一家国内很受欢迎的外设厂商&#xff0c;雷柏近年推出了不少很有创新性的产品&#xff0c;像是之前主打轻量化的鼠标VT9&#xff0c;凭借78g的超轻重量&#xff0c;以及模块化的设计&#xff0c;得到了了广大游戏玩家的认可。最近雷柏在此基础上又推出了一款VT9 Pro&#x…

Linux服务使用宝塔面板搭建网站,并发布公网访问

文章目录 前言1. 环境安装2. 安装cpolar内网穿透3. 内网穿透4. 固定http地址5. 配置二级子域名6. 创建一个测试页面 前言 宝塔面板作为简单好用的服务器运维管理面板&#xff0c;它支持Linux/Windows系统&#xff0c;我们可用它来一键配置LAMP/LNMP环境、网站、数据库、FTP等&…

ChatGPT帮助一名儿童确诊病因,之前17位医生无法确诊

9月13日&#xff0c;Today消息&#xff0c;一位名叫Alex的4岁儿童得了一种浑身疼痛的怪病&#xff0c;每天需要服用Motrin&#xff08;美林&#xff09;才能止痛。3年的时间&#xff0c;看了17名医生无法确诊病因。&#xff08;新闻地址&#xff1a;https://www.today.com/heal…

短视频批量剪辑--矩阵源码---无人直播如何搭建技术开发

一、核心技术&#xff1a; 1.AI自动直播 智能系统通过丰富可定制的文案库&#xff0c; 拥有有料有趣的灵魂。不仅能自动语音讲解内容&#xff0c; 还可以在直播中和用户灵活互动。直播中可将团购商品同话术自动上下架。 2.AI剪辑 可一键智能批量成片&#xff0c;也可跟着模…

Imu水平放置时的Z轴分量为什么是正值?

前言 常见的一些疑问: 水平放置时&#xff0c;imu的z轴的值是正值&#xff0c;难道imu的z轴是朝下&#xff1f;水平往前倾&#xff0c;根据各轴的读数值&#xff0c;觉得imu的坐标系难道是左手系&#xff1f; 基于以上两个疑问&#xff0c;下面我将按我的理解解释一下。 解…

开箱即⽤!HashData 云数仓上线华为蓝鲸应⽤商城

近⽇&#xff0c;经过华为对企业技术、产品和服务能⼒的综合评估&#xff0c;酷克数据企业级云原⽣数据仓库HashData通过与华为OceanStor Pacific 分布式存储的适配与优化&#xff0c;形成⼀体化解决⽅案&#xff0c;成功上线华为蓝鲸应⽤商城。 图 1&#xff1a;华为蓝鲸商城…

【vue组件】使用element-ui table 实现嵌套表格 点击展开时获取数据

应用场景是这样 主表格的数据是所有的学校 然后点击展开的时候&#xff0c;获取学校下相应班级的数据 并且班级要能选择后生成图表&#xff0c;但所有的班级最多选择5个 首先是嵌套表格 <div><el-table:data"tableDisplayData"id"chartTableExpand&q…

bwapp下载安装

下载地址&#xff1a; https://sourceforge.net/projects/bwapp/ 安装&#xff1a; 解压缩 将压缩包解压到www目录 进入bwapp/admin/,打开setting.php文件&#xff0c;修改数据库用户名密码 安装数据库 打开浏览器&#xff0c;输入 http://localhost/bwapp/bwapp/install.p…

微服务简介

微服务简介 微服务架构是一种软件架构模式&#xff0c;它将一个大型应用程序拆分为一组小型、独立的服务&#xff0c;每个服务都有自己的业务逻辑和数据存储。这些服务可以独立开发、部署和扩展&#xff0c;通常使用HTTP或其他轻量级通信协议进行通信。 以下是微服务架构的一…

【完美世界】柳神为石昊,付出生命代价,石昊称“柳妈”不过分吧

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析完美世界。 在完美世界中&#xff0c;荒天帝石昊一生要追赶的人便是柳神。而柳神也在石昊崛起的过程中庇护了他一生&#xff0c;直至终极大决战陨落。人们都说石昊应该叫柳神为柳妈&#xff0c;事实也的确如此。 纵观柳神…

iwebsec靶场 文件包含漏洞通关笔记7-php://input伪协议

目录 前言 1.php://input伪协议原理 2.php://input伪协议使用条件 3.file_get_contents()函数 第07关 php://input伪协议 1.打开靶场 2.源码分析 3.伪协议渗透 &#xff08;1&#xff09;构造post信息 &#xff08;2&#xff09;渗透 前言 1.php://input伪协议原理 …