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");//获得 主键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

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

相关推荐
腾讯TNTWeb前端团队6 小时前
helux v5 发布了,像pinia一样优雅地管理你的react状态吧
前端·javascript·react.js
mghio7 小时前
Dubbo 中的集群容错
java·微服务·dubbo
范文杰9 小时前
AI 时代如何更高效开发前端组件?21st.dev 给了一种答案
前端·ai编程
拉不动的猪9 小时前
刷刷题50(常见的js数据通信与渲染问题)
前端·javascript·面试
拉不动的猪9 小时前
JS多线程Webworks中的几种实战场景演示
前端·javascript·面试
FreeCultureBoy10 小时前
macOS 命令行 原生挂载 webdav 方法
前端
uhakadotcom11 小时前
Astro 框架:快速构建内容驱动型网站的利器
前端·javascript·面试
uhakadotcom11 小时前
了解Nest.js和Next.js:如何选择合适的框架
前端·javascript·面试
uhakadotcom11 小时前
React与Next.js:基础知识及应用场景
前端·面试·github