刘重洋博客系统.docx
《刘重洋博客系统.docx》由会员分享,可在线阅读,更多相关《刘重洋博客系统.docx(40页珍藏版)》请在冰豆网上搜索。
刘重洋博客系统
中原工学院软件学院
软件工程实践课题设计任务书
姓名
刘重洋
软件工程专业.net124班
题目
博客系统的开发
设
计
任
务
开发一个比较完善的基于Web的博客系统。
主要功能包括:
1.管理员登录:
管理员模块;管理博客模块;连接管理模块;游客管理模块;
2.用户注册及登录:
文章管理模块;图片管理模块;评论管理模块通讯管理模块;
3.匿名浏览及评论;实名浏览评论;
开发工具:
C#、ASP.Net、SQLServer2005、
时
间
进
度
第1周:
构思,查阅资料及一些必要准备工作;
第2周:
编写代码,实现大多数博客必要功能;
第3周:
测试,完善代码及报告的构思和完成;
原主
始要
资参
料考
与文
献
[01]杨云.ASP.NET典型系统开发[M]:
北京.人民邮电出版社.2006.6
[02]刘勇.SQLServer2005基础教程[M]:
清华大学出版社.2005.2
指导教师签字:
年月日
课题题目
摘要
博客系统给用户提供了一个很好的交流平台,信息的分享更加的广泛,图片、视频、音频等媒体都可以作为分享的对象。
而且博客简单易用,具有很好的群众基础。
目前国内微博的发展也很迅速,新浪、腾讯等很多信息产业的公司都有自主的微博系统交流平台。
本课题只要着重于简易博客,可局限于局域网的范围,比如一个班级、一个系别等,便于在小范围内的交流与互动,使得信息的传递更加及时、便捷。
简易博客也可称为微博,与博客在本质上有着相同的内涵,置于用只言片语来表达用户的心情、所分享的信息,更加的随心。
本系统实现的事简易博客系统,分为游客、博主和管理员三个用户角色。
1、游客主要是指没有注册成为本系统的用户但同样可以在浏览器上访问本系统的网络用户。
访问到本系统后可浏览博主们所发表的文章,并对文章进行评论。
同样可以进行注册并成为本系统的用户。
2、博主就是注册并成为本系统用户的人,登陆到本系统后,在自己的个人主页可以发表文章,对文章的评论进行管理。
3、管理员是本系统的后台用户,负责对已存在的系统用户(博主)进行管理,比如注册某个用户、修改某用户的信息等;还可以发布一些系统公告信息,并对公告信息进行维护;统计博文的数量
关键词:
博客系统;
目录
摘要1
第1章项目分析1
1.1问题描述1
1.2技术分析1
1.3工程进度计划1
第2章系统分析与设计2
2.1系统分析2
2.1.1参与者2
2.1.2用例及用例规约2
2.1.3用例图7
2.2系统设计7
2.2.1顺序图7
2.2.2类图8
2.2.3系统体系结构设计8
2.3数据库设计9
2.3.1E-R图10
2.3.2关系模式10
2.3.3表的设计11
第3章实现与测试14
3.1注册和登录模块14
3.1.1活动图14
3.1.2界面15
3.1.3代码17
3.1.4测试用例20
3.2博客管理模块20
3.2.1活动图21
3.2.2界面21
3.2.3代码28
3.2.4测试用例30
第4章结束语31
附录:
主要源程序33
第1章项目分析
在互联网越来越普及的今天,信息在人们的日常生活中占据了非常重要的地位。
个人博客系统可以看作是一种在Internet上公开发布的、快速更新的个人网站系统,使用者可以简单快速地完成个人网页的创建、发布和更新,是一个方便的供广大互联网用户相互交流的平台。
使用ASP技术从系统需求分析、系统功能模块设计、系统数据库设计3个方面对个人博客系统进行了设计与实现,并进行了测试,系统运行稳定,测试效果良好。
1.1问题描述
博客系统源码源码描述:
简单的个人博客系统,可以注册会员,对博客进行评论,博客发表,后台可以管理用户功能比较简单,会员登录成功可以添加自己的博客查看相关信息。
1.2技术分析
本系统对数字化信息资源的组织采用数据库。
系统的数据库结构是SQLserver,前台使用ASP技术开发。
信息平台的后台操作采用B/S操作结构以增强系统的安全保密性、系统稳定性和易操作性。
ASP是目前最完备的面向对象语言之一,在未来仍然很有发展前途。
1.3工程进度计划
第1周:
构思,查阅资料及一些必要准备工作;
第2周:
编写代码,实现大多数博客必要功能;
第3周:
测试,完善代码及报告的构思和完成;
第2章系统分析与设计
现今很多人在用博客,用于发表感想、分享资料等;但凡一个经常被使用的系统,被发现BUG的几率在一开始的时候会很大,但随着BUG不断地被发现、修改也就变得越来越少;需求分析就是要将所要现实的功能尽量细节化。
2.1系统分析
本系统对数字化信息资源的组织采用数据库。
系统的数据库结构是SQLserver,前台使用ASP技术开发。
信息平台的后台操作采用B/S操作结构以增强系统的安全保密性、系统稳定性和易操作性。
ASP是目前最完备的面向对象语言之一,在未来仍然很有发展前途。
2.1.1参与者
管理员;用户;游客
2.1.2用例及用例规约
系统用例图如图所示。
用例规约如表所示。
用户信息管理用例规约表
用例编号:
1用例名:
用户信息管理作者:
XXX
用例描述:
该用例描述了博客系统用户信息
执行者
博客用户
相关用例
1、注册
2、登录
3、进入管理界面
4、进行博客发表
5、查看并回复评论
前置条件
使用者必须为已注册用户
后置条件
登录成功后,用户可以查看并且查询信息、对信息编辑和修改等
基本步骤
1、注册
2、登录
3、进入管理界面
4、修改信息
管理员对用户信息管理用例规约表
用例编号:
2用例名:
管理员对用户信息管理作者:
XXX
用例描述:
该用例描述了管理员管理博客系统
执行者
管理员
相关用例
1、登录
2、进入管理页面
3、进行用户信息查询
4、查询后进行会员信息编辑
前置条件
使用者必须拥有该功能的使用权限
后置条件
登录成功后,用户可以查看并且查询用户信息、对用户信息编辑等
基本步骤
1、登录
2、进入管理界面
3、进行信息查询
4、编辑会员信息
5、将修改后的信息写入数据库
管理员管理用例规约表
用例编号:
3用例名:
管理员管理作者:
XXX
用例描述:
该用例描述了管理员对管理员的查询修改,删除等
执行者:
管理员
相关用例:
1、登陆
2、进入管理员管理界面
3、查询出管理的信息
4、对用户的信息进行修改
前置条件:
管理员登录系统,并且系统中已存在管理员的相关信息。
后置条件:
登陆成功后,管理员可以进行管理员的信息查询,以及修改信息。
基本步骤:
1、登陆
2、进入管理员管理界面
3、查询出管理员的信息
4、对管理员的信息进行修改
5、编辑的信息写入数据库
管理员添加用例规约表
用例编号:
4用例名:
管理员添加作者:
XXX
用例描述:
该用例描述了管理员对管理员的查询修改,删除等
执行者:
管理员
相关用例:
1、登陆
2、进入添加管理员界面
3、对管理员信息进行输入
4、确认添加管理员
前置条件:
管理员登录系统,并且系统中已存在管理员的相关信息。
后置条件:
登陆成功后,管理员可以进行管理员添加
基本步骤:
1、登陆
2、进入添加管理员界面
3、对管理员信息进行输入
4、确认添加管理员
5、编辑的信息写入数据库
2.1.3用例图
系统用例图如图所示。
2.2系统设计
本系统主要是实现前台参与者(用户)和后台管理者(数据库管理员)的界面实际操作来实现功能信息,并能够在前台显示出来。
其归根结底也就是对数据库的插入、修改、删除和查询。
2.2.1顺序图
2.2.2类图
2.2.3系统体系结构设计
博客系统功能结构图如图所示
博客功能结构图
2.3数据库设计
管理员信息表:
储存管理员基本信息
博文表:
储存发表的文章
博客表:
储存用户的基本信息
游客表:
储存游客基本信息
链接表:
储存链接信息
评论信息表;储存评论信息
2.3.1E-R图
博客系统实体间关系E-R图,如图所示
博客系统E-R图
2.3.2关系模式
关系的描述称为关系模式(RelationSchema)。
一个关系模式应当是一个五元组。
它可以形式化地表示为:
R(U,D,DOM,F)。
其中R为关系名,U为组成该关系的属性名集合,D为属性组U中属性所来自的域,DOM为属性向域的映象集合,F为属性间数据的依赖关系集合。
关系模式通常可以简记为:
R(A1,A2,…,An)。
其中R为关系名,A1,A2,…,An为属性名。
而域名及属性向域的映象常常直接说明为属性的类型、长度。
关系实际上就是关系模式在某一时刻的状态或内容。
也就是说,关系模式是型,关系是它的值。
关系模式是静态的、稳定的,而关系是动态的、随时间不断变化的,因为关系操作在不断地更新着数据库中的数据。
但在实际当中,常常把关系模式和关系统称为关系。
2.3.3表的设计
(1)tb_Admin表,如表2.5所示
列名
数据类型
允许空
是否为主键
BlogID
int
否
是
UserName
nvarchar(50)
是
否
PassWord
nvarchar(50)
是
否
Sex
nvarchar(50)
是
否
ReallyName
nvarchar(50)
是
否
Birthday
nvarchar(50)
是
否
Address
nvarchar(200)
是
否
(2)tb_Article表如表2.6所示。
列名
数据类型
允许空
是否为主键
ArticleID
int
否
是
Author
nvarchar(50)
是
否
Subject
nvarchar(50)
是
否
[Content]
ntext
是
否
BlogID
int
是
否
Time
datetime
是
否
(3)tb_Bolg表,订单表如表2.7所示
列名
数据类型
允许空
是否为主键
ID
int
否
是
UserName
nvarchar(50)
是
否
PassWord
nvarchar(50)
是
否
Question
nvarchar(100)
是
否
Answer
nvarchar(100)
是
否
ReallyName
nvarchar(50)
是
否
Birthday
nvarchar(50)
是
否
Address
nvarchar(100)
是
否
(4)Tb_Revert表2.11所示
列名
数据类型
允许空
是否为主键
RevertID
int
否
是
Subject
nvarchar(50)
是
否
[Content]
ntext
是
否
ArticleID
Int
是
否
BlogID
Int
是
否
Time
datatime
是
否
IP
nvarchar(20)
是
否
VisitorID
Int
是
否
VisitorName
nvarchar(50)
是
否
第3章实现与测试
软件测试的目的决定了如何去组织测试。
如果测试的目的是为了尽可能多地找出错误,那么测试就应该直接针对软件比较复杂的部分或是以前出错比较多的位置。
如果测试目的是为了给最终用户提供具有一定可信度的质量评价,那么测试就应该直接针对在实际应用中会经常用到的商业假设。
不同的机构会有不同的测试目的;相同的机构也可能有不同测试目的,可能是测试不同区域或是对同一区域的不同层次的测试。
3.1注册和登录模块
功能测试包括测试内容和测试结果,测试内容为用户注册到登录的全过程。
测试结果为用户的注册登录过程的检测。
3.1.1活动图
3.1.2界面
主页界面如图所示。
主页界面
点击注册,显示下图界面,注册界面如图所示。
注册界面
注册后显示下面界面才能成功,注册成功界面如图2.11所示。
注册成功界面
注册成功后用户就可以登录,登录界面如图所示。
登录界面
用户登录成功后转到自己的页面,可显示用户发表的文章,如图2.13所示。
用户登录成功界面
3.1.3代码
(1).普通用户注册信息代码
publicpartialclassModule_Admin_Register:
System.Web.UI.Page
{
protectedvoidPage_Load(objectsender,EventArgse)
{
if(Session["UserName"]==null)
{
Response.Redirect("../../Index.aspx");
}
}
protectedvoidbtnOK_Click(objectsender,EventArgse)
{
SqlDatada=newSqlData();
SqlDataReaderread=da.ExceRead("select*fromtb_AdminwhereUserName='"+this.txtName.Text+"'");
read.Read();
if(read.HasRows)
{
if(this.txtName.Text==read["UserName"].ToString())
{
Response.Write("alert('对不起,该用户已经注册!
');location='Register.aspx'");
return;
}
}
read.Close();
stringP_str_Com="insertintotb_Admin(UserName,PassWord,Question,Answer,ReallyName,Birthday,Address"
+",PostCode,Email,HomePhone,MobilePhone,QQ,ICQ,RegTime,Sex,SuperAdmin,IP)values('"+this.txtName.Text+"'"
+",'"+this.txtPwd.Text+"','"+this.txtQues.Text+"','"+this.txtAns.Text+"','"+this.txtRealName.Text+"'"
+",'"+this.txtBirthday.Text+"','"+this.txtAddress.Text+"','"+this.txtPostCode.Text+"','"+this.txtEmail.Text+"'"
+",'"+this.txtHphone.Text+"','"+this.txtMphone.Text+"','"+this.txtQQ.Text+"','"+this.txtICQ.Text+"','"+DateTime.Now.ToString()+"','"+this.DropDownList1.SelectedValue+"','"+this.DropDownList2.SelectedValue+"','"+Request.UserHostAddress+"')";
booladd=da.ExceSQL(P_str_Com);
if(add==true)
{
Response.Write("alert('注册成功!
');location='AdminManage.aspx'");
}
else
{
Response.Write("alert('注册失败!
');location='javascript:
history.go(-1)'");
}
}
protectedvoidButton1_Click(objectsender,EventArgse)
{
SqlDatada=newSqlData();
SqlDataReaderread=da.ExceRead("select*fromtb_AdminwhereUserName='"+this.txtName.Text+"'");
read.Read();
if(read.HasRows)
{
if(this.txtName.Text==read["UserName"].ToString())
{
Response.Write("alert('对不起,该用户已经注册!
');location='Register.aspx'");
}
}
else
{
Response.Write("alert('恭喜您,该用户可以注册!
');");
}
read.Close();
}
protectedvoidbtnBack_Click(objectsender,EventArgse)
{
Response.Redirect("AdminManage.aspx");
}
}
(2)管理员注册页面代码
publicpartialclassModule_Admin_AdminInfo:
System.Web.UI.Page
{
protectedvoidPage_Load(objectsender,EventArgse)
{
if(Session["UserName"]==null)
{
Response.Redirect("../../Index.aspx");
}
if(!
IsPostBack)
{
try
{
SqlConnectionmycon=newSqlConnection(ConfigurationManager.AppSettings["conStr"]);
mycon.Open();
DataSetmydataset=newDataSet();
SqlDataAdaptermydataadapter=newSqlDataAdapter("select*fromtb_Adminwhereid="+Request["id"],mycon);
mydataadapter.Fill(mydataset,"tb_Admin");
DataRowViewrowview=mydataset.Tables["tb_Admin"].DefaultView[0];
this.txtName.Text=Convert.ToString(rowview["UserName"]);
this.txtPwd.Text=Convert.ToString(rowview["PassWord"]);
this.ddlSex.SelectedValue=Convert.ToString(rowview["Sex"]);
this.txtRealName.Text=Convert.ToString(rowview["ReallyName"]);
this.txtBirthday.Text=Convert.ToString(rowview["Birthday"]);
this.txtAddress.Text=Convert.ToString(rowview["Address"]);
this.txtPostCode.Text=Convert.ToString(rowview["PostCode"]);
this.txtQues.Text=Convert.ToString(rowview["Question"]);
this.txtAns.Text=Convert.ToString(rowview["Answer"]);
this.txtEmail.Text=Convert.ToString(rowview["Email"]);
this.txtHphone.Text=Convert.ToString(rowview["HomePhone"]);
this.txtMphone.Text=Convert.ToString(rowview["MobilePhone"]);
this.txtQQ.Text=Convert.ToString(rowview["QQ"]);
this.txtICQ.Text=Convert.ToString(rowview["ICQ"]);
this.TextBox1.Text=Convert.ToString(rowview["RegTime"]);
this.DropDownList1.SelectedValue=Convert.ToString(rowview["SuperAdmin"]);
this.txtIP.Text=Convert.ToString(rowview["IP"]);
mycon.Close();
}
catch(Exceptionex)
{
Response.Write(ex.Message);
}
}
}
protectedvoidbtnUpdate_Click(objectsender,EventArgse)
{
try
{
SqlDatada=newSqlData();
stringP_str_Com="updatetb_AdminsetUserName='"+this.txtName.Text+"',PassWord='"+this.txtOKpwd.Text+"'"
+",Sex='"+this.ddlSex.SelectedValue+"',Re