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

需要源码 其他的定制服务  下方联系卡片↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

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

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

相关文章

书生·浦语大模型-第二节课笔记/作业

笔记 实验一 cli-demo import torch from transformers import AutoTokenizer, AutoModelForCausalLMmodel_name_or_path "../models"tokenizer AutoTokenizer.from_pretrained(model_name_or_path, trust_remote_codeTrue, device_mapcuda:0) model AutoModelF…

【Cadence Allegro】如何差分对走线

一、创建espice模型 shift+F2或者“Analyze-Model Assigment”创建espice模型,这个操作是为了让差分线路里的串接电阻(或电感电容)变为xnet类型方便准确等长走线。 Cadence Allegro Xnet的创建详细教程 - 知乎Cadence Allegro Xnet的创建详细教程Xnet是指在无源器件的两端,…

【Go】十四、封装、继承

文章目录 1、封装2、继承3、继承的注意点 1、封装 隐藏实现细节保证数据安全&#xff08;控制变量或方法的访问范围&#xff0c;private&#xff09; Go中实现封装&#xff1a; 结构体、字段的首字母小写&#xff08;Java的private&#xff09;提供一个工厂模式函数&#xf…

微服务管理(完整)

前言&#xff1a; 分享一篇学微服务管理的过程 一&#xff0c;etcd入门 1&#xff0c;简介 1.1&#xff0c;etcd是什么 etcd是CoreOS团队于2013年6月发起的开源项目&#xff0c;它的目标是构建一个高可用的分布式键值(key-value)数据库。 官网上的一段描述&#xff1a; A…

Tomcat调优总结(Tomcat自身优化、Linux内核优化、JVM优化)

Tomcat自身的调优是针对conf/server.xml中的几个参数的调优设置。首先是对这几个参数的含义要有深刻而清楚的理解。以tomcat8.5为例&#xff0c;讲解参数。 同时也得认识到一点&#xff0c;tomcat调优也受制于linux内核。linux内核对tcp连接也有几个参数可以调优。 因此我们可…

java数据结构与算法刷题-----LeetCode695. 岛屿的最大面积

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 1. 深度优先遍历2. 广度优先 1. 深度优先遍历 这不是找最短路径&…

蓝桥杯刷题第七天

这道题一开始看真的有点简单&#xff0c;但一开始跟着案例先入为主了&#xff0c;误以为是只有两个项目想着穷举完n个人&#xff0c;&#xff08;n1&#xff09;*&#xff08;n2&#xff09;/2种情况但后面发现项目不止两个&#xff0c;用链表来好像我也不会&#xff0c;用二维…

linux编辑器——vim使用方法

文章目录 linux编辑器——vim使用方法1. vim的基本概念2. vim的基本操作3. vim正常模式命令集4. vim末行模式命令集5. vim操作总结6.简单vim配置7.参考资料 linux编辑器——vim使用方法 vi/vim的区别简单点来说&#xff0c;它们都是多模式编辑器&#xff0c;不同的是vim是vi的…

泛域名站群,泛域名程序

泛域名站群是一种利用大量类似的泛域名来建立多个网站&#xff0c;并通过这些网站链接到主网站&#xff0c;以提升主网站的排名和流量的策略。泛域名站群通常包含大量的子域名&#xff0c;这些子域名指向不同的页面&#xff0c;但它们的内容大部分是重复或相似的&#xff0c;目…

【Frida】【Android】08_爬虫之网络通信库okhttp3

&#x1f6eb; 系列文章导航 【Frida】【Android】01_手把手教你环境搭建 https://blog.csdn.net/kinghzking/article/details/136986950【Frida】【Android】02_JAVA层HOOK https://blog.csdn.net/kinghzking/article/details/137008446【Frida】【Android】03_RPC https://bl…

编译和链接(基础速通版)

翻译环境和运行环境 前提解释 电脑是不能直接执行C语言的程序代码的&#xff0c;所依赖的是翻译环境进行一个源代码运行的时候需要经过翻译环境和运行环境的处理&#xff0c;才能得到你需要的可运行程序。 这里是源文件&#xff0c;也就是 .c文件&#xff0c;通过翻译环境得…

图解PyTorch中的torch.gather函数和 scatter 函数

前言 torch.gather在目前基于 transformer or query based 的目标检测中&#xff0c;在最后获取目标结果时&#xff0c;经常用到。 这里记录下用法&#xff0c;防止之后又忘了。 介绍 torch.gather 官方文档对torch.gather()的定义非常简洁 定义&#xff1a;从原tensor中获…

Ubuntu joystick 测试手柄 xbox

Ubuntu joystick 测试手柄 xbox 测试使用Ubuntu20.04 测试环境在工控机 安装测试 实际测试使用的手柄是北通阿修罗2pro 兼容xbox Ubuntu20.04主机 连接手柄或者无线接收器后查看是否已经检测到&#xff1a; ls /dev/input找到输入中的 js0 即为手柄输入 需要安装joysti…

注意力机制篇 | YOLOv8改进之添加DAT注意力机制

前言:Hello大家好,我是小哥谈。DAT(Vision Transformer with Deformable Attention)是一种引入了可变形注意力机制的视觉Transformer。在训练算法模型的时候,通过引入可变形注意力机制,改进了视觉Transformer的效率和性能,使其在处理复杂的视觉任务时更加高效和准确。�…

css酷炫边框

边框一 .leftClass {background: #000;/* -webkit-animation: twinkling 1s infinite ease-in-out; 1秒钟的开始结束都慢的无限次动画 */ } .leftClass::before {content: "";width: 104%;height: 102%;border-radius: 8px;background-image: linear-gradient(var(…

正则表达式引擎库汇合

1.总览表格 一些正则表达式库的对比 index库名编程语言说明代码示例编译指令1Posix正则C语言是C标准库中用于编译POSIX风格的正则表达式库 posix-re.cgcc posix-re.c 2PCRE库C语言提供类似Perl语言的一个正则表达式引擎库。 一般系统上对应/usr/lib64/libpcre.so这个库文件&am…

柔性数组详细讲解

动态内存函数的使用和综合实践-malloc&#xff0c;free&#xff0c;realloc&#xff0c;calloc-CSDN博客https://blog.csdn.net/Jason_from_China/article/details/137075045 柔性数组存在的意义 柔性数组在编程语言中指的是可以动态调整大小的数组。相比固定大小的数组&#…

STL容器的一些操作(常用的,不全)

目录 string 1.string的一些创建 2.string 的读入和输出&#xff1a; 3.string的一些操作 4.彻底清空string 容器的函数 vector 1.vector的一些创建&#xff1a; 2.vector的一些操作&#xff1a; 3.vector的彻底清空并释放内存&#xff1a; queue 循环队列&#xff1…

兑换码生成算法

兑换码生成算法 兑换码生成算法1.兑换码的需求2.算法分析2.重兑校验算法3.防刷校验算法 3.算法实现 兑换码生成算法 兑换码生成通常涉及在特定场景下为用户提供特定产品或服务的权益或礼品&#xff0c;典型的应用场景包括优惠券、礼品卡、会员权益等。 1.兑换码的需求 要求如…

Pointnet++分类和分割数据集准备和实验复现

5.分类数据集Modelnet40及可视化 Modelnet40分类数据集 原始的modelnet40是off文件&#xff0c;是cad模型 OFF文件是一种用于存储三维对象信息的文件格式&#xff0c;全称为"Object File Format"。它主要用于存储几何体的顶点、边和面信息&#xff0c;以及可能的颜…