1、电子论坛系统的设计与实现摘 要电子论坛即 BBS 已经是互联网上的一种极为常见的互动交流服务。论坛可以为网友提供开放性的分类讨论区专题服务,网友们可以在此发表自己的观感,交流某些技术,经验等。论坛也可以作为用户和商家交流的渠道,商家也可以在此回答用户提出的问题或发布某些消息。本系统使用 ASP 进行开发,数据库采用 Microsoft SQL Server 2000。本文描述了电子论坛系统的设计与实现。首先对系统的需求进行了分析,建立系统工作流程图,设计系统数据库,对数据库结构进行了详细分析。然后划分系统功能模块,最后详细描述了各个功能模块实现的方法,并给出相应代码。关键词:电子论坛系统;AS
2、P;SQL Server 2000The Design and Implementation of BBSAbstractBBS as an electronic forum on the Internet is a very common interaction services. Forum provides an open platform to discuss one subject amony netizens . Netizens can express their impressions and communicate technologies and experience. I
3、t also can be used as a channel for the communication between customers with businessmen.The system is developed with ASP and Microsoft SQL Server 2000. In this paper, how to design and implement a BBS is introduced. First, it analyzes the demands for this system, establishes system flowchart, desig
4、ns system database and analyzes the database structure. Second, it introduces the modules. The way of implementation of each modules is introduced, and the source codes are showed in the end.Key words: BBS; ASP; SQL Server 2000 目 录论文总页数:32 页1 引言 11.1 课题背景 11.2 国内外研究现状 11.3 本课题的研究意义 12 系统分析 12.1 系统需求
5、分析 12.2 系统功能描述 22.2.1 主要功能 .22.2.2 论坛扩展功能 .43 系统设计 43.1 功能模块 43.2 数据库设计 64 系统实现 104.1 首页 104.2 数据库连接函数 114.3 用户模块 114.3.1 用户登录 .114.3.2 用户注册 .134.3.3 与其他用户联系 .164.3.4 找回密码 .174.3.5 用户登录添加验证码 .174.4 版面/公共信息模块 .194.4.1 版面模块 .194.4.2 公共信息模块 .204.5 帖子模块 204.5.1 发布/删除/修改帖子模块 .204.5.2 帖子浏览模块 .254.5.3 帖子搜索
6、模块 .254.5.4 其它功能 .264.6 管理员模块 264.6.1 用户管理 .264.6.2 版面管理 .264.6.3 帖子管理 .264.6.4 数据库备份和恢复 .26结 论 28参考文献 30致 谢 31声 明 32第 1 页 共 32 页1 引言1.1 课题背景论坛服务已经是互联网上的一种极为常见的互动交流服务。论坛可以为网友提供开放性的分类讨论区专题服务,网友们可以在此发表自己的观感,交流某些技术,经验乃至人生的感悟与忧欢,亦可以作为用户和商家交流的渠道,商家也可以在此回答用户提出的问题或发布某些消息。1.2 国内外研究现状BBS 起源于 20 世纪初。最初,论坛只是用于
7、发布公共信息和讨论问题的在线交流平台;后来,随着网络的普及,论坛的功能也越来越丰富,不仅仅可以发表文字,更是可以使用多媒体,受到了广大网民的欢迎。因此,商业网站对论坛重视起来,纷纷在自己的网站上开辟论坛,作为与网民交流的园地,同时在线技术支持和在线服务也在论坛中开展起来。1.3 本课题的研究意义随着互联网技术的迅猛发展,网络给人们带来了很多便利,比如人们借助于网络进行相互交流变得更加方便。电子论坛也称为 BBS,BBS 是 Bulletin Board System 的缩写,意即电子公告牌,一种在 Internet 上常见的用于信息服务的 Web 系统,它的主要服务是用来帮助浏览者相互沟通,吸
8、引用户,服务用户的。技术的发展一日千里,尤其是 Web 开发技术。早年间,我们还只能用静态的 HTML 编写静态的网站,毫无交互性可言。随着技术的飞速发展,我们有了动态的 HTML(DHTML),然后有了脚本(Script),脚本有很多种,这些都伴随着早期的 Web 开发者走了很长,很苦的日子。到了 21 世纪,Web 的开发者们迎来了幸福的生活,Microsoft,Sun 等公司相继推出了强大,快捷的ASP,PHP,JSP 和 ASP.NET 等开发技术,我们可以使用多种编程语言来进行开发,大大提升了网站开发的效率,质量。我们尽管可以说哪一种技术是最流行的,但是很难说哪一种技术是最好的,每一
9、种技术都在它最对口的应用上。对于电子论坛系统,我选择了 ASP 技术,它同样可把我们想要的功能很好的实现。2 系统分析2.1 系统需求分析首先找出论坛针对的对象,得出一个简洁的例表:1. 用户:论坛的使用人员,进行某些操作时需要注册。2. 版面:表明发言内容的类型。第 2 页 共 32 页3. 公共信息:与论坛相关的信息。4. 帖子:论坛中单个观点的讨论。5. 管理员:与论坛服务的人员。论坛的对象不是孤立的,它们是紧密联系的,下面是论坛各个对象之间的关联表,关联是单向的,是指左侧对象对上方对象的活动。无关联的用表示,如果两者只要单向关联,那么在另一个对象关联时用表示。表 1 各对象之间的关系表
10、用户 版面 公共信息 帖子 管理员用户 注册 修改 浏览 联系浏览 浏览 发布 浏览 发布 修改 删除版面 公共信息 帖子 管理员 删除 授权 添加 删除 修改添加 删除 修改添加 删除 修改至此,论坛的需要分析完成,接下来是论坛的功能设计。2.2 系统功能描述2.2.1 主要功能首先从用户开始,用户关联的对象是自身,版面,公共信息,帖子。分别根据用户与这些对象的联系给出一个明确的菜单表 2 用户功能表序号 功能名称 说明1 用户注册 用户在论坛填写必要信息就可以成为注册用户,注册后,可修改自己的注册信息2 用户登录 用户注册后可使用用户名,密码登录,可选择用户名,密码保存期限3 浏览用户信息
11、 注册用户可查看其它用户信息序号 功能名称 说明4 与其它用户联系注册用户可发站内短信5 浏览版面 任何用户可浏览版面信息6 浏览公共信息 任何用户可浏览公共信息7 浏览帖子 任何用户可浏览帖子8 发布修改删除帖子注册用户登录后可发布帖子,修改自己的帖子,删除自己的帖子9 对帖子的特殊操作主要针对版主类型的用户,可对帖子置顶,设置精华,删除帖子,移动帖子等操作接下来的版面,公共信息,帖子都没有和其他对象的关联,它们在论坛中是被动对象,是被其它对象所操作。因此针对它们的主要功能是由其它对象产生,例如浏览版面就是用户的功能。第 3 页 共 32 页管理员是论坛的一个特殊群体,它们的主要工作是保证论
12、坛的正常运行,他们可以和论坛的所有对象产生联系,因此他们的功能也很丰富表 3 管理员功能表序号 功能名称 说明1 用户删除 对于在论坛中造成很坏影响的用户,应该删除他们的身份2 用户授权 授予用户版主权限3 版面管理 版面是论坛的枝干,对版面进行添加,修改,删除等操作4 公共信息管理 公共信息展示论坛的状态,不能出现非法言论5 帖子的管理 帖子是论坛的枝叶,帖子的好坏关系到论坛的健康发展,对帖子进行删除,移动等6 数据库的备份 管理员应该定期地对系统数据库备份,以免造成不必要的损失现在分析各个对象的相关操作,设计为对象的功能实现接口,即为对象的操作方法。各个板块有浏览列表和管理两个方法,管理方
13、法又可以分为添加,修改,删除 3 个子方法。帖子有浏览,发帖,回帖,搜索和管理 5 个方法,浏览方法又分为列表和查看两个子方法,管理方法分为编辑,删除,置顶,移动,指定精华 5 个子方法,如图。图 1 帖子对象的相关关系用户有注册、登录 2 个方法,管理用户方法又分为删除和设置权限 2 个子方法,如图。图 2 用户对象的相关关系管理帖子删除移动置顶指定精华编辑浏览帖子搜索回帖发帖用户管理员注册登录管理用户删除设置权限管理员用户第 4 页 共 32 页这样分析完后,前面列出的功能列表就有了各自的归属对象。论坛一般存在两种用户:注册用户和管理员。用户的权限是向下覆盖的,既上级权限包含下级权限,在论
14、坛中,管理员是上级权限。论坛的 3 大基本功能的相互关系如下图所示。图 3 论坛基本功能的关系本系统还有一些是论坛的内容更加丰富的扩展功能。2.2.2 论坛扩展功能下面是个一个论坛扩展功能表。表 4 扩展功能表序号 功能名称 说明1 用户控制自己的信息用户不想让其他用户看到自己的信息,可以控制自己的信息是否公开序号 功能名称 说明2 用户登录添加验证码防止暴力破解密码,输入用户名或密码错误会重新生成验证码3 站内短信 方便用户在站内联系4 帖子评价 提高用户参与论坛的积极性5 帖子发布添加多媒体吸引用户,扩展帖子发布功能6 论坛收藏 保留用户喜欢的内容,方便用户查看7 帖子搜索 提供模糊搜索,
15、方便用户找到感兴趣的主题8 用户等级 给用户一个荣誉,提高用户发帖的积极性9 论坛情况显示 把论坛的一些数据显示给用户,如发帖数,在线用户人数等10 数据备份 防止论坛出现故障,能够正常运行11 非法言论过滤 对于一些非法言论可以在论坛中进行默认设置过滤添加了这几个扩展功能后,论坛就显得平易近人多了,也更具有使用性。3 系统设计3.1 功能模块根据上一节给出论坛所必须的功能,划分模块。模块的划分主要是按照每一个对象的操作来归类。论坛操作的对象是上一节所归纳的 5 个。下面就针对这 5 个对象划分功能模块。发帖 帖子列表回帖 浏览帖子第 5 页 共 32 页用户:有两个模块,一个是用户注册,登录
16、,修改信息等功能组合,是用户对用户自身的操作;另一个是管理员对用户进行删除,授权,是管理员对用户的操作,如表 5。表 5 用户功能模块表模块 模块包含的功能用户注册用户登录浏览其它用户信息与其它用户联系用户控制自己的信息用户登录添加验证码用户模块用户等级用户删除管理员模块用户授权版面:也有两个模块,一个是浏览模块,一个是管理模块。其功能模块列表如表 6。表 6 版面功能模块表模块 模块包含的功能版面浏览模块 浏览版面版面管理模块 版面管理公共信息:用户浏览公共信息的功能划分一个模块,管理员对公共信息的操作划分为一个模块,其功能模块列表如表 7表 7 公共信息功能模块表模块 模块包含的功能公共信
17、息显示模块 浏览发布的公共信息公共信息管理模块 公共信息管理帖子:帖子包括用户对帖子的操作和管理员对帖子的操作,相应地分为帖子模块和帖子管理模块,如表 8。表 8 帖子功能模块表模块 模块包含的功能浏览帖子发布/修改/删除帖子对帖子的特殊操作帖子评价帖子发布添加多媒体论坛收藏帖子模块帖子搜索删除帖子帖子管理模块移动帖子第 6 页 共 32 页管理员:管理员是对其他对象进行操作,如表 9。表 9 管理员管理功能模块表模块 模块包含的功能用户管理版面管理帖子管理管理员管理模块数据备份另外,对于用户使用的模块称为前台模块,管理员使用的模块称为后台模块。系统总体功能划分如图 4。论坛系统用户模块公共信
18、息模块版面浏览模块帖子模块用户管理模块版面管理模块公共信息管理模块帖子管理模块管理员管理模块前 台模块 后 台模块图 4 系统总体功能划分3.2 数据库设计本论坛使用 Microsoft SQL Server 2000 数据库,下面列出是数据库设计的详细。1建立数据表间的关系本论坛数据库共有 11 个数据表,具体如表 10 所示。表 10 论坛数据表序号 表名 说明1 user_t 用户信息表2 topic_t 主题信息表3 superAdmin_t 论坛管理员表4 post_t 帖子信息表5 message_t 短消息信息表6 grade_t 用户积分等级表7 friend_t 用户好友表第
19、 7 页 共 32 页8 file_t 文件上传表9 board_t 子版面信息表10 area_t 父版面信息表11 admin_t 版主信息表下面是数据表之间的关系图,如图 5。图 5 数据表关系2数据表结构的详细设计表 11 用户信息表(user_t)序号 字段名 字段类型 说明 备注1 userid Int 用户编号 主键2 username Varchar(50) 用户名 Not null3 userpassword Varchar(50) 密码 Not null4 useremail Nvarchar(255) 电子邮件 Not null5 usersign Nvarchar(25
20、5) 用户签名6 usersex Varchar(50) 用户性别 Not null7 userface Nvarchar(255) 头像8 point Int 积分9 joindate Datetime 注册日期 Not null10 userbirthday Nvarchar(50) 用户生日11 userquestion Nvarchar(50) 密码问题 Not null12 useranswer Nvarchar(50) 密码答案 Not null13 userlastip Nvarchar(40) 最后登录 IP Not null14 userhidden bit 是否隐身登录 N
21、ot null15 userqq Nvarchar(255) 用户 QQ第 8 页 共 32 页16 truename Nvarchar(255) 真实姓名17 country Nvarchar(255) 国家18 city Nvarchar(255) 城市19 constellation Nvarchar(255) 星座20 blood Nvarchar(255) 血型21 phone Nvarchar(50) 电话22 Works Nvarchar(255) 职业23 School Nvarchar(255) 毕业院校24 Address Nvarchar(255) 家庭住址25 jbzl
22、 bit 是否公开基本资料 Not null26 xxzl bit 是否公开详细资料 Not null在用户信息表里保存的是在论坛注册用户的信息,用户编号和用户名在论坛中是不能重复的,用户名不能重复还使用用户编号的原因是计算机对数字检索速度更快。表 12 父版面信息表(area_t)序号 字段名 字段类型 说明 备注1 areaid Int 父版面编号 主键2 areaname Varchar(255) 父版面名 Not null3 setuptime datetime 建立时间 Not null表 13 子版面信息表(board_t)序号 字段名 字段类型 说明 备注1 boardid In
23、t 子版面编号 主键2 boardname Varchar(50) 子版面名 Not null3 areaid Int 父版面编号 Not null序号 字段名 字段类型 说明 备注4 readme Varchar(255) 版面说明 Not null5 setuptime Datetime 建立日期 Not null6 boardmaster Varchar(50) 版主7 topicnumber Int 主题数量 Not null8 indexIMG Varchar(255) 版面图片 Not null表 12 和 13 是版面信息表,这里使用两个表是为了编程方便,父版面和子版面是通过 a
24、reaid 字段关联的。表 14 主题信息表(topic_t)序号 字段名 字段类型 说明 备注1 topicid Int 主题编号 主键2 title Varchar(255) 主题 Not null3 bordid Int 版面编号 Not null4 reply Int 主题回复数 Not null5 userid Int 用户编号 Not null6 username Varchar(50) 用户名 Not null7 DateAndTime Datetime 发表日期 Not null第 9 页 共 32 页8 hits Int 点击数 Not null9 istop Bit 是否置
25、顶 Not null10 isbest Bit 是否精华 Not null11 fileid int 上传文件编号 Not null表 15 帖子信息表(post_t)序号 字段名 字段类型 说明 备注1 postid Int 帖子编号 主键2 parentid Int 回复帖子编号 Not null3 boardid Int 版面编号 Not null4 username Varchar(50) 用户名 Not null5 userid Int 用户编号 Not null6 topicid Int 主题编号 Not null7 title Varchar(255) 主题 Not null8
26、DateAndTime Datetime 发表日期 Not null9 body Text 帖子内容 Not null10 ip Varchar(40) 用户 IP Not null以上两张表是紧密关联的,论坛主题信息表记载了论坛中主题帖的信息,建立这个表的原因是用户在浏览论坛中的帖子时先应看到的是主题列表,如果主题能够吸引用户,用户才会去看其中的内容,否则用户一进来就看到帖子内容,会使用户感觉非常的杂乱。这两个表是通过 topicid 字段联系起来的,parentid 字段是用来针对特定的帖子回复。接下来几张表是论坛的其它功能需要的数据表。表 16 短消息信息表(message_t)序号 字
27、段名 字段类型 说明 备注1 mid Int 短消息编号 主键2 sender Varchar(50) 发送者 Not null3 incept Varchar(50) 接受者 Not null4 title Varchar(255) 主题 Not null5 content Varchar(255) 内容 Not null6 sendtime Datetime 发消息时间 Not null7 flag bit 是否已读 Not null表 17 用户等级信息表(grade_t)序号 字段名 字段类型 说明 备注1 gradeid Int 自动编号 主键2 userid Int 用户编号 No
28、t null3 postid Int 帖子编号 Not null4 grade Varchar(255) 等级 Not null5 point Int 积分 Not null6 ip Varchar(40) IP Not null表 18 文件上传信息表(file_t)第 10 页 共 32 页序号 字段名 字段类型 说明 备注1 fileid Int 文件编号 主键2 fname Varchar(100) 文件名 Not null3 userid Int 用户编号 Not null4 ename Varchar(50) 文件扩展名 Not null5 ftype Varchar(255) 文
29、件类型 Not null6 fsize Varchar(255) 文件大小 Not null表 19 好友信息表(friend_t)序号 字段名 字段类型 说明 备注1 Fid Int 自动编号 主键2 Userid Int 用户编号 Not null3 username Varchar(50) 用户名 Not null4 friendid Int 好友编号 Not null5 frinedname Varchar(50) 好友名 Not null6 addtime datetime 添加时间 Not null表 20 管理员信息表(admin_t)序号 字段名 字段类型 说明 备注1 mas
30、terid Int 自动编号 主键2 userid Int 用户编号 Not null3 username Varchar(50) 用户名 Not null4 boardid Int 版面编号 Not null5 flag bit 权限标识 Not null4 系统实现4.1 首页当用户打开论坛时,首先看到的是论坛首页,用户从首页可以看到和论坛相关的并且能激起用户兴趣的东西。比如发帖数,在线用户数以及论坛板块的情况,如图 6 所示。第 11 页 共 32 页图 6 论坛首页首页分为 3 个部分,最上面的导航条为一部分,中间的公共信息为一部分,下面的版面为一部分。将导航条部分单独写入文件 top
31、.asp 作为公共程序,以后任何一个页面需要就使用来调用。下面是 top.asp 的程序。1 这里显示的是游客的导航条2 这里显示的注册用户的导航条3 程序说明:用户登录后将用户名存入 session 对象来判断用户状态。公共信息部分是显示了论坛和当前用户的状态,该部分的详细内容将在后面的公共信息部分讨论。版面部分显示了版面的列表,该部分的详细内容将在后面的版面部分讨论。至此,首页的主要程序已经介绍了,以后章节是各个模块的主要程序。4.2 数据库连接函数SQL Server 数据连接要求提供用户名,密码,数据库名及数据库服务器地址,下面是使用 ADO 连接数据库的代码:1 4 4.3 用户模块
32、4.3.1 用户登录下面是一个用户登录的界面,如图 7。图 7 用户登录界面第 12 页 共 32 页下面是对用户登录页面的表单处理程序1 Trim(Request.Form(“validatecode“) Then3 response.write(“请注意正确输入验证码“)4 response.end5 end if6 session(“user“)=request.Form(“username“)7 user=request.Form(“username“)8 session(“pwd“)=request.Form(“userpwd“)9 pwd=request.Form(“userpwd
33、“)10 ishidden=request.Form(“hidden“)11 set rs = server.CreateObject(“adodb.recordset“)12 sql=“select * from user_t where username=“ name=“ filename=“)4 intFlag=InstrB(formData,Divider name=“ filename=“)4 intFlag=InstrB(formData,Divider & bncrlf & strTemp)5 Dim arrayTemp()6 If intFlag0 Then 因为后面要用到文件
34、的名字,所以首先返回文件的名字7 dataStart=intFlag+LenB(Divider & bncrlf & strTemp) 定位到第 1 个字符8 dataend=InstrB(datastart,formdata,bncrlf)-2 定位到最后 1 个字符第 24 页 共 32 页9 dataLen=dataend-datastart+1 返回要取信息的长度10 filepath=BinaryToString(MidB(formdata,datastart,datalen) 返回文件路径11 filename=Mid(filepath,InstrRev(filepath,“)+1
35、)从当前位置找到两个回车换行符,也就是文件内容开头的地方12 dataStart=InstrB(intFlag,formdata,bncrlf & bncrlf)+4定位到文件内容所在第 1 个字符13 dataEnd=InstrB(datastart,formdata,divider)-3 定位到文件内容的最后一个字符14 dataLen=dataend-datastart+1 返回文件内容的长度15 If dataLen “&posttime&“ order by DateAndTime desc4.5.4 其它功能1. 帖子评价对于未注册的用户如果想要吸引他们来到论坛,就需要给他们一个互
36、动的权利,对于每个主题开启一个评价好坏的功能,即使未注册的用户也可以使用。同时,增加注册用户发帖的积极性,使他们获得更多的积分和相应的等级。2. 论坛收藏随着论坛的内容逐渐丰富,用户在论坛中查找信息就会变得越来越困难,特别是对于自己喜欢的内容,每次都要去查找,对此我们提供一个收藏夹,用户可以把自己喜欢的东西收藏起来,方便以后查阅。3. 添加好友可以将站内的注册用户加为好友,方便查看好友的信息和联系。以上功能虽然不是论坛的必须功能,但是它让论坛更加人性化,其实现的方法都类似,都是对数据库的读/写操作。4.6 管理员模块4.6.1 用户管理管理员对用户的管理主要包括用户的批量删除和用户授权。1. 用户的批量删除实现用户的批量删除,与以往的单个删除不同,主要使用了数组循环:1 你没选用户!“)3 response.Write(“)4 else