idea Springboot 电影推荐系统LayUI框架开发协同过滤算法web结构java编程计算机网页
一、源码特点
springboot 电影推荐系统是一套完善的完整信息系统,结合mvc框架和LayUI框架完成本系统springboot dao bean 采用协同过滤算法进行推荐 ,对理解JSP java编程开发语言有帮助系统采用springboot框架(MVC模式开发),系统具有完整的源代码和数据库,系统主要采用B/S模式开发。
前段主要技术 css jquery LayUI框架
后端主要技术 Springboot 框架
数据库 mysql
开发工具 IDEA JDK1.8
idea Springboot 电影推荐系统1
二、功能介绍
前台功能:
1)系统首页
2)公告浏览
3)电影浏览、查看电影详情 ,并记录用户浏览记录,系统采用协同过滤算法,根据用户的行为习惯进行推荐其他电影
4)电影评价
5)用户注册、登录
后台功能:
(1)管理员管理:对管理员信息进行添加、删除、修改和查看
(2)用户管理:对用户信息进行添加、删除、修改和查看
(3)公告管理:对公告信息进行添加、删除、修改和查看
(4)电影管理:对电影信息进行添加、删除、修改和查看,excel导入
(5)浏览管理:对浏览信息进行删除、修改和查看
(6)评价管理:对评价信息进行添加、删除、修改和查看
(7)用户登录、个人信息修改
数据库设计
CREATE TABLE `gly` (
`glyid` int(11) NOT NULL auto_increment,
`yhm` VARCHAR(40) default NULL COMMENT '用户名',
`mm` VARCHAR(40) default NULL COMMENT '密码',
`xm` VARCHAR(40) default NULL COMMENT '姓名', PRIMARY KEY (`glyid`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
CREATE TABLE `yonghu` (
`yhid` int(11) NOT NULL auto_increment,
`yhm` VARCHAR(40) default NULL COMMENT '用户名',
`mm` VARCHAR(40) default NULL COMMENT '密码',
`xm` VARCHAR(40) default NULL COMMENT '姓名',
`lxdh` VARCHAR(40) default NULL COMMENT '联系电话',
`lxdz` VARCHAR(40) default NULL COMMENT '联系地址', PRIMARY KEY (`yhid`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
CREATE TABLE `gonggao` (
`ggid` int(11) NOT NULL auto_increment,
`bt` VARCHAR(40) default NULL COMMENT '标题',
`nr` VARCHAR(40) default NULL COMMENT '内容',
`fbsj` VARCHAR(40) default NULL COMMENT '发布时间', PRIMARY KEY (`ggid`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
CREATE TABLE `dianying` (
`dyid` int(11) NOT NULL auto_increment,
`dymc` VARCHAR(40) default NULL COMMENT '电影名称',
`js` VARCHAR(40) default NULL COMMENT '介绍',
`tp` VARCHAR(40) default NULL COMMENT '图片',
`zy` VARCHAR(40) default NULL COMMENT '主演',
`jq` VARCHAR(40) default NULL COMMENT '剧情', PRIMARY KEY (`dyid`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
CREATE TABLE `liulan` (
`llid` int(11) NOT NULL auto_increment,
`yh` VARCHAR(40) default NULL COMMENT '用户',
`dy` VARCHAR(40) default NULL COMMENT '电影',
`sj` VARCHAR(40) default NULL COMMENT '时间', PRIMARY KEY (`llid`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
CREATE TABLE `pingjia` (
`pjid` int(11) NOT NULL auto_increment,
`dy` VARCHAR(40) default NULL COMMENT '电影',
`pj` VARCHAR(40) default NULL COMMENT '评价',
`yh` VARCHAR(40) default NULL COMMENT '用户',
`sj` VARCHAR(40) default NULL COMMENT '时间', PRIMARY KEY (`pjid`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
控制层代码设计
/**电影列表 查询dianying* */@RequestMapping(value = "listpage")public ModelAndView listpage(HttpServletRequest request, HttpServletResponse response) {try {request.setCharacterEncoding("gb2312");//强制字符集}catch(Exception e){e.printStackTrace();}Map<String,Object> map= new HashMap<String,Object>();ModelAndView mav = new ModelAndView();//初始化mav.setViewName("dianying/dianyinglist");//跳转jsp 页面String dyid=(String)request.getParameter("dyid");if(dyid!=null&&!dyid.equals("")){//判断电影编号// System.out.println(dyid);map.put("dyid",dyid);//拼接sql语句电影编号}String dymc=(String)request.getParameter("dymc");if(dymc!=null&&!dymc.equals("")){//判断电影名称// System.out.println(dymc);map.put("dymc",dymc);//拼接sql语句电影名称}String js=(String)request.getParameter("js");if(js!=null&&!js.equals("")){//判断介绍// System.out.println(js);map.put("js",js);//拼接sql语句介绍}String tp=(String)request.getParameter("tp");if(tp!=null&&!tp.equals("")){//判断图片// System.out.println(tp);map.put("tp",tp);//拼接sql语句图片}String zy=(String)request.getParameter("zy");if(zy!=null&&!zy.equals("")){//判断主演// System.out.println(zy);map.put("zy",zy);//拼接sql语句主演}String jq=(String)request.getParameter("jq");if(jq!=null&&!jq.equals("")){//判断剧情// System.out.println(jq);map.put("jq",jq);//拼接sql语句剧情}List<dianying> list=dianyingdao.getAll(map);//查询dianying 表数据返回 list对象mav.addObject("list",list);//赋值变量return mav;}/**电影添加方法 对表 dianying 进行添加* */@RequestMapping(value = "add")public ModelAndView add(HttpServletRequest request, HttpServletResponse response){try {request.setCharacterEncoding("gb2312");//强制字符集}catch(Exception e){//捕获异常e.printStackTrace();}ModelAndView mav = new ModelAndView();//初始化mav.setViewName("dianying/dianyingadd");//跳转页面dianying bean=new dianying();String dyid=(String)request.getParameter("dyid");//电影编号 变量bean.setDyid(dyid);//赋值封装String dymc=(String)request.getParameter("dymc");//电影名称 变量bean.setDymc(dymc);//赋值封装String js=(String)request.getParameter("js");//介绍 变量bean.setJs(js);//赋值封装String tp=(String)request.getParameter("tp");//图片 变量bean.setTp(tp);//赋值封装String zy=(String)request.getParameter("zy");//主演 变量bean.setZy(zy);//赋值封装String jq=(String)request.getParameter("jq");//剧情 变量bean.setJq(jq);//赋值封装dianyingdao.add(bean);//执行 添加 dianying 添加操作request.setAttribute("msg", "<script>alert('添加成功');</script>");//操作提示return addpage(request,response);}/**电影添加页面 * */@RequestMapping(value = "addpage")public ModelAndView addpage(HttpServletRequest request, HttpServletResponse response){try {request.setCharacterEncoding("gb2312");//强制字符集// request.setAttribute("conn",jdbcTemplate.getDataSource().getConnection());}catch(Exception e){//捕获异常e.printStackTrace();}ModelAndView mav = new ModelAndView();//初始化对象mav.setViewName("dianying/dianyingadd");//跳转页面对象return mav;}/**电影删除方法 对表 dianying 进行删除* */@RequestMapping(value = "del")public ModelAndView del(HttpServletRequest request, HttpServletResponse response){String id=(String)request.getParameter("keyid");//获得 主键idModelAndView mav = new ModelAndView();// mav.setViewName("add/add");try{dianyingdao.delete(Integer.parseInt(id));//执行 删除 dianying 方法}catch(Exception e){e.printStackTrace();;}request.setAttribute("msg", "<script>alert('删除成功');</script>");//返回前台 操作提示return listpage(request,response);}/**电影查看方法 对表 dianying 进行查看* */@RequestMapping(value = "detail")public ModelAndView detail(HttpServletRequest request, HttpServletResponse response){String id=(String)request.getParameter("keyid");//获得 主键idtry {request.setCharacterEncoding("gb2312");//强制字符集// request.setAttribute("conn",jdbcTemplate.getDataSource().getConnection());}catch(Exception e){e.printStackTrace();}dianying bean=new dianying();//初始对象电影ModelAndView mav = new ModelAndView();//初始化mav.setViewName("dianying/dianyingdetail");//跳转jsp页面try{bean=dianyingdao.getdianyingByID(Integer.parseInt(id));//查询获得当前dianying对象request.setAttribute("dyid", bean.getDyid());//电影编号request.setAttribute("dymc", bean.getDymc());//电影名称request.setAttribute("js", bean.getJs());//介绍request.setAttribute("tp", bean.getTp());//图片request.setAttribute("zy", bean.getZy());//主演request.setAttribute("jq", bean.getJq());//剧情}catch(Exception e){e.printStackTrace();;}return mav;}
核心算法设计
static {DBO db=new DBO();String sql="";ResultSet rs=null;///电影int i=0;sql="select * from dianying where 1=1";try{rs=db.query(sql);while(rs.next()){userSet.add(rs.getString("dyid"));//电影// users[i]=rs.getString("spid");i++;}}catch(Exception e){e.printStackTrace();}users=new String[i-1];sql="select * from yonghu where 1=1";i=0;try{rs=db.query(sql);while(rs.next()){filmSet.add(rs.getString("yhm"));//用户//films[i]=rs.getString("yhm");i++;}}catch(Exception e){e.printStackTrace();}films=new String[i-1];score = getScore();}public static String outNearbyUserList(String user) { //user电影idDBO db=new DBO();Map scores = new HashMap();String sql="";ResultSet rs=null;///商品int i=0;sql="select * from dianying where 1=1";try{rs=db.query(sql);while(rs.next()){// i++;if (rs.getString("dyid").equalsIgnoreCase(user)) {continue;}double score = getOSScore(user, rs.getString("dyid"));System.out.println("score="+score);scores.put(rs.getString("dyid"), String.valueOf(score));}db.close();}catch(Exception e){e.printStackTrace();}/*for (String tempUser : users) {if (tempUser.equalsIgnoreCase(user)) {continue;}double score = getOSScore(user, tempUser);System.out.println("score="+score);scores.put(tempUser, score);}*/System.out.println(scores.toString());TreeMapTest mp=new TreeMapTest();String a= mp.getMin(scores);System.out.println("a="+a);return a;}private static Double getOSScore(String user1, String user2) {HashMap user1Score = (HashMap) score.get(user1);HashMap user2Score = (HashMap) score.get(user2);double totalscore = 0.0;Iterator it = user1Score.keySet().iterator();while (it.hasNext()) {String film = (String) it.next();int a1 = (Integer) user1Score.get(film);int a2 = (Integer) user1Score.get(film);int b1 = (Integer) user2Score.get(film);int b2 = (Integer) user2Score.get(film);int a = a1 * a2 - b1 * b2;//System.out.println(Math.abs(a));totalscore += Math.sqrt(Math.abs(a));}return totalscore;}
三、注意事项
1、管理员账号:admin密码:admin 数据库配置文件src\main\resources 下的 application.properties
2、开发环境为IDEA开发,数据库为mysql,使用java语言开发。
3、数据库文件名是jspfilmsql 系统名称film
4、地址:qt/index.jsp
四系统实现



协同过滤算法计算过程 在控制台打印
下载地址
https://download.csdn.net/download/qq_41221322/89059304
需要源码 其他的定制服务 下方联系卡片↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
相关文章:
idea Springboot 电影推荐系统LayUI框架开发协同过滤算法web结构java编程计算机网页
一、源码特点 springboot 电影推荐系统是一套完善的完整信息系统,结合mvc框架和LayUI框架完成本系统springboot dao bean 采用协同过滤算法进行推荐 ,对理解JSP java编程开发语言有帮助系统采用springboot框架(MVC模式开发)&…...
xss【2】
1.xss钓鱼 钓鱼攻击利用页面,fish.php黑客钓鱼获取到账号密码存储的位置 xss进行键盘记录 2.xss常规防范 3.xss验证payload XSS(跨站攻击)_details/open/ontoggle-CSDN博客...
时序分解 | Matlab实现GSWOA-VMD改进鲸鱼优化算法优化变分模态分解时间序列信号分解
时序分解 | Matlab实现GWO-CEEMDAN基于灰狼算法优化CEEMDAN时间序列信号分解 目录 时序分解 | Matlab实现GWO-CEEMDAN基于灰狼算法优化CEEMDAN时间序列信号分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现GSWOA-VMD改进鲸鱼优化算法优化变分模态分解时间序…...
css- 4
1.浮动 1. 浮动最初用于实现文字环绕效果 2. 现在,浮动是主流的布局方式之一 1.1元素浮动之后的特点 元素浮动之后,称为浮动元素,具有如下特点: 1. 浮动元素脱离文档流 2. 多个浮动的元素会水平排列,一行放不下自动换…...
22.括号生成
题目描述 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 示例 1: 输入:n 3 输出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”] 示例 2: 输入…...
JAVA八股--redis
JAVA八股--redis 如何保证Redis和数据库数据一致性redisson实现的分布式锁的主从一致性Redis脑裂现象及解决方案介绍I/O多路复用模型undo log 和 redo log(没掌握MyISAM 和 InnoDB 有什么区别? 如何保证Redis和数据库数据一致性 关于异步通知中消息队列…...
[图像处理] MFC载入图片并绘制ROI矩形
上一篇: [图像处理] MFC载入图片并进行二值化处理和灰度处理及其效果显示 文章目录 前言完整代码重要代码效果 前言 上一篇实现了MFC通过Picture控件载入图片。 这一篇实现ROI功能的第一部分,在Picture控件中,通过鼠标拖拽画出一个矩形。 完…...
Godot 4 教程《勇者传说》依赖注入 学习笔记(0):环境配置
文章目录 前言相关地址环境配置初始化环境配置文件夹结构代码结构代码运行 资源文件导入像素风格窗口环境设置背景设置,Tileap使用自动TileMap 人物场景动画节点添加站立节点添加移动动画添加 通过依赖注入获取Godot的全局属性项目声明 当前项目逻辑讲解角色下降添加代码位置问…...
强行让Java和Go对比一波[持续更新]
概述 很多Java开发如果想转Golang的话,比较让Java开发蛋疼的第一是语法,第二是一些思想和设计哲学的Gap,所以我这儿强行整理一波Java和Golang的对比,但是由于GO和Java在很多方面都有不同的设计,所以这些对比的项可以更…...
理解七层网络协议
osi体系结构 上三路(管数据) 应用层 通过http等,把传输的格式,数据打包 处理网络应用。直接为端用户服务,提供各类应用过程的接口和用户接口。例如:HTTP、Tenlent、FTP、SMTP、NFS等。基于TCP的FTP、HTTP…...
网络协议——HTTP协议
目录 编辑 一,HTTP协议基本认识 二,认识URL 三,http协议的格式 1,发送格式 2,回应格式 四,服务端代码 五,http报文细节 1,Post与Get方法 2,Content_lenth 3&…...
八股面试——数据库——索引
索引的概念 B树的概念: 索引的作用 聚簇索引与非聚簇索引 聚簇索引就是主键值,在B树上,通过主键大小(数据在B树叶子节点按主键顺序排序)寻找对应的叶子节点,叶子节点保存的一整条记录。 非聚簇索引&#x…...
【二分查找】Leetcode 二分查找
题目解析 二分查找在数组有序可以使用,也可以在数组无序的时候使用(只要数组中的一些规律适用于二分即可) 704. 二分查找 算法讲解 当left > right的时候,我们循环结束,但是当left和right缩成一个点的时候&#x…...
Python+Vuecil笔记
Nginx 进入目录: C:\nginx-1.20.2\nginx-1.20.2 start nginx 开始 nginx -s stop 停止 nginx -s quit 退出CSS 通过标签去写css 循环展示数据 JS 点击时执行事件 Django 配置media 在seetings里面修改 STATIC_URL /static/ MEDIA_URL /upload/ MEDIA_ROOT os.pat…...
C语言关于随机数知识点的总结
在C语言中,随机数的生成通常依赖于特定的库函数,最常用的是 <stdlib.h> 头文件中的 rand() 函数。以下是对随机数知识点的总结、举例和分析: 随机数知识点总结 1.随机数种子:rand() 函数生成的随机数是伪随机数࿰…...
网络应用层和传输层
网络中有很多协议这些协议的不同导致了分层这一现象,不同层的主要功能不一样。 应用层:应用程序。数据具体如何使用 传输层:关注起点和终点 网络层:关注路径规划 数据链路层:关注相邻节点的转发 物理层࿱…...
Vue3:优化-从响应式数据中获取纯数据
一、情景说明 我们知道,Vue3中,创建变量时,常用ref、reactive来包裹,这样,这个变量就是响应式数据 然而,有时候,我们只需要纯数据 例如,我们在调用后端接口的时候,我们只…...
C#.手术麻醉系统源码 手麻系统如何与医院信息系统进行集成?
C#.手术麻醉系统源码 手麻系统如何与医院信息系统进行集成? 手术麻醉系统与医院信息系统的集成是一个关键步骤,它有助于实现信息的共享和流程的协同,从而提高医疗服务的效率和质量。手麻系统与lis、his、pacs等系统的对接是医院信息化建设的重…...
学习CSS Flexbox 玩flexboxfroggy flexboxfroggy1-24关详解
欢迎来到Flexbox Froggy,这是一个通过编写CSS代码来帮助Froggy和朋友的游戏! justify-content 和 align-items 是两个用于控制 CSS Flexbox 布局的属性。 justify-content:该属性用于控制 Flexbox 容器中子项目在主轴(水平方向)…...
springboot项目如何配置跨域?
在Spring Boot项目中配置跨域(CORS,Cross-Origin Resource Sharing)主要是为了允许来自不同源(不同的协议、域名或端口)的前端应用能够访问后端API。Spring Boot提供了多种方式来配置跨域支持。 1. 使用CrossOrigin注…...
Perplexity学术模式到底有多“实时”?我们用NIST标准测试集连续监控72小时,结果让3所常春藤图书馆紧急更新采购清单…
更多请点击: https://intelliparadigm.com 第一章:Perplexity学术模式到底有多“实时”?我们用NIST标准测试集连续监控72小时,结果让3所常春藤图书馆紧急更新采购清单… 实时性验证方法论 我们采用 NIST TREC 2023 Dynamic Filt…...
uHabits习惯追踪应用完整指南:从入门到精通的5个实用技巧
uHabits习惯追踪应用完整指南:从入门到精通的5个实用技巧 【免费下载链接】uhabits Loop Habit Tracker, a mobile app for creating and maintaining long-term positive habits 项目地址: https://gitcode.com/gh_mirrors/uh/uhabits uHabits习惯追踪应用是…...
别再只盯着快充了!聊聊交流充电桩(慢充)对电池寿命的友好设计
慢充才是真爱护:揭秘交流充电桩如何用"温柔算法"延长电池寿命 当大多数电动车车主还在为"充电5分钟续航200公里"的快充技术欢呼时,一群电池工程师和资深电车玩家却悄悄把家用充电桩调成了最低电流模式。这不是因为他们时间太多&…...
Spinach印相紧急修复方案:当--v 6.2输出突然丢失青橙分离感时,立即执行的4步CLI热补丁与config.json强制回滚指令
更多请点击: https://intelliparadigm.com 第一章:Spinach印相紧急修复方案:当--v 6.2输出突然丢失青橙分离感时,立即执行的4步CLI热补丁与config.json强制回滚指令 Spinach 6.2 版本在部分 GPU 加速路径下会因色彩空间映射缓存污…...
犬种识别实战:细粒度CNN模型从训练到ONNX部署
1. 项目概述:用一张照片,让模型告诉你这是什么狗 “Deep Learning (CNN) — Discover the Breed of a Dog in an Image”这个标题看起来像一句教科书里的课后习题,但实际落地时,它是一条从数据噪声里硬生生凿出来的技术路径——不…...
从零手搓CLAHE算法:用Python实现图像去雾,并与OpenCV的cv2.createCLAHE()掰掰手腕
从零实现CLAHE算法:Python实战图像去雾与OpenCV性能对决 当一张雾霾笼罩的风景照出现在眼前时,我们往往会感到遗憾——那些本应清晰的细节被一层灰蒙蒙的雾气所掩盖。传统直方图均衡化虽然能提升对比度,但往往会过度放大噪声,让图…...
【M1 Mac游戏开发环境】从零到一:VSCode、Git与效率工具的终极配置指南
1. M1 Mac开箱配置:为Unity开发者量身定制 刚拿到M1 Mac的Unity开发者们,你们是否遇到过这样的场景:打开VSCode写C#脚本时智能提示迟迟不出现,Git命令输到一半发现没有自动补全,或是被各种环境配置问题折腾得焦头烂额&…...
Linux安装配置小龙虾【openclaw】(飞牛NAS OS)
OneAPI & NewAPI 完全指南:从零开始搭建你的AI模型聚合网关 在AI大模型百花齐放的今天,我们常常需要同时使用多个模型提供商的服务——OpenAI的GPT-4、Anthropic的Claude、Google的Gemini、国内的文心一言、通义千问等等。每个提供商都有自己的API接…...
哔哩下载姬完全指南:从入门到精通的全能B站视频下载方案
哔哩下载姬完全指南:从入门到精通的全能B站视频下载方案 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等&…...
手把手复现:在MATLAB/Simulink里搭建PMSM的两种解耦模型(附模型下载)
在MATLAB/Simulink中构建永磁同步电机解耦控制模型的实战指南 永磁同步电机(PMSM)因其高效率和高功率密度,已成为工业驱动和电动汽车领域的核心部件。但对于刚接触电机控制的工程师和学生来说,如何将教科书中的解耦控制理论转化为…...
