基于ASPNET的博客系统的设计与实现

来源:m.fanwen118.com时间:2022.12.19

/rabbit__liu/blog/item/bfb111f70b8f03317

30eece0.html

基于ASP.NET的博客系统的设计与实现

摘 要 基于Microsoft.Net环境的ASP.NET技术,为开发功能强大的动态网站提供了一种简单、高效的途径。该博客系统以ASP.NET为开发技术,使用C#为开发语言,实现了博客网站的动态管理,使得对博客信息的管理更加及时、高效,提高了工作效率。同时对系统的背景需求、系统的功能特点和设计方案进行了介绍。该文还以随笔管理为例,对ASP.NET环境下的MVC开发模式进行了简单的介绍。.

关键字 ASP.NET;ADO.NET;博客;系统;数据库

引言

博客,数字生活新时尚,通过文字、图片、声音、视频、无线等,尽情展示自我、分享感受、参与交流,美好你我生活。Show you, share me,人人都可以博客,人人都需要博客。

1 项目背景

“博客”一词是从英文单词Blog翻译而来。Blog是Weblog的简称,而Weblog则是由Web和Log两个英文单词组合而成。Weblog就是在网络上发布和阅读的流水记录,通常称为“网络日志”,简称为“网志”。它是继Email、BBS、IM之后出现的第四种全新的网络交流 1

方式。它绝不仅仅是一种单向的发布系统,而且有着极其出色的交流功能。另外Blog也提供了非常方便实用的个性化功能。简言之,Blog就是以网络作为载体,简易迅速便捷地发布自己的心得,及时有效轻松地与他人进行交流,再集丰富多彩的个性化展示于一体的综合性平台。

2 需求分析

2.1 需求调研

任何一个系统的开发,必然有其需求者,博客系统也不例外,本系统通过对互联网中的各个博客系统的分析,得出从以下几个方面进行调研:

(1)、收益需求:描述系统的商业需求和系统将带来的收益。

(2)、日常功能:亲身体验一个博客在系统中如何交互,然后记录下来。

(3)、通过论坛来了解各博客用户的需求:记录下各论坛中各博客用户对博客的要求记录。

(4)、制作邮件调查表:通过调查表的形式得出一些具体的书面信息,了解细节。

2.2 创建用例图

博客系统参与者:如图1

基于ASPNET的博客系统的设计与实现

图1 博客系统参与者

博客系统用例:如图2

2

图2 博客系统用例图

2.3、详细描述用例(举例)

用户登录用例如表1所示

表1 用户登录用例表

基于ASPNET的博客系统的设计与实现

基于ASPNET的博客系统的设计与实现

3

基于ASPNET的博客系统的设计与实现

用户登录用例图如图3所示: 图3 用户登录用例图

3

3.1 系统中的对象

面向对象的开发的基石是对象,那么分析一个系统的开始就是从确定对象开始。那么这个系统重要的实体对象有:博客账户信息、用户、标题、用户名、密码、分类、文章、链接、评论、随笔、图片。而必须的对象有:文章,图片,随笔,链接,博客账号,分类,评论。 4

基于ASPNET的博客系统的设计与实现

系统分析

3.2 开发技术分析

本系统采用ASP.NET开发技术进行开发。ASP.NET不仅仅是ASP的一个新版本,更是Web应用程序编程方面的一个全新的概念和方法。ASP.NET中的新功能并不是对ASP的改进,设计它的初衷是为用户入境提供最佳的应用程序架构。它相比于ASP有着以下几个方面的优点:

(1) 多语言

ASP曾在脚本引擎方面受到了限制,特别是VBScript和Jscript。而ASP.NET则支持多种语言,默认情况下为Visual Basic.NET、C#和Jscript.NET,另外还支持一些第三方语言。

(2) 服务器处理

