【计算机专业毕业设计】基于Java的协同过滤电影推荐系统的设计与实现

精彩专栏推荐订阅:在下方主页👇🏻👇🏻👇🏻👇🏻

💖🔥作者主页计算机毕设木哥🔥 💖

一、项目介绍

随着科技的飞速发展,人们对于个性化服务和体验的需求也日益增强。在电影推荐领域,传统的推荐方法往往基于电影的元数据或用户的历史行为数据进行推荐,然而,这些方法往往无法准确地捕捉到用户的个人喜好和复杂需求。因此,本研究旨在设计一个协同过滤电影推荐系统,该系统能够结合用户的行为和电影的元数据进行更加精准的电影推荐,使用户能够获得更好的电影观看体验,现有的电影推荐系统大多存在以下问题。它们往往只考虑了用户的历史行为数据或者电影的元数据,而忽略了用户之间的协作和社交网络关系,这使得推荐的准确性受到了限制。因此无法为用户提供真正符合他们个人喜好的电影推荐。影响了用户的体验。

本研究的主要目的是设计一个协同过滤电影推荐系统,该系统能够结合用户行为、电影元数据以及用户之间的协作关系进行推荐,从而提高推荐的准确性。此外,本研究还将深入研究用户兴趣模型,以更加深入地了解用户的观影喜好,提供更加个性化的推荐。同时,本研究将优化算法和数据处理流程,以提高系统的实时响应能力,确保用户能够及时获得推荐结果。

二、项目功能介绍

管理员的功能包括以下:

用户管理:管理员可以创建、编辑和删除用户账户,可以设置用户的权限级别,以及追踪用户活动。
免费电影管理:管理员可以添加、编辑和删除免费电影信息,包括电影的基本信息等。
付费电影管理:管理员可以添加、编辑和删除付费电影信息,同时设定付费电影的价格和访问权限。
订单管理:管理员可以查看和处理所有的用户购买订单,可以根据订单信息进行发货或者退款操作。
电影收藏管理:管理员可以查看和管理所有用户的电影收藏,可以设定个人电影收藏的公开或私有状态。
电影论坛管理:管理员可以添加、编辑和删除电影论坛的帖子,可以管理论坛的分类和板块。
电影资讯管理:管理员可以添加、编辑和删除电影资讯,包括最新的电影发布、明星动态、电影评论等。
基础数据管理:管理员可以管理和优化系统的基础数据,例如用户行为数据、电影数据等,以提升系统的推荐准确度和效率。

用户的功能包括以下:

注册和登录:用户可以通过手机号或邮箱进行注册和登录。
个人中心:用户可以在个人中心查看和编辑自己的个人信息,包括头像、签名、联系方式等。
浏览付费电影信息:用户可以浏览所有的付费电影信息,包括电影的基本信息、以及其他的用户评价和评分。
浏览免费电影信息:用户可以浏览所有的免费电影信息,但是不能进行购买操作。
购买电影:如果用户对某部付费电影感兴趣,他们可以选择购买并支付相应的费用。购买后,用户可以在个人中心查看和管理自己的购买记录。
免费电影收藏:用户可以对免费电影进行收藏,收藏的电影可以在个人中心进行查看和管理。
电影论坛:用户可以在电影论坛发表自己对电影的看法和评价,可以浏览其他用户的评论和观点。
电影资讯:用户可以查看最新的电影资讯,包括最新的电影发布、明星动态、电影评论等。

三、开发环境

  • 开发语言:Java
  • 数据库:MySQL
  • 系统架构:B/S
  • 后端:springboot
  • 前端:vue
  • 工具:IDEA或者Eclipse、JDK1.8、Maven

四、系统展示

