计算机毕业设计-基于SSM的音乐推荐管理系统

news/2024/5/6 16:43:01/文章来源:https://blog.csdn.net/weixin_52721608/article/details/127160502

项目摘要

中国风音乐推介网站近年来已成为风靡全球的新兴艺术形式。国内涌现出了大批优秀、有才华的爱好者和许多经久不衰的经典作品。中国风音乐推介网站的兴起打破了音乐界格局,也突破了原有分类唱法发展中的瓶颈,为声乐艺术的发展开辟了新篇章。这种新兴的演唱风格是声乐艺术家们对原有演唱方法的秉承及对独特的演唱风格不间断的追求和创新,满足了当代大众多元化的审美标准,也符合声乐艺术发展的规律。近年来,音乐推介网站在国内得到了长足的发展,但与欧美国家的发展水平相比,在市场运营、人才培养等多个方面仍有较大差距。音乐推介网站在中国如何能健康、快速的发展,需要我们持续不懈的为之探索。
具体在系统设计上,采用了B/S的结构,同时,也使用SSM技术在动态页面上进行了设计,后台上采用java语言Mysql数据库,是一个非常优秀的中国风音乐推介网站。

系统开发技术

Java语言

Java主要采用CORBA技术和安全模型,可以在互联网应用的数据保护。它还提供了对EJB(Enterprise JavaBeans)的全面支持,java servlet API,Java(java server pages),和XML技术。Java是一种计算机编程语言,具有封装、继承和多态性三个主要特性,广泛应用于快递员Web应用程序开发和移动应用程序开发。Java语言和一般编译器以及直译的区别在于,Java首先将源代码转换为字节码,然后将其转换为JVM的可执行文件,JVM可以在各种不同的JVM上运行。因此,实现了它的跨平台特性。虽然这使得Java在早期非常缓慢,但是随着Java的开发,它已经得到了改进。

SSM框架

1.Spring的优势:
通过Spring的IOC特性,将对象之间的依赖关系交给了Spring控制,方便解耦,简化了开发。
2.Spring MVC的优势:
SpringMVC是使用了MVC设计思想的轻量级web框架,对web层进行解耦,使我们的开发更简洁。
3.Mybatis的优势:
数据库的操作(sql)采用xml文件配置,解除了sql和代码的耦合,提供映射标签,支持对象和和数据库orm字段关系的映射,支持对象关系映射标签,支持对象关系的组建提供了xml标签,支持动态的sql。

Tomcat服务器

Tomcat属于一种轻型的服务器,所以说在中小快递员中并不具有普适性。但是当程序员需要开发或调试Java 程序时,则通常会将该服务器作为首选。对于一个仅具有计算机基础知识的人来说,计算机系统具有一个好的Apache服务器,可以很好的对HTML 页面进行访问。Tomcat 虽然是Apache的扩展,但是它们都是可以独立运行的,二者是不互相干扰的。当配置正确的时候,Apache服务器为HTML 页面的运行提供技术支持,Tomcat 的任务则是运行Servle和Java 页面。Tomca也具有一定的HTML页面处理功能。

MySQL数据库

Mysql的语言是非结构化的,快递员、学生可以在数据上进行工作。MySQL因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。并且因为Mysql的语言和结构比较简单,但是功能和存储信息量很强大,所以得到了普遍的应用。
Mysql数据库在编程过程中的作用是很广泛的,为快递员、学生进行数据查询带来了方便。Mysql数据库的应用因其灵活性强,功能强大,所以在实现某功能时只需要一小段代码,而不像其他程序需要编写大段代码。总体来说,Mysql数据库的语言相对要简洁很多。
数据流程分析主要就是数据存储的储藏室,它是在计算机上进行的,而不是现实中的储藏室。数据的存放是按固定格式,而不是无序的,其定义就是:长期有固定格式,可以共享的存储在计算机存储器上。数据库管理主要是数据存储、修改和增加以及数据表的建立。为了保证系统数据的正常运行,一些有能力的处理者可以进行管理而不需要专业的人来处理。数据表的建立,可以对数据表中的数据进行调整,数据的重新组合及重新构造,保证数据的安全性。介于数据库的功能强大等特点,本系统的开发主要应用了Mysql进行对数据的管理。

B/S结构

