当前位置: 首页 > news >正文

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

博主主页:猫头鹰源码

博主简介: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}

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

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

相关文章:

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

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…...

遇见问题:使用mybaties向数据库中插入数据,idea显示插入成功,但是数据库中并没有数据变化?

遇见问题&#xff1a;使用mybaties向数据库中插入数据&#xff0c;idea显示插入成功&#xff0c;但是数据库中并没有数据变化? 可能的原因有几种&#xff1a; 没有提交事务&#xff1a;在使用 MyBatis 进行数据库操作时&#xff0c;需要手动提交事务。你可以在插入数据完成后…...

markdown学习笔记

markdown学习笔记 1.文字&#xff08;依靠HTML&#xff09; 1.1文字缩进-空格转义符 单字符空&#xff1a;&emsp; 半字符空&#xff1a;&ensp;1.2文字对齐 「居中&#xff1a;」<center> 居中 </center> or <p align"center"> 居中 …...

C++项目实战——基于多设计模式下的同步异步日志系统-⑧-日志落地类设计

文章目录 专栏导读抽象基类StdoutSink类设计FileSink类设计RollBySizeSink类设计日志落地工厂类设计日志落地类整理日志落地拓展测试RollByTimeSink类设计测试代码测试完整代码 专栏导读 &#x1f338;作者简介&#xff1a;花想云 &#xff0c;在读本科生一枚&#xff0c;C/C领…...

从零开始探索C语言(八)----指针

文章目录 1. 什么是指针&#xff1f;2. 如何使用指针&#xff1f;3. NULL 指针4. 指针的算术运算5. 指针数组6. 指向指针的指针7. 传递指针给函数8. 从函数返回指针 有人说&#xff0c;指针是C语言的灵魂&#xff0c;所以学习C语言&#xff0c;学习指针是很有必要的。 通过指针…...

SpringMVC 的三种异常处理方式详解

目录 1. 什么是异常 2. 为什么要全局异常处理 3. SpringMVC异常分类 4. 异常处理思路 5. 三种异常处理方式示例 ① 配置 SimpleMappingExceptionResolver 处理器 ② 实现 HandlerExceptionResolver 接口 ③ 使用ControllerAdviceExceptionHandler实现全局异常 6. 响应…...

莫比乌斯召回系统介绍

当前召回系统只能召回相关性高的广告&#xff0c;但不能保证该广告变现能力强。莫比乌斯做了如下两点创新&#xff1a; 在召回阶段&#xff0c;引入CPM等业务指标作为召回依据在召回阶段&#xff0c;引入CTR模型&#xff0c;从而召回更多相关性高且变现能力强的广告 参考 百度…...

使用ASM修改组件化 ARouter

工程目录图 1. apt生成的字节码文件 2. asm 生成的代码 请点击下面工程名称&#xff0c;跳转到代码的仓库页面&#xff0c;将工程 下载下来 Demo Code 里有详细的注释 代码&#xff1a;TestCompont...

第21章_瑞萨MCU零基础入门系列教程之事件链接控制器ELC

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id728461040949 配套资料获取&#xff1a;https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总&#xff1a; ht…...

(二十八)大数据实战——Flume数据采集之kafka数据生产与消费集成案例

前言 本节内容我们主要介绍一下flume数据采集和kafka消息中间键的整合。通过flume监听nc端口的数据&#xff0c;将数据发送到kafka消息的first主题中&#xff0c;然后在通过flume消费kafka中的主题消息&#xff0c;将消费到的消息打印到控制台上。集成使用flume作为kafka的生产…...

vue3:22、vue-router的使用

import { createRouter, createWebHistory } from vue-router//history模式&#xff1a;createWebHistory //hash模式&#xff1a;createWebHashHistory//vite中的环境变量 import.meta.env.BASE_URL 就是vite.config.js中的base配置项 const router createRouter({history:…...

深入理解JVM虚拟机第五篇:一些常用的JVM虚拟机(二)

文章目录 一&#xff1a;JRockit VM的介绍 二&#xff1a;J9 VM的介绍 三&#xff1a;KVM和CDC/CLDC Hotspot 四&#xff1a;Azul VM的介绍 五&#xff1a;Liquid VM的介绍 六&#xff1a;Apache Harmoney 七&#xff1a;Microsoft JVM 八&#xff1a;Taobao JVM 九&a…...

