1963Springboot个性化音乐推荐管理系统idea开发mysql数据库web结构java编程计算机网页源码maven项目
博主介绍:专注于Java .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟
我的博客空间发布了1000+毕设题目 方便大家学习使用
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人🍅文末获取源码联系🍅
本个性化音乐推荐平台的开发利用Idea作为本系统的开发工具,MySQL数据库作为开发的数据库系统页面展现jsp技术展现,采用框架springboot做为开发主要框架。系统分为前台和后台功能,前台主要是用户进行业务操作,后台管理功能,主要是管理员。后台主要主要分为用户管理、标签管理、音乐分类管理、音乐管理、浏览管理、收藏管理、帖子管理、回复管理、关联规则管理等。前台的功能主要的功能有用户注册、登录、个人信息修改、音乐浏览、音乐分类浏览、音乐推荐(采用关联规则算法结合用户访问音乐的基础数据为依据进行推荐),在线发帖、回帖等。对于音乐数据系统系统采用python对相关网页音乐(免费,非收费)进行爬取本地化存储
系统主要功能包括:管理员登录、用户管理、标签管理、音乐分类管理、音乐管理、浏览管理、收藏管理、帖子管理、回复管理、关联规则管理、个人信息。系统中管理员主要是为了安全有效地储存和管理各类信息,并且对后台有相应的操作权限。
- 系统功能
前台主要功能:
- 用户注册、登录,登录时选择当天的心情。记录到session值方便系统根据心情推荐音乐
- 音乐分类浏览
- 访问音乐详情时,系统根据关联规则算法推荐音乐信息,同时记录用户浏览记录,收藏音乐信息等
- 查看浏览音乐记录信息,收藏音乐信息
- 发帖,回帖等基础功能
- 在线播放音乐收听
- 个人信息修改
后台主要功能:
(1)人员信息:对人员信息进行维护。
(2)标签信息:对标签信息进行增加、列表展现、修改、删除等。
(3)分类信息:对音乐分类信息进行增加、列表展现、修改、删除等。
(4)音乐信息管理:对音乐信息进行增加、列表展现、修改、删除等。
(5)浏览信息管理:对音乐浏览信息进行列表展现、删除等。
(6)收藏信息管理:对音乐收藏信息进行列表展现、删除等。
(7)帖子信息管理:对帖子信息进行列表展现、删除等。
(8)帖子回复信息管理:对帖子回复信息进行列表展现、删除等。
(9)关联规则信息管理:对关联规则配置维护。
(10)个人信息修改
Python爬取音乐网站
- 通过pycharm平台利用python爬取固定的音乐(可爬取)信息展示列表
- 爬取每个音乐信息把对应基本信息存入到数据库中,同时文件存储到磁盘
- 对于同名文件系统去重防止存入同名文件造成数据冗余
顶层数据流图分析
主要包括两个角色,用户和管理员进行相关业务操作,如图所示:
-
通过一层数据流图分析,用户和管理员对应操作的数据流关系,如图所示:
-
系统主要包括11个大类模块,包含管管理员信息类,用户信息类,公告信息类,标签信息类,分类信息类,音乐信息类,浏览信息类,收藏信息类,帖子信息类,回复信息类,关联规则信息类等,具体如图所示:
-
个性化音乐推荐平台主要实现音乐信息的一体化信息管理,涉及到了管理员实体,用户实体,公告实体,标签实体,分类实体,音乐实体,浏览实体,收藏实体,帖子实体,回复实体,关联规则实体等多个实体。下面简单介绍几个关键的实体E-R图。
(1)个性化音乐推荐平台的E-R图,见图4-2。
5.2.1 系统首页界面
访问音乐首页面如图5-1所示:
-
图5-1 系统首页登陆界面5.2.2 查看歌曲模块
查看歌曲界面,首先展现歌曲信息,同时根据个性化推荐音乐。系统采用两种模式综合设计推荐音乐功能,登录系统的时候的用户不仅仅输入用户名和密码,同时让用户选择现在的心情,心情属于标签中维护的内容,每个音乐都有一个标签属性,就是对应的心情。当系统关联规则推荐算法的数据采集不够,或者计算不出来数据的情况下,用户访问一个音乐的时候,系统根据用户登录的时候选择心情,随机推荐这个心情下的一个音乐。
当系统用户 登录后访问每个音乐信息的时,系统记录用户访问音乐日志信息,这个也是关联规则算法的计算的基础数据依据。当用户访问一个音乐信息的时候,系统通过关联规则算法结果表读取,通过后台计算用户访问音乐的行为数据信息,得到推荐出最有可能访问其他音乐信息,然后推荐出来。如图5-2所示。
图5-2 歌曲信息界面
系统采用关联规则算法,基于用户浏览数据进行计算,如图所示:
核心算法代码:
sc.forEach(set->{
List<Set<String>> subset = nonEmptySubset(set);
int y=support(set,data);
double support = 1.0*y/data.size();
subset.forEach(sub->{
int x=support(sub,data);
HashSet<String> target = new HashSet<String>(set);
target.removeAll(sub);
double conf = 1.0*y/x;
System.out.println(set+"\t"+sub+"-->"+target+
"\t"+y+"/"+x+"("+String.format("%.2f", conf)+")\t"+
y+"/"+data.size()+"("+String.format("%.2f", support)+
")\t"+(conf>this.confidence));
Map mp=new HashMap();
System.out.println("id="+id);
String targeta=this.makeString(String.valueOf(target)).trim();
System.out.println("String.valueOf(sub).trim()=="+targeta);
if(!id.equals("")) {
if (id.equals(targeta)) {
System.out.println("ok in ");
mp.put("sub", this.makeString(String.valueOf(sub)));
mp.put("target", this.makeString(String.valueOf(target)));
mp.put("conf", String.format("%.2f", conf));
mp.put("support", String.format("%.2f", support));
list.add(mp);
}
}
// }else{
// mp.put("sub", this.makeString(String.valueOf(sub)));
// mp.put("target", this.makeString(String.valueOf(target)));
// mp.put("conf", String.format("%.2f", conf));
// mp.put("support", String.format("%.2f", support));
//
// }
});
});
return list;
}
//计算频繁项目集的支持度
public Integer support(Set<String> set,List<Set<String>> data){
return (int) data.stream()
.filter(d->d.containsAll(set))
.count();
}
//生成候选项集
//安算法来讲应该是将候选项集按一定规则排序 将两个集合只有最后一个元素不同的合并
//个人理解:
//对任意频繁集A B属于S 若 C = A 并 B 是频繁的 则 D=C- (A 交 B) 也是频繁的
public List<Set<String>> candidateSet(List<Set<String>> list) {//候选项集
List<Set<String>> candidate=new ArrayList<Set<String>>();
for(int i=0;i<list.size();i++) {
for(int j=i+1;j<list.size();j++) {
Set<String> item = list.get(i);
Set<String> compare = list.get(j);
if(item.size()==1){
Set<String> unionn=new HashSet<String>(item);
unionn.addAll(compare);
candidate.add(unionn);
}else{
Set<String> intersection=new HashSet<String>(item);
intersection.retainAll(compare);
if(!intersection.isEmpty()) {
Set<String> unionn=new HashSet<String>(item);
unionn.addAll(compare);
Set<String> difference =new HashSet<String>(unionn);
difference.removeAll(intersection);
if(allFrequentSet.contains(difference)) {
candidate.add(unionn);
}
}
}
}
}
candidate = candidate.stream().distinct().collect(Collectors.toList());
return candidate;
}
//扫描满足最小支持度的频繁项目集
public List<Set<String>> scan(Map<Set<String>, Integer> frequent,double minSupport) {
List<Set<String>> list=new ArrayList<Set<String>>();
for(Set<String> key :frequent.keySet()) {
if(frequent.get(key)>=minSupport*data.size()) {
list.add(key);
allFrequentSet.add(key);
}
}
return list;
}
5.2.3 公告管理模块
点击公告管理菜单,显示添加公告信息和公告信息列表界面,点击添加公告信息,右侧界面呈现出添加的公告信息界面,包括公告公告编号,标题,内容,发布时间等信息,添加公告信息完毕点击“提交”按钮,则添加公告信息成功。点击“公告列表”,右侧界面呈现出需要公告的具体信息,包括公告编号,标题,内容,发布时间等信息,可对逐条公告信息进行查看、删除和修改,如图5-3所示。
图5-3 公告管理界面
-
大家点赞、收藏、关注、评论啦 ,需要源码 其他的定制服务 下方联系卡片↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 或者私信作者
相关文章:

1963Springboot个性化音乐推荐管理系统idea开发mysql数据库web结构java编程计算机网页源码maven项目
博主介绍:专注于Java .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用 感兴趣的可以…...

solidity从入门到精通(持续更新)
我一度觉得自己不知何时变成了一个浮躁的人,一度不想受外界干扰的我被干扰了,再无法平静的去看一本书,但我仍旧希望我能够克服这些,压抑着自己直到所有的冲动和奇怪的思想都无法再左右我行动。 自律会让你更加自律,放纵…...

UEFI入门(二):edk2项目编译流程
UEFI入门(二):edk2项目编译流程 一、编译构建流程:1. 安装依赖工具2. 初始化构建环境3. 配置工具链和目标4. 定义平台配置5. 构建并编译 二、uefi-tools编译edk2实践:1. 克隆EDK2 项目2. 构建并编译 参考文章ÿ…...

局域网一套键鼠控制两台电脑(台式机和笔记本)
服务端(有键盘和鼠标的电脑作为服务端) 下载软件 分享文件:BarrierSetup-2.3.3.exe 链接:https://pan.xunlei.com/s/VO66rAZkzxTxVm-0QRCJ33mMA1?pwd4jde# 配置服务端 一, 二, 客户端屏幕名称一定要和…...

最新Nessus2024.9.8版本主机漏洞扫描/探测工具下载Windows版
Nessus号称是世界上最流行的漏洞扫描程序,全世界有超过75000个组织在使用它。该工具提供完整的电脑漏洞扫描服务,并随时更新其漏洞数据库。Nessus不同于传统的漏洞扫描软件,Nessus可同时在本机或远端上遥控,进行系统的漏洞分析扫描…...