ASP在服务器处理上不管页面的内容是纯HTML还是ASP生成的HTML,它都是按照页面顺序显示的。因此逻辑代码依赖于它在页面中的位置,并且无法将HTML控件作为目标,除非将它们作为流的一部分进行显示。而ASP.NET就解决了这个问题,方法是为控件引入一个声明的基于服务器的模型,因为控件在服务器上有,可以在服务器上编程,也可以是客户端驱动的事件。

(3) Web Form控件

将现有的HTML控件转换为服务器端的控件是比较容易的,但是也存在一些不方便,例如比较难于区分HTML控件和服务器端的控件。于是Microsoft公司就创建了一组专门的服务器控件,它们都用asp:前缀标识。

(4) 代码与内容分离

一个网站的设计与开发往往由不同的人来实现的,而ASP中就是存在着这样一个问题,代码(ASP脚本)和内容(HTML)混合在一起。这样就使得同时进行设计和开发变得很困难。而ASP.NET则采用了代码内联和后台编码两种方法实现了代码与内容的分离。

3.2 健壮性分析(举例)

下面以对博客系统的用户登录用例为例进行健壮性分析:

3.3.1 事件流分析

事件流分析主要是针对系统中的用例描述中关于事件流的部分进行分析,此外还必须综合考虑基本路径和扩展路径两方面。

3.3.2

边界对象分析 5

边界对象:通常是用来完成参与者(用户、外部系统)与系统之间交互的对象。

在用户登录这个用例中,由于不存在外部系统,而且参与者也只有一个,就是“用户”,因此它的边界对象有:

(1)用户进入登录画面。

(2)转到管理博客的主画面。

3.3.3 实体对象分析

实体对象:通常来自域模型,也就是现实世界,用来描述具体的实体,通常映射到数据库表格与文件。

这个用例的实体对象包括用户和博客账号信息。

3.3.4 控制对象分析

控制对象:主要用来体现应用程序的执行逻辑,将其抽象出来,可以使得程序不影响用户画面和数据库中的表。

这个用例的控制对象有:检测博客账号的合法性。

3.4 交互设计

3.4.1 引入实体对象

根据健壮性分析,可以把实体对象给罗列出来。这些对象通常也是每个类的一个实例。由于是用来描述运行时状态的情况,因此是对象,而非类。

3.4.2 引入边界对象和参与者

将实体对象引入之后,再就是将边界对象找出来,在交互设计中引入参与者和边界对象。

3.4.3 引入控制对象

将参与者、边界对象均引入之后,再就要结合健壮图中的控制对象,以及用例描述中的事件流来确定对象之间的消息传递。

3.4.4 添加类的属性与方法

在交互设计中,将会发现类应该具有的方法,也会在设计中找到一些新的属性,而这些东西将近一步地完善交互设计。结合健壮分析、交互设计时引入设计类,并添加相应的属性与方法。

3.4.5 引入基础类

在着手开发之前,有一件很重要的事,那就是引入基础类。不管用什么样的开发工具进行代码编写,都将以各种库函数、框架作为开发基础。因此首先根据应用的需要选择相应的 6

框架,然后再根据具体的局部需要选择相应的类库。

这个系统中要进行数据库操作,可使用.NET Framework的ADO.NET进行数据库操作。 在进行文本编辑时使用文本编辑,引入第三方控件,使用FreeTextBox编辑器。

在进行分页时,同样引入第三方控件,使用AspNetPager分页控件。由于这些第三方控件均是开放源码的,所以我们自己可以在开发的过程中对控件进行自己的改动,既有效又方便。

需要将这些类库、控件引入到工程中。

4. 代码实现

4.1、编码之前的工作

4.1.1

在visual studio.net中创建解决方案 在Visual studio.net中,系统的开发主要是以解决方案的形式解决。所以我们在开发这个博客系统前,首先要先创建一个解决方案,命名为MyBlog。

4.1.2 文件夹的规划

在一个Web项目中,文件夹也需要进行规划,通常包括ASP.NET页面、图片、样式文件、Flash动画等元素,需要把它们放置到不同的文件夹,才能很好地管理文件。那么该系统的文件夹规划方式为:

(1) Core文件夹下存放工程的类文件。

