欣乐听书项目介绍

目录

项目名称:

项目描述:

项目背景:

项目技术栈:

项目主要功能:

项目结构分析

数据库

        E-R:

         实体间关系分析

        表结构和表关系

功能动作语句(SQL)

        普通用户

        Up主(创作者)

功能对应的web资源

数据流转流程(以专辑功能为例)

        用户->浏览器->网络->Tomcat->MySQL

        MySQL->Tomact->浏览器->用户


项目名称:

       欣乐听书

项目描述:

        类似于喜马拉雅听书的项目,普通用户可以根据自己的喜欢选择相应的专辑进行专辑列表的歌曲播放。
        Up主(创作者)需要登录(注册) 后才可以上传、录制自己的音频和查看所有音频,并创建新的专辑与音频进 行绑定,上架发布,供普通用户选择使用。

项目背景:

        为了更加熟练掌握Servlet相关知识技术,以及熟悉多个技术之间的相互协调运用,并结合自己平时娱乐喜爱方面进行的项目创建学习

项目技术栈:

        Java,Maven,HTTP, Servlet,JSON和MySQL的综合使用。

项目主要功能:

        普通用户
                无需登录,可以查看专辑列表,选择专辑进行音频播放。
        创作者页面,
                用户管理:登录功能、注册功能和注销功能;
                音频管理:上传音频、录制音频和查看音频列表功能;
                专辑管理:新建专辑、显示专辑列表(包括各个专辑状态)和专辑与音频关联功能。

项目结构分析

数据库

        E-R:

                3个实体(Entity):用户,音频,专辑;1个关系(Relation):关系表

         实体间关系分析

                用户 -> 音频 : 一对多    关系字段在多表(音频表中有uid字段)

               用户 -> 专辑 : 一对多    关系字段在多表(专辑表中有uid字段)

               音频 <-> 专辑 : 多对多    多对多关系需要借助中间表,变成两个一对多

        表结构和表关系

         实体表:

                用户表 users {uid,用户名,密码(经过加密)}

                音频表 tracks {tid,标题,上传用户id,类型,二进制内容}

                     TODO:使用MySQL进行音频数据以及诸如此类的较大的二进制数据是不合理的

                专辑表 albums  {aid,uid,专辑标题,专辑封面图URL,专辑状态}

                     TODO:专辑封面没有上传功能(因为图片也是较大的二进制数据)

         关系表

                音频专辑关系表 relations {rid,aid,tid}

功能动作语句(SQL)

       普通用户

首页    ----   查询所有公开的专辑

        通过联表查询将用户表uid与专辑表uid一样的专辑和用户属性查询出来

        select aid,username,title,cover from albums a join users u on a.uid = u.uid where state = 2(已发布) order by aid desc

         拓展功能 (未实现): 查询功能

         1.只考虑查专辑标题中包含的关键字(*只是代表,具体需要查询的内容可以根据情况实际改变)

          select * from albums a join users u on a.uid = u.uid where state = 2 and title like "%关键字%" order by aid desc

          2.只考虑查音频标题中包含的关键字

          select * from tracks where title like "%关键字%"

          select aid from relations where tid in (上条SQL查询结果)

          select * from albums a join users u on a.uid = u.uid where state = 2 and aid in (上条SQL查询结果)

专辑播放页

          1.先查询当前专辑属性

           select aid, username, title, cover from albums a join users u on a.uid = u.uid where aid = (专辑aid)  

           2.根据专辑aid在关系表中查到专辑下的音频tid

           select tid from relations where aid = (专辑aid) order by rid

           3.拿到音频tid后,在音频表中获取对应音频

           select * from tracks where tid in (上条SQL查询结果) order by tid

Up主(创作者)

用户功能

        用户 | 注册

            insert into users (username,password) values (注册值);

        用户 | 登录

            select * from users where username = (输入用户名)

音频功能

        音频 | 录制 or 上传

            insert into tracks (uid,title,type,content) values (获取到的音频信息属性值);

        音频 | 列表

            selec * from tracks where uid = (当前用户id) order by tid

            添加分页之后

            1.先查询当前用户的音频总数

            select count(*) from tracks where uid = (当前登录用户)

            2.将查询到的音频分页查询

            select tid,uid,title,type from tracks where uid = (当前登录用户) order by tid desc limit (每页总数) offset (起始位置)

            带上关联专辑数量

            通过聚合查询查询关系表中每个tid出现的次数

            select tid, count(*) from relations where tid in (上条分页查询到的tid) group by tid order by tid