关于使用 @iconify/vue2图标库组件的离线使用
Iconify 是最通用的图标框架,将各种图标库的图标集中在这里的一个组件库,例如ant-design,element-ui等 网站地址如下 https://iconify.design/getting-started/ 1.安装依赖 这两个包提供了图标组件和离线图标数据的支持。 npm install iconify/vue2 i…...

pdfmake生成pdf的使用
实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdf…...

PLM系统有哪些品牌推荐?国内不错的PLM厂商有哪些?
在当今快速变化的商业环境中,产品生命周期管理PLM系统已成为企业技术创新和管理创新的重要工具。PLM系统涵盖了产品从概念设计到市场推出、使用维护直至最终报废的整个生命周期,通过整合与产品相关的所有信息,助力企业实现高效、协同的产品开…...

Linux网络:网络套接字-TCP回显服务器——多进程/线程池(生产者消费者模型)
1.多进程版本 这里选择创建子进程,让子进程再创建子进程。父进程等待子进程,子进程的子进程处理业务逻辑。因为子进程是直接退出,子进程的子进程变成孤儿进程被系统管理,所以父进程在等待的时候不是阻塞等待的,所以可…...

Redis 篇-深入了解基于 Redis 实现消息队列(比较基于 List 实现消息队列、基于 PubSub 发布订阅模型之间的区别)
🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 消息队列的认识 2.0 基于 List 实现消息队列 2.1 基于 List 实现消息队列的优缺点 3.0 基于 PubSub 实现消息队列 3.1 基于 PubSub 的消息队列优缺点 4.0 基于 St…...

