基于SSM框架的音乐网站系统设计与实现

发布于:2022-11-29 ⋅ 阅读:(435) ⋅ 点赞:(0)

目 录
序 言 1
第一章 绪论 2
1.1 系统开发背景 2
1.2 系统说明书的结构 2
第二章 系统可行性分析 3
2.1 技术可行性 3
2.1.1 开发技术 3
2.1.2 开发环境 5
2.2 经济可行性 5
2.3 操作可行性 5
2.4 法律可行性 5
第三章 系统需求分析 6
3.1 功能概况描述 6
3.2性能需求分析 9
3.3系统流程分析 9
3.3.1登录流程图 9
3.3.2用户操作流程图 10
3.3.3管理员操作流程图 11
3.4系统功能用例图 12
第四章 系统概要设计 15
4.1系统工作原理 15
4.2 系统结构设计 15
4.3 数据库设计 17
4.3.1数据库概念结构设计 17
4.3.2数据库逻辑结构设计 20
第五章 系统的实现 23
5.1 用户功能模块的实现 23
5.1.1系统注册界面 23
5.1.2用户登录界面 24
5.1.3用户信息界面 26
5.1.4歌曲推荐界面 27
5.1.5在线播放界面 28
5.1.6我的歌曲界面 29
5.1.7发布歌曲界面 30
5.2 管理员功能模块的实现 33
5.2.1用户管理界面 33
5.2.2音乐类别管理界面 35
5.2.3音乐管理界面 38
第六章 系统测试 41
6.1系统测试描述 41
6.2系统功能测试 42
6.2.1登录注册测试 42
6.2.2身份权限测试 42
6.2.3用户更新测试 44
6.2.4歌曲管理测试 44
6.2.5用户管理测试 44
6.2.6音乐类别测试 45
6.2.7在线播放测试 45
6.2.8歌曲播放测试 46
6.2.9评论格式测试 46
6.3测试结论 47
结束语 48
参考文献 49
致 谢 51
第三章 系统需求分析
3.1 功能概况描述
本系统的主要任务是:根据不同权限的角色身份登入系统后,每个身份的可操作功能也不同。本系统需要完成的基本功能是用户注册功能(验证信息)、歌曲管理功能、用户管理功能、音乐类别管理功能、在线播放模块、歌曲评论功能以及歌曲信息、用户信息的管理功能。下面具体来了解本系统的各个功能模块。

1.登录注册模块
主要包括两个子模块:
(1)注册用户模块:用户进入系统主页后,这时用户的初始身份是游客身份,只能欣赏歌曲,查看歌曲评论的简单操作。点击注册后,输入要注册的用户名和密码,用户名字没有限制,但是此处的密码应该是暗码,然后实现系统用户的注册功能。此时就是系统的普通用户,对于普通用户,在以上功能基础上,用户可以发布歌曲,对歌曲进行编辑,编辑包括修改歌曲信息、删除此条记录,还可以听歌评论。
(2)登录系统模块:登录系统就可以进一步获取相对应的身份权限,登录密码格式为暗码,进入系统后,如果是管理员,那么在用户功能的基础上要有对用户的操作功能、歌曲类别操作功能。

2.用户管理功能模块
此功能模块主要包括两个子模块:
(1)创建用户模块:进入创建用户,输入账号、密码、头像、姓名、年龄等信息。比如,用户名为Lt,年龄为23,还有签名档。通过这些信息,可以对此用户做一个简单的信息记录。在用户类型选择方面,分为用户和管理员,不同的选择,用户的身份权限不同,可以操作的功能也就有所区别,这个性能需求在第一模块中已经描述。
(2)用户管理模块:此模块分为四个子功能:①用户信息列表查看:对用户的简要信息列表,管理员此时可以看到创建用户的简单信息。例如,查看账号,电话,邮箱,联系地址,QQ,用户类型,这些都应该让管理员一目了然。②用户资料查询模块:对当前用户所有信息查看,这个查看比列表查看更加详细,比如增加查看当前用户的性别,身份证,展现自己个性的头像和签名档。③用户密码重置:对当前用户的登录密码进行重置,这个重置应该对密码直接修改,不需要输入以前的密码。④用户记录删除模块:管理员从系统中删除此用户的所有信息。比如,用户删除了用户名为aaa的用户,那么用户信息不再展现在信息列表,此用户也不能在登录系统。