BROWSER/SERVER程序架构方式是使用电脑中安装的各种浏览器来进行访问和使用的,相比C/S的程序结构不需要进行程序的安装就可以直接使用。BROWSER/SERVER架构的运行方式是在远程的服务器上进行安装一个,然后在任何接入互联网的电脑上访问和使用。BROWSER/SERVER架构的开发方式给用户带来了极大的便利,在任何时间和地点都可以使用开发的程序系统。
在B/S的结构中,用户可以在任何可以上网的地方访问和使用系统网站的功能,没有地域和时间等方面的限制,B/S结构是把程序完整放置到计算机网络的服务器上,通过计算机互联网给用户提供远程的网络服务。在三层体系结构的B/S系统中,通过浏览器,会员可以对很多服务器发出请求, B/S系统会很大程度的降低工作量,用户只需要安装运行较少的客户端即可,大量的工作将由服务器承担,另外,服务器也完成包括访问数据库,执行应用程序的工作等等。
B/S结构主要有三层,分别为数据层、控制逻辑层和视图层。用户通过视图层,让控制层调用数据层的数据,从而达到整个访问过程。三层相互独立,维护方便,使用安全,三层有互相调用,提高效率。

系统分析

系统流程分析

系统登录流程图,如图所示:
在这里插入图片描述
添加信息流程图,如图所示:
在这里插入图片描述
删除信息流程图,如图所示:
在这里插入图片描述

功能截图

用户前后台功能实现

注册用户通过注册窗口,进行在线填写自己的用户名、密码、姓名、性别、头像、身份证、手机等信息编辑完成后核对信息无误后进行选择注册,系统核对用户所输入的账号信息是否准确,核对信息准确无误后系统进入登陆界面。用户通过登录进入到系统操作界面后
注册页如下
在这里插入图片描述
登录页如下
在这里插入图片描述
用户登录进入到网站界面,可以进行查看首页、歌曲信息、戏曲信息、MV专区、付费音乐、论坛信息 、我的、客服等功能模块,进行相对应操作,通过个人中心进行查看个人信息、信息修改,删除进行查看操作
在这里插入图片描述
用户通过点击歌曲信息可以进行查看歌名、类型、乐器类型、歌手、专辑、封面、歌词、发布时间、试听、时间等信息,进行查看等操作,如图。用户点击戏曲信息页面,可以进行查看戏曲信息等内容
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
付费音乐,用户通过查看付费音乐信息可以进行购买等信息
在这里插入图片描述
个人中心,用户通过点击个人中心可以进行用户名、密码、姓名、性别、头像、身份证、手机等信息进行添加、删除、修改等等操作
在这里插入图片描述
订单信息管理,对于已经登录的用户可以对购物车内容进行付款生成订单,可以为自己的订单进行付款或者查看支付
在这里插入图片描述
在这里插入图片描述
在收藏管理页面可以查看 收藏ID 表名 收藏名称、收藏图片等等内容,并进行删除或查看等操作
在这里插入图片描述

管理员功能模块

管理员通过后台登录窗口进行输入自己的账号信息、密码、角色等信息,进行登录
在这里插入图片描述
管理员对个人中心进行操作填写原密码、新密码、确认密码并进行添加、删除、修改以及查看
在这里插入图片描述
用户信息,管理员通过用户信息可以在线查看用户名、密码、姓名、性别、头像、身份证、手机等信息,进行详情或修改、删除操作
在这里插入图片描述
歌曲信息管理,管理员通过歌曲信息管理可以在线查看歌名、类型、乐器类型、歌手、专辑、封面、歌词、发布时间、试听、时间、操作等信息,进行查看或添加、修改、删除操作
在这里插入图片描述
MV专区管理,管理员通过MV专区管理可以在线查看MV名称、歌手、作词、作曲、封面、视频、简术、发表日期、操作等信息,进行查看或添加、修改、删除操作
在这里插入图片描述
管理员通过系统管理页面查看轮播图/客服管理等进行上传图片进行添加、删除、修改以及查看并对整个系统进行维护等操作
在这里插入图片描述

相关代码

数据库配置