python 学习一张图
python学习一张图,python的特点的是学的快,一段时间不用,忘记的也快,弄一张图及一些入门案例吧。 写一个简单的测试: #!/usr/bin/python # -*- coding: UTF-8 -*- import osdef add_num(a, b):return a bif __name__…...

通过Docker部署 MongoDB 服务器
今天我们将在三丰云的免费服务器上进行 MongoDB 的部署测试。这款不错的免费服务器提供了很好的性能,1核CPU、1G内存、10G硬盘和5M带宽,足以满足我们的基本需求。三丰云的服务稳定,操作简单,真是一个值得推荐的选择,特…...

无人机避障雷达技术详解
随着无人机技术的飞速发展,其应用领域已经从最初的军事领域扩展到商业、农业、建筑巡检、应急救援、物流运输等多个领域。在这些多样化的应用场景中,无人机的安全性和稳定性显得尤为重要。无人机避障技术作为保障无人机安全飞行的核心技术之一࿰…...

2009-2023年上市公司华证esg评级评分数据(年度+季度)(含细分项)
2009-2023年上市公司华证esg评级评分数据(年度季度)(含细分项) 1、时间:2009-2023年 2、来源:整理自wind 3、指标:证券代码、年份、证券简称、评级日期、综合评级、综合得分、E评级、E得分、…...

C++ 模板进阶知识——stdenable_if
目录 C 模板进阶知识——std::enable_if1. 简介和背景基本语法使用场景 2. std::enable_if 的基本用法示例:限制函数模板只接受整数类型 3. SFINAE 和 std::enable_if示例:使用 SFINAE 进行函数重载SFINAE 的优点应用场景 4. 在类模板中使用 std::enable…...

国内外ChatGPT网站集合,无限制使用【2024-09最新】~
经过我一年多以来,使用各种AI工具的体验,我收集了一批AI工具和站点 这些工具都是使用的最强最主流的模型,也都在各个领域里都独领风骚的产品。 而且,这些工具你都可以无限制地使用。 无论你是打工人、科研工作者、学生、文案写…...

如何在VUE3中使用函数式组件
在Vue 3中,函数式组件的概念与Vue 2相似,但实现方式有所不同。函数式组件是一种无状态、无实例的组件,它们只根据传入的props和context来渲染输出。在Vue 3中,你可以通过定义一个函数并返回一个渲染函数来使用函数式组件。但是&am…...

linux访问外网的设置
Ubuntu | LUCKFOX WIKI 开发板配置 添加路由信息 sudo route add default gw 172.32.0.100添加 DNS servers 打开文件 sudo vi /etc/resolv.conf添加以下内容: nameserver 8.8.8.8联网测试 ping www.baidu.com开机自动配置 路由信息和 DNS servers 重启后会被清除,我们创建…...

PHP轻松创建高效收集问卷调查小程序系统源码
轻松创建,高效收集 —— 问卷调查小程序,你的调研神器! 一、告别繁琐,一键开启调研之旅 还在为设计问卷、收集数据而头疼不已吗?现在,有了“问卷调查小程序”,一切都变得轻松简单!无…...

Redis面试必问:Redis为什么快?Redis五大基本数据类型
请记住胡广一句话,所有的中间件所有的框架都是建立在基础之上,数据结构,计算机网络,计算机原理大伙一定得看透!!~ 1. Redis快的秘密 相信大部分Redis初学者都会忽略掉一个重要的知识点,Redis…...

