当前位置:   article > 正文

idea Springboot 电影推荐系统LayUI框架开发协同过滤算法web结构java编程计算机网页

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)用户登录、个人信息修改

数据库设计

  1. CREATE TABLE `gly` (
  2. `glyid` int(11) NOT NULL auto_increment,
  3. `yhm` VARCHAR(40) default NULL COMMENT '用户名',
  4. `mm` VARCHAR(40) default NULL COMMENT '密码',
  5. `xm` VARCHAR(40) default NULL COMMENT '姓名', PRIMARY KEY (`glyid`)
  6. ) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
  7. CREATE TABLE `yonghu` (
  8. `yhid` int(11) NOT NULL auto_increment,
  9. `yhm` VARCHAR(40) default NULL COMMENT '用户名',
  10. `mm` VARCHAR(40) default NULL COMMENT '密码',
  11. `xm` VARCHAR(40) default NULL COMMENT '姓名',
  12. `lxdh` VARCHAR(40) default NULL COMMENT '联系电话',
  13. `lxdz` VARCHAR(40) default NULL COMMENT '联系地址', PRIMARY KEY (`yhid`)
  14. ) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
  15. CREATE TABLE `gonggao` (
  16. `ggid` int(11) NOT NULL auto_increment,
  17. `bt` VARCHAR(40) default NULL COMMENT '标题',
  18. `nr` VARCHAR(40) default NULL COMMENT '内容',
  19. `fbsj` VARCHAR(40) default NULL COMMENT '发布时间', PRIMARY KEY (`ggid`)
  20. ) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
  21. CREATE TABLE `dianying` (
  22. `dyid` int(11) NOT NULL auto_increment,
  23. `dymc` VARCHAR(40) default NULL COMMENT '电影名称',
  24. `js` VARCHAR(40) default NULL COMMENT '介绍',
  25. `tp` VARCHAR(40) default NULL COMMENT '图片',
  26. `zy` VARCHAR(40) default NULL COMMENT '主演',
  27. `jq` VARCHAR(40) default NULL COMMENT '剧情', PRIMARY KEY (`dyid`)
  28. ) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
  29. CREATE TABLE `liulan` (
  30. `llid` int(11) NOT NULL auto_increment,
  31. `yh` VARCHAR(40) default NULL COMMENT '用户',
  32. `dy` VARCHAR(40) default NULL COMMENT '电影',
  33. `sj` VARCHAR(40) default NULL COMMENT '时间', PRIMARY KEY (`llid`)
  34. ) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
  35. CREATE TABLE `pingjia` (
  36. `pjid` int(11) NOT NULL auto_increment,
  37. `dy` VARCHAR(40) default NULL COMMENT '电影',
  38. `pj` VARCHAR(40) default NULL COMMENT '评价',
  39. `yh` VARCHAR(40) default NULL COMMENT '用户',
  40. `sj` VARCHAR(40) default NULL COMMENT '时间', PRIMARY KEY (`pjid`)
  41. ) ENGINE=InnoDB DEFAULT CHARSET=gb2312;