3.音乐类别管理模块
此功能模块主要包括两个子模块:
(1)创建音乐类别模块:管理员通过此模块创建一个新的音乐类别并能展现在系统主页中,其他用户进行向此类别中添加歌曲,比如管理员添加一个类别“电子”,那么主页中会出现“电子”这一类别,并且用户可以向“电子”类别中添加歌曲。
(2)类别管理模块:这个大模块又分为三个子功能:①进入管理界面,列出所有的音乐类别,显示出类别名称以及对应的创建此类别的时间。②编辑类别:对类别进行重新编辑,编辑后可以看到主页中此类别已经改变。③删除功能:删除当前创建的类别,删除后,类别列表和主页中此类别都会消失。

4.歌曲管理功能模块
此功能模块主要包括两个子模块:
(1)发布歌曲模块:用户通过编辑歌曲名字,选择音乐类别,对歌曲封面、源文件进行上传,歌曲和歌手简介,歌词编辑等信息,通过这些用户可以充分了解此歌曲的详细信息,以此来判断是否这首歌曲符合自己的需要。
(2)歌曲管理模块:此模块分为四个子功能:①对歌曲查询,用户可以查询自己上传的歌曲信息,包括歌曲名字,创立时间等信息。②封面查看:用户可以查看当前歌曲所对应封面,此处是新窗口大图。③歌曲编辑功能:用户对歌曲的名称,歌曲简介,歌曲歌词进行编辑,另外应该可以重新设置歌曲的封面图。④歌曲信息的删除功能:用户通过此功能删除当前自己发布的歌曲的所有信息,删除后用户在歌曲列表看不到此歌曲记录,在主页中也看不到此歌曲。

5.在线播放功能模块
此模块主要是在线放歌曲功能。用户通过此功能,在联网的状态下在线播放歌曲,用户在此页面可以看到歌手名字和歌名,不需要看到其他额外的信息,方便刷歌来寻找对应自身口味的音乐,刷新此功能可以刷新播放列表。

6.歌曲评论功能模块
此模块主要包括三个子模块:
(1)标签“收藏”和“取消收藏”的跳转:用户通过此功能对歌曲进行标志,标记自己感兴趣的歌曲,这样,本文转载自http://www.biyezuopin.vip/onews.asp?id=14230用户下次播放时就可以发现这个歌曲是自己以前关注过的歌。
(2)歌曲上传模块:用户通过此功能进行评论,通过评论记录自己听歌的感受。这样在以后听歌看到评论时就可以想起自己当时听歌的心情,满满的回忆之情会让人很享受。
(3)评论格式模块:通过此功能,用户能够对要写的评论进行趣味编辑。比如字体设为“微软雅黑”,字的大小可设为“28”,颜色可为“红色”,另外也可以增加表情,这样就会使得评论更加丰富。

7.系统的其他功能
此模块主要包括三个子功能:
(1)主页侧面伸张和缩放功能:进入系统后,在管理员界面,可以看到左侧的操作菜单,操作菜单最下方有个指向左的箭头,点击箭头,左侧菜单栏收起,只能显示右侧详细的操作界面。点击“泡泡云音乐”右侧的区域可以展开操作菜单,这时可以选择其他的操作选项。
(2)主页全屏和评论全屏功能:进入系统主页后,点击用户旁边的全屏按钮,系统主页显示全屏,这时页面会占据整个屏幕,浏览器其他栏都不会出现。点击评论全屏按钮,评论区占据整个屏幕,最上方是评论可选择的格式。

