目录
第一章 绪论 1
1.1.项目背景和意义 1
1.2.国内外的发展现状 1
第二章 相关理论和技术分析 2
2.1.微信小程序 2
2.1.1微信小程序开发环境 2
2.1.2微信小程序框架 3
2.1.3微信小程序api 4
2.2.SSHE框架 5
2.2.1框架介绍 5
2.2.2框架构成与分层 5
第三章 需求分析与设计 6
3.1.需求分析 6
3.1.1可行性分析 6
3.1.2系统用户角色设计 7
3.1.3系统功能需求分析 9
3.1.4系统性能分析 11
3.2.系统总体设计 12
3.2.1系统物理设计 13
3.2.2系统分层设计 13
3.2.3系统数据流图设计 14
3.3系统数据库E-R设计 16
3.4系统接口设计 17
3.5系统界面设计 17
1.一级界面 18
2.二级界面 18
3.三级界面 18
结 论 19
致谢 20
参考文献 21
第一章 绪论
1.1.项目背景和意义
人类社会初期就出现了媒体这个概念,通过媒体人们获取所需要的信息。媒体的传播大致经历了以下几个阶段:口耳相传,报纸,广播,电视。随着人类科技的不断提高,新媒体以互联网技术为载体,传播更加快捷方便,受众范围也越来越广。
新媒体的形式多种多样,有电子新闻,微信公众号,微博,还有进行实时互动的直播平台。信息传播的效率越来越高,即时性越来越好,以报纸电视为核心的媒体传播有了很大的改善。其中广播也融入了新媒体时代,主要的广播手段有两类,官方搭建的广播站,用户可以调节收音机设备来接收广播站,但是现在收音机设备已经逐渐被大众所淘汰,大部分是车载广播。第二种是用户自己在网站上建立的个人广播,比如私人电台,但是这种广播受众小,不易让大众所知,且做主播的门槛较高。
结合目前广播的现状,本文提出了基于微信小程序的个人电台的设计。通过小程序里的个人电台,每个人可以很方便的在主播与收听者之间进行角色切换,与直播平台类似,不需要特地的频段,不需要固定的地点,每个人都能做电台主播,并且加入好友系统和回听功能,无论何时都能收听主播以往的电台内容。
并且本电台设计是基于微信小程序,有着庞大的用户群体,可以实现播放、录制、收听一系列功能,电台好友功能与微信好友可以进行联系,提高电台的互动性。为了让编程更简单,本电台采用SSHE分层架构。
1.2.国内外的发展现状
让小程序最先流行起来的是淘宝和支付宝,通过APP上面各种各样的小程序,用户可以进行充值花费、购买电影票、骑共享单车、定外卖等操作,极大增加APP功能,节约手机空间的占用。
微信小程序是由工作室或个人编写好一个微信小程序再进行发布,用户可以通过搜索来使用自己想要的小程序,虽然和淘宝支付宝小程序类型不太一样,但是小程序都有一个共同的优点,程序小不用管理。微信小程序类似一个云端U盘,当需要的时候进行找出小程序,不需要的时候就寄存在云端,完全不占用用户手机系统。
程序实现互动的类型有商品与用户的互动(B2C格式),如电子商务;用户与用户的互动(P2P格式),如当下各种社交软件;微信的互动模式在B2C格式的基础上将商品变为服务类型,与用户进行互动,即C2P格式。
微信小程序采用PHP开发,与一般的手机APP相比,借助于微信可以跨平台使用的功能,微信小程序也可以进行跨平台使用,不用针对不同的平台开发不同的程序。和H5开发模式相比,PHP稳定性更好,所以微信小程序有着广阔的发展空间。
为了解决传统广播需要特地频段,接收的设备也比较繁琐的缺点,出现了猫扑这类的网络电台,但是由于需要通过计算机进行接收,本质上与收音机接收都具有很大的设备局限性。12年之后,出现了大量的个人电台,比如酷狗音乐,网易云音乐,M站等,通过智能手机为载体,迅速在人群中流行。但是手机APP数量越来越多,体积也越来越大,且缺少电台主播与听众间的社交性。
分析国内外广播的发展现状,为了解决收音频段,接收设备,占用系统资源等一系列问题,基于微信小程序开发个人电台就有很大的发展前景了。
第二章 相关理论和技术分析
2.1.微信小程序
2.1.1微信小程序开发环境
在进行小程序开发使,要进入专门的开发网站,申请小程序开发账号。本设计是个人程序,在网站里进行主体认证,提交小程序图标、名字等信息,并填写开发者信息,个人电台需要选择图片音频视频类的程序开发选项,并绑定开发者微信号,之后可以获得一个专门的APPID。
在小程序申请阶段完成后,下载开发者工具,通过开发者微信号进行登录,创建项目,输入申请时填写的名称、APPID,创建开发目录。
将小程序的代码全部编写好后,就可以上传自己的微信小程序,需要填写小程序的版本号,并选择文件的存储位置。微信小程序上传后填写小程序的标签、名字进行审核。
2.1.2微信小程序框架
微信小程序利用MVC的开发思想进行框架搭建,包括逻辑、基础、视图等层次。小程序根目录下面必须要存放小程序逻辑实现程序(app.js),小程序公共设置程序(app.json),公共样式表程序(app.wxss)这三个程序。小程序的每个界面又是由四个文件构成,页面逻辑文件(js),页面结构文件(wxml),页面配置文件(json),页面样式文件(wxss),开发者可以自己定义界面的名称。 在小程序根目录的json文件,可以对系统进行全方面的设置,主要包括五个方面:对页面路径进行设置(page属性),对窗口表现进行设置(windows属性),对网络超时时间进行配置(networkTimeout属性),对底部tab表现进行设置(tabbar属性),对debug模式进行设置(debug属性)。
本次音乐电台小程序的逻辑层,采用javascript语句来编写,逻辑层的主要功能是实现和视图层的信息传递,逻辑层将处理好的数据发到视图层,然后视图层按照处理完的数据进行指令反馈。逻辑层中APP函数用来对程序进行注册,getAPP函数可以获取微信小程序实例。而在Page函数的注册界面,每一个界面的时间都由对应的函数来设定。Onready对界面进行第一次渲染,onshow显示界面,onhide隐藏界面,onload监管界面,onunload可以卸载界面。
对wxml文件和wxs文件编写的工作是在视图层上进行的。Wxml文件主要功能是对小程序产生的数据进行绑定,对列表进行渲染,对小程序各功能模块进行设定,设置事件处理函数。Wxs文件是一种特殊的模块,可以在模块里进行代码的编写,配置变量。
微信小程序中的基础库可以对程序编写提供很多便利,但是基础库是针对不同的系统版本提供不同的基础库,且高版本基础库无法兼容低版本基础库。
2.1.3微信小程序api
由于个人电台微信小程序需要实现各种各样的功能,就需要借助微信上各种应用程序接口(api)来进行小程序的开发。
1.网络请求
可以通过wx的request 接口来进行网络请求。使用该接口时,需要填写相关信息,包括服务器接口的地址,网络请求的参数设定,请求的类型是get还是post等等,并且对json设定相关配置,编写对请求成功或者失败的情况进行处理的回调函数。
2.文件的上传与下载
通过 wx.uploadfile 和 wx.downloadfile 接口来实现上传文件或者下载文件。在进行文件上传时,需要选择服务器地址,上传的文件的名称和系统路径,在进行文件下载时需要对下载资源的地址,请求header之类的参数进行设置。
3.录音
为了能够顺利搜集主播的声音并实现电台的回播功能,需要小程序支持录音功能,录音功能需要使用wx.startRecord和wx.stopRecord这两个接口。
4.背景音乐管理
在主播进行直播时需要设置背景音乐来进行氛围调节,所以需要借助微信小程序里getBackgroundAudioManager功能,对背景音乐的长度,名字,链接的原网页,歌手信息等信息进行属性设置。
5.微信红包
直播平台需要有打赏功能来对主播的直播内容表示肯定,提高主播的积极性,所以个人电台小程序就需要通过微信钱包来进行支付等操作。通过request Payment接口来实现微信支付的操作,通过get User Info来读取用户的相关信息,通过authorize接口来获取微信的授权,还需要开发者文档里各种界面控件的接口来辅助实现。
2.2.SSHE框架
SSHE框架是一个大型整体的框架,是通过好几个框架来整合重组形成的新框架。SSHE框架里主要是由Spring,Struts和Hibernate这三个主要的框架构成的。
2.2.1框架介绍
Spring框架分为七个模块,具有轻量级控制反转(LoC)和面向切面(AOP)的特点。
Struts 框架是通过采用 JSP 技术,实现了 mvc 的框架。Struts 包含三个层面,分别是 model,view 以及 control。model 层面,包括 Action 以及 Actionform 两个概念子系统。View 层包括 Struts taglib 以及 jsp 两个标准。控制层包括ActionServlet。
Hibernate 框架主要用来实现系统持久层。其主要由 Session、Sessionfactory,configuration 、 transaction 、 query 构成。 Hibernate 的基本执行流程是通过configuration 的 configure 函数进行读取并解析 Hibernate 的 cfg 的 xml 文件,并由这个配置文件中的 mapping 属性等读取映射消息。还会通过 config 的buildSessionFactory 进行 SessionFactory 的创建。创建后,会通过 openSession 文件打开 Session,并调用该句柄的 beginTranscation 函数进行事物的处理。结束后调用 commit 函数进行事物的提交。提交结束后,关闭相应的 Session 及 Session制造工场。
2.2.2框架构成与分层
SSHE 完美展示了mvc 的理念。SSHE框架将小程序的系统分成了三层,从下往上依次是数据持久层,业务逻辑层,表示层。
其中 Struts 是对系统的 mvc 进行分离,并控制业务的跳转。Hibernate 进行持久层的支持。而 Spring 属于 Struts 与 Hibernate 中的润滑剂,让二者更容易配合。
表示层通过 Struts 提供的 jsp 页面进行界面交互,并根据配置文件进行 Action的处理,这个 Action 是通过 Action Servlet 接受的 request 进行委派的。
业务层,是通过使用 Spring 提供的 IOC 容器以及 Model 组件共同完成对于数据处理组件的处理。
持久层主要是通过 Hibernate 实现的。Hibernate 将 model 与数据库中的表象相互映射,同时处理 DAO 组件发送来的请求,并返回结果。
第三章 需求分析与设计
3.1.需求分析
需求分析是构建微信小程序瀑布模型的出发点。需求分析就是将小程序黑盒带白核逐渐变化的过程。要开发一个微信小程序,第一步就是进行需求分析,分析这个小程序有没有开发的价值和开发出来后的意义,然后要对小程序能不能设计成功进行分析。开发者在进行小程序需求分析时,要充分考虑每一个能考虑的地方,包括小程序要包含什么功能以及怎么实现这些功能,以及小程序开发出来的运行性能怎么样。小程序开发前的需求分析就相当于军队作战前的战略规划,只有充分规划到每一个细节,才能打出一场漂亮的胜仗。通常开发者可以使用面向问题域的分析方法,面向对象的分析方法,结构化的分析方法这三种方法来进行需求分析。
在进行个人电台小程序的开发中,选择结构化的分析方法,将所需要的功能分为各种小模块,能够有条理的划分功能的范围和逻辑;在个人电台设计中,采用UML方法来对小程序的一些功能、内置数据库进行进行建模。在对功能进行开发时,本次小程序设计采用了前后台模块分类方法。
3.1.1可行性分析
1.经济可行性
由于传统的广播电台只能在广播站规定的时间内放送规定的内容,所以用户就不能按照自己的时间来选择自己感兴趣的电台频道,严重限制了用户使用量,观看人数减少,广告的投放也会跟着减少,从而电台的经济效益就会降低。本微信小程序加入了节目回放的功能,即使时间上有偏差,用户仍能收听到自己错过的电台内容,每个电台时间都能在之后反复利用,可以增加用户的收听人数,从而能给主播和平台带来不少的收益。平台融合了现在直播平台的功能,用户可以通过微信钱包对主播进行打赏,也能为主播和电台带来收入。并且微信小程序搭载在微信上,不需要再去购买单独又贵的软件,所有开发信息都是开源的,开发者只需要在微信小程序注册授权和阿里云服务器的搭建时投入少量资金。所有个人电台微信小程序经济性很高,低投入,高回报。
2.技术可行性
小程序在开发时以瀑布模型为开发流程,采用UML技术进行需求分析,其中包括数据流图、E-R图、用例图等等。为了便于开发,小程序的网络接口采用apiview 供给记录系统的接口。在进行电台前台的开发时,使用PHP语言和进行微信小程序开发时的工具箱,对后台进行开发时,利用分层技术,采用SSHE框架。尽管微信小程序才刚刚出了没几年,属于新兴行业,但是在进行小程序设计时,微信提供了非常全面的开发文档供开发者参考,其他所需要的技术网上可以找到许多差不多的代码,非常成熟。所以在进行个人电台微信小程序设计时,技术上是可行的。
3.操作可行性
在进行个人电台设计时,操作界面可以模仿时下流行的APP。通过手机授权使用手机自带的麦克风功能进行音频的录制,通过微信扫一扫和微信钱包,来实现电台里互加好友、对主播的打赏的功能,通过微信直接搜索小程序就能直接使用,不需要通过各种应用市场进行APP下载,可以让用户有更快捷更方便的使用体验。对电台后台进行操作时,通过精心设计的管理界面,各项功能罗列清晰,省去繁琐的操作。所以,个人电台微信小程序具有操作可行性。
3.1.2系统用户角色设计
在对小程序的用户角色进行设计时,需要考虑不同的使用者,不同的需求,来对小程序的功能进行设计。个人电台小程序的使用者可以划分成两类,普通用户和程序管理员。普通用户从移动端使用个人电台,并运行里边的各项功能,程序管理员从后端对程序的各种数据进行管理。
由于小程序搭载在微信平台上,所以只要得到微信的授权就可以登录小程序进行使用,不需要单独登录电台,普通用户需要的功能大体如下:
·浏览广播节目,这里的广播节目包括两种,用户查看当前正在进行的广播,用户查看好友的广播。
·电台信息查看,电台信息查看主要查看电台的简介、主播的个人资料、主播开播时间,并进行节目搜索,节目搜索又有通过电台类别搜索,通过电台名字搜索。
·添加好友,可以从微信的好友列表、输入对方昵称、进入对方的个人主页进行添加好友操作。
·收听广播,在收听之余能够对电台主播进行打赏和留言。
·录制广播,在进行录制时需要能够自己选择背景音乐。
·广播回放。
个人电台小程序普通用户功能图如图3-1
图3-1 个人电台小程序普通用户功能图
小程序的后台管理者,需要的功能主要是管理小程序的各种数据。主要管理普通用户的行为,主播直播的内容,可以支持的BGM,电台首页界面、操作日志等。主要实现的功能图如图3-2.
图3-2 个人电台小程序管理员功能图
3.1.3系统功能需求分析
电台小程序在功能上要满足上面两种角色的需求,即在前台用户能够随时随地可以收听电台广播的听众需求,主播能通过小程序随时随地进行直播的管理员需求,这两种功能需求是系统功能需求的总业务需求。
1.收听者功能需求
(1)电台的筛选
电台用户在电台主界面有两种方法进行电台的查看,查看主界面上的热门电台,查看好友电台。通过主界面上热门电台的展示,可以很直观很快捷的找到当前最受听众欢迎的主播,通过好友电台界面,可以查看好友的电台记录,或者当前正在进行直播,或是以前记录保存下的历史直播记录。除了两种查看电台的功能,如果事先知道主播昵称,或者主播的房间号,可以通过搜索栏精确搜索,如果没有很强的目的性,可以通过标签进行模糊搜索,在自己感兴趣的栏目下收听。这几种电台查看方式,结果都是由电台主播预先设置的图片、电台名称、主播昵称来进行显示。
(2)节目的收听
选择自己感兴趣的电台后,在直播状态下,听众可以根据自己的需求,通过手机的音量键或者节目下面的喇叭图标调节声音大小,如果主播是自己喜欢的类型,可以点击主播头像来关注该主播,以后主播在直播时可以发消息提醒,如果对主播不感兴趣,按下返回键可以回到电台主界面,选择其他电台。
(3)回放
如果搜索电台,该主播暂时不在直播,可以进入主播的个人页面,收听主播上传的往期节目。
(4)直播
对比主流的直播APP软件,本次设计的个人电台微信小程序的优势就是直播门槛低。只要在直播节目自己创办一个自己的电台,为自己的电台去个名字和电台内容的简介,提取直播内容的关键标签,可以让其他用户搜索到自己的电台。
在拥有自己的电台后,用户可以录制自己的节目,在此过程中,用户通过小程序自带的BGM库或者自己的本地音乐库选择自己想要的BGM,节目录制完毕后,可以选择上传到个人主页,让其他人可以搜索看到,或者保存到本地自己欣赏或进行后期加工。
(5)评论
由于个人电台没有直播画面,仅仅是音频的传播,所以可以在电台下面设置评论栏来代替直播平台的弹幕功能,评论栏可以实时发送和主播进行互动,也可以回放收听节目时表达自己的看法。
(6)关注系统
个人电台也包括社交元素,通过电台里的好友列表可以选择好友进行关注,或者通过主界面的搜索栏搜索自己感兴趣的主播进行关注,关注列表的人如果开始直播,小程序会第一时间提醒用户,方便及时收听。
2.管理员功能需求
(1)用户管理
用于电台面对用户群数量众多,难免会有许多非法进行操作的用户,比如进行直播时包含色情、暴力等不和谐因素,非法窃取其他用户的个人信息,评论栏中语言恶劣,对于有这些行为的用户及时进行管理,限制这些用户某些功能的使用,或者直接封号处理,而对于直播内容积极向上粉丝、观众人数较多的用户,可以将他们的直播电台放在首页,让更多人可以进行收听。
(2)电台管理
除了对用户进行管理之外,一个用户可以拥有多个电台,视情况可以仅处罚操作不规范的电台,或是封禁期间进行节目内容整改,或者永久删除电台,电台里的往期节目也会一并删除,而用户其他的电台不受影响,仍然可以被其他用户通过个人主页,搜索栏搜索来查看,当用户被封号后,用户栏下所有的电台也一并删除。
(3)背景音乐管理
为了迎合不同主播的需要,可以对小程序内置BGM库进行BGM的添加和删除,及时添加时下热门的音乐,并删除冷门的音乐减少数据库的使用。
(4)节目管理
对于一个电台旗下如果有一期的节目不符合直播要求,可以进行删除操作,有权限查看并管理主播所有电台和电台下的所有节目。
(5)评论管理
为了营造一个开放和谐的评论区,管理员需要对不恰当评论及时进行查看并删除,但是管理员不可直接更改用户的评论。
3.1.4系统性能分析
在进行微信小程序的设计时,需求分析不仅仅是对小程序的功能需求进行分析,还要对小程序的性能进行需求分析。因为功能分析只是为了最终的使用,但是如果小程序的性能不够好,就可能会在运行过程中导致小程序的崩溃,影响小程序的正常使用。系统的功能需求分析和性能需求分析两者有着密不可分的关系,小程序强劲的性能能更流畅的实现各种功能,而小程序功能设计的科学性又影响着性能的实现。在小程序设计时,需要考虑的性能需求如下:
(1)可靠性能分析
个人电台小程序在使用时会有许多实时性的互动,并且涉及金钱的交易,由于搭载在微信上,小程序的崩溃也会导致微信的崩溃,可能引发许多不可知的错误,从而会让用户的使用体验很糟糕。所以为了保证小程序能够可靠平稳的运行,需要有很好的自我修复性,如果小程序负荷过大发生崩溃,能够在短时间内自动修复继续回到原来的操作界面,而不需要用户强行关闭微信。并且电台同一时间用户量比较大时,尽量保持系统的流畅性,这就需要设计一个性能良好的数据库。个人电台的设计也要符合微信小程序的性能指标,严格控制电台容量大小,限制页面层级深度。为了增加可靠性,需要小程序有一定程度的容错性,举个例子,在用户选取电台昵称时,已经有过重复的名字,或者昵称里包含标点符号,及时提醒用户更换昵称。
(2)易用性能分析
尽管小程序不需要传统app一样从应用市场进行下载安装,但是打开微信,搜索小程序,加载,本身就包含一系列操作,所以在使用时,应尽量减少用户的烦躁感,对电台小程序的各项功能进行简化与浓缩,让小程序更方便的让用户进行使用,比如在用户进行操作时,界面简洁清晰,主界面上功能按钮分门别类,可以实现大部分功能,减少二级界面,这些都能很大程度上改善用户的使用体验。
(3)安全性能分析
由于微信也是现代人们广泛使用的社交软件,里面会存储许多用户私人信息,电台小程序在使用时需要获得微信授权,所以要充分保护用户的个人隐私信息。电台的打赏功能也需要调用微信钱包的相关功能,一起其他功能可能需要获取用户地理位置信息,因此必须保证小程序有良好的安全性能,保障用户的个人利益不受损害。
(4)兼容性能分析
尽管小程序通过微信能够实现安卓、IOS的双端运行,但是除了移动设备,人们平时办公娱乐也会使用计算机等设备,PC端的兼容性也是小程序需要考虑的部分。
(5)维护性能分析
小程序系统在运行过程中可能会需要进行功能升级,BUG修复等维护行为,所以需要在小程序设计时对各项层级进行分离,并采用不同的代码,这样在对某一层级进行修改维护时不会影响到其他层级的正常使用
3.2.系统总体设计
系统总体设计是将系统总体框架构造完成后,对每一个层级所要实现的功能进行细化。总体框架类似于人身体的骨干,支撑着系统运行。系统的总体设计又叫做系统的物理设计,为后面对系统每个模块进行详细设计打下了基础,可以更方便地填写后面的代码。
3.2.1系统物理设计
对小程序进行物理层面设计时可以分为系统的应用表现层、系统的网络层、系统的功能层、系统的技术层和系统的数据库层这五层,如图 3-3 所示。
图3-3 小程序的物理设计
3.2.2系统分层设计
在对电台小程序的后台开发中,利用MVC对小程序进行分层设计,主要包括持久层、业务逻辑层、视图层这三个层次。对程序进行分层设计可以在以后运行过程中对小程序进行日常维护、添加新功能,即在功能实现对应的层级里写入相关代码就可以很方便做到。每个功能的代码只要改变它们直接的逻辑关系,就能进行反复使用。如果小程序没有进行分层设计,那么在后期维护中,只要修改了一处的代码,整个程序就会收到影响,对程序的完善和升级造成很大阻碍。
本次小程序设计采用的SSHE框架,就能很好的践行MVC思想,对程序进行分层设计。本文前面已经介绍SSHE框架的主要概念和框架构成,Struts、Spring、Hibernate分别对应视图层、业务逻辑层、持久层相关功能的实现。
SSHE框架的工作原理就是利用 Struts 编写视图层界面,将 Action 的表单与Spring 提供的 service 相互结合,完成视图层和业务逻辑层的交互,最后通过业务层Spring 调用编写 DAO 接口,Hibernate 处理这些接口完成系统的总体逻辑。如图 3-4 所示。
图3-4 SSHE工作原理图
3.2.3系统数据流图设计
系统的数据流图(Data Flow Diagra,简称DFD)可以分成三个层次,第一次是最基本的数据流图,第二层细化第一层的数据流图,第三次细化第二层的数据流图,此时数据流图已经被充分细化。从数据流图上
DFD形象的表现了小程序每个功能间数据的传递,电台小程序的DFD如下:
第一层DFD,用户使用时向电台系统发出请求,电台系统将结果反馈给用户,用户可以实现自己需要的各种功能,管理员要对电台系统进行维护时发出请求,电台系统将管理员需要的数据列表反馈回去。如图3-5。
图3-5 第一层DFD
第二层DFD将小程序各项功能模块化,分别进行实现,包括的功能分成两大类,对于普通用户包括用户信息查询,广播电台查询,节目查询,广播收听等功能,对于程序管理员包括管理用户,管理电台,管理节目等功能。具体功能实现实现时的流程如图3-6。
图3-6 第二层DFD
第三层DFD是将第二层的DFD进一步的细分,仍属于原子DFD,由于篇幅受限,所以本文只从广播录制这一模块进行第三层的数据流分析,其他功能不再一一赘述,可以自行参考广播录制模块。
广播录制首先需要微信进行授权操作,然后进行电台创建、节目创建、标题设置、选择BGM、录制节目等一系列的操作,并在广播录完后自主选择是否进行存储方便听众进行回放。管理员在广播录制过程中,主要是对电台数据、BGM数据、主播数据进行管理,具体的数据流图如图3-7。
图3-7 广播录制数据流图
3.3系统数据库E-R设计
通过之前的需求分析和DFD的结果来看,电台小程序需要涉及的功能对象有电台用户、电台、节目、BGM、听众评论,他们之间的对应关系是:
对于一个用户来说,可以同时拥有多个好友,用户之间是多对多;用户可以同时关注多个电台,而一个电台也可以同时有许多用户来关注,用户和电台也是多对多;一个用户一次只能收听一个节目,而一个节目可以同时有多个听众,所以用户和节目之间是多对一;一个用户只能创建一个电台,一个电台的创建者只能是一个人,用户和电台是一对一;一个电台的节目可以分许多期,而节目只能在一个电台里播放,所以电台和节目是一对多;一个用户可以发布很多评论,一条评论只能由一个用户来编辑,用户与评论是多对一。一期节目下面可以包含许多用户的评论,但是每条评论只能来一个电台下,评论与电台是多对一;一期节目里可以使用几个BGM,而一个BGM也能在多个节目里引用,所以节目与BGM是多对多。综合分析上述关系,可以得到电台小程序的E-R图,如图3-8。