控制层代码设计

  1. /**电影列表 查询dianying
  2. *
  3. */
  4. @RequestMapping(value = "listpage")
  5. public ModelAndView listpage(HttpServletRequest request, HttpServletResponse response) {
  6. try {
  7. request.setCharacterEncoding("gb2312");//强制字符集
  8. }catch(Exception e){
  9. e.printStackTrace();
  10. }
  11. Map<String,Object> map= new HashMap<String,Object>();
  12. ModelAndView mav = new ModelAndView();//初始化
  13. mav.setViewName("dianying/dianyinglist");//跳转jsp 页面
  14. String dyid=(String)request.getParameter("dyid");
  15. if(dyid!=null&&!dyid.equals("")){//判断电影编号
  16. // System.out.println(dyid);
  17. map.put("dyid",dyid);//拼接sql语句电影编号
  18. }
  19. String dymc=(String)request.getParameter("dymc");
  20. if(dymc!=null&&!dymc.equals("")){//判断电影名称
  21. // System.out.println(dymc);
  22. map.put("dymc",dymc);//拼接sql语句电影名称
  23. }
  24. String js=(String)request.getParameter("js");
  25. if(js!=null&&!js.equals("")){//判断介绍
  26. // System.out.println(js);
  27. map.put("js",js);//拼接sql语句介绍
  28. }
  29. String tp=(String)request.getParameter("tp");
  30. if(tp!=null&&!tp.equals("")){//判断图片
  31. // System.out.println(tp);
  32. map.put("tp",tp);//拼接sql语句图片
  33. }
  34. String zy=(String)request.getParameter("zy");
  35. if(zy!=null&&!zy.equals("")){//判断主演
  36. // System.out.println(zy);
  37. map.put("zy",zy);//拼接sql语句主演
  38. }
  39. String jq=(String)request.getParameter("jq");
  40. if(jq!=null&&!jq.equals("")){//判断剧情
  41. // System.out.println(jq);
  42. map.put("jq",jq);//拼接sql语句剧情
  43. }
  44. List<dianying> list=dianyingdao.getAll(map);//查询dianying 表数据返回 list对象
  45. mav.addObject("list",list);//赋值变量
  46. return mav;
  47. }
  48. /**电影添加方法 对表 dianying 进行添加
  49. *
  50. */
  51. @RequestMapping(value = "add")
  52. public ModelAndView add(HttpServletRequest request, HttpServletResponse response){
  53. try {
  54. request.setCharacterEncoding("gb2312");//强制字符集
  55. }catch(Exception e){//捕获异常
  56. e.printStackTrace();
  57. }
  58. ModelAndView mav = new ModelAndView();//初始化
  59. mav.setViewName("dianying/dianyingadd");//跳转页面
  60. dianying bean=new dianying();
  61. String dyid=(String)request.getParameter("dyid");//电影编号 变量
  62. bean.setDyid(dyid);//赋值封装
  63. String dymc=(String)request.getParameter("dymc");//电影名称 变量
  64. bean.setDymc(dymc);//赋值封装
  65. String js=(String)request.getParameter("js");//介绍 变量
  66. bean.setJs(js);//赋值封装
  67. String tp=(String)request.getParameter("tp");//图片 变量
  68. bean.setTp(tp);//赋值封装
  69. String zy=(String)request.getParameter("zy");//主演 变量
  70. bean.setZy(zy);//赋值封装
  71. String jq=(String)request.getParameter("jq");//剧情 变量
  72. bean.setJq(jq);//赋值封装
  73. dianyingdao.add(bean);//执行 添加 dianying 添加操作
  74. request.setAttribute("msg", "<script>alert('添加成功');</script>");//操作提示
  75. return addpage(request,response);
  76. }
  77. /**电影添加页面
  78. *
  79. */
  80. @RequestMapping(value = "addpage")
  81. public ModelAndView addpage(HttpServletRequest request, HttpServletResponse response){
  82. try {
  83. request.setCharacterEncoding("gb2312");//强制字符集
  84. // request.setAttribute("conn",jdbcTemplate.getDataSource().getConnection());
  85. }catch(Exception e){//捕获异常
  86. e.printStackTrace();
  87. }
  88. ModelAndView mav = new ModelAndView();//初始化对象
  89. mav.setViewName("dianying/dianyingadd");//跳转页面对象
  90. return mav;
  91. }
  92. /**电影删除方法 对表 dianying 进行删除
  93. *
  94. */
  95. @RequestMapping(value = "del")
  96. public ModelAndView del(HttpServletRequest request, HttpServletResponse response){
  97. String id=(String)request.getParameter("keyid");//获得 主键id
  98. ModelAndView mav = new ModelAndView();
  99. // mav.setViewName("add/add");
  100. try{
  101. dianyingdao.delete(Integer.parseInt(id));//执行 删除 dianying 方法
  102. }catch(Exception e){
  103. e.printStackTrace();;
  104. }
  105. request.setAttribute("msg", "<script>alert('删除成功');</script>");//返回前台 操作提示
  106. return listpage(request,response);
  107. }
  108. /**电影查看方法 对表 dianying 进行查看
  109. *
  110. */
  111. @RequestMapping(value = "detail")
  112. public ModelAndView detail(HttpServletRequest request, HttpServletResponse response){
  113. String id=(String)request.getParameter("keyid");//获得 主键id
  114. try {
  115. request.setCharacterEncoding("gb2312");//强制字符集
  116. // request.setAttribute("conn",jdbcTemplate.getDataSource().getConnection());
  117. }catch(Exception e){
  118. e.printStackTrace();
  119. }
  120. dianying bean=new dianying();//初始对象电影
  121. ModelAndView mav = new ModelAndView();//初始化
  122. mav.setViewName("dianying/dianyingdetail");//跳转jsp页面
  123. try{
  124. bean=dianyingdao.getdianyingByID(Integer.parseInt(id));//查询获得当前dianying对象
  125. request.setAttribute("dyid", bean.getDyid());//电影编号
  126. request.setAttribute("dymc", bean.getDymc());//电影名称
  127. request.setAttribute("js", bean.getJs());//介绍
  128. request.setAttribute("tp", bean.getTp());//图片
  129. request.setAttribute("zy", bean.getZy());//主演
  130. request.setAttribute("jq", bean.getJq());//剧情
  131. }catch(Exception e){
  132. e.printStackTrace();;
  133. }
  134. return mav;
  135. }

