资源描述
课程设计说明书 NO. 21
播客网
1. 课程设计的目的
ASP.NET是微软提出的用于创建动态Web内容的一种强大的服务器端技术。ASP技术仅仅是微软在IIS的框架结构上进行的一个扩展,而ASE.NET与ASP相比可以说是一个质的飞跃。
ASP.NET与其底层框架.NET紧密结合,为动态的Web开发技术提供了丰富而强大的类库资源。.NET是微软推出的一个跨操作系统、跨平台的应用体系框架,.NET通过一组标准化的类库抽象了操作系统提供的进程、文件、网络等功能,并附加了丰富的文本处理、加密解密、调试跟踪等功能。由于.NET提供了跨平台的机制,因此随着.NET架构移植到其他操作系统中,在.NET框架上开发的所有应用程序,包括应用ASP.NET技术的Web应用程序,也将一并移植过去而不需要做任何改动。
这对于一贯把程序员封闭在Windows平台上的微软来说,不亚于一场巨大的变革,而程序员也会从微软的这次转变中得到很多益处。另外.NET平台提供了先进的装配件结构和类型系统,并且完全集成了Web Service服务,由于从ASP.NET的页面生成的临时对象也属于.NET的类型系统,因此ASP.NET在性能、安全性、可扩展性方面可以借用.NET平台提供的良好框架。
本课程设计的主要目的是在学生在修完主要专业课程之后,通过完成一个综合性软件项目,加深学生对ASP.net基本知识的理解,引导学生综合应用前期所学知识,掌握ASP.net程序设计,提高学生分析实际问题和解决实际问题的综合能力,培养学生应用信息技术开发软件项目的专业技能。通过利用A进行web应用程序的设计与开发,加深对web程序开发的基本知识的理解,掌握动态页面设计的基本方法和步骤,掌握程序调试的一般方法和技巧。培养基本理论分析、解决实际问题的能力及锻炼写设计总结报告的能力。
2. 设计方案论证
2.1 ASP介绍
ASP.NET又称为ASP+,不仅仅是ASP的简单升级,而是微软公司推出的新一代脚本语言。ASP.NET基于.NET Framework的Web开发平台,不但吸收了ASP以前版本的最大优点并参照Java、VB语言的开发优势加入了许多新的特色,同时也修正了以前的ASP版本的运行错误。
ASP.NET具备开发网站应用程序的一切解决方案,包括验证、缓存、状态管理、调试和部署等全部功能。在代码撰写方面特色是将页面逻辑和业务逻辑分开,它分离程序代码与显示的内容,让丰富多彩的网页更容易撰写。同时使程序代码看起来更洁净、更简单。
1996年,ASP 1.0(Active Server Pages)版本出现了,它引起了Web开发的新革命,降低了动态网页开发的难度。以前开发动态网页需要编写大量繁杂的C代码,编程效率非常低下,而且需要Web网页开发者掌握非常高的编程技巧。而ASP使用简单的脚本语言,能够将代码直接嵌入HTML,使设计Web页面变得更简单。虽然ASP非常简单,但却能够实现非常强大的功能,这一切得益于其组件。特别是ADO组件,使得在网页中访问数据库易如反掌。这一切推动了动态网页的快速发展与建设,同时使ASP得到迅速流行。
1998年,微软公司发布了ASP 2.0,它是作为Windows NT 4 Option Pack的一部分提供的。ASP 2.0与ASP 1.0的主要区别是外部的组件可以初始化,使所有的组件都有了独立的内存空间,并且可以进行事务处理。内置的Microsoft Transaction Server(MTS)使制作组件变得更容易。
2000年6月,微软公司宣布了自己的.NET框架。.NET框架的基本思想是:把原有的重点从连接到互联网的单一网站或设备转移到计算机、设备和服务群组上,而将互联网本身作为新一代操作系统的基础。这样,用户将能够控制信息的传送方式、时间和内容,从而得到更多的服务。
2001年,ASP.NET浮出水面。它最初的名字为ASP+,后来改为ASP.NET。ASP.NET是微软公司开发的一种建立在.NET之上的Web运行环境,它不是ASP的简单升级,而是新一代的Active Server Pages。ASP.NET是微软公司新体系结构Microsoft.NET的一部分,其中全新的技术架构使编程变得更加简单。借助于ASP.NET,可以创造出内容丰富的、动态的、个性化的Web站点。ASP.NET简单易学、功能强大、应用灵活、扩展性好,可以使用任何.NET兼容语言。[4-5]
2002年微软发布.NET正式版本.NET Framework 1.0,其中的ASP版本就是ASP.NET 1.0,在此以前发布了两个.NET测试版本Betal和Beta2。
2003年微软发布了.NET Frameworrk 1.1正式版,其中ASP版本就是ASP.NET 1.1。
2005年微软发布.NET Framework 2.0正式版本,也就是ASP.NET 2.0。
2.2 需求分析
当今,用户个性化视频网站发展迅速,例如比较受欢迎的优酷视频网、土豆视频网等等,还有现在的移动端视频app,如美拍、映客等等,每天上传的视频与在线视频的观看点击率有时都可以超过百万次。通过视频来展示自我、彰显个性化的方式已经受到广大网友的青睐与推崇,在带来这些的同时,也能为自己带来不菲的收益,现在视频产业链也发达起来。
长期以来,人们直角拍摄或制作的视频只能存放在自己的电脑或移动硬盘中,如果要将自己制作的精彩视频分享给亲朋好友,只能通过一些传统的方法(如刻录光盘等等)邮递给亲朋好友,费时费事还费力。如果能开发一个视频播放网站,可以对视频进行上传分享给朋友,或者让在不太地方的其他人,乃至世界各地低的人都能观看自己制作的精彩视频,那将是吧一个快乐分享给世界的一个过程。
由于上面描述的需求出现了比较受欢迎的播客网。播客网是用户通过视频的形式来展现自我的平台。在播客网中,用户可以注册成为播客网的会员,然后就可以就可以在网站中发布自己的视频。其他用户可以在播客网站中欣赏到会员所发布的视频,欣赏完后还可以发表自己对视频的看法或意见。
另外,在播客网站中还对会员用户实施了积分排名功能,例如某个会员发布的视频越多,所得的积分也就也高;在网站的后台管理模块中可以对视频进行管理,会员所发布的视频必须通过管理员审核后才可以在前台页面中显示,如果某个会员发布了违法的视频,管理员还可以使用冻结账号的功能。
2.3系统目标
播客网实施后,应达到一下目标。
1) 界面设计友好、美观,数据存储安全、可靠。
2) 普通用户可以分类观看视频,如搞笑类、体育类等。
3) 强大的视频搜索功能,保证视频查询的灵活性。
4) 普通用户及会员都可以对视频进行评论。
5) 会员积分设置,如果某个会员发布的视频越多,所得的积分也就越高。
6) 视频的合法性审核,如果某个会员发布了违法的视频,管理员可以使用冻结账户的功能。
7) 提供视频排行榜,主要根据视频点击率排行。
8) 个人中心管理,可以对自己上传的视频进行管理。
9) 提供管理员对视频排行、网站动态公告、循环广告播放等功能设置。
10) 系统最大限度地实现以维护性和易操作性。
3.设计结果与分析
3.1系统功能设计
3.1.1 流程图
播客网视频网站开发的流程图如1所示。
图1 系统流程图
3.1.2 系统功能结构
根据播客网站在线视频审核特点,设计管理员后台审核功能结构如图2所示。
图2 后台审核功能结构图
后台管理功能:
1) 视频分类管理模块:管理员将视频分类。
所有上传的视频将被分配到一个特定的目录子模块,方便查看所有上传的视频;还有一个未审核目录子模块:所有上传但是尚未审核的视频可以在该目录查看,管理员在该模块中审核那些未审核的视频,合格就将其添加到已审核目录模块;已审核视频目录子模块:在该模块管理员可以管理已审核的视频。
2) 其他管理模块:
改模块下有两个子模块:用户管理子模块和系统管理子模块。
用户管理模块:管理员可以对用户账号进行管理,比如对一些违规用户的账号冻结;系统管理子模块:管理员可以查看系统的日志和运行状态,看是否有错误发送,以便及时做出反应。
3.2 构建开发环境
1) 网站开发环境
网站开发环境:Microsoft Visual Studio 2017 Community集成开发环境。
网站开发语言:ASP.net+C#。
网站后台数据库:SQL Server 2014 express。
开发环境运行平台:Windows 10。
2) 后端服务器
操作系统:Windows 10。
Web服务器:Internet 信息服务管理器。
数据库服务器:SQL Server 2014 express。
浏览器:Firefox。
网站服务器运行环境:Microsoft .NET Framework 4.0。
3) 客服端
浏览器:Firefox。
分辨率:1024*768像素。
3.3 数据库设计
本课程设计——播客网站,采用SQL Server 2014 express数据库,名称为palyVideo,其中包含9张表。下面分别给出数据库概要说明、数据表E-R图及主要数据表的结构。
3.3.1数据库概要说明
为使数据表有一个跟清晰的认识,从数据库中截取了数据表树形结构图,如图3所示。其中包含本网站所以数据表。
图3 数据库表
3.3.2数据库概念设计
通过对本系统进行的需求分析、系统流程设计以及系统功能结构的确定,规划系统中使用的数据库实体对象,具体说明如下:
注册会员发布视频后,需要管理员在网站后台管理中给予审核,如果史违法的视频将不给予审核通过。视频信息应当包含所以的详细的信息,包括视频标题,视频内容,视频类型,视频审核状态等等。这些详细的视频信息能够帮助管理员轻松管理视频,如是否需要对视频进行审、对视频的分类。这些信息海可用与搜索时,根据用户的输入,对视频进行分类,以方便用户查找视频,根据视频类型和图片用户可以轻松的找到自己想哟啊找的视频。视频详细信息实体图如图4所示。
再精彩的视频如果没有网友的反馈也会黯然失色,所以还需要一个模块来让用户评论。评论版面应包含一些用户的基本信息,这些基本信息需要有评论人的用户名和评论的内容,评论时间。还应有一些关于视频的信息,比如评论是对针对于那个视频的,所以应有一个视频编号与视频对应,以视频编号做主键,课将用户有关的评论信息存入数据库,最后更新到页面上,同时用户与视频发布者间可以相互交流,用户与用户间也可以进行交流,以提升用户体验。视频评论信息实体如图5所示。
图4视频详细实体图
图5视频评论信息实体
为了激励视频发布者们,使他们更加热衷于视频制作,为了使他们更加努力做出优秀的视频,并且能从网站上得到用户们喜爱的反馈,还需要用户对于精彩视频的评分。此评分又简单的用户顶起数而对视频进行排行。对于精彩视频由用户顶起后,其受到的关注度就会大大提升,就有机会在网站主页面里出现,如此就会得到更多的关注。视频排行信息如图6所示。
图6视频排行实体
好的视频如何能被网友顶起,可以通过设置投票系统来实现。在视频播放的版面,有评论区,也有投票版面,每个用户只能投一次,而且所投的票,应与视频编号保存在一个表中,网站还应将所有用户的投票加起来,以实现排名。视频投票信息图如图7所示。
图7 视频投票信息实体
3.3.3数据库逻辑结构设计
设计号数据实体E-R图之后,需要根据实体E-R图设计数据表结构。下面主要给出数据表的数据结构用途。
userRegister(用户注册表)。
用户注册表用于保存用户的注册信息,该表的结构如表1所示:
表1 userRegister表
字段
类型
长度
说明
ID
int
4
自动编号
userName
varchar
30
用户登录名
userPass
varchar
30
用户密码
passQuestion
varchar
50
密码提示问题
passAnswer
varchar
50
密码提示答案
email
varchar
50
Email地址
lock
bit
1
是否锁定
lockname
varchar
50
锁定原因
videoInfo(视频详细信息表)。
视频详细信息表主要用于保存用户上传的视屏的详细信息。该表的机构如表2所示:
表2 videoInfo 表
字段
类型
长度
说明
ID
int
4
自动编号
userName
varchar
30
用户登录名
videoTitle
varchar
30
视频标题
videoContent
varchar
500
视频内容
videoDate
varchar
8
视频发布日期
videoPath
varchar
50
视频路径
videoPicture
varchar
50
视频图片路径
videoType
char
10
视频类型
playSum
int
4
视频点击率
flower
int
4
视频顶人数
tile
int
4
视频踩人数
monthSum
int
4
视频本月点击率
Auditing
int
1
审核状态
videoIdea(视频评论表)。
视频评论表主要用于保存视频的评论信息。该表的结构如表3所示:
表3 videoIdea表
字段
类型
长度
说明
ID
int
4
自动编号
userName
varchar
50
评论人
content
text
16
评论内容
videoId
varchar
8
评论视频的编号
issuanceDate
varchar
50
评论时间
videoTaxis(视频排行表)。
视频排行表主要用于保存视频每月的排行信息。该表的结构如表4所示:
表4 videoTaxis 表
字段
类型
长度
说明
videoId
int
4
视频编号
videoType
char
10
视频类型
videoTitle
varchar
50
视频名称
playSum
int
4
视频点击率
taxisMonth
char
10
视频排行月份
videoPoll (视频投票信息表)。
视频投票信息表主要保存已投票的用户IP和视频ID。该表的结构如表5所示:
表5 videoPoll表
字段
类型
长度
说明
ID
int
4
自动编号
IP
varchar
30
投票者的IP
videoId
varchar
4
投票者的视频ID
belletin(公告信息表)。
公告信息表主要用于保存公告信息。该表结构如表6所示。
表6 belletin表
字段
类型
长度
说明
ID
int
4
自动编号
Title
varchar
50
公告标题
content
varchar
100
公告内容
issuanceDate
datetime
8
发布日期
3.3.4文件夹组织
为了便清晰本站的设计,在此将网站文件的组织结构展示出来。如图7所示:
3.4 公共类设计
设计公共类,可以提高开发效率以及方便后对程序的维护。对于一个程序员来说,公共类是不可或缺的一部分。在本程序中编写了两个公共类,这两个公共类分别为数据库类operateData和公共方法类operateMethod。数据库操作类主要用于编写对数据库常用的一些操作。公共方法类用于编写在程序中比较常用的方法或易于日后修改的方法。
3.4.1实现添加、删除和更新操作
execSQL()方法用来执行数据表的添加、删除和更新操作,返回一个布尔值用来表示SQl语句是否执行成功。该方法编写在数据库操作类operateData中,调用时需要传入一个string类型参数,该参数为需要执行的SQL语句。实现代码如下:
/// <summary>
/// 执行添加、删除和更新数据操作
/// </summary>
/// <param name="sql">SQL语句添加数据、删除数据和更新数据</param>
/// <returns>返回一个布尔值,表示操作是否成功!</returns>
public static bool execSql(string sql)
{
SqlConnection con = createCon();
con.Open();
SqlCommand com = new SqlCommand(sql, con);
int Ex=com.ExecuteNonQuery();
con.Close();
if (Ex>0)
{
return true;
}else{
return false;
}
}
3.4.2实现返回指定列操作
自定义getTier()方法用于返回指定的列的值,编写在dataOperate类中。调用该方法时需要传入一个字符串变量,该变量表示需要执行的SQL语句。该方法编写在数据库操作类中,将返回一个字符串变量,该字符串表示查询出的列值。实现代码如下:
/// <summary>
/// 返回某一个列的值
/// </summary>
/// <param name="sql">SQL语句用来查询某一列的值</param>
/// <returns>返回列值,该值为字符串类型</returns>
public static string getTier(string sql)
{
SqlConnection con = createCon();
con.Open();
SqlCommand com = new SqlCommand(sql, con);
SqlDataReader sdr = com.ExecuteReader();
sdr.Read();
string tier=sdr[0].ToString();
con.Close();
return tier;
}
3.4.3实现返回表中所有数据
自定义getRows()方法用来返回表中的所有数据,该方法返回一个DataTable对象。该方法编写在数据库操作leiperateData中,调用时需要传入1个string类型的参数,该参数为需要执行的SQL语句。实现代码如下:
public static DataTable getRows(string sql)
{
DataSet ds;
SqlConnection con = createCon();
con.Open();
SqlDataAdapter sda = new SqlDataAdapter(sql, con);
ds = new DataSet();
sda.Fill(ds);
con.Close();
return ds.Tables[0];
}
/// <summary>
/// 查询数据是否在表中存在
/// </summary>
/// <param name="sql">SQL语句查询一行数据</param>
/// <returns>返回int类型大于1表示存在</returns>
3.4.4实现用户登陆操作
自定义login()方法用来实现用户登陆查询,主要通过使用SqlCommand.Parameters属性的参数传值讲非法字符过滤掉,来防止SQl注入式攻击。该方法编写在数据库操作operateData中,返回一个布尔值,该值为True时表示登陆成功,为False时则为登录失败。调用该方法时需要传入3个string类型产生,第1个sql参数表示需要执行的SQl语句,第2个name参数表示登陆名,第3个pass参数表示登陆密码。实现代码如下:
/// <summary>
/// 该方法用来实现登录查询
/// </summary>
/// <param name="sql">需要执行的SQL语句</param>
/// <param name="name">登录名</param>
/// <param name="pass">密码</param>
/// <returns>返回一个布尔值,true表示登录成功false表示失败</returns>
public static bool login(string sql, string name, string pass)
{
SqlConnection con = createCon();
con.Open();
SqlCommand com = new SqlCommand(sql, con);
com.Parameters.Add(new SqlParameter("@name", SqlDbType.VarChar, 20));
com.Parameters["@name"].Value = name;
com.Parameters.Add(new SqlParameter("@pass", SqlDbType.VarChar, 20));
com.Parameters["@pass"].Value = pass;
int Ex=Convert.ToInt32(com.ExecuteScalar());
con.Close();
if ( Ex> 0)
{
return true;
}
else
{
return false;
}
}
3.4.5实现转换视频格式
自定义changeVideoType()方法将上传的视频转换为.flv格式,并保存到相应的文件夹下。该方法编写在公共方法类operateMethod中,返回一个布尔值,该值为True时表示转变成功,为false时则表示转换失败。调用该方法需要传入3个参数,第1个参数为需要转换的视频路径,第2个参数为视频转换后保存的路径,第3个参数为视频抓图后保存的路径。实现代码如下:
/// <summary>
/// 将视频文件转换成flv格式,并保存到playFile文件夹下
/// </summary>
/// <param name="fileName">需要转换视频的路径</param>
/// <param name="playFile">视频转换flv格式后保存的路径</param>
/// <param name="imgFile">在视频文件中抓取图片后保存路径</param>
/// <returns>成功:返回图片虚拟地址; 失败:返回空字符串</returns>
public static bool changeVideoType(string fileName, string playFile, string imgFile)
{
//获取视频转换工具的路径
string ffmpeg= System.Web.HttpContext.Current.Server.MapPath("../") + ffmpegtool;
//获取需要转换的视频路径
string Name = System.Web.HttpContext.Current.Server.MapPath("../") + upFile + "/" + fileName;
if ((!System.IO.File.Exists(ffmpeg)) || (!System.IO.File.Exists(Name)))
{
return false;
}
//获取视频转换后需要保存的路径
string flv_file = playFile;
//创建Process对象
Process pss = new Process();
//不显示窗口
pss.StartInfo.CreateNoWindow = false;
//设置启动程序的路径
pss.StartInfo.FileName = ffmpeg;
//设置执行的参数
pss.StartInfo.Arguments = " -i " + Name + " -ab 128 -ar 22050 -qscale 6 -r 29.97 -s " + widthOfFile + "x" + heightOfFile + " " + flv_file;
try
{
//启动转换工具
pss.Start();
while (!pss.HasExited)
{
continue;
}
//截取视频的图片
catchImg(Name, imgFile);
System.Threading.Thread.Sleep(4000);
if (!File.Exists(imgFile))
{
File.Copy(System.Web.HttpContext.Current.Server.MapPath("../") + "imgHead\\default.gif", imgFile);
}
return true;
}
catch
{
return false;
}
}
3.4.6实现截取视频图片
自定义catchImg()方法来实现截取视频图片,并保存到相应的文件夹下。该方法编写在公共方法类operateMethod中。调用该方法需要传入2个参数,第个参数表示需要截取图片的视频路径,第2个参数表示截取图片后保存的路径。实现代码如下:
/// <summary>
/// 对视频进行图片截取
/// </summary>
/// <param name="fileName">需要截取图片的视频路径</param>
/// <param name="imgFile">截取图片后保存的图片路径</param>
public static void catchImg(string fileName,string imgFile)
{
//获取截图工具路径
string ffmpeg = System.Web.HttpContext.Current.Server.MapPath("../") + ffmpegtool;
//获取截图后保存的路径
string flv_img = imgFile;
//获取截取图片的大小
string FlvImgSize = sizeOfImg;
Process pss = new Process();
//设置启动程序的路径
pss.StartInfo.FileName = ffmpeg;
pss.StartInfo.Arguments = " -i " + fileName + " -y -f image2 -ss 2 -vframes 1 -s " + FlvImgSize + " " + flv_img;
//启动进程
pss.Start();
}
3.4.6实现过滤HTML字符
自定义filtrateHtml()方法用来实现过滤HTML字符。该方法编写在公共类operateMethod中。调用该方法需要传入一个字符串变量,该变量表示需要过滤的字符串。该方法返回一个字符串变量,该变量表示过滤后的字符串。实现代码如下:
/// <summary>
/// 过滤HTML字符
/// </summary>
/// <param name="str">传入需要过滤的字符串</param>
/// <returns>返回过滤后的字符串</returns>
public static string filtrateHtml(string str)
{
str = str.Trim();
str = str.Replace("'", """);
str = str.Replace("<", "<");
str = str.Replace(">", ">");
str = str.Replace(" ", " ");
str = str.Replace("\n", "<br>");
return str;
}
3.4.6实现恢复HTML字符串
自定义resumeHtml()方法来恢复HTML字符串。该方法编写在公共类operateMethod中。调用该方法需要传入一个字符串变量,该变量表示需要恢复的字符串。该方法返回一个字符串,该变量表示恢复后的字符串。
实现代码如下:
/// <summary>
/// 回复HTML字符
/// </summary>
/// <param name="str">传入需要回复的字符串</param>
/// <returns>返回回复后的字符串</returns>
public static string resumeHtml(string str)
{
str = str.Trim();
str = str.Replace(""", "'");
str = str.Replace("<", "<");
str = str.Replace(">", ">");
str = str.Replace(" ", " ");
str = str.Replace("<br>", "\n");
return str;
}
3.5网站首页设计
3.5.1网站首页技术分析
在使用Session保存数据时,有时可能会因为改写bin目录下的某个文件或其他原因而引起Session中的数据丢失,由于在web.config中Session的配置中mode属性是用来设置Session保存状态的,而默认的参数为Inproc,该参数使Session的保存状态依赖于ASP.NET进程。这个进程不稳定,在某些事件发生时,可能会引起进程的重启,而该进程重启会导致Session的丢失。
为了防止Session的丢失,可以把mode属性的参数设置为StateServer。StateServer是本机中的一个服务,而该服务除非是在电脑重启或者StateService崩溃的时候Session才会丢失。设置该参数的方法如下:
(1) 在web.config文件中设置SessionState中的mode参数为StateServer。
(2) 打开控制面板中的管理工具选项。
在管理工具中打开服务选项,在服务选项中找到ASP.NET状态服务,并启动服务。
3.5.2网站首页实现过程
3.5.2.1设计步骤
(1) 创建一个Web窗体,命名为index.aspx。
(2) 在该窗体中添加控件。
图8主页控件
3.5.2.2实现代码
在该页面中创建3个全局变量,用来保存公告标题、内容和公告发布时间。在该页面的加载事件中通过自定义方法来显示视频信息。代码实现如下:
protected void Page_Load(object sender, EventArgs e)
{
bindNew(); //调用自定义方法显示最新视频!
bindHumour(); //调用自定义方法显示搞笑视频!
bindCartoon(); //调用自定义方法显示动漫视频!
bindFilm(); //调用自定义方法显示电影视频!
bindSport(); //调用自定义方法显示体育视频!
bindBulletin(); //调用自定义方法显示公告信息!
}
首页图片如图9。
图9首页
自定义方法bindSport()方法用来绑定视频频信息。由于其他视频信息的绑定类似。在该方法中通过使用SQL语句。查询
展开阅读全文