# Tomcat
server:tomcat:uri-encoding: UTF-8port: 8080servlet:context-path: /springbootr1tjfspring:datasource:driverClassName: com.mysql.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/springbootr1tjf?useUnicode=true&characterEncoding=utf-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8username: rootpassword: 123456#        driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
#        url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=springbootr1tjf
#        username: sa
#        password: 123456servlet:multipart:max-file-size: 10MBmax-request-size: 10MBresources:static-locations: classpath:static/,file:static/#mybatis
mybatis-plus:mapper-locations: classpath*:mapper/*.xml#实体扫描,多个package用逗号或者分号分隔typeAliasesPackage: com.entityglobal-config:#主键类型  0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";id-type: 1#字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"field-strategy: 2#驼峰下划线转换db-column-underline: true#刷新mapper 调试神器refresh-mapper: true#逻辑删除配置logic-delete-value: -1logic-not-delete-value: 0#自定义SQL注入器sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjectorconfiguration:map-underscore-to-camel-case: truecache-enabled: falsecall-setters-on-nulls: true#springboot 项目mybatis plus 设置 jdbcTypeForNull (oracle数据库需配置JdbcType.NULL, 默认是Other)jdbc-type-for-null: 'null' 

控制层(controller)

package com.controller;import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;import javax.servlet.http.HttpServletRequest;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.TokenEntity;
import com.entity.UserEntity;
import com.service.TokenService;
import com.service.UserService;
import com.utils.CommonUtil;
import com.utils.MPUtil;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.ValidatorUtils;/*** 登录相关*/
@RequestMapping("users")
@RestController
public class UserController{@Autowiredprivate UserService userService;@Autowiredprivate TokenService tokenService;/*** 登录*/@IgnoreAuth@PostMapping(value = "/login")public R login(String username, String password, String captcha, HttpServletRequest request) {UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));if(user==null || !user.getPassword().equals(password)) {return R.error("账号或密码不正确");}String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());return R.ok().put("token", token);}/*** 注册*/@IgnoreAuth@PostMapping(value = "/register")public R register(@RequestBody UserEntity user){
//    	ValidatorUtils.validateEntity(user);if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {return R.error("用户已存在");}userService.insert(user);return R.ok();}/*** 退出*/@GetMapping(value = "logout")public R logout(HttpServletRequest request) {request.getSession().invalidate();return R.ok("退出成功");}/*** 密码重置*/@IgnoreAuth@RequestMapping(value = "/resetPass")public R resetPass(String username, HttpServletRequest request){UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));if(user==null) {return R.error("账号不存在");}user.setPassword("123456");userService.update(user,null);return R.ok("密码已重置为:123456");}/*** 列表*/@RequestMapping("/page")public R page(@RequestParam Map<String, Object> params,UserEntity user){EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));return R.ok().put("data", page);}/*** 列表*/@RequestMapping("/list")public R list( UserEntity user){EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();ew.allEq(MPUtil.allEQMapPre( user, "user")); return R.ok().put("data", userService.selectListView(ew));}/*** 信息*/@RequestMapping("/info/{id}")public R info(@PathVariable("id") String id){UserEntity user = userService.selectById(id);return R.ok().put("data", user);}/*** 获取用户的session用户信息*/@RequestMapping("/session")public R getCurrUser(HttpServletRequest request){Long id = (Long)request.getSession().getAttribute("userId");UserEntity user = userService.selectById(id);return R.ok().put("data", user);}/*** 保存*/@PostMapping("/save")public R save(@RequestBody UserEntity user){
//    	ValidatorUtils.validateEntity(user);if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {return R.error("用户已存在");}userService.insert(user);return R.ok();}/*** 修改*/@RequestMapping("/update")public R update(@RequestBody UserEntity user){
//        ValidatorUtils.validateEntity(user);UserEntity u = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername()));if(u!=null && u.getId()!=user.getId() && u.getUsername().equals(user.getUsername())) {return R.error("用户名已存在。");}userService.updateById(user);//全部更新return R.ok();}/*** 删除*/@RequestMapping("/delete")public R delete(@RequestBody Long[] ids){userService.deleteBatchIds(Arrays.asList(ids));return R.ok();}
}

业务层(Service)


package com.service;import java.util.List;
import java.util.Map;import org.apache.ibatis.annotations.Param;import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.service.IService;
import com.entity.UserEntity;
import com.utils.PageUtils;/*** 系统用户*/
public interface UserService extends IService<UserEntity> {PageUtils queryPage(Map<String, Object> params);List<UserEntity> selectListView(Wrapper<UserEntity> wrapper);PageUtils queryPage(Map<String, Object> params,Wrapper<UserEntity> wrapper);}

