《听 – 海的声音》

一.项目简介

该项目是一个类似于喜马拉雅听书项目的一个简化版,实现了能够在线听歌,用户能够上传歌曲,用户能够录制歌曲等相关的一些功能。

二.模块

该项目一共分为了两大模块,一类是游客模块,也就是前台模块。一类是创作者模块,称为后台管理模块。
两大模块的用例图如图所示。

游客用例图

创作者用例图

三.数据库的设计

本设计的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.一个数据发送的流程是什么?
这个范围有点大,我就拿登录页面来说,首先,从页面上获取到相关的用户名与密码,通过表单的方式进行提交。提交给相应的后端动态资源,动态资源获取到相关的用户名和密码后,该项目还可以加上密码相关的判断,通过数据库的查询工作进行对用户名和密码的匹配,如果匹配成功则通过重定向功能使进入到相关的用户中心首页中,若匹配失败则重定向到登录页面,这里也可以加上登录次数的限制。

《听--海的声音》项目相关推荐

  1. 《基于C/S模式的android手机与PC机通信系统的开发》项目

    基于C/S模式的android手机与PC机通信系统的开发 作者:郑海波 单位:南京邮电大学 通信与信息工程学院 信号与信息处理 6班 学号:1012010638 邮箱:zhb931706659@126 ...

  2. 通过usb利用adb实现android手机和pc机通信

    1. adb forward 原理概述 adb forward 的功能是建立一个转发 如:adb forward tcp:8000 tcp:9000 的意思是,将PC端的 8000 端口收到的数据,转 ...

  3. android手机连接PC后怎样切换为U 盘模式

    android手机连接PC后怎样切换为U 盘模式 之前已经发过关于 APK文件怎样安装程序到手机上  已经介绍过了怎样通过手机与 PC 的连接将软件安装至手机.这一次再来讲解一下怎样将你的手机变为&q ...

  4. 如何在Android手机上进行Google Map的开发。

    1.题记 提起谷歌Map相信大家都不会陌生,那进入我们今天的话题,如何在Android手机上进行Google Map的开发. 2.Map应用程序的开发 2.1 准备工作 2.1.1 申请Android ...

  5. android手机的刷机

    android手机的刷机,就相当于给它重装一下系统,这和我们常见的电脑重装系统类似.刷机前先对自己手机中的一些重要内容进行备份吧,像名片,短信,日历等重要信息,有需要的就先备份一下,否则刷机后就都没了 ...

  6. Android手机vivoY20t刷机教程

    首先要清楚刷机的概念,刷机分为卡刷和线刷两种.卡刷,是手机能开机,刷机包放在手机卡中进行刷机.线刷,是手机无法开机变砖头,这个时候只能进行线刷. 需要知道刷机的手机型号,我的Android手机的手机型 ...

  7. android手机连接PC无法正常安装驱动

    工作当中我们经常会遇到Android手机连接PC的时候无法正确安装驱动,或者安装失败.当然找到正确的驱动文件时首选的解决方案,如果正确的驱动文件依旧无法安装成功我们可以打开我的电脑-->属性-- ...

  8. android平台如何实现b s模式,基于B/S架构的Android手机管理系统的设计与实现

    摘要: 随着Android手机的市场占有率不断攀升,出现了很多通过电脑管理Android手机的管理类软件,使用这些软件进行手机管理前需要很多繁琐的步骤,需要用数据线将手机与电脑连接,在手机上打开调试模 ...

  9. android老人机模式吗,Android手机变身老人机

    让Android"老年化" 我们都知道Android系统的图标较小,多安装一些应用,就密密麻麻一片挤在屏幕上,别说老年人,年轻人看着都容易眼花.改造普通智能手机变成老年机最重要的一 ...

  10. android系统怎么刷机教程,如何刷新Android系统? Android手机通用刷机教程

    方法一,刷卡机 1. 在恢复模式下,从sdcard中选择第四项Flash zip. 2. 然后,您将在SD卡中看到所有zip文件. 名称update.zip只是为了找到rom软件包,找到您放入SD卡中 ...

最新文章

  1. docker-ce-17.09 网络基础配置
  2. IntelliJ IDEA(五) :酷炫插件系列
  3. HTML DOM中DIV的Style:margin,border,padding
  4. Oracle查找包共用,oracle – 用于查找包的多级依赖关系的脚本
  5. 服务器性能瓶颈分析方法
  6. 洛克王国进不去 不显示服务器,《洛克王国》FAQ:注册和登陆问题
  7. 线程池优化之充分利用线程池资源
  8. python中sys模块是什么内容_python中sys模块是做什么用的
  9. django项目转pyc_Python自动化运维系列:Django搭建小博客
  10. Android 数据Parcel序列化过程源码分析
  11. 睡前1分钟 坚持瘦下来(信不信由你)
  12. delphi 读取excel 两种方法
  13. python的qrcode模块计算矩阵二维码像素尺寸大小
  14. excel合并两列内容_【238期】EXCEL扩展思维,一题多解,玩转数据两列合并,你都会?...
  15. 数据分析【实践】——AB测试的应用、案例及关键点
  16. 进程间通信----共享内存
  17. flink的批处理和流处理
  18. Xftp/Xshell 要继续使用此程序,您必须应用最新的更新或使用新版本
  19. chmod 777 修改文件权限
  20. Visual Studio Community 2019 安装

热门文章

  1. 【BZOJ1067】【SCOI2007】降雨量
  2. 在Debian上用FVWM做自己的桌面
  3. 席南华院士:数学的意义
  4. 教育机构如何给视频加密防止下载和传播?
  5. SD 卡驱动程序分析
  6. Java平凡之路-成长篇(02) -Java技术选型搭配
  7. 黄致绮 荣获第六季完美童模全球总决赛 全国总冠军
  8. charles系列破解激活办法(最高charles4.2都可以激活)
  9. 如何输入一串带空格的字符串?
  10. Moveit!入门教程-配置助手