专辑功能

        专辑 | 新建

            insert into albums (uid,title,cover) values(用户上输入的属性值)

        专辑 | 列表

            select * from albums where uid = (当前用户) order by aid desc

            加上分页后(思路音频列表类似,不做详解)

            select count(*) from albums where uid = (...)

            select * from albums where uid = (...) order by aid limit (...) offset (...)

            加上关联音频数量

            select aid,count(*) from relations where aid in (....) group by aid order by aid desc

        专辑 | 已绑定音频

            1.查询当前还在专辑信息

            select * from albums where aid = ...

            2.在关系表中查询当前专辑关联的音频tid

            select tid from relations where aid = ...

            3.查询专辑下所有音频信息

            select *(增减性能不要查询音频二进制数据) from tracks where tid in (上条SQL查询结果) order by tid 

        专辑 | 添加新音频

            1.先查出专辑包含的音频

            select tid from relations where aid = ...

            2.在音频表中查询所有不在当前专辑下的音频

            select * from tracks where uid = (...) and tid not in (上条查询结果) order by tid desc

            3.添加新关联

            insert into relations (aid,tid) values (专辑aid,音频tid)

        专辑 | 发布/下线

            发布

            update albums set state = 2(已发布) where aid = ...

            下线

            update albums set state = 0(已下线) where aid = ...

功能对应的web资源

功能

路径

资源

公开页面

首页

/index.html

/js/index.js

/album-list.json

播放页

/play.html?aid=

/js/play.js

/album-detail.json?aid=

创作中心

用户 | 注册

/studio/user/register.html

/studio/user/register.do

用户 | 登录

/studio/user/login.html

/studio/user/login.do

用户 | 退出

/studio/user/quit.do

音频 | 上传

/studio/track/upload.html

/studio/track/upload.do

音频 | 录制

/studio/track/record.html

/studio/track/js/record.js

/studio/track/record.json

音频 | 列表

/sudio/track/list.html

/sudio/track/js/list.js

/sudio/track/list.json

专辑 | 新建

/studio/album/create.html

/studio/album/create.do

专辑 | 列表

/studio/album/list.html

/studio/album/js/list.js

/studio/album/list.json

专辑 | 关联音频 | 已关联情况

/studio/album/bind.html?aid=

/studio/album/js/bind.js

/studio/album/bind.json?aid=

专辑 | 关联音频 | 添加关联

/studio/album/add.html?aid=

/studio/album/js/add.js

/studio/album/candidate.json?aid=

/studio/album/add.do

修改专辑状态 | 发布

/sudio/album/publish.do?aid=

修改专辑状态 | 下线

/sudio/album/withdraw.do?aid=

数据流转流程(以专辑功能为例)

用户->浏览器->网络->Tomcat->MySQL

新建专辑 | 用户填写信息后,点击按钮,专辑发布成功

    1.用户点击按钮,按钮输入form表单,所以,点击按钮会触发一个新的HTTP请求

    2.该HTTP请求的方法按照form表单的method属性(get/post)确定,路径按照action属性确定,携带的内容按照form包

        含的input标签带有name属性的内容确定

    3.该HTTP经过网络到达Tomcat,Tomact根据Context Path + Servlet Path 确定有那个Servlet对象对其进行处理(@WebServlet指定的)

    4.Tomcat根据HTTP请求方法,调用doGet,doPost....

    5.读取参数即用户填写的专辑必要信息,以及必要的参数合法性校验

    6.根据读到的参数执行SQL插入语句

    7.根据业务,进行重定向或显示创建成功

MySQL->Tomact->浏览器->用户