(2) 根目录下只存放Default.aspx文件,根目录下的Images下存放与Default.aspx文件相关的图片。

(3) ASP.NET页面需要按模块旋转到各文件夹,相关的图片放置到模块文件夹下面的Images文件夹下。

(4) 样式文件放置到根目录下的Images文件夹下。

4.2 MVC模式

4.2.1 什么是MVC模式?

MVC由Trygve Reenskaug提出,首先被应用在SmallTalk-80环境中,是许多交互和画面系统的构成基础。MVC结构是为那些需要为同样的数据提供多个视图的应用程序而设计的,它很好地实现了数据层与表示层的分离。MVC作为一种开发模型,通常用于分布式应 7

用系统的设计和分析,以及用于确定系统各部分间的组织关系。对于画面设计可变性的需求,MVC(Model-View-Controller)把交互系统的组成分解成模型、视图、控制器3种部件。

(1) 视图部件把表示模型数据及逻辑关系和状态的信息以特定形式展示给用户。它从模型获得显示信息,对于相同的信息可以有多个不同的显示形式或视图。

(2) 控制器部件是处理用户与软件的交互操作的,其职责是控制提供模型中任何变化的传播,确保用户画面与模型间的对应联系;它接受用户的输入,将输入反馈给模型,进而实现对模型的计算控制,是使模型和视图协调工作的部件。

(3) 模型部件保存由视图显示、由控制器控制的数据;它封装了问题的核心数据、逻辑和功能的计算关系,它独立于具体的画面表达和I/O操作。

模型、视图与控制器的分离,使得一个模型可以具有多个显示视图。如果用户通过某个视图的控制器改变了模型的数据,所有其他依赖于这些数据的视图都应反映了这些变化。因此,无论何时发生了何种数据变化,控制器都会将变化通知所有的视图,导致显示的更新。这实际上是一种模型的变化——传播机制。

4.2.2 ASP.NET模式下如何实现MVC?

ASP.NET提供了一个很好的实现这种经典设计模式的类似环境。开发者通过在ASPX页面中开发用户接口来实现视图;控制器的功能在逻辑功能代码(.cs)中实现;模型通常对应应用系统的业务部分。在ASP.NET中实现这种设计而提供的一个多层系统,对较经典的ASP结构实现的系统来说有明显的优点。将用户显示(视图)从动作(控制器)中分离出来,提高了代码的重用性。将数据(模型)从对其操作的动作(控制器)分离出来,可以让用户设计一个与后台存储数据无关的系统。就MVC结构的本质而言,它是一种解决耦合系统问题的方法。

4.3 用户组件和样式的设计

博客系统中存在很多相同或相似的元素,这些元素可能是页面的标题,可能是页面的版权声明,也可能是文章的列表或是登录信息框。需要寻找一种方式在整个系统中共享,而不需在变化时修改所有的页面。所以就采用了样式文件进行管理以及用户自定义组件。

4.3.1 使用统一样式表

在样式文件中主要对以下五个内容进行定义:

(1) 博客标题:它是博客随笔、文章标题、图片名称的样式定义。

(2) 博客内容:它是博客内容、文章内容的样式定义。

8

(3) 博客版权信息:它是博客系统的页面下方显示博客系统的版权信息的样式定义,在Footer用户控件中使用。

(4) 导航栏:它是博客系统上方导航栏的样式定义,在Header用户控件中使用。 (5) 输入框:它是博客系统表单元素的样式定义。 4.3.2 设计用户控件

ASP.NET为开发人员提供了用户控件这一新技术来实现Web元素的共享,开发人员可以通过Visual Studio.Net进行Web元素的外面的开发,同时可以通过Web元素后台代码的方式进行表现层的开发。

在这个博客系统中,使用了Header、Footer等用户控件。

4.4、数据库设计

博客系统中的数据管理形式采用数据库,根据系统需要与数据规范化分为博客账户