数据访问层(Dao)

package com.dao;import java.util.List;import org.apache.ibatis.annotations.Param;import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.pagination.Pagination;
import com.entity.UserEntity;/*** 用户*/
public interface UserDao extends BaseMapper<UserEntity> {List<UserEntity> selectListView(@Param("ew") Wrapper<UserEntity> wrapper);List<UserEntity> selectListView(Pagination page,@Param("ew") Wrapper<UserEntity> wrapper);}

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

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

相关文章

【图解HTTP】Web服务器与HTTP的协作

顺心的人大抵一样&#xff0c;坎坷的人各有各的坎坷。也只能坚持自我修行&#xff0c;等待自己的机遇。 文章目录1. Web服务器与HTTP的协作1.1 单台虚拟主机实现多域名1.2 通信数据转发程序&#xff1a;代理、网关、隧道1.2.1 代理1.2.2 网关1.2.3 隧道1.3 缓存1.4 扩展&#x…

【程序语言】-- 编程语言分类和应用

系列文章目录 文章目录系列文章目录前言一、编程语言有哪些二、应用概况1.Python2.Java3.C/C4.JavaScript5.Golang6.R7.Swift8.PHP9.C#9.MATLAB总结前言 一、编程语言有哪些 JavaScriptHTML/CSSPythonSQLJavaNode.jsTypeScriptC#Bash/ShellCPHPCPowerShellGoKotlinRustRubyPe…

Linux:进程

0.前言&#xff1a;冯诺依曼体系结构 冯诺依曼体系结构 电脑中涉及两种类型信号&#xff1a;控制信号、数据信号 计算机硬件构成&#xff1a; 输入设备&#xff1a;显卡、 输出设备&#xff1a;显示器、 存储器&#xff08;内存)&#xff1a;磁盘不算&#xff0c;磁盘算外部设…

LLC谐振电路增益公式推导

LLC谐振电路增益公式推导 图 由图可知 GVoutVinsLm//Rac1sCrsLrsLm//RacG\frac{V_{out}}{V_{in}}\frac{sLm//Rac}{\frac{1}{sCr}sLrsLm//Rac} GVin​Vout​​sCr1​sLrsLm//RacsLm//Rac​ 其中 sLm//RacsLm∗RacsLmRacsLm//Rac\frac{sLm*Rac}{sLmRac} sLm//RacsLmRacsLm∗Rac​…

Java 多线程编程(入门)

目录 一、简单介绍 Thread类 【1】Thread类中一些常用的方法 【2】编写一个简单多线程程序&#xff08;入门&#xff09; 二、Java中创建多线程的方法&#xff08;重点面试题&#xff09; 1.继承 Thread 类 2.实现 Runnable 接口&#xff0c;重写 run 3.使用匿名内部类&…

(决策树中的)信息熵和样本分类的信息熵计算源代码

目录 一、信息熵 ① 基本概念 ② 计算公式 二、决策树中的信息熵 三、计算数据集样本分类的香农熵的源代码 说明&#xff1a;由于对这部分的知识有所遗忘&#xff0c;因此翻阅资料进行温习&#xff0c;写下本文。 需要注意的是&#xff0c;在本文中&#xff0c;所有中括号…

WPF 控件专题 ContentControl 控件详解

1、ContentControl 介绍 ContentControl 表示包含一段任意类型内容的控件&#xff1b;也叫作内容控件。只包含一个子元素。 ************************************************************************************************************** 2、常用属性介绍 FontFamily&a…

《代码随想录》一刷记录之回溯算法

文章目录前言第9章&#xff1a;回溯法回溯算法理论基础什么是回溯算法回溯法的性能回溯法可以解决的问题理解回溯法回溯法模板组合问题回溯算法剪枝优化组合总和(一)回溯算法剪枝优化电话号码的字母组合回溯算法组合总和&#xff08;二&#xff09;回溯算法剪枝优化组合总和&am…

flask数字图像处理系统开发全流程记录(基于OpenCV)

目录一、环境安装1.1 安装虚拟环境1.2 安装Flask二、搭建flask项目框架2.1 创建一个简单项目2.2 渲染html页面2.3 使用Bootstrap美化页面2.4 前后端逻辑交互2.4.1 前端实现2.4.2 后端实现三、部署3.1 Waitress工业级部署3.2 项目打包一、环境安装 1.1 安装虚拟环境 虚拟环境是…