专辑列表显示

    1.在浏览器进入list.html

    2.浏览器会发起get请求list.html

    3.Tomcat根据相应路径,找到对应的静态资源并响应其内容

    4.浏览器解析html内容,发现<script>标签,会发起一个新的请求

    5.浏览器发起get请求list.js

    6.Tomcat根据相应路径,找到对应资源并响应其内容

    7.浏览器执行JS中的语句

    8.在js中有发起ajax的语句

    9.浏览器发起get请求list.json

    10.Tomcat根据资源路径,找到Servlet对象进行处理

        Servlet->Service->Repository(DAO)的内部处理

        (1).判断当前用户(Servlet)

        (2).执行必要SQL(具体到每个dao类)

        (3).组合(在Service中将SQL结果整合)

        (4).响应(最终Servelt将组合得到的数据发出)

    11.浏览器继续执行xhr,onload函数

    12.语句根据list.json返回的结果,修改DOM树结构(添加新的列表项)

    13.浏览器根据DOM树,渲染出用户看到的结果

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 船舶运动数学模型是为了研究船舶在不同条件下的运动规律而建立的数学模型。该模型可以根据船舶的物理特性和运动的环境条件,通过一系列数学公式和方程描述船舶的运动轨迹、速度变化、姿态变化等。贾欣乐的PDF文件提供了关于船舶运动数学模型的相关信息和研究成果。 船舶运动数学模型通常包括力学模型和液体力学模型。力学模型主要考虑船舶运动中的受力和动力系统,包括风力、水流力、摩擦阻力、推进力等。液体力学模型则研究船舶在水中的运动特性,包括流体力学方程、流体力学实验等。 船舶运动数学模型的建立需要考虑许多因素,如船舶的形态尺寸、质量分布、推进力系统特性等。同时,还需要考虑外界环境因素,如风速、水流等。通过数学建模和计算,可以预测船舶在不同条件下的运动规律,为船舶的设计、操纵和控制提供科学依据。 贾欣乐的PDF文件可能包含了他在船舶运动数学模型方面的研究成果和经验总结。内容可能涵盖了数学模型的建立方法、应用案例、改进措施等方面。这些研究成果对于船舶相关行业和科研机构具有指导意义,可以帮助改进船舶设计和操纵技术,提高船舶的运动性能和安全性。 总之,船舶运动数学模型是研究船舶运动规律的重要工具,贾欣乐的PDF文件可能提供了相关领域的研究成果和经验,对于船舶设计和控制具有重要意义。 ### 回答2: 船舶运动数学模型是描述船舶在海洋或其他水体中运动规律的数学方程或算法。这些模型通常包括船舶的运动方程、船舶与环境之间的相互作用以及其他影响因素。 贾欣乐的pdf《船舶运动数学模型》可能是一本关于船舶运动模型研究的专业书籍或论文。这本pdf可能介绍了船舶运动数学模型的基本原理、建模方法、应用领域以及相关的数学理论。 船舶运动数学模型在船舶设计、海洋工程、导航控制等领域具有重要的应用价值。通过研究船舶在不同环境条件下的运动模型,可以帮助船舶设计师更好地了解船舶运行时的性能表现,提高船舶的稳定性和操纵性。对于海洋工程来说,运动模型可以用于预测船舶在海浪、风力等外部环境影响下的受力情况,为海上平台、海底管道等结构的设计提供参考。此外,船舶运动数学模型还可用于制定船舶的导航控制策略,保证船舶的安全性和航行效率。 总之,船舶运动数学模型在船舶设计、海洋工程和导航控制等领域有广泛的应用,贾欣乐的pdf《船舶运动数学模型》可能提供了对这一领域的深入研究和理解。 ### 回答3: 船舶运动数学模型是描述船舶在水中运动过程的数学方程或模型。这些模型通常包括船舶的姿态、位置、速度等运动参数的变化规律,以及各种力的作用和力与运动参数之间的关联。 贾欣乐编写的《船舶运动数学模型》是一本以数学模型为重点的学术著作。这本书系统地介绍了船舶运动数学模型的理论基础、建模方法和应用实例。作者通过详细的分析和推导,给读者呈现了船舶运动数学模型的研究工作,并提供了实现这些模型的数学方法和技巧。 船舶运动数学模型的研究对于海洋工程、船舶设计、导航控制等领域都具有重要意义。通过建立合理的数学模型,可以预测和分析船舶在不同环境中的运动特性,为船舶的设计、航行计划和安全控制提供科学依据。 在《船舶运动数学模型》这本书中,贾欣乐不仅介绍了船舶运动的基本原理和主要力学方程,还重点讨论了阻力、力矩、操纵性、稳定性等关键问题。他还提供了一些数值计算方法和仿真实例,让读者能够更好地理解和应用这些数学模型。 总之,贾欣乐的《船舶运动数学模型》是一本对船舶运动数学模型进行深入研究的重要著作。它为从事相关领域研究和实际应用的人员提供了有价值的参考资料,可为船舶相关问题的分析和解决提供理论指导和实用方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是啊秋啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值