登录页面模块:
在这里插入图片描述
首页模块:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
管理员模块:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、代码展示

   public HigherResponse<User> queryUser(@RequestParam(value = "userId",required = false)String userId,
                                          @RequestParam(value = "password",required = false)String password,
                                          HttpSession session){
        if (null == userId || null == password){
            return HigherResponse.getFailedRespon("用户名密码不能为空");
        }
        QueryWrapper wrapper = new QueryWrapper();
        wrapper.eq("u_id",userId);
        wrapper.eq("u_passwd",password);
        User user = userDao.selectOne(wrapper);
        if (null == user){
            return HigherResponse.getFailedRespon("用户名或密码错误");
        }
        session.setAttribute("userInfo",user);
        return HigherResponse.getSuccessRespon(user);
    }

    @RequestMapping("/register.do")
    public HigherResponse<String> addOneUser(@RequestParam(value = "userId",required = false)String userId,
                                             @RequestParam(value = "password",required = false)String password){
        if (null == userId || null == password){
            return HigherResponse.getFailedRespon("用户名密码不能为空");
        }

        QueryWrapper wrapper = new QueryWrapper();
        wrapper.eq("u_id",userId);
        wrapper.eq("u_passwd",password);
        User user = userDao.selectOne(wrapper);
        if (null != user){
            return HigherResponse.getFailedRespon("用户名已经存在");
        }
        User user1 = new User();
        user1.setUserId(userId);
        user1.setPassword(password);

        int insert = userDao.insert(user1);

        if (insert == 0){
            return HigherResponse.getFailedRespon("注册失败");
        }

        return HigherResponse.getSuccessRespon("注册成功");
    }

    //电影首页-电影按照评分高低排序展示
    @RequestMapping("listMovies.do")
    public HigherResponse<PageInfo<Movie>> listMovies(@RequestParam(required = true,defaultValue = "1") Integer pageNum,
                                                      @RequestParam(required = true,defaultValue = "5") Integer pageSize){
        PageHelper.startPage(pageNum,pageSize);
        QueryWrapper wrapper = new QueryWrapper();
        wrapper.orderByDesc("rate");
        List<Movie> movies = movieDao.selectList(wrapper);
        PageInfo<Movie> moviePageInfo = new PageInfo<>(movies);
        return HigherResponse.getSuccessRespon(moviePageInfo);
    }

    //根据电影名称查询
    @RequestMapping("/getMovieByName.do")
    public HigherResponse<PageInfo<Movie>> getMovieByName(@RequestParam(required = true,defaultValue = "1") Integer pageNum,
                                                          @RequestParam(required = true,defaultValue = "5") Integer pageSize,
                                                          HttpSession session, String movieName){
        Object attribute = session.getAttribute("userInfo");
        User user = null;
        if (attribute instanceof User){
            user = (User) attribute;
        }
        if (null == user){
            return HigherResponse.getFailedRespon("未登录,请重新登录");
        }
        PageHelper.startPage(pageNum,pageSize);
        QueryWrapper wrapper = new QueryWrapper();
        wrapper.like("m_name",movieName);
        List<Movie> movieList = movieDao.selectList(wrapper);
        PageInfo<Movie> moviePageInfo = new PageInfo<>(movieList);
        return HigherResponse.getSuccessRespon(moviePageInfo);
    }

    //根据电影id查询一个电影
    @RequestMapping("/getMovieById.do")
    public HigherResponse<Movie> getMovieById(HttpSession session, String movieId){
        Object attribute = session.getAttribute("userInfo");
        User user = null;
        if (attribute instanceof User){
            user = (User) attribute;
        }
        if (null == user){
            return HigherResponse.getFailedRespon("未登录,请重新登录");
        }
        Movie movie = movieDao.selectById(movieId);
        return HigherResponse.getSuccessRespon(movie);
    }

    //根据电影id  查询到多个推荐电影的id 然后批量显示推荐电影列表
    @RequestMapping("/getMoviesByIds.do")
    public HigherResponse<PageInfo<Movie>> getMoviesByIds(HttpSession session, String movieId,
                                                          @RequestParam(required = true,defaultValue = "1") Integer pageNum,
                                                          @RequestParam(required = true,defaultValue = "5") Integer pageSize){
        Object attribute = session.getAttribute("userInfo");
        User user = null;
        if (attribute instanceof User){
            user = (User) attribute;
        }
        if (null == user){
            return HigherResponse.getFailedRespon("未登录,请重新登录");
        }
        PageHelper.startPage(pageNum,pageSize);
        Recommend recommend = recommendDao.selectById(movieId);
        String movieIds = recommend.getRecommendMovieId();
        String[] split = movieIds.split(",");
        List<Movie> movieList = movieDao.selectBatchIds(Arrays.asList(split));
        PageInfo<Movie> moviePageInfo = new PageInfo<>(movieList);
        return HigherResponse.getSuccessRespon(moviePageInfo);
    }


    //用户自己查询该电影的评价
    @RequestMapping("/getRating.do")
    public HigherResponse<Rating> getRating(HttpSession session,String movieId){
        Object attribute = session.getAttribute("userInfo");
        User user = null;
        if (attribute instanceof User){
            user = (User) attribute;
        }
        if (null == user){
            return HigherResponse.getFailedRespon("未登录,请重新登录");
        }
        QueryWrapper wrapper = new QueryWrapper();
        wrapper.eq("u_id",user.getUserId());
        wrapper.eq("m_id",movieId);
        Rating rating = ratingDao.selectOne(wrapper);
        if (null == rating){
            return HigherResponse.getFailedRespon("该用户没有对此电影做出评级");
        }
        return HigherResponse.getSuccessRespon(rating);
    }

    //用户 添加点评
    @RequestMapping("/addRating.do")
    public HigherResponse<String> addRating(HttpSession session,String movieId,String type, Integer rate){
        Object attribute = session.getAttribute("userInfo");
        User user = null;
        if (attribute instanceof User){
            user = (User) attribute;
        }
        if (null == user){
            return HigherResponse.getFailedRespon("未登录,请重新登录");
        }
        QueryWrapper wrapper = new QueryWrapper();
        wrapper.eq("u_id",user.getUserId());
        wrapper.eq("m_id",movieId);
        Rating rating1 = ratingDao.selectOne(wrapper);
        if (null != rating1){
            return HigherResponse.getFailedRespon("该用户已经做出评级");
        }
        Rating rating = new Rating();
        rating.setUserId(user.getUserId());
        rating.setMovieId(movieId);
        rating.setType(type);
        rating.setRate(rate);
        int insert = ratingDao.insert(rating);
        if (insert == 0){
            return HigherResponse.getFailedRespon("评价失败");
        }
        return HigherResponse.getSuccessRespon("评价成功");

    }

六、项目总结

在本文中,我们研究了协同过滤电影推荐系统的问题,提出了一种新的基于用户行为、电影元数据以及用户之间协作关系的电影推荐方法。通过实验验证,我们的方法在提高推荐准确性、理解用户兴趣以及优化系统性能方面都取得了显著的效果。

本研究的主要贡献在于,我们提出了一种全新的电影推荐方法,该方法不仅考虑了用户的历史行为数据和电影的元数据,还引入了用户之间的协作关系,从而更加准确地捕捉到用户的观影喜好。此外,我们还深入研究了用户兴趣模型,通过分析用户的观影历史和行为,更加深入地理解用户的观影喜好,从而提供更加个性化的电影推荐。同时,我们还优化了算法和数据处理流程,提高了系统的实时响应能力,确保用户能够及时获得推荐结果。

大家可以帮忙点赞、收藏、关注、评论啦 👇🏻👇🏻👇🏻

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值