InternVL2- dockerfile环境变量持久化使用`ENV`而不是`RUN export`来设置环境变量,以确保环境变量在容器运行时仍然可用
在Dockerfile中使用RUN export命令设置环境变量并不是一种持久化的方式。当你在Dockerfile中使用export命令时,它只会在当前构建阶段生效,并不会被持久化到生成的镜像中。这是因为export命令实际上是在shell环境中设置环境变量,而Docker构建过…...

Python(PyTorch和TensorFlow)图像分割卷积网络导图(生物医学)
🎯要点 语义分割图像三层分割椭圆图像脑肿瘤图像分割动物图像分割皮肤病变分割多模态医学图像多尺度特征生物医学肖像多类和医学分割通用图像分割模板腹部胰腺图像分割分类注意力网络病灶边界分割气胸图像分割 Python生物医学图像卷积网络 该网络由收缩路径和扩…...

DevOps实现CI/CD实战(七)- Jenkins集成k8s实现自动化CI
自动化CI操作 1. 安装gitlab plugin 工具 ##### 2. 配置流水线任务的构建触发器,复制URL:http://192.168.201.111:8080/project/pipeline 3. Gitlab配置Webhooks,将上面的url:http://192.168.201.111:8080/project/pipeline粘…...

从ES6到ES2023 带你深入了解什么是ES
从ES6到ES2023,我们深入探索ECMAScript(简称ES)的演变与发展,了解这一JavaScript标准背后的技术革新和进步。ECMAScript作为JavaScript的标准化版本,每年都在不断推出新版本,为开发者带来更加丰富和强大的功…...

openVX加速-常见问题:适用场景、AI加速、安装方式等
1. 哪些算法处理推荐使用 OpenVX OpenVX 是非常适合图像处理和计算机视觉任务的框架,特别是在需要高性能和硬件加速的场景下。如果你的前处理和后处理涉及到图像滤波、边缘检测、颜色转换等操作,使用 OpenVX 可以带来性能提升。 OpenVX 更适合处理以下…...

国产芯片LT8711HE:TYPE-C/DP1.2转HDMI2.0转换器,4k60Hz高分辨率
以下为LT8711HE芯片的简单介绍,如有介绍不尽之处,请指出 LT8711HE是一个高性能的Type-C/DP1.2到HDMI2.0转换器,用于连接USB Type-C源或DP1.2源到HDMI2.0接收器。 LT8711HE集成了一个DP1.2兼容的接收器和一个HDMI2.0兼容的发射器。另外&…...

论文翻译:arxiv-2024 Benchmark Data Contamination of Large Language Models: A Survey
Benchmark Data Contamination of Large Language Models: A Survey https://arxiv.org/abs/2406.04244 大规模语言模型的基准数据污染:一项综述 文章目录 大规模语言模型的基准数据污染:一项综述摘要1 引言 摘要 大规模语言模型(LLMs&…...

Java+Swing用户信息管理系统
JavaSwing用户信息管理系统 一、系统介绍二、功能展示1.管理员登陆2.用户信息查询3.用户信息添加4.用户信息修改5.用户信息删除 三、系统实现1.UserDao .java 四、其它1.其他系统实现 一、系统介绍 该系统实现了管理员系统登陆、用户信息查询、用户信息添加、用户信息修改、用…...

数据结构基础详解(C语言): 栈的括号匹配(实战)与栈的表达式求值特殊矩阵的压缩存储
文章目录 栈的应用1.栈的括号匹配代码实战:问题分析:2.栈的表达式求值2.1 中缀、后缀、前缀表达式2.2 中缀表达式改写为后缀表达式(手算)2.3 后缀表达式的计算(手算)2.4 中缀表达式转前缀表达式(手算)和计算前缀表达式2.5后缀表达式的计算(机算)2.6 中缀表达式转后缀…...

C# 关于多线程同步不同实现方式
栏目总目录 AutoResetEvent class MainClass {// the array of consumer threadsprivate static List<Thread> consumers new List<Thread> ();// the task queueprivate static Queue<Action> tasks new Queue<Action>();// the synchronisation o…...