信息表(blog),博客文章信息表(Article),博客随笔信息表(Essay),博客类别表(Category),博客评论表(FeedBack),博客链接表(Href),博客图片表(Picture)这七个表,表结构分别如下:

表2

博客账户信息表(blog)

基于ASPNET的博客系统的设计与实现

9

表3 博客文章信息表(Article)

基于ASPNET的博客系统的设计与实现

表4 博客随笔信息表(Essay)

基于ASPNET的博客系统的设计与实现

基于ASPNET的博客系统的设计与实现

基于ASPNET的博客系统的设计与实现

. 表5 博客类别表(Category)

表6 博客评论表(FeedBack)

10

基于ASPNET的博客系统的设计与实现

表7 博客链接表(Href)

基于ASPNET的博客系统的设计与实现

表8 博客图片表(Picture)

4.5 系统实现

4.5.1 系统结构图

根据前面的需求分析可以得出以下的系统结构图: 11

基于ASPNET的博客系统的设计与实现

各界面如下: (1)、阅读博客:

(2)、随笔管理:(文章管理、评论管理、链接管理、图片管理均类似)

图4

图5

系统结构图

阅读博客界面

12

基于ASPNET的博客系统的设计与实现

基于ASPNET的博客系统的设计与实现

图6

后台管理的密码管理界面:

基于ASPNET的博客系统的设计与实现

随笔管理界面

图7

系统管理主界面: 后台管理的密码管理界面

基于ASPNET的博客系统的设计与实现

13

图8

系统管理的账户管理界面:

基于ASPNET的博客系统的设计与实现

系统管理主界面

图9 账户管理界面

系统管理的密码管理界面同后台管理,如图七。

4.5.2

代码实现 整个系统的代码实现均采用表现层、控制层、数据层来实现,并且定义了一个抽象类DBObject类,其它一些类均由这个类继承。具体实现的过程是用户在页面(表现层)激发事件,那么页面的后台代码(控制层)作出回应,根据事件的不同来调用数据层对数据库进行操作。

基于ASPNET的博客系统的设计与实现

14

以下以随笔管理为例来说明ASP.NET的代码实现。

(1) 实现表现层

图六所示即为随笔管理列表页面,它的代码在/Blog/Admin/Essay/Essay.aspx中。 这个页面由三大部分组成。标头与导航栏做成了用户控件,在左右的功能区中,左下角的分类列表是由一个列表控件Datalist捆绑数据后生成的,用到了ItemTemplate模板。 ItemTemplate模板代码如代码1:

代码1 ItemTemplate模板

<asp:datalist id="essayCategory" Runat="server" Width="160"><ItemStyle

Height="20"></ItemStyle><ItemTemplate>&nbsp;&nbsp;&nbsp;&nbsp;<%#DataBinder.Eval(Co

ntainer.DataItem,"CategoryStr") %></ItemTemplate></asp:datalist>

页面的中右区为随笔信息列表,这也是由Datalist列表控件绑定数据后生成的,这里不仅定义了ItemTemplate,还定义了HeaderTemplate模板、AlternatingItemTemplate模板、SeparatorTemplate模板和FooterTemlplate模板。如代码2所示:

代码2 DataList列表控件绑定数据

<asp:datalist id="essayList" Width="780" Runat="server" CellSpacing="0" CellPadding="0" BorderWidth="0"><HeaderTemplate><table width="780" style="border:#CCCCCC 1px solid"

border="0" CellPadding="0" CellSpacing="0"><tr height="30" align="center"><td

background="/blog/Images/main/l-bg3.jpg" width="300"><font color="#ffff66"><b>标题</b></font></td><td background="/blog/Images/main/l-bg3.jpg" width="120"><font

color="#ffff66"><b>分类</b></font></td><td background="/blog/Images/main/l-bg3.jpg"

width="60"><font color="#ffff66"><b>浏览人数</b></font></td><td

background="/blog/Images/main/l-bg3.jpg" width="60"><font color="#ffff66"><b>评论人数</b></font></td><td background="/blog/Images/main/l-bg3.jpg" width="240" colspan="3"><font