以太网交换机(计算机网络)

目录 一、以太网交换机与网桥 二、交换机与集线器 三、交换式以太网 四、以太网交换机的要点 一、以太网交换机与网桥 1、交换式集线器又称为以太网交换机(switch)或二层交换 机&#xff08;表明此交换机工作在数据链路层&#xff09;&#xff0c;或直接简称 为交换机。 2…

2022/10/4——基于stm32mp157a的A7核按键中断实验

分析电路图可知三个按键对应的管脚为&#xff1a;KEY1----->PF9 KEY2----->PF7 KEY3----->PF8 本次实验采用延时函数来解决按键按下时的电平抖动问题 功能分析如下 如上图所示 1.需要分析GPIOF章节&#xff1a;设置引脚为输入模式 2.需要分析EXTI章节&#xff1…

人工智能算法一无监督学习(Kmeas聚类)

简介 在前面介绍的线性回归还有逻辑回归它们都是知道x,y然后开始训练模型&#xff0c;这也就是有监督学习的情况&#xff0c;还有如果只是知道x不知道y的情况那么这种就是无监督学习。 描述 需求引入&#xff0c;如果有一千万用户&#xff0c;我们要对用户进行分类。这里由于…

Pytorch深度学习笔记之三(构建一个完整的神经网络)

本篇笔记是基于一个印度人写的《Pytorch深度学习》一书的第二章&#xff0c;主要用来描述一个麻雀虽小五脏俱全的完整的神经网络&#xff0c;包含了建模、训练等。原书的代码基于较老版本的Pytorch&#xff0c;有多处编译不过&#xff0c;笔者都做了调整&#xff0c;并在文末给…

几种常见的概率分布表

参考:《概率论与数理统计 第四版》

Jenkins+Maven+Gitlab+Tomcat 自动化构建打包、部署

一、环境需求 本帖针对的是Linux环境&#xff0c;Windows或其他系统也可借鉴。具体只讲述Jenkins配置以及整个流程的实现。 1.JDK&#xff08;或JRE&#xff09;及Java环境变量配置&#xff0c;我用的是JDK1.8。 2.Jenkins 持续集成和持续交付项目。 3.现有项目及gitlab&#…

Redis实战 - 03 RedisTemplate 的 hash 结构

文章目录1. put(H var1, HK var2, HV var3)2. get(H var1, Object var2)3. entries(H key)4. keys(H key)5. values(H key)6. hasKey(H key, Object var2)7. size(H key)8. putAll(H key, Map<? extends HK, ? extends HV> map)1. put(H var1, HK var2, HV var3) 新增…

机器学习之验证曲线绘制-调参可视化-sklearn

验证曲线是什么&#xff1f; 验证曲线和学习曲线的区别是&#xff0c;横轴为某个超参数的一系列值&#xff0c;由此来看不同参数设置下模型的准确率(评价标准)&#xff0c;而不是不同训练集大小下的准确率。 从验证曲线上可以看到随着超参数设置的改变&#xff0c;模型可能从…

Java Web 12.1 Filter 12.1.2 Filter 快速入门

Java Web 【黑马程序员新版JavaWeb基础教程&#xff0c;Java web从入门到企业实战完整版】 12 Filter & Listener & Ajax 文章目录Java Web12 Filter & Listener & Ajax12.1 Filter12.1.2 Filter 快速入门12.1 Filter 12.1.2 Filter 快速入门 【开发步骤】…

论如何参与一个开源项目(上)

写在前面的一些话 说起开源项目&#xff0c;好像人人都懂&#xff1a;不过就是一群人一起写了些东西&#xff0c;并且这些东西是公开的&#xff0c;大家都能看。但要细说&#xff0c;可能大多数的开发者都说不出个所以然&#xff0c;甚至不知道怎么提issue。 所以我就想写这样…

这,这,是个神人,我喜欢

国庆的第三天&#xff0c;跟一个好友聊天&#xff0c;他本来是准备回老家的&#xff0c;但是因为疫情搁浅在原地了。上来就直接给我搞一个有难度的代码如果没有人跟你说这个是输出helloworld的&#xff0c;鬼知道这个代码。然后&#xff0c;我就说我想对他进行一个采访&#xf…