《听--海的声音》项目
《听 – 海的声音》
一.项目简介
该项目是一个类似于喜马拉雅听书项目的一个简化版,实现了能够在线听歌,用户能够上传歌曲,用户能够录制歌曲等相关的一些功能。
二.模块
该项目一共分为了两大模块,一类是游客模块,也就是前台模块。一类是创作者模块,称为后台管理模块。
两大模块的用例图如图所示。
游客用例图
创作者用例图
三.数据库的设计
本设计的ER图如下:
E-R图
一共建立了4张表:
1.用户表:
users:字段有 uid(primary key)、username、password
2.音频表:
track:tid(primary key)、title、uid、类型、二进制内容(歌曲以及录制内容)
3.专辑表:
albums:aid(primary key)、uid 、 专辑标题(title)、封面(cover)、状态(state)
4.音频于专辑关系表
relations: rid(primary key)、aid 、 tid
5.表与表的关系
用户-> 音频 :一对多关系 关系字段在多表(音频表有uid字段)
用户->专辑 :一对多关系
音频 <-> 专辑: 多对多关系
多对多需要借助中间表:relations表
6.约束关系
1.音频表的uid与用户表的uid建立外键约束
2.专辑表的uid与用户表的uid建立外键约束
3.关系表的aid与专辑表aid建立外键约束
4.关系表的tid与音频表的tid建立约束关系
create database MyListenBook charset utf8mb4;use MyListenBook;create table users(uid int primary key auto_increment,username varchar(20) not null unique,password char(60) not null );create table tracks (tid int primary key auto_increment,uid int not null,title varchar(10) not null,type char(20) not null,content longblob not null comment '音频的二进制数据') comment '曲目表';create table albums (aid int primary key auto_increment,uid int not null,title varchar(60) not null,cover varchar(60) not null,state int not null comment '0:已下线,1:未发布,2:已发布')comment'专辑表';create table relations(rid int primary key auto_increment,aid int not null,tid int not null)comment '维护专辑和音频之间的多对多关系';-- 增加外键
alter table tracks add constraint FK_ID foreign key (uid) REFERENCES users(uid);
alter table albums add constraint FK_ID2 foreign key (uid) REFERENCES users(uid);
alter table relations add constraint FK_ID3 foreign key (aid) REFERENCES albums(aid);
alter table relations add constraint FK_ID4 foreign key (tid) REFERENCES tracks(tid);
7.功能对应sql语句
1.首页—查询所有专辑
select aid ,username,title, cover
from albums a join users u on a.uid = u.uidwhere state = 2 order by aid desc;
2.专辑播放页
查询出专辑相关信息
select *
from albums a join users u on a.uid = u.uidwhere aid = ?
查询出专辑对用的歌曲
sele tid
from realtions
where aid = ?
查询出歌曲相对应的相关信息
select *
from tracks
where tid in () order by ...
3.用户管理
注册
insert into users(username,password) values(?,?);
登录
select * from users where username = ?;
4.音频管理
录制和上传
insert into tracks(uid,,title,type,content) values (?,?,?,?)
音频列表
select * form tracks where uid = ? order by ...
分页
查询总数量
select count(*) from tracks where uid = ?
查询每一页的歌曲名
select tid, uid, title, type
from tracks
where uid = ? order by tid desc limit ? offset ?
关联数量
select tid, count(*)
from relations
where tid in () group by aid order by ...;
5.专辑管理
1.新建
insert into albums (uid,title,cover) values (?,?,?)
2.专辑列表
select * from albums where uid = ... order by...
3.分页
select count (*)
from albums where uid = ...select * from albums where uid = ... order by ...limit ...offset...
4.已绑定音频
select * from albums where aid = ...;
select * from relations where aid = ...;
select * form tracks where tid in () order by ...;
5.添加新音频
查询已绑定歌曲名
select tid form relations where aid = ?;
查询未绑定歌曲名单
select * from tracks
where uid = ...and tid not in(...) order by...
添加新关联,添加多条
insert into relations (aid,tid) values ((?,?) ,(?,?));
6.发布与下架
update albums set state = 2 where aid = ?
update albums set state = 0 where aid = ?
四.各个模块功能的以及数据流向的设计
该设计的软件层次图如下:
软件层次图
模块的功能
1.游客模块(publish)
主要功能有
所有专辑列表的展示
专辑列表中绑定的歌曲列表展示
播放专辑歌曲的展示
2.创作中心模块
1.用户管理模块
用户的注册功能
用户的登录功能
用户的注销功能
退出
2.音频管理模块
上传音频功能
录制音频功能
查看音频列表
3.专辑管理模块
新建专辑功能专辑绑定歌曲功能查看专辑列表
模块的数据流向
该设计的数据流图如下:
数据流图
五.类的设计
将该项目的类分为如下结构:
类的结构 1.servlet 是接入层,主要负责从前端页面获取数据并处理并包装数据给前端。
2.service层
主要负责业务逻辑,类似多表进行数据拼接.
3.repository
主要负责数据库的查询等工作
4.dataObject
主要是一些数据的类,比如用户类,基本与数据库中的字段一致
5.util
主要负责数据库的连接操作以及打印日志的操作
6.viewObject
主要是负责提供前端数据的类。
六.前端模块的设计
前端主要是应用html和css样式的设计以及js对于DOM树的修改以及与后端进行数据交互的对ajax的请求。
七.项目成果演示
1.游客界面演示
首页展示
首页可以看到所有人已经发布的专辑,并且有封面以及标题作者的展示,点击专辑的标题,进入到相关的专辑列表。
播放页展示 点击播放,能够播放音乐。能够拖动进度条来调整进度,能够通过上一曲下一曲来进行相关的操作。
2.创作者模块
创作中心模块
注册
登录
上传
录制
列表
新建专辑
列表页
绑定关联页
添加关联页
八.总结
项目源码git地址:https://gitee.com/wry15/mylistenbook
项目展示:http://43.142.146.34:8080/
1.为什么要做这个项目?
在如今这个快速发展的时代里,时常也需要静下心来慢慢体会这个这个世界。在每次睡不着的时候,总是会打开喜马拉雅听一段故事,能够更好的促进睡眠,使得第二天的工作变得高效。基于此,我应用自己所学的知识,开发一款基于web的网上听书的网页版,不仅能够提升自己的技术,而且还方便了自己。
2.本次项目的难点是什么?
我认为本次项目的难点首先在于环境的搭建,有一系列Tomcat环境的搭建以及content Path的配置等等,接着就是和之前的编码方式的不同,整个数据传输的过程比较繁琐,需要理清楚数据如何进行发送与接收。最后就是相关业务的流程,在需要理清楚业务流程的整个过程,以及业务对于sql的编写等工作。
3.本项目对你最大的提升是什么?
通过本次项目,最大的提升莫过于技术方面的提升,使得自己对于web编程更加清楚基本流程是什么,以及对于每一个数据他背后所存在的意义是什么,如何发送一个数据到前端,后端如何接收一个数据,如何处理一个业务,最重要的是在相关的业务中的逻辑需要一个个的捋清楚,每一步是怎样做的,这样做的目的是什么等等,有没有更好的方法。
4.一个数据发送的流程是什么?
这个范围有点大,我就拿登录页面来说,首先,从页面上获取到相关的用户名与密码,通过表单的方式进行提交。提交给相应的后端动态资源,动态资源获取到相关的用户名和密码后,该项目还可以加上密码相关的判断,通过数据库的查询工作进行对用户名和密码的匹配,如果匹配成功则通过重定向功能使进入到相关的用户中心首页中,若匹配失败则重定向到登录页面,这里也可以加上登录次数的限制。
《听--海的声音》项目相关推荐
- 《基于C/S模式的android手机与PC机通信系统的开发》项目
基于C/S模式的android手机与PC机通信系统的开发 作者:郑海波 单位:南京邮电大学 通信与信息工程学院 信号与信息处理 6班 学号:1012010638 邮箱:zhb931706659@126 ...
- 通过usb利用adb实现android手机和pc机通信
1. adb forward 原理概述 adb forward 的功能是建立一个转发 如:adb forward tcp:8000 tcp:9000 的意思是,将PC端的 8000 端口收到的数据,转 ...
- android手机连接PC后怎样切换为U 盘模式
android手机连接PC后怎样切换为U 盘模式 之前已经发过关于 APK文件怎样安装程序到手机上 已经介绍过了怎样通过手机与 PC 的连接将软件安装至手机.这一次再来讲解一下怎样将你的手机变为&q ...
- 如何在Android手机上进行Google Map的开发。
1.题记 提起谷歌Map相信大家都不会陌生,那进入我们今天的话题,如何在Android手机上进行Google Map的开发. 2.Map应用程序的开发 2.1 准备工作 2.1.1 申请Android ...
- android手机的刷机
android手机的刷机,就相当于给它重装一下系统,这和我们常见的电脑重装系统类似.刷机前先对自己手机中的一些重要内容进行备份吧,像名片,短信,日历等重要信息,有需要的就先备份一下,否则刷机后就都没了 ...
- Android手机vivoY20t刷机教程
首先要清楚刷机的概念,刷机分为卡刷和线刷两种.卡刷,是手机能开机,刷机包放在手机卡中进行刷机.线刷,是手机无法开机变砖头,这个时候只能进行线刷. 需要知道刷机的手机型号,我的Android手机的手机型 ...
- android手机连接PC无法正常安装驱动
工作当中我们经常会遇到Android手机连接PC的时候无法正确安装驱动,或者安装失败.当然找到正确的驱动文件时首选的解决方案,如果正确的驱动文件依旧无法安装成功我们可以打开我的电脑-->属性-- ...
- android平台如何实现b s模式,基于B/S架构的Android手机管理系统的设计与实现
摘要: 随着Android手机的市场占有率不断攀升,出现了很多通过电脑管理Android手机的管理类软件,使用这些软件进行手机管理前需要很多繁琐的步骤,需要用数据线将手机与电脑连接,在手机上打开调试模 ...
- android老人机模式吗,Android手机变身老人机
让Android"老年化" 我们都知道Android系统的图标较小,多安装一些应用,就密密麻麻一片挤在屏幕上,别说老年人,年轻人看着都容易眼花.改造普通智能手机变成老年机最重要的一 ...
- android系统怎么刷机教程,如何刷新Android系统? Android手机通用刷机教程
方法一,刷卡机 1. 在恢复模式下,从sdcard中选择第四项Flash zip. 2. 然后,您将在SD卡中看到所有zip文件. 名称update.zip只是为了找到rom软件包,找到您放入SD卡中 ...
最新文章
- docker-ce-17.09 网络基础配置
- IntelliJ IDEA(五) :酷炫插件系列
- HTML DOM中DIV的Style:margin,border,padding
- Oracle查找包共用,oracle – 用于查找包的多级依赖关系的脚本
- 服务器性能瓶颈分析方法
- 洛克王国进不去 不显示服务器,《洛克王国》FAQ:注册和登陆问题
- 线程池优化之充分利用线程池资源
- python中sys模块是什么内容_python中sys模块是做什么用的
- django项目转pyc_Python自动化运维系列:Django搭建小博客
- Android 数据Parcel序列化过程源码分析
- 睡前1分钟 坚持瘦下来(信不信由你)
- delphi 读取excel 两种方法
- python的qrcode模块计算矩阵二维码像素尺寸大小
- excel合并两列内容_【238期】EXCEL扩展思维,一题多解,玩转数据两列合并,你都会?...
- 数据分析【实践】——AB测试的应用、案例及关键点
- 进程间通信----共享内存
- flink的批处理和流处理
- Xftp/Xshell 要继续使用此程序,您必须应用最新的更新或使用新版本
- chmod 777 修改文件权限
- Visual Studio Community 2019 安装