color="#ffff66"><b>操作

</b></font></td></tr></table></HeaderTemplate><ItemTemplate><table width="780" style="background-color:#F5F5F5;border-right:#CCCCCC 1px solid;border-left:#CCCCCC 1px solid;"><tr height="20" align="center"><td width="300" align="left">&nbsp;&nbsp;<%#

DataBinder.Eval(Container.DataItem,"Subject") %></td><td width="120"><%#

DataBinder.Eval(Container.DataItem,"Category") %></td><td width="60"><%# DataBinder.Eval(Container.DataItem,"View") %></td><td width="60"><%#

15

DataBinder.Eval(Container.DataItem,"FeedBack") %></td><td width="80"><%#

DataBinder.Eval(Container.DataItem,"Info") %></td><td width="80"><%#

DataBinder.Eval(Container.DataItem,"Edit") %></td><td width="80"><%#

DataBinder.Eval(Container.DataItem,"Remove") %></td></tr></table></ItemTemplate><Alternat

ingItemTemplate><table width="780" style="border-right:#CCCCCC 1px

solid;border-left:#CCCCCC 1px solid;"><tr height="20" align="center"><td width="300" align="left">&nbsp;&nbsp;<%# DataBinder.Eval(Container.DataItem,"Subject") %></td><td

width="120"><%# DataBinder.Eval(Container.DataItem,"Category") %></td><td

width="60"><%# DataBinder.Eval(Container.DataItem,"View") %></td><td width="60"><%#

DataBinder.Eval(Container.DataItem,"FeedBack") %></td><td width="80"><%#

DataBinder.Eval(Container.DataItem,"Info") %></td><td width="80"><%#

DataBinder.Eval(Container.DataItem,"Edit") %></td><td width="80"><%#

DataBinder.Eval(Container.DataItem,"Remove") %></td></tr></table></AlternatingItemTemplat

e><SeparatorStyle

BackColor="#E6E6E6"></SeparatorStyle><SeparatorTemplate></SeparatorTemplate><FooterTemplate><table width="780" style="border-right:#CCCCCC 1px solid;border-left:#CCCCCC 1px

solid;border-bottom:#CCCCCC 1px solid"><tr><td

height="1"></td></tr></table></FooterTemplate></asp:datalist>

由于DataList不像DataGrid有自动分页的功能,所以我在这个系统中引入了一个第三方控件AspNetPager进行分页管理。首先声明控件:

<%@ Register TagPrefix="Webdiyer" Namespace="Wuqi.Webdiyer"

Assembly="AspNetPager"%>

然后在页面中插入分页控件,如代码3:

代码3 分页控件

<WEBDIYER:ASPNETPAGER id="pager" runat="server" Width="100%"

OnPageChanged="ChangePage" PageSize="5" TextAfterInputBox="&nbsp;页&nbsp;" TextBeforeInputBox="转到第&nbsp;" ShowCustomInfoSection="left" NextPageText="下页"

PrevPageText="上页" LastPageText="末页" FirstPageText="首页"

ShowPageIndex="false" CssClass="text_white" ShowInputBox="always" HorizontalAlign="right" AlwaysShow="false"></WEBDIYER:ASPNETPAGER>

16

(2) 实现控制层

由于随笔管理页面两次使用了DataList控件,所以要对DataList控件进行数据绑定,于是添加一个BindData()方法来处理数据捆绑过程。里面定义的两个参数BlogID和CategoryID分别为博客的编号和分类的编号,用来确定当前显示的是哪个博客中哪个分类中的随笔内容。程序如代码4:

代码4 随笔数据绑定

