赞
踩
一、源码特点
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");//获得 主键id
- ModelAndView 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");//获得 主键id
- try {
- 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电影id
- DBO 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
需要源码 其他的定制服务 下方联系卡片↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。