基于JavaSpringMVC+vue实现协同过滤电影推荐系统详细设计

博主介绍全网粉丝20W+,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星TOP100、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业设计项目实战

🍅文末获取联系🍅

精彩专栏推荐👇🏻👇🏻👇🏻👇🏻

java项目精品实战案例《100套》https://blog.csdn.net/weixin_39709134/category_11128297.html

目录

一、前言介绍:

二、系统设计:

2.1 系统设计原则:

2.2 系统结构设计:

2.3 协同过滤算法:

三、数据设计:

3.1 用户实体属性:

3.2 电影实体属性:

3.3 数据逻辑设计: 

四、功能截图: 

4.1 登录注册:

4.2 用户首页:

4.2.1 首页:

4.2.2 免费电影:

4.2.3 付费电影:

4.2.4 电影论坛:

4.2.5 电影资讯:

4.2.6 个人中心: 

4.3 用户后端:

4.3.1 个人信息:

4.3.2 电影订单:

4.4 管理员后端: 

4.4.1 用户管理:

4.4.2 电影分类:

4.4.3 免费电影:

4.4.4 付费电影:

4.4.5 电影订单:

4.4.7 电影论坛:

4.4.8 系统管理:

4.4.9 首页轮播图:

五、代码实现:

5.1 用户登录:

5.2 文件上传;

5.3 电影订单:

5.4 协同过滤算法主要实现:

六、项目总结: 

七、源码获取:


一、前言介绍:

        本次设计任务是要设计一个基于协同过滤算法的电影推荐系统,通过这个系统能够满足电影推荐的管理功能。系统的主要包括首页,个人中心,用户管理,电影分类管理,免费电影管理,付费电影管理,电影订单管理,电影论坛,系统管理等功能

        管理员可以根据系统给定的账号进行登录,登录后可以进入电影推荐系统对个性化智能电影推荐所有模块进行管理。包括查看和修改自己的个人信息以及登录密码。

        该系统为每一个用户都分配了一个用户账号,用户通过账号的登录可以在系统中查看个性化智能电影推荐信息及对个人信息进行修改等功能。

二、系统设计:

2.1 系统设计原则:

本电影推荐系统采用Java技术,Mysql数据库开发,充分保证了系统稳定性、完整性。

电影推荐系统设计与实现的设计思路如下:

1.操作简单方便,页面布局简单清晰、界面安全良好:,便于查询电影推荐系统的相关信息。

2.即时可视性:电影推荐系统的信息处理将在相应的位置即时可用,以实现“即时发布、即时生效”的系统功能。

功能完善:个人中心,用户管理,电影分类管理,免费电影管理,付费电影管理,电影订单管理,我的电影管理,电影论坛,系统管理等功能等模块的修改和维护。

2.2 系统结构设计:

        系统设计是把本系统的各项功能需求进行细化,而转换为软件系统表示的一个设计过程,在对目标系统的研究分析之后,做出整个系统平台的总体规划,进而对用例中各个对象进一步地合理精细设计。为降低整个系统的复杂度,而使其更加便于修改,提高代码的可读性,我们会将系统模块化,模块间保持相对独立,且每个模块只完成一个子功能,并且与其他模块通过简单的接口链接,即高内聚低耦合原则,而使整个系统能够拥有一个高性能的结构,这边是系统概要设计最重要的目的。在之前的需求分析的基础上,本电影推荐系统结构,如下图所示。

2.3 协同过滤算法:

        协同过滤算法是一种较为著名和常用的推荐算法,它基于对用户历史行为数据的挖掘发现用户的喜好偏向,并预测用户可能喜好的产品进行推荐。也就是常见的“猜你喜欢”,和“购买了该商品的人也喜欢”等功能。它的主要实现由:

●根据和你有共同喜好的人给你推荐

●根据你喜欢的物品给你推荐相似物品

●根据以上条件综合推荐

  因此可以得出常用的协同过滤算法分为两种,基于用户的协同过滤算法(user-based collaboratIve filtering),以及基于物品的协同过滤算法(item-based collaborative filtering)。特点可以概括为“人以类聚,物以群分”,并据此进行预测和推荐。

三、数据设计:

         在查询时,应保证所有满足条件的记录都能查到。数据库记录通常在几百条以上,如有遗漏将会对客户的统计造成影响。一般操作的响应时间应该在1-2秒内。采用菜单界面,对会员比较友好。通过E-R图来设计并展示数据的概念模型,

3.1 用户实体属性:

3.2 电影实体属性:

3.3 数据逻辑设计: 

四、功能截图: 

4.1 登录注册:

4.2 用户首页:

4.2.1 首页:

电影推荐系统,在系统首页可以查看首页,免费电影,付费电影,电影论坛,电影资讯,个人中心等内容,并进行详细操作。

4.2.2 免费电影:

免费电影,在免费电影页面可以查看电影编号,电影分类,评分,开映时间,时长,导演,主演,点击次数等信息,并进行赞一下,踩一下,点我收藏等操作

 4.2.3 付费电影:

付费电影,在免费电影页面可以查看电影编号,电影分类,评分,开映时间,时长,导演,主演,点击次数等信息,并进行赞一下,踩一下,点我收藏等操作

 查看详情!进行预览播放视频!收藏 点餐 踩等功能!收藏越多权重越高

 详情查看以及评论等操作

4.2.4 电影论坛:

 

4.2.5 电影资讯:

4.2.6 个人中心: 

个人中心,在个人中心页面通过填写用户名,姓名,密码,性别,年龄,手机号等内容进行更新信息,还可以根据需要对我的发布,我的收藏进行相对应操作

4.3 用户后端:

4.3.1 个人信息:

4.3.2 电影订单:

4.4 管理员后端:

可以对首页,个人中心,用户管理,电影分类管理,免费电影管理,付费电影管理,电影订单管理、电影论坛,系统管理等功能进行相应的操作 

4.4.1 用户管理:

用户管理,在用户管理页面可以对索引,用户名,姓名,性别,年龄,手机号等内容进行详情,修改和删除操作

4.4.2 电影分类:

4.4.3 免费电影:

免费电影管理,在免费电影管理页面可以对索引,电影编号,电影名称,视频,海报,评分,开映时间,时长,主演,导演等内容进行详情,修改,查看评论和删除操作

 

4.4.4 付费电影:

付费电影管理,在付费电影管理页面可以对索引,电影编号,电影名称,预告片,价格,海报,评分,开映时间,时长,主演,导演等内容进行详情,修改,查看评论和删除操作

4.4.5 电影订单:

电影订单管理,在电影订单管理页面可以对 索引,订单编号,电影编号,电影名称,价格,用户名,姓名,手机号,购买时间,是否支付等内容进行详情,我的电影,修改和删除等操作

4.4.7 电影论坛:

4.4.8 系统管理:

4.4.9 首页轮播图:

五、代码实现:

5.1 用户登录:

 form.on('submit(login)', function(data) {data = data.field;if (vue.roles.length!=1) {if (!data.role) {layer.msg('请选择登录用户类型', {time: 2000,icon: 5});return false;}} else {data.role = vue.roles[0].tableName;}http.request(data.role + '/login', 'get', data, function(res) {layer.msg('登录成功', {time: 2000,icon: 6});// 登录凭证localStorage.setItem('Token', res.token);var roleName = "";if(typeof(jquery('#role:checked').attr('title')) == "undefined") {roleName = vue.roles[0].roleName;} else {roleName = jquery('#role:checked').attr('title');}localStorage.setItem('role', roleName);// 当前登录用户角色localStorage.setItem('userTable', data.role);localStorage.setItem('sessionTable', data.role);// 用户名称localStorage.setItem('adminName', data.username);http.request(data.role + '/session', 'get', {}, function(res) {// 用户idlocalStorage.setItem('userid', res.data.id);if(res.data.vip) {localStorage.setItem('vip', res.data.vip);}// 路径访问设置window.location.href = '../../index.html';})});return false});

5.2 文件上传;

/*** 上传文件*/@RequestMapping("/upload")public R upload(@RequestParam("file") MultipartFile file, String type,HttpServletRequest request) throws Exception {if (file.isEmpty()) {throw new EIException("上传文件不能为空");}String fileExt = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1);String fileName = new Date().getTime()+"."+fileExt;File dest = new File(request.getSession().getServletContext().getRealPath("/upload")+"/"+fileName);file.transferTo(dest);//		FileUtils.copyFile(dest, new File("D:\\ssmpiv99\\src\\main\\webapp\\upload"+"/"+fileName)); /**修改了路径以后请将该行最前面的//注释去掉**/if(StringUtils.isNotBlank(type) && type.equals("1")) {ConfigEntity configEntity = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "faceFile"));if(configEntity==null) {configEntity = new ConfigEntity();configEntity.setName("faceFile");configEntity.setValue(fileName);} else {configEntity.setValue(fileName);}configService.insertOrUpdate(configEntity);}return R.ok().put("file", fileName);}

5.3 电影订单:

/*** 电影订单* 后端接口* @author * @email * @date 2022-08-06 21:42:07*/
@RestController
@RequestMapping("/dianyingdingdan")
public class DianyingdingdanController {@Autowiredprivate DianyingdingdanService dianyingdingdanService;/*** 前端列表*/@RequestMapping("/list")public R list(@RequestParam Map<String, Object> params,DianyingdingdanEntity dianyingdingdan, HttpServletRequest request){EntityWrapper<DianyingdingdanEntity> ew = new EntityWrapper<DianyingdingdanEntity>();PageUtils page = dianyingdingdanService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, dianyingdingdan), params), params));return R.ok().put("data", page);}/*** 列表*/@RequestMapping("/lists")public R list( DianyingdingdanEntity dianyingdingdan){EntityWrapper<DianyingdingdanEntity> ew = new EntityWrapper<DianyingdingdanEntity>();ew.allEq(MPUtil.allEQMapPre( dianyingdingdan, "dianyingdingdan")); return R.ok().put("data", dianyingdingdanService.selectListView(ew));}/*** 查询*/@RequestMapping("/query")public R query(DianyingdingdanEntity dianyingdingdan){EntityWrapper< DianyingdingdanEntity> ew = new EntityWrapper< DianyingdingdanEntity>();ew.allEq(MPUtil.allEQMapPre( dianyingdingdan, "dianyingdingdan")); DianyingdingdanView dianyingdingdanView =  dianyingdingdanService.selectView(ew);return R.ok("查询电影订单成功").put("data", dianyingdingdanView);}/*** 前端详情*/@RequestMapping("/detail/{id}")public R detail(@PathVariable("id") Long id){DianyingdingdanEntity dianyingdingdan = dianyingdingdanService.selectById(id);return R.ok().put("data", dianyingdingdan);}/*** 前端保存*/@RequestMapping("/add")public R add(@RequestBody DianyingdingdanEntity dianyingdingdan, HttpServletRequest request){dianyingdingdan.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());//ValidatorUtils.validateEntity(dianyingdingdan);dianyingdingdanService.insert(dianyingdingdan);return R.ok();}/*** 修改*/@RequestMapping("/update")public R update(@RequestBody DianyingdingdanEntity dianyingdingdan, HttpServletRequest request){//ValidatorUtils.validateEntity(dianyingdingdan);dianyingdingdanService.updateById(dianyingdingdan);//全部更新return R.ok();}/*** 删除*/@RequestMapping("/delete")public R delete(@RequestBody Long[] ids){dianyingdingdanService.deleteBatchIds(Arrays.asList(ids));return R.ok();}}

5.4 协同过滤算法主要实现:

 /*** 协同算法(按收藏推荐)*/@RequestMapping("/autoSort")public R autoSort2(@RequestParam Map<String, Object> params,MianfeidianyingEntity mianfeidianying, HttpServletRequest request){String userId = request.getSession().getAttribute("userId").toString();String inteltypeColumn = "dianyingfenlei";List<StoreupEntity> storeups = storeupService.selectList(new EntityWrapper<StoreupEntity>().eq("type", 1).eq("userid", userId).eq("tablename", "mianfeidianying").orderBy("addtime", false));List<String> inteltypes = new ArrayList<String>();Integer limit = params.get("limit")==null?10:Integer.parseInt(params.get("limit").toString());List<MianfeidianyingEntity> mianfeidianyingList = new ArrayList<MianfeidianyingEntity>();//去重if(storeups!=null && storeups.size()>0) {for(StoreupEntity s : storeups) {mianfeidianyingList.addAll(mianfeidianyingService.selectList(new EntityWrapper<MianfeidianyingEntity>().eq(inteltypeColumn, s.getInteltype())));}}EntityWrapper<MianfeidianyingEntity> ew = new EntityWrapper<MianfeidianyingEntity>();params.put("sort", "id");params.put("order", "desc");PageUtils page = mianfeidianyingService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, mianfeidianying), params), params));List<MianfeidianyingEntity> pageList = (List<MianfeidianyingEntity>)page.getList();if(mianfeidianyingList.size()<limit) {int toAddNum = (limit-mianfeidianyingList.size())<=pageList.size()?(limit-mianfeidianyingList.size()):pageList.size();for(MianfeidianyingEntity o1 : pageList) {boolean addFlag = true;for(MianfeidianyingEntity o2 : mianfeidianyingList) {if(o1.getId().intValue()==o2.getId().intValue()) {addFlag = false;break;}}if(addFlag) {mianfeidianyingList.add(o1);if(--toAddNum==0) break;}}}page.setList(mianfeidianyingList);return R.ok().put("data", page);}

六、项目总结: 

        历经六个月左右的时间,本次的毕业设计已画上了句号。原本以为完成一个系统会很顺利,因为在之前课上,也曾动手操作过相关的模块编写,但当真正接触到一个完整的系统时,发现并没有想象地那么简单。首先,以前实践过的只是单独的模块,而这次,是一个庞大的系统,许多细节不容忽视,有时候稍不留意的一个小错误,会致使整个系统都运行不起来,而查找错误的过程又漫长且艰辛,这也正是经验不足所导致的。在整个系统开发过程中,也查阅了很多书籍和相关资料,这让我不但巩固了原本的知识,同时还学习到了一些新的知识,这让我受益匪浅。

        此次系统从整体看来,已基本达到预期的设计目的,能够实现基本的功能,但相较于市场的一些优秀网站而言,还是有许多不足的地方。遗憾的是,由于时间的有限,已经不允许再投入更多的时间和精力进行研究开发。相信在以后的工作中,我会接触到更多相关的知识,会更丰富自身的经验,我希望到时能够在此基础上完成一个丰富完整的学习网站,这将对我有很大的意义。

        通过这次的毕业设计,我学到了很多,除了学识方面的知识,在态度上也有了很大的转变,细心和耐心是整个开发过程中最重要的两件事。我也在跟随着系统的完善而成长,这次毕业设计考核地也不单单是所学的知识,也同样在衡量着面对困难时的态度。

七、源码联系:

大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻获取联系方式👇🏻👇🏻👇🏻

打卡 文章 更新 308/  365天

 精彩专栏推荐订阅下方专栏👇🏻👇🏻👇🏻👇🏻

java项目精品实战案例《100套》https://blog.csdn.net/weixin_39709134/category_11128297.html

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

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

相关文章

Java开源专业计算引擎:跑批真的这么难吗?

业务系统产生的明细数据通常要经过加工处理&#xff0c;按照一定逻辑计算成需要的结果&#xff0c;用以支持企业的经营活动。这类数据加工任务一般会有很多个&#xff0c;需要批量完成计算&#xff0c;在银行和保险行业常常被称为跑批&#xff0c;其它像石油、电力等行业也经常…

8a 中断 传感器采集_加速度传感器的安装,你get了吗

加速度传感器的安装方法不同&#xff0c;对频响曲线的影响也有差异。加速度传感器的固有频率是否发生变化&#xff0c;取决于使用的安装方法(手持、磁铁、胶水、螺栓等)。从表1可知&#xff0c;用螺栓安装在打磨良好的干净平面上时&#xff0c;频响最高&#xff0c;胶水和磁铁的…

基于Java+SpringBoot+vue+elementui农产品物流系统详细设计实现

博主介绍&#xff1a;✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星TOP100、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业设计项目实战✌ &#x1f345;文末获取联系&#x1f345; 精彩专栏推荐&#x1f447;&a…

评估指标_机器学习评估方法与评估指标总结

离线评估方法离线评估的基本原理是在离线环境中&#xff0c;将数据集划分为“训练集”和“测试集”&#xff0c;用“训练集”训练模型&#xff0c;用“测试集”评估模型&#xff0c;根据数据集划分方法的不同&#xff0c;离线评估可以分为以下3种。Holdout检验Holdout检验是基础…

猿创征文|基于Java+SpringBoot+vue学生学习平台详细设计实现

博主介绍&#xff1a;✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业设计项目实战✌ &#x1f345;文末获取联系&#x1f345; 精彩专栏推荐&#x1f447;&#x1…

搞 AI 建模预测都在用 Python,其实入门用 SPL 也不错

可用来做人工智能建模预测的工具非常多&#xff0c;比如Python, R, SAS&#xff0c;SPSS等&#xff0c;其中Python由于简单易学、丰富的数据科学库、开源免费等特点备受欢迎。但是对于不太熟悉数据建模算法的程序员来说&#xff0c;使用Python建模还是比较复杂&#xff0c;很多…

win10 联想键盘快捷键关闭_这些Win10键盘快捷键你必须掌握,系统高手必备技能...

随着微软即将对win7停止支持以及官方对win10的大力推广&#xff0c;win10的用户越来越多&#xff0c;大家对它的大部分功能都慢慢熟悉了&#xff0c;如果你还只是会用ctrlc和ctrlv&#xff0c;那就说明你out了。我们会发现真正的高手都是用快捷键操作&#xff0c;用快捷键可以大…

ols残差_涨知识丨OLS原理的矩阵方法很难?Just So So

对计量经济学初学者而言&#xff0c;OLS原理的矩阵表示通常令人“发怵”。其原因主要在于&#xff0c;至少在财经类课程体系中&#xff0c;关于矩阵微分的先行课程是缺失的。鉴于计量经济学的进阶课程大多采用矩阵语言&#xff0c;笔者认为有必要专文论述如何“搞掂”关于OLS原…

asr语音转写_搜狗智能录音笔C1正式上市 语音转文字准确率达95%

中新网3月19日电 3月18日&#xff0c;搜狗旗下全新智能硬件——搜狗智能录音笔C1在搜狗商城、京东等平台正式发售。在当天的产品沟通会上&#xff0c;搜狗公司CTO杨洪涛表示&#xff0c;搜狗智能录音笔C1集成了搜狗的核心AI技术&#xff0c;能够有效提高用户的工作和生活效率。…

730阵列卡支持多大硬盘_华为1000多手机哪款好?推荐只此一款!华为品牌性价比最高千元机...

自荣耀品牌独立运营之后&#xff0c;华为品牌就主攻高端机型&#xff0c;其低端机型均交给荣耀品牌来运营。其实&#xff0c;华为品牌中端机型中&#xff0c;还是有几款性价比表现极为不俗的&#xff0c;比如中端性价比最高机型——华为nova 5Z&#xff0c;华为nova 5Z性价比直…

jsp 中div居中_让div在屏幕中居中(水平居中+垂直居中)

html代码<div class"main"><h1>测试</h1></div>方法一&#xff1a;div使用绝对布局&#xff0c;设置margin:auto,并设置top、left、right、bottom的值相等即可&#xff0c;不一定要都是0。方法二&#xff1a;绝对布局&#xff0c;用margin来…

使用eolink优雅地进行API接口管理

为什么使用eolink? 我们都知道在一个项目团队中是由很多角色组成的&#xff0c;例如&#xff1a;业务>产品>设计>前端>后端>测试等。每个角色各司其职&#xff0c;一起合作完成项目的生命周期。而前端与后端的沟通则是主要通过接口来实现&#xff0c;通过接口…

没有icon_ICON设计干货来啦~

​ICON设计是UI设计中非常重要的一个环节&#xff0c;它能够帮助我们美化画面&#xff0c;传递情绪&#xff0c;快速导航&#xff0c;而且不受语言限制&#xff0c;那今天就来给大家分享下ICON的设计干货。首先图标可以分为3大类&#xff1a;功能性图标 , 应用图标 , 创意图标。…

基于JavaSpringBoot+Vue+uniapp微信小程序实现校园宿舍管理系统

博主介绍&#xff1a;✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取联系&#x1f345;精彩专栏推荐订阅&#x1f447;&#x1f…

实战 es6_腾讯云 Elasticsearch 实战篇(二十二) ES6.8权限使用配置

前言|在前面的章节中我们讲了开源架构ELK、腾讯云Elasticsearch产品系列。我们也知道了&#xff0c;在构建腾讯云ES集群的时候&#xff0c;我们选择的6.8.2白金版具备充分的安全的机制来保证数据和访问的安全。那么&#xff0c;它到底是如何实现的呢&#xff1f;我们今天就来简…

基于Java+Springboot+Vue+elememt社区疫情返乡管控系统设计实现

博主介绍&#xff1a;✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取联系&#x1f345;精彩专栏推荐订阅收藏&#x1f447;&…

策略 python_Python版商品期货多品种均线策略

完全移植自「CTP商品期货多品种均线策略」&#xff0c;由于Python版本商品期货策略还没有一个多品种的策略&#xff0c;所以就移植了JavaScript版本的「CTP商品期货多品种均线策略」。提供一些Python商品期货多品种策略的设计思路、例子。不论JavaScript版本还是Python版本&…

mc用云服务器搭建_最全的云服务器架设我的世界私服教程,不看后悔哦!

我们将通过一个一步步的讲述通过新睿云的云服务器来向你展示如何搭建一个“我的世界(Minecraft)”服务器端。这是一个可以多人在线的游戏&#xff0c;能让您体会到极致的游戏乐趣。我们的建议是不要使用个人电脑&#xff0c;即使从技术角度来说你能做到&#xff0c;但个人电脑不…

基于Java+SpringBoot+vue等疫情期间在线网课管理系统详细设计实现

博主介绍&#xff1a;✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取联系&#x1f345;精彩专栏推荐订阅收藏&#x1f447;&…

智能家居中语音识别算法研究_语音识别研究获进展

中国科学院自动化研究所智能交互团队在环境鲁棒性、轻量级建模、自适应能力以及端到端处理等几个方面进行持续攻关&#xff0c;在语音识别方面获新进展&#xff0c;相关成果将在全球语音学术会议INTERSPEECH2019发表。现有端到端语音识别系统难以有效利用外部文本语料中的语言学…