private void BindData(int BlogID,int CategoryID){

DataSet cDs = cDAO.LoadList(BlogID,"e"); cDs.Tables[0].Columns.Add("CategoryStr"); for(int i=0;i<cDs.Tables[0].Rows.Count;i++) {

cDs.Tables[0].Rows[i]["CategoryStr"] = "<a

href=\"Essay.aspx?CategoryID="+cDs.Tables[0].Rows[i]["CategoryID"].ToString()+"\">"+cDs.T

ables[0].Rows[i]["Name"].ToString()+"</a>";

} this.essayCategory.DataSource = cDs.Tables[0].DefaultView; this.essayCategory.DataBind();

DataSet eDs =

eDAO.LoadList(BlogID,CategoryID,pager.PageSize*(pager.CurrentPageIndex-1),pager.PageSize,

"","");

eDs.Tables[0].Columns.Add("Category"); eDs.Tables[0].Columns.Add("Info"); eDs.Tables[0].Columns.Add("Edit"); eDs.Tables[0].Columns.Add("Remove"); for(int i=0;i<eDs.Tables[0].Rows.Count;i++) {

eDs.Tables[0].Rows[i]["Category"] =

cDAO.Load(Convert.ToInt32(eDs.Tables[0].Rows[i]["CategoryID"])).Name;

eDs.Tables[0].Rows[i]["Info"] = "<a href=\"View.aspx?EssayID=" +

eDs.Tables[0].Rows[i]["EssayID"].ToString() + "\">浏览</a>";

17

eDs.Tables[0].Rows[i]["Edit"] = "<a href=\"Edit.aspx?EssayID=" +

eDs.Tables[0].Rows[i]["EssayID"].ToString() + "\">修改</a>";

eDs.Tables[0].Rows[i]["Remove"] = "<a href=\"Remove.aspx?EssayID=" +

eDs.Tables[0].Rows[i]["EssayID"].ToString() + "\">删除</a>";

} essayList.DataSource = eDs.Tables[0].DefaultView; essayList.DataBind();

pager.CustomInfoText="共"+pager.PageCount.ToString()+"页,当前为第

"+pager.CurrentPageIndex.ToString()+"页";

}

这里面使用了数据库操作对象CategoryDAO的LoadList方法获取了DataSet对象对分类列表进行绑定,而用创建的随笔数据库操作对EssayDAO的LoadList方法生成随笔的列表。

(3) 实现数据层

在随笔管理的绑定的控制层中要使用到数据层的操作类,如EssayDAO的LoadList方法,它在/Blog/Core/Essay/EssayDAO.cs文件中。

代码5 随笔数据层类

public EssayVO Load(int id) { Connection.Open(); SqlCommand sqlComm = new SqlCommand("select * from Essay where EssayID = " + id,Connection);

SqlDataReader tmpReader = sqlComm.ExecuteReader(); EssayVO essayVO = new EssayVO(); if(tmpReader.Read()) { essayVO.EssayID = Convert.ToInt32(tmpReader["EssayID"].ToString()); essayVO.BlogID = Convert.ToInt32(tmpReader["BlogID"].ToString()); essayVO.Subject = tmpReader["Subject"].ToString(); essayVO.Content = tmpReader["Content"].ToString(); 18

} } essayVO.Time = tmpReader["Time"].ToString(); essayVO.View = Convert.ToInt32(tmpReader["View"].ToString()); essayVO.FeedBack = Convert.ToInt32(tmpReader["FeedBack"].ToString()); tmpReader.Close(); Connection.Close(); return essayVO;

EssayDAO是DBObject的子类,它完成了EssayVO对象的基本方法,包括对EssayVO对象的创建、修改、删除、选取和列表方法。以下是DBObject子类的代码及EssayVO类的代码:

代码6 DBObject.cs

public class DbObject { protected SqlConnection Connection; private string connectionString; public DbObject() {

connectionString = System.Configuration.ConfigurationSettings.AppSettings["sqlConnection"];

}

代码7 EssayVO.cs

19 } Connection = new SqlConnection( connectionString ); protected string ConnectionString { } get { } return connectionString;