package com.app.controller;

import java.io.File;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;
import java.util.UUID;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.xml.registry.infomodel.User;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;
import com.app.entity.*;
import com.app.service.*;
import com.app.utils.MD5;
import com.app.utils.MainUtils;

@Controller
@RequestMapping("/home")
public class HomeController {
	
	@Resource
	UsersService userService;

	@Resource
	CategoryService caService;
	
	@Resource
	ArticleService articleService;
	
	@Resource CommentService cService;
	
	@RequestMapping("/index")
	public String index(HttpSession session,Model model) {		

		model.addAttribute("clist",caService.getAllCategory());
		model.addAttribute("list",articleService.getAllArticle());
		
		
		return "home/index";
	}
	
	@RequestMapping("/addpost")
	public String addpost(String content,HttpSession session,Model model,int id) {
		Comment m = new Comment();
		m.uid = session.getAttribute("userid")+"";
		m.mid = id+"";
		m.content = content;
		m.setCreated(MainUtils.getTime());
		m.setType("2");
		cService.insert(m);
		return "redirect:play?id="+id;
	}
	
	
	@Resource FavService fService;
	
	@RequestMapping("/cancelFav")
	public String cancelFav(HttpSession session,Model model,int id) {
		fService.delete(id);		
		return "redirect:play?id="+id;
	}
	
	@RequestMapping("/join")
	public String join(HttpSession session,Model model) {
		model.addAttribute("clist",caService.getAllCategory());	
		return "home/join";
	}
	
	@RequestMapping("/addFav")
	public String addFav(HttpSession session,Model model,int id) {
		Object uid =session.getAttribute("userid");
		
		Fav md = new Fav();
		md.created = MainUtils.getTime();
		md.mid = id+"";
		md.uid = uid.toString();
		
		fService.insert(md);
		
		return "redirect:play?id="+id;
	}
	
	@RequestMapping("/play")
	public String play(HttpSession session,Model model,int id) {
		model.addAttribute("clist",caService.getAllCategory());
		
		Article art = articleService.getArticleById(id);
		model.addAttribute("art", art);
		
		List<Comment> list2 = cService.getAllComment();
		List<Comment> list1 = new LinkedList<Comment>();
		if(list2.size()>0)
		{
			for (Comment c:list2) {
				if(c.getMid().equals(id+"")&&c.getType().equals("2"))
				{
					c.setU( userService.getUsersById(Integer.parseInt(c.getUid())));
					list1.add(c);
				}
			}
		}
		model.addAttribute("list2", list1);
		Object uid =session.getAttribute("userid");
		Fav check = null;
		if(uid==null){}else{
			Fav checkIt = new Fav();
			checkIt.mid =id+"";
			checkIt.uid = uid.toString();
			List<Fav> lists = fService.checkFav(checkIt);
			if(lists.size()>0)
			check = lists.get(0);
		}
		
		model.addAttribute("check", check);
		return "home/play";
	}
	
	@RequestMapping("/foryou")
	public String foryou(HttpSession session,Model model,String type) {		

		model.addAttribute("clist",caService.getAllCategory());
		
		model.addAttribute("lists",articleService.getRandom());
		
		return "home/foryou";
	}
	
	@RequestMapping("/mlist")
	public String mlist(HttpSession session,Model model,String type) {		

		model.addAttribute("clist",caService.getAllCategory());
		
		List<Article> list1 =  articleService.getAllArticle();
		List<Article> list2 =  new LinkedList<Article>();
		if(list1.size()>0)
		{
			for (Article article : list1) {
				if(type!=null)
				{
					if(article.getTags().equals(type))
					{
						list2.add(article);
					}
				}else{
					list2.add(article);
				}
			}
		}
				
		
		model.addAttribute("list",list2);
		
		
		return "home/mlist";
	}
	
	
	
	
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文含有隐藏内容,请 开通VIP 后查看