导数公式及求导法则

目录 基本初等函数的导数公式 求导法则 有理运算法则 复合函数求导法 隐函数求导法 反函数求导法 参数方程求导法 对数求导法 基本初等函数的导数公式 基本初等函数的导数公式包括&#xff1a; C0(x^n)nx^(n-1)(a^x)a^x*lna(e^x)e^x(loga(x))1/(xlna)(lnx)1/x(sinx)cos…...

SpringMVC系列(六)之JSON数据返回以及异常处理机制

目录 前言 一. JSON概述 二. JSON数据返回 1. 导入pom依赖 2. 添加配置文件&#xff08;spring-mvc.xml&#xff09; 3. ResponseBody注解使用 4. 效果展示 5. Jackson介绍 三. 全局异常处理 1. 为什么要全局异常处理 2. 异常处理思路 3. 异常处理方式一 4. 异常处…...

民安智库(北京第三方窗口测评)开展汽车消费者焦点小组座谈会调查

民安智库近日开展了一场汽车消费者焦点小组座谈会&#xff0c;旨在深入了解目标消费者对汽车功能的需求和消费习惯&#xff0c;为汽车企业提供有针对性的解决方案。 在焦点小组座谈会中&#xff0c;民安智库公司&#xff08;第三方市容环境指数测评&#xff09;邀请了一群具有…...

【CVPR2021】MVDNet论文阅读分析与总结

Challenge&#xff1a; 现有的目标检测器主要融合激光雷达和相机&#xff0c;通常提供丰富和冗余的视觉信息 利用最先进的成像雷达&#xff0c;其分辨率比RadarNet和LiRaNet中使用的分辨率要细得多&#xff0c;提出了一种有效的深度后期融合方法来结合雷达和激光雷达信号。 MV…...

IDEA指定Maven settings file文件未生效

背景&#xff1a;在自己电脑上配置的时候&#xff0c;由于公司项目和我自己的项目的Maven仓库不一致&#xff0c;我就在项目中指定了各自的Maven配置文件。但是我发现公司的项目私有仓库地址IDEA总是识别不到&#xff01; 俩个配置文件分别是&#xff1a; /Users/sml/Mine/研发…...

swift UI 和UIKIT 如何配合使用

SwiftUI和UIKit可以在同一个iOS应用程序中配合使用。它们是两个不同的用户界面框架&#xff0c;各自有自己的优势和特点。在现实开发中&#xff0c;很多iOS应用程序并不是一开始就完全采用SwiftUI或UIKit&#xff0c;而是根据需要逐步引入SwiftUI或者使用两者共存。 SwiftUI的…...

c语言练习题55:IP 地址⽆效化

IP 地址⽆效化 题⽬描述&#xff1a; 给你⼀个有效的 IPv4 地址 address &#xff0c;返回这个 IP 地址的⽆效化版本。 所谓⽆效化 IP 地址&#xff0c;其实就是⽤ "[.]" 代替了每个 "."。 • ⽰例 1&#xff1a; 输⼊&#xff1a;address "1.1.1.…...

nvidia-persistenced 常驻

本文地址&#xff1a;blog.lucien.ink/archives/542 发现每次执行 nvidia-smi 都特别慢&#xff0c;发现是需要 nvidia-persistenced 常驻才可以&#xff0c;这个并不会在安装完驱动之后自动配置&#xff0c;需要手动设置一个自启。 cat <<EOF >> /etc/systemd/sy…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

关于easyexcel动态下拉选问题处理

前些日子突然碰到一个问题&#xff0c;说是客户的导入文件模版想支持部分导入内容的下拉选&#xff0c;于是我就找了easyexcel官网寻找解决方案&#xff0c;并没有找到合适的方案&#xff0c;没办法只能自己动手并分享出来&#xff0c;针对Java生成Excel下拉菜单时因选项过多导…...

MyBatis中关于缓存的理解

MyBatis缓存 MyBatis系统当中默认定义两级缓存&#xff1a;一级缓存、二级缓存 默认情况下&#xff0c;只有一级缓存开启&#xff08;sqlSession级别的缓存&#xff09;二级缓存需要手动开启配置&#xff0c;需要局域namespace级别的缓存 一级缓存&#xff08;本地缓存&#…...

ubuntu22.04 安装docker 和docker-compose

首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...