public class EssayVO {

private int essayID; private string subject; private string content; private string time; private int view; private int feedBack; private int categoryID; private int blogID; public int EssayID{

get{ return essayID;} set{ essayID = value;} }

public string Subject {

get{ return subject;} set{ subject = value;} }

public string Content {

get{ return content;} set{ content = value;} }

public string Time {

get{ return time;} set{ time = value;} }

20

} public int View { } public int FeedBack { } public int CategoryID { } public int BlogID { } get{ return blogID;} set{ blogID = value;} get{ return categoryID;} set{ categoryID = value;} get{ return feedBack;} set{ feedBack = value;} get{ return view;} set{ view = value;}

4.5.2.4 实现小结

MVC模式下的代码实现正是基本如随笔管理所示,分为多层进行实现,在表现层根据分类以指定表格的形式显示随笔,必要时可分页;当用户在表现层选择相应操作时通过控制层进行控制;如果需要调用数据库,则控制层通过调用数据层对数据库进行操作;数据层则使用SQL语句对数据库进行操作,存取数据库中的数据。

5 系统搭建

(1) Windows 2000 (推荐Windows 2003)

(2) Internet Information Service (IIS)

21

(3) Microsoft SQL Server2000

(4) Microsoft.NET Framework1.1

(5) Microsoft Visual Studio .NET2003(用于查看源文件)

结 论

本文提出并设计了一个基于ASP.NET 的完整的博客系统,该系统整合了数据库技术、ASP.NET技术、网站开发技术等。主要实现了当前主流博客的基本功能,采用MVC模式,按照任务和业务驱动的过程进行开发。但是本系还存在着一些不足之处,如安全性上的密码未采用加密。通过对这个系统的学习与开发,让我更好地掌握了ASP.NET的开发技术,更深刻地理解了网站的开发流程。

在两个月的开发周期中,让我明白一点,就是测试的重要性。所谓建系统,测试先行,软件工程的知识告诉我们一个系统的开发从立项到投入运行,很长的周期都是在测试上的,这次的实际的系统开发让我增长了测试的经验。

参考文献

[1] Marco Bellinaso Kenvin Hoffman . 《ASP_NET Web站点高级编程》.[M]康博 译.清华大学出版社.

[2] Alex Homer Dave Sussman.《ASP.NET 1.1高级编程》.[M]李敏波.译.清华大学出版社.

[3] 求是科技.《SQL Server 2000数据库开发技术与工程实践》.[M].人民邮电出版社.

[4] 徐惠民.《系统开发规范与文档编写》[M].中国广播电视大学出版社.

[5] 求是科技.《ASP.NET信息管理系统开发实例导航》.[M].人民邮电出版社.

致谢

傅丁祥老师对本文提出了很好的修改意见,特此致谢。

附录

图片索引

图1

图2

图3

图4

图5

博客系统参与者?????????????????????????3 博客系统用例图?????????????????????????3 用户登录用例图?????????????????????????5 系统结构图???????????????????????????12 阅读博客界面??????????????????????????13 22

图6

图7

图8

图9

表索引

表1

表2

表3

表4

表5

表6

表7

表8 随笔管理界面??????????????????????????13 后台管理的密码管理界面?????????????????????14 系统管理主界面?????????????????????????14 账户管理界面??????????????????????????15 用户登录用例表?????????????????????????3 博客账户信息表(blog)???????????????????????10 博客文章信息表(Article)?????????????????????10 博客随笔信息表(Essay)?????????????????????10 博客类别表(Category)??????????????????????11 博客评论表(FeedBack)??????????????????????11 博客链接表(Href)????????????????????????11 博客图片表(Picture)???????????????????????12 代码索引

代码1 ItemTemplat模板?????????????????????????15 代码2 DataList列表控件绑定数据????????????????????15 代码3 分页控件????????????????????????????17 代码4 随笔数据绑定??????????????????????????17 代码5 随笔数据层类??????????????????????????19 代码6 DBObject.cs???????????????????????????19 代码7 EssayVO.cs???????????????????????????20 23

更多类似范文
┣ 软件工程实验报告(模板,未补全) 2900字
┣ 软件工程实验报告asas 3000字
┣ 更多系统分析与设计实验报告
┗ 搜索类似范文