留言板设计与实现.docx
《留言板设计与实现.docx》由会员分享,可在线阅读,更多相关《留言板设计与实现.docx(22页珍藏版)》请在冰豆网上搜索。
![留言板设计与实现.docx](https://file1.bdocx.com/fileroot1/2023-1/30/465bb9b2-d34f-4710-b6ac-730254e40498/465bb9b2-d34f-4710-b6ac-730254e404981.gif)
留言板设计与实现
留言板设计与实现
内容摘要
在科技飞速发展的今天,电脑信息技术与各行各业进行了有效的结合。
人们在网上可以进行网上购物,网上交友,电子商务,网络营效等等。
面对强大的网络功能,必须在某方面要有一个健全的系统才能使网络发挥的淋漓尽致。
在这个平台上,留言提供了一个全新的人类沟通新方式。
BBS留言是Internet的重要应用之一,开发网上交流软件,现已有很多工具和方法,各种技术都具有其特色和长处。
针对网上BBS留言的特点,文章叙述了在WindowsXP环境下,利用SqlSever2005创建数据库,运用MicrosoftVisualStudio2008、ASP和IIS等开发工具,设计基于B/S方式运行的BBS留言系统的原理及其过程。
关键词:
留言板,ASP.Net,数据库,SqlSever2005
绪论
随着现代化技术的不断进步,人们发现交流的范围还是很小,不能满足更大范围人的需要,这样就出现了利用因特网在全球发布信息的留言——BBS。
BBS是电子公告板(BulletinBoardSystem)的简称,它是最常见的Web应用系统。
BBS起源于20世纪80年代,最初,留言只是用于发布公告系统,讨论问题的在线交流平台;后来,随着网络的普及,留言的功能越来越丰富,受到广大网民的欢迎。
企业、学校等单位可以利用网上的留言发布公告、通知等。
本系统采用MVC(Model-View-Controller)三层构架开发模式,在这种设计模式下,一个应用被分为三个部分:
模型、视图和控制,每个部分负责不同的功能。
模型是指应用程序的数据,以及对这些数据的操作;视图是指用户界面;控制负责视图和模型之间的同步,也就是说,根据用户界面的操作完成对程序数据的更新;将程序数据的改变及时反应到用户界面上。
通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现,这些组件可以进行交互和重用。
对于大量的信息,采用数据库技术,在系统中数据组织应用关系模型。
对数据库的访问,本系统使用数据库连接池,在系统初始化时启动文件中配置的数据的连接,如果程序需要链接,则从此池中取出一个连接使用,使用完后又返回给该池,这些连接可以复用,提高了效率。
该系统采用ASP实现BBS留言系统。
在开发过程中实现了留言系统的部分管理,并且对留言的页面布局进行详细设计,使页面美观,体现所有功能;还有对系统管理页面的设计,使管理员能更方便清楚的进行用户管理、页面管理等。
最后,该留言将会是一个功能强大、美观方便、畅所欲言的“公共场所”。
第一章系统分析与设计
1.1需求分析
开发一个留言系统,首先需要确定留言的功能是什么,也就是用户想要的留言所能做的工作。
用户使用留言是按照一定的流程来进行的:
用户注册登录进入留言,可以就某个话题展开讨论,通过留言功能发布新的话题,管理员通过回帖的功能回复用户的话题;管理员要管理留言,系统需要具有的功能有创建、删除留言的版块,管理留言。
这样的流程就决定了留言所应具有的功能,留言功能流程如图1.1所示。
图1.1留言功能流程图
通过上面的分析,总结留言的功能有以下几项:
留言版块列表;浏览留言;回复留言;编辑留言;删除留言;用户注册;用户登录;修改注册信息;管理版块;管理用户。
观察留言所有功能需求,按不同实体分类,可以分为三类实体对象:
用户、留言和回复留言。
这三类对象,可以设计为三个数据实体,如果使用数据库存储它们,即可以设计三个基本数据表的集合来存储这些实体的基本信息;它们可以设计为三个基本表,映射三个实体的基本数据。
这些基本对象只是留言系统中最为基本的要素,对于一个完整的留言还需要其它相关的表来记录相关的信息,即实体之间的相互关系信息。
留言一般存在两种用户,注册用户和管理员。
用户的权限是向下覆盖的,即上级权限包含下级权限,在这个留言中,管理员的权限是上级权限。
留言系统的用户浏览信息功能,是用户讨论问题的平台,发表留言、浏览留言、回复留言一直贯穿用户的整个活动。
同时,由于留言系统的留言管理是管理员在留言浏览时进行的,因此编辑、删除等功能也安排在浏览信息时实现,只是一般用户没有权限做这些动作。
其它与管理员相关的功能,包括留言管理和用户管理的都是需要管理员在管理模块进行操作。
下面就管理员所做的管理进行介绍:
查看留言:
任何用户可以根据发言者留下的邮箱地址发邮件。
删除留言:
如果用户发表了不符合留言规则的留言,则需要管理员删除这些留言。
管理版块:
留言版块需要先创建,才能被使用,管理员还可以删改版块的相关信息。
设置参数:
留言一般有一些初始化信息,比如留言名称、每页显示留言数量等参数信息,管理员可以在后台界面自行设置。
1.2模块设计
从上一节需求分析可以知道,留言功能分为用户使用的基本功能和管理员管理系统的功能两类,因此模块设计也分为两大类。
留言的模块体系图如图1.2所示。
图1.2留言的模块图
BBS系统包括以下主要功能模块:
(1)登录功能模块:
用户个人注册、登录,管理员登录;
(2)浏览功能模块:
用户浏览版块、浏览主题帖列表、查看留言、查看回复;
(3)发表回复留言功能模块:
用户发表,管理员回复;
(4)留言管理功能模块:
管理员编辑、删除;
用户注册、登陆以及修改个人的注册信息组合成注册登录模块;用户浏览版块、浏览主题帖列表、查看留言组合成浏览模块;用户发表留言;管理员编辑留言、删除留言。
以上四个模块组成用户使用的基本功能模块。
扩展功能模块都是与管理员相关的,创建、修改和删除版块为管理版块模块;删除和回复为管理用户模块。
从以上分析,可以得到留言的功能框架,即系统的各个部分已经确定,对于留言系统来说,各个模块之间用一条主线串联起来,才能构建完整的系统。
联系各个模块的主线是使用者的权限,用户能使用留言的哪些功能是由用户的权限决定的。
留言的每个功能都与相应的权限相对应。
同一类用户使用的功能模块,是以使用者为中心连接起来的。
另外,操作同一类事物的功能模块,也是有相互关系的。
因此,浏览模块与发帖回帖模块、管理留言模块关联,是由留言的系统流程决定的。
先有版块,后有留言,留言必须发表在某个版块中。
还有管理用户模块与注册登录模块关联,是由同一类对象(用户)决定的,用户注册后获得留言的身份,成为用户,所有的用户需要接受管理员的管理,用户登录证明自己的留言中身份。
由此,设计出留言系统的整体框架,如图1.3所示。
图1.3留言整体架构图
1.3数据库结构设计
该系统的实体有:
管理员信息实体、用户信息实体、留言实体、版面信息实体。
实体之间的E-R图如图1.4所示。
图1.4实体间的关系E-R图
考虑到将来功能上的完整性,设计如下面所示的数据项和数据结构:
用户信息:
包括数据项有用户编号、用户名、密码、Email、qq、性别、用户IP、用户注册时间等。
留言信息:
包括数据项有留言的编号、用户名主题、内容、发表时间和用户的IP等。
基于上面的内容,设计了下列表,这些表之间相互关联,共同存储着系统所需要的数据。
在设计数据库表的过程中,一般要遵循几条原则:
数据库设计一个表最好只存储一个实体或对象的相关信息,不同的实体最好存储在不同的数据表中,如果实体还可以再划分,实体的划分原则是最好能够比当前系统要开发的实体的复杂度小;数据表的信息结构一定要合适,表的字段的数量一般不要过多;扩展信息和动态变化的信息一定要分开在不同的表里;多对多这样的表关系尽量不出现等。
数据库表的具体设计如下:
表1.UserInfo(用户信息表)
序号
字段
数据类型
长度
是否空(是:
√)
标识
备注
1
Id
int
4
√
主键
2
UserName
varchar
20
3
Password
varchar
50
4
RePwd
varchar
50
5
Email
varchar
30
6
Qq
varchar
20
√
7
Sex
varchar
2
8
IP
varchar
20
9
Popedom
int
4
权限
10
Create_time
datetime
8
表2.LeaveWord(用户留言信息表)
序号
字段
数据类型
长度
是否空(是:
√)
标识
备注
1
Id
int
4
√
主键
2
UserName
varchar
20
3
Subject
varchar
50
4
[Content]
ntext
16
5
Create_time
datetime
8
6
IP
varchar
20
表3.Reply(回复留言信息表)
序号
字段
数据类型
长度
是否空(是:
√)
标识
备注
1
Id
int
4
√
主键
2
ReplyName
varchar
20
√
3
ReplyContent
ntext
16
√
回复内容
4
Reply_time
varchar
20
5
ReplyID
datetime
8
LeaveWord的Id
6
IP
varchar
20
至此,留言系统的架构部分设计完成了,有了具体的数据库结构设计和系统功能设计,就确定了系统的数据基础和功能架。
第二章系统开发环境
2.1MVC三层构架
MVC是Model-View-Controller的简写,“Model”代表的是应用的业务逻辑,“View”是应用的表示面,“Controller”是提供应用的处理过程控制(数据访问层),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。
这些组件可以进行交互和重用。
2.2开发工具简介
该留言系统为一个Web应用程,所需的运行环境:
MicrosoftVisualStudio2008、SqlServer2005、WindowsXP、IIS。
2.2.1ASP简介
ASP是ActiveServerPage的简写。
ASP技术能让Web开发员和网页设计员快速地开发容易维护的动态Web主页。
ASP将网页逻辑与网页设计和显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。
ActiveXDataOject(简称ADO)技术与ASP结合使用,可以具备存取数据库的功能,主要实现三方面的功能:
建立与数据库的连接,执行SQL声明以及处理SQL执行结果。
2.2.2IIS简介
IIS是InternetInformationServer的缩写,它是微软公司主推的服务器,IIS与WindowNTServer完全集成在一起,因而用户能够利用WindowsNTServer和NTFS(NTFileSystem,NT的文件系统)内置的安全特性,建立强大,灵活而安全的Internet和Intranet站点。
IIS支持与语言无关的脚本编写和组件,通过IIS,开发人员就可以开发新一代动态的,富有魅力的Web站点。
IIS完全支持VBScript,JScript开发软件以及Java,它也支持CGI和WinCGI,以及ISAPI扩展和过滤器。
IIS的一个重要特性是支持ASP。
IIS3.0版本以后引入了ASP,可以很容易的张贴动态内容和开发基于Web的应用程序。
对于诸如VBScript,JScript开发软件,或者由VisualBasic,Java,VisualC++开发系统,以及现有的CGI和WinCGI脚本开发的应用程序,IIS都提供强大的本地支持。
2.2.3SqlSever2005简介
SQL(StructuredQueryLanguage),结构化查询语言。
SQL语言的主要功能就是同各种数据库建立联系,进行沟通。
按照ANSI(美国国家标准协会)的规定,SQL被作为关系型数据库管理系统的标准语言。
SQL语句可以用来执行各种各样的操作,例如更新数据库中的数据,从数据库中提取数据等。
绝大多数流行的关系型数据库管理系统都采用了SQL语言标准。
虽然很多数据库都对SQL语句进行了再开发和扩展,但是包括Select,Insert,Update,Delete,Create,以及Drop在内的标准的SQL命令仍然可以被用来完成几乎所有的数据库操作。
SQLServer是一个关系数据库管理系统。
它最初是由Microsoft、Sybase和Ashton-Tate三家公司共同开发的,于1988年推出了第一个OS/2版本。
在WindowsNT推出后,Microsoft与Sybase在SQLServer的开发上就分道扬镳了,Microsoft将SQLServer移植到WindowsNT系统上,专注于开发推广SQLServer的WindowsNT版本。
Sybase则较专注于SQLServer在UNIX操作系统上的应用。
2.3开发模式
网站建设目前主要有两种基本的开发模型:
两层模型、三层模型。
B/S结构是真正的三层结构,它以访问WEB数据库为中心,HTTP为传输协议,客户端通过浏览器(Browser)访问WEB服务器和与其相连的后台数据库,我们称之为B/S(Browser/Server)模式。
其三级结构组成如下图所示:
图2.1开发模式图
图中从左到右,分为三个层次:
第一层是客户端即浏览器,主要完成客户和后台的交互及最终查询结果的输出功能。
在客户端向指定的Web服务器提出服务器请求,Web服务器用HTTP协议把所需文件资料传给用户,客户端接受并显示在WWW浏览器上;
第二层Web服务器是功能层,完成客户的应用功能,即Web服务器接受客户请求,并与后台数据库连接,进行申请处理,然后将处理结果返回Web服务器,再传至客户端;
第三层数据库服务器是数据层。
数据库服务器应客户请求独立地进行各种处理。
与传统的C/S模式相比,B/S结构把处理功能全部移植到了服务器端,用户的请求通过浏览器发出,无论是使用和数据库维护上都比传统模式更加经济方便。
而且使维护任务层次化:
管理员负责服务器硬件日常管理和维护,系统维护人员负责后台数据库数据更新维护。
第三章系统详细设计
留言拥有大量的数据,这就需要对这些数据进行存储和管理建立数据库。
因为当留言的在线用户很多时,就会出现“瓶颈”现象,造成阻塞,这里应该创建连接池来提高利用率。
数据库建立成功后就应该进行具体的系统设计。
然后,将进行留言信息页面的设计,包括主页面、发布留言相关页面等,是显示在留言页面,可以由用户(包括用户)以上级别的浏览者看到;最后,进行留言管理页面的设计,这是只能由管理员进行操作的页面,管理员会对留言进行安全、有条理的管理。
3.1创建与连接数据库
3.1.1数据库表的设计
设计数据库表的字段时,需要充分考虑到留言的应用特点。
数据库表的设计要求简单易于理解,扩展性好。
其中记录留言发表文章的数据库表LeaveWord
主要有以下的以下几个描述字段:
序号
字段
数据类型
长度
是否空(是:
√)
标识
备注
1
Id
int
4
√
主键
2
UserName
varchar
20
用户名
3
Subject
varchar
50
留言主题
4
[Content]
ntext
16
留言内容
5
Create_time
datetime
8
留言发表时间
6
IP
varchar
20
用户IP
3.1.2数据库的连接
SelServer2005是文件型数据库,一个文件就是一个数据库,可以利用ADO.NET中的语法直接连接。
在连接数据库之前,必须先声明一个对象来当作数据库与ASP程序之间的媒介,具体连接方式如下:
在解决方案中的Web.config文件中的节点下添加数据库连接代码:
--数据库连接-->
然后在数据访问层相应类中添加数据库连接字符串,如下代码:
//获取数据库连接字符串
privatereadonlystringConnectionString=ConfigurationSettings.AppSettings["ConnectionString"].ToString();
在打开数据库并完成相应的操作后,应关闭数据库连接。
当不再需要连接时将其关闭,可以减少对数据库服务器的要求并可以使其他用户能够使用该连接。
用SqlConnection对象的Close方法终止SqlConnection对象和数据库之间的连接。
下面代码为程序中的部分代码,打开连接,然后将其关闭:
using(SqlConnectionconnection=newSqlConnection(ConnectionString))
{try
{
connection.Open();
SqlCommandcommand=newSqlCommand(builder,connection);
if(command.ExecuteNonQuery()>0)
{
returnConvert.ToString(command.ExecuteNonQuery());
}
}
catch(SqlExceptionexception)
{
thrownewException(exception.Message);
}
finally
{
connection.Close();
}
}
3.1.3数据添加
//表示层中的代码
//添加新用户
protectedvoidbtnRegisterSubmite_Click(objectsender,EventArgse)
{
//获取输入的验证码
stringcode=txtCode.Text;
//判断用户输入的验证码是否正确
if(Request.Cookies["CheckCode"].Value==code)
{
/*获取页面注册信息*/
stringstr="\'"+this.txtRegName.Text.ToString().Trim()+"\'";//用户注册名
stringstr2=this.txtRegPass.Text.ToString().Trim();//注册密码
stringstr3=this.TxtReRegPass.Text.ToString().Trim();//确认密码
stringstr4=this.txtEmail.Text.ToString().Trim();//注册的Email
stringstr5=this.txtQQ.Text.ToString().Trim();//注册的QQ
stringstr6="";//性别
if(rabtnSex.SelectedValue.Trim()=="男")
{
str6="男";
}
else
{
str6="女";
}
stringstr7=Request.UserHostAddress;//ip地址
SongBLL.UserInfoinfo=newSongBLL.UserInfo();
SongModel.UserInfomodel=newSongModel.UserInfo();
//将获取到的注册信息添加到Model实体类中
model.UserName=base.Server.HtmlEncode(str);
//model.Password=base.Server.HtmlEncode(str2);
model.Password=FormsAuthentication.HashPasswordForStoringInConfigFile(str2+"@4!
@#$%@","md5");
model.RePwd=base.Server.HtmlEncode(str3);
model.Email=base.Server.HtmlEncode(str4);
model.Qq=base.Server.HtmlEncode(str5);
model.Sex=base.Server.HtmlEncode(str6);
model.Ip=base.Server.HtmlEncode(str7);
model.Popecom="0";
model.Create_time=Convert.ToString(DateTime.Now);
stringstrWhere="";
strWhere=string.Format("UserName={0}",str);
DataSetlist=info.GetList(strWhere);
if(((list!
=null)&&(list.Tables.Count>0))&&(list.Tables[0].Rows.Count>0))
{
this.Response.Write("已有该账户");
this.Response.Redirect("Register.aspx");
}
else
{
intnum;
//将注册的信息传递给BLL层
num=info.Add(model);
if(num>0)
{
this.Response.Write("注册成功!
");
}
else
{
this.Response.Write("注册失败!
");
this.txtRegName.Focus();
this.Response.Redirect("Register.aspx");
}
}
}
else
{
Response.Write("验证码错误!
");
this.Response.Redirect("Register.aspx");
}
}
//业务逻辑层中的代码
publicclassUserInfo
{
privatereadonlySongDAL.UserInfodal=newSongDAL.UserInfo();
///
///用户注册信息
///
publicintAdd(SongModel.UserInfomodel)
{
returnthis.dal.Add(model);
}
}
//数据访问层