核心算法设计

  1. static {
  2. DBO db=new DBO();
  3. String sql="";
  4. ResultSet rs=null;
  5. ///电影
  6. int i=0;
  7. sql="select * from dianying where 1=1";
  8. try{
  9. rs=db.query(sql);
  10. while(rs.next()){
  11. userSet.add(rs.getString("dyid"));//电影
  12. // users[i]=rs.getString("spid");
  13. i++;
  14. }
  15. }catch(Exception e){
  16. e.printStackTrace();
  17. }
  18. users=new String[i-1];
  19. sql="select * from yonghu where 1=1";
  20. i=0;
  21. try{
  22. rs=db.query(sql);
  23. while(rs.next()){
  24. filmSet.add(rs.getString("yhm"));//用户
  25. //films[i]=rs.getString("yhm");
  26. i++;
  27. }
  28. }catch(Exception e){
  29. e.printStackTrace();
  30. }
  31. films=new String[i-1];
  32. score = getScore();
  33. }
  34. public static String outNearbyUserList(String user) { //user电影id
  35. DBO db=new DBO();
  36. Map scores = new HashMap();
  37. String sql="";
  38. ResultSet rs=null;
  39. ///商品
  40. int i=0;
  41. sql="select * from dianying where 1=1";
  42. try{
  43. rs=db.query(sql);
  44. while(rs.next()){
  45. // i++;
  46. if (rs.getString("dyid").equalsIgnoreCase(user)) {
  47. continue;
  48. }
  49. double score = getOSScore(user, rs.getString("dyid"));
  50. System.out.println("score="+score);
  51. scores.put(rs.getString("dyid"), String.valueOf(score));
  52. }
  53. db.close();
  54. }catch(Exception e){
  55. e.printStackTrace();
  56. }
  57. /*
  58. for (String tempUser : users) {
  59. if (tempUser.equalsIgnoreCase(user)) {
  60. continue;
  61. }
  62. double score = getOSScore(user, tempUser);
  63. System.out.println("score="+score);
  64. scores.put(tempUser, score);
  65. }
  66. */
  67. System.out.println(scores.toString());
  68. TreeMapTest mp=new TreeMapTest();
  69. String a= mp.getMin(scores);
  70. System.out.println("a="+a);
  71. return a;
  72. }
  73. private static Double getOSScore(String user1, String user2) {
  74. HashMap user1Score = (HashMap) score.get(user1);
  75. HashMap user2Score = (HashMap) score.get(user2);
  76. double totalscore = 0.0;
  77. Iterator it = user1Score.keySet().iterator();
  78. while (it.hasNext()) {
  79. String film = (String) it.next();
  80. int a1 = (Integer) user1Score.get(film);
  81. int a2 = (Integer) user1Score.get(film);
  82. int b1 = (Integer) user2Score.get(film);
  83. int b2 = (Integer) user2Score.get(film);
  84. int a = a1 * a2 - b1 * b2;
  85. //System.out.println(Math.abs(a));
  86. totalscore += Math.sqrt(Math.abs(a));
  87. }
  88. return totalscore;
  89. }

三、注意事项
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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/359208
推荐阅读
相关标签
  

闽ICP备14008679号