基于ASP的某学校校园BBS的毕业设计.docx
《基于ASP的某学校校园BBS的毕业设计.docx》由会员分享,可在线阅读,更多相关《基于ASP的某学校校园BBS的毕业设计.docx(28页珍藏版)》请在冰豆网上搜索。
基于ASP的某学校校园BBS的毕业设计
基于ASP的某学校校园BBS的设计与实现
1引言
1.1课题背景与开发目的
BBS是BulletinBoardSystem的缩写,即电子公告板。
它是以文字为主的界面,为广大网友提供了一个彼此交流的空间。
随着互联网技术的迅猛发展,网络给人们带来了很多便利,人们借助于网络进行相互交流变得更加方便。
于是,以互联网为基础的网上论坛逐渐成为人们发表言论的一个平台。
一些具有前卫风格的校园BBS随着互联网的普及在各大高校建立,并逐渐成为学生之间交流信息,共享资源,娱乐休闲的场所,成为广大高校学生课余生活中不可获缺的一部分。
而且在不久的将来,各种各样展现自身风格的校园BBS会深入到中学甚至小学校园。
本系统采用B/S模式设计,开发目的除了作为在校学生、老师发布消息,共享资料,娱乐休闲的平台,也可成为对外展示校园的一个“活广告”。
1.2开发环境
本系统是在windowsXP操作系统下,使用UltraEdit-32和DREAMWEAVER作为开发工具进行开发的。
数据库使用的是ACCESS。
1.3硬件需求
在运行本系统前,请检查一下计算机是否满足以下要求。
计算机要求的配置为:
(1)WINDOWSServicePack4.0和Internet信息服务器5.0(IIS5.0)
(2)MicrosoftOfficeAccess2000以上版本
(3)Windows2000/XP简体中文版+简体中文IE5.0以上版本
2需求分析
2.1系统概述
根据该BBS的逻辑功能划分,本系统一共分为七大功能模块,分别是用户注册和登陆模块,用户资料管理模块,文章发表和文章浏览模块,文章搜索模块,管理员操作模块,版主操作模块,论坛短消息功能模块。
其中管理员操作又划分为论坛文章操作模块及论坛设置模块。
用户资料管理模块可划分为用户密码重设模块,用户信息查询模块,用户资料修改模块。
其功能结构图如图2.1所示。
图2-1系统功能结构图
(1)用户注册和登陆模块
主要是完成新用户的注册,将新用户注册信息加入数据库;登陆模块主要验证用户身份,使用会员身份登陆论坛即可进入论坛并享有会员的使用权限。
(2)用户资料管理模块
主要功能是注册用户可以随意修改自己的个人信息,可随时查询其他用户的个人资料;如果不幸遗忘自己的登陆密码,还可利用本论坛的密码重设功能,重设密码,极大的方便了用户使用。
(3)文章发表和文章浏览模块
本论坛最主要的功能,登陆用户和游客都可随意点击感兴趣的帖子进行浏览,而登陆用户还可以随时在论坛里发表自己的文章,或者对论坛里的帖子进行回复。
(4)文章搜索模块
登陆用户可利用该功能对感兴趣但无法记起位置的帖子进行查找,方便用户游览论坛的一个功能。
(5)管理员操作模块
本论坛管理者才拥有的功能,可以对论坛中任意版块的帖子进行固顶,加精,删除等操作,还可以对论坛的一些基本设置进行修改。
(6)版主操作模块
论坛各个版块的具体管理者,在自己的版块有和管理员一样的管理权限,负责维护自己版块的秩序。
(7)论坛短消息功能模块
登陆用户可利用该功能对其他论坛用户留言,进行私下的交流。
2.2系统角色划分
本系统操作用户按不同级别依次可分为:
游客,普通会员用户、版主、管理员。
高级别的用户可以继承低级别用户的公用功能。
同时,各级别用户具有一定的只有以本级别身分登录才具有的私有功能。
1.游客:
只能进入论坛浏览帖子,无其他权限。
2.普通会员:
浏览帖子,发表或回复帖子、资料维护、文章搜索、论坛短消息。
3.版主:
除会员基本功能外,可对自己所在版块的文章进行操作。
4.管理员:
除会员基本功能外,可对所有版块的文章进行固顶,加精,删除等,并且有论坛设置修改权限。
3系统总体设计
3.1关键技术
3.1.1ASP技术
ASP技术是一种类似HTML(HypertextMarkupLanguage超文本标识语言)、Script与CGI(CommonGatewayInterface通用网关接口)的结合体,简单的讲它是一种运行于服务器的脚本语言,但是其运行效率比CGI更高、程序编制也比HTML更方便且更有灵活性,程序安全性及保密性也远比Script好。
其特点归纳如下:
1.ASP可以和HTML或其他脚本语言(VBScript与JavaScript)互相嵌套。
2.ASP是一种在Web服务器端运行的脚本语言,因此,程序代码完全保密。
3.ASP以对象为基础,因此可以使用ActiveX控件继续扩充其功能。
4.ASP内置ADO组件,因此可以轻松地存取各种数据库,大大缩短了程序开发时间。
5.ASP可以将运行结果以HTML的格式传送至客户端浏览器,因此ASP可以适用于各种浏览器。
下面来介绍一下ASP的几个内置对象:
Request对象,我们知道HTTP通讯协议是一种请求与响应(Request/Response)的通讯协议,因此通常由客户端向Web服务器提出请求,Web服务器才会响应信息。
因此在ASP中,特别将“客户端提出的要求”与“Web服务器响应的信息”等动作封装成Request对象与Response对象。
换而言之,Request对象通常包含了用户端的相关信息,如浏览器的种类、表头信息、表单参数及cookies等等。
Response对象,每一种程序语言或开发工具一定都有与用户沟通的界面或函数,ASP也不例外。
在ASP中负责将信息传达到用户的对象就是Response对象。
Server对象,Server对象允许用户取得服务器提供的各项功能,例如,Server对象的CreateObject方法允许客户端用户建立一个ActiveXServer组件实例,其所建立组件实例会随着服务器端完成ASP网页的处理而自动被释放。
如果希望此对象实例可以跨多个ASP网页,就要用到Session对象保留该组件实例,直到Session对象的运行时间到了,或是在其他ASP网页调用Session对象的Abandon方法,此组件实例才会被释放。
Session对象,Session对象在ASP程序编写中占了相当重的份量,由于网页是一种无状态的程序,因此几乎无法知道用户的浏览状态。
必须通过Session对象记录用户的相关信息,以供用户再次对此Web服务器提出要求时作确认,例如,在某些特定的网页中,常需要用户输入确认的账号和密码,假如这些身份确认的结果无法保留,那岂不是每一个网页都需要重新输入一次密码。
换而言之,每一个Session的用户,Web服务器均会自动的为它们建立一个Session。
必须说明,Session对象只能适用于具备Cookie功能的浏览器。
3.1.2数据库技术
在基于微软IIS/PWS的网络平台上,通过服务器端运行的ASP程序来访问后台数据库,是一种最常见的模式了。
而对于小型的数据库应用需求,微软的Access数据库应该是与ASP程序配套使用的首选。
由于Access数据库的ODBC驱动程序支持的SQL指令全,执行效率高,所以Access后台数据库+ASP服务器端程序+客户端IE浏览器,是一个精练实用高效的组合模式。
利用SQL语言,可以查询和管理自已的数据库。
它由大约30条命令构成,但实际只需要少数的几个命令就可以完成相当多的工作,常用的SQL查询命令有:
Select、Insert、Delete、Update等。
3.1.3加密技术
本设计在会员密码和密码问题的存储时使用了MD5加密算法来保护数据库中的重要数据。
MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位的散列值。
本设计在保存会员密码和密码提示问题答案时都先将传递的数据通过MD5加密后才存入数据库,故在数据库中只能看到已经加密的信息,保证了信息的安全。
又因为该算法是单向加密的,所以当有数据要和保存的数据进行比较时,都是先将新数据加密再比较密文的差异。
3.2系统流程图
论坛设计按照一般操作进行设计:
图3-1系统流程图
3.3方案选择
3.3.1数据库需求分析
根据系统功能和数据流程,可以确定一下数据项和数据结构:
1.会员信息:
包括会员标示ID号,姓名,性别,论坛头像,论坛币,发帖数等论坛资料。
2.论坛配置信息:
包括创建时间,会员总数,论坛货币单位等。
3.版块信息:
版块说明,版主等。
4.论坛帖子信息:
帖子号,作者,内容,发表日期,回复数等。
5.好友信息:
论坛好友的姓名,注册时间。
3.3.2数据库设计
根据数据库的需求分析,酒店管理系统需要建立10个数据表,他们分别是:
论坛文章表(BBS),论坛版块表(BBSForumID),论坛配置表(Config),用户好友表(Friend),论坛短消息表(message),用户等级表(UserGroups),用户信息表(Users)。
各表具体信息见下表:
表3-1BBS表中字段
字段名
数据类型
字段描述
ID
自动编号
主题帖子号ID(主键)
ForumID
数字
论坛版块号
RID
数字
回复主题帖子号ID
TopicFace
数字
作者心情贴图
Title
文本
文章标题
Content
备注
文章内容
DateTime
日期/时间
发表日期
UserName
文本
作者
IsBest
数字
是否为精华帖
IsTop
数字
是否为置顶帖
IsNews
数字
是否为论坛公告
IsLocked
数字
是否被锁
IsVote
数字
是否为投票帖
IsMana
数字
是否需要威望
ManaNum
数字
要求威望值
LastUserName
文本
最后回复人
LastDateTime
日期/时间
最后回复时间
ReadTimes
数字
浏览次数
ReTimes
数字
回复次数
表3-2BBSForumID表中字段
字段名
数据类型
字段描述
ForumID
数字
论坛版块号ID(主键)
版块说明
文本
版块说明
版块名称
文本
版块名称
BorderUserName
文本
版主名字
表3-3Config表中字段
字段名
数据类型
字段描述
Site_Name
文本
系统名字
Site_BuildDate
文本
系统创建时间
Site_PostNum
数字
论坛发帖数
Site_TopicNum
数字
论坛主题帖数
Site_UserNum
文本
论坛会员数
Site_LastUser
文本
论坛最近注册会员
Site_CheckReg
数字
是否允许新会员注册
Site_RegWord
文本
注册校验码
Site_MoneyUnit
文本
论坛货币单位
Site_PostMoney
数字
发帖收入
Site_ReplyMoney
数字
回复收入
Site_MsgMoney
数字
发送消息消耗货币
表3-4UserGroups表中字段
字段名
数据类型
字段描述
UserGroupID
数字
组ID
GroupTitle
文本
用户组名称
GroupClass
文本
用户组分类
MinArticle
数字
需发表多少文章
TitlePic
文本
类别图
GroupClassID
数字
等级ID
表3-5Friend表中字段
字段名
数据类型
字段描述
ID
自动编号
好友ID(主键)
UserNameMD5
文本
用户加密名称
FriendName
文本
好友名字
JoinDate
日期/时间
加为好友时间
CheckUser
数字
是否列入黑名单
表3-6message表中字段
字段名
数据类型
字段描述
ID
数字
消息ID号(主键)
Title
文本
消息标题
content
文本
消息标内容
to_man
文本
收件人
from_man
文本
发件人
isread
数字
是否已读
表3-7Users表中字段
字段名
数据类型
字段描述
UID
自动编号
会员ID(主键)
UserName
文本
会员姓名
UserNameMD5
文本
会员姓名加密
UserPassWord
文本
会员密码
UserQuestion
文本
密码提示问题
UserAnswer
文本
密码提示问题答案
UserHonour
文本
会员头衔
UserFace
文本
会员头像
UserSex
数字
会员性别
UserHomePage
文本
会员主页
UserEmail
文本
会员邮箱
UserSignature
文本
会员签名
UserBests
数字
会员精华帖数
UserPost
数字
会员发贴数
UserMoney
数字
会员财富
UserMana
数字
会员威望
JoinDate
日期/时间
会员注册时间
LastLoginIP
文本
上次登陆IP
UserLogins
数字
登陆次数
LastLogin
日期/时间
上次登陆时间
UserGroup
文本
会员用户组名称
UserGroupID
数字
会员等级组ID
UserGroupClass
文本
会员用户组分类
UserGroupClassID
数字
会员等级ID
IsAdmin
数字
是否为管理员
3.3.3数据库连接的实现
数据库连接操作是一个相当频繁的操作,在ASP的数据库编程中,connection对象是我们不可能离开的一个对象,该对象是ADO对象模块中的一个专门打开和关闭数据库连接的对象,在对数据库进行任何的操作,比如更新记录,插入,删除,检索等,都必须以connection对象的建立为前提。
形象地来说,connection对象就是程序与数据库沟通的管道,所有对数据库的操作,都必须经过它,因此,本系统首先建立一个connection对象的实例变量,然后才能在它的基础上建立Recordset对象实例来操作数据库。
这里首先利用connection对象的属性ConnStr设置数据库的连接方式,使用的是AccessOLEDB驱动程序。
本设计还使用了server对象的Server.MapPath(Path)方法,作用是将(path)指定的虚拟路径转换为实际路径,大大提高了本系统的移植性。
然后使用server.createobject方法建立connection对象的实例变量conn,使用connection对象的Open方法打开数据库连接,核心代码如下:
mdb="Data/MyBBS.mdb"'数据库相对路径
ConnStr="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="&Server.MapPath(""&mdb&"")
Setconn=server.createobject("adodb.connection")
Conn.OpenConnstr
4系统的完整设计与开发
4.1系统显示前的准备
4.1.1论坛基本配置
系统运行时,有些数据库里的数据是会被频繁调用的,为了便于书写代码和程序的严谨,可以将这些数据首先赋给一些变量,在后面的程序运行中直接调用变量,不用频繁的访问数据库。
一些保存论坛基本信息的数据就属于这类。
所以在运行时首先将论坛一些基本参数在数据库连接后即从数据库中调出,以上内容在Conn.asp文件里连接数据库后执行,其中使用connection对象的execute方法对存放基本配置信息的表进行SQL查询,还使用了Recordset对象的BOF和EOF属性,其中BOF属性表示查询数据库的指针位于第一条记录之前,则为真:
EOF属性表示查询数据库的指针位于最后一条记录之后,则为真。
如果两者都为真,说明数据库里并没有对应的数据,然后可关闭刚才创建的对象实例,并将其清空,释放系统资源;如果找到需要的记录,则将其数据读出到创建的变量里以便使用:
'=========读取论坛基本设置========
SetrsConfig=conn.execute("Select*fromConfig")'创建一个查询数据库的对象实例
IfrsConfig.BOFAndrsConfig.EOFThen'查询为空而且到最后
rsConfig.Close'关闭变量
SetrsConfig=Nothing'释放对象实例
Response.Write"网站配置数据丢失!
系统无法正常运行!
"
Response.End
Else
Site_Name=rsConfig("Site_Name")
Site_PostNum=rsConfig("Site_PostNum")
………………………’省去部分代码
EndIf
进入系统时由于有些功能只针对注册会员和管理员开放的,并不是进入论坛的人都能使用,这里就涉及到一个用户身份判断的问题。
本设计包含了一个用户验证功能函数的User_Auditing.asp文件,在其他程序执行前都会先执行该文件里的函数,在需要验证时不必重复书写代码,只需在需要身份验证的程序之前调用该具有验证功能的函数就行。
其中的CheckUsers()函数验证会员,CheckUnAdmin()函数验证管理员或版主。
本设计一大特点是使用了Cookies来暂存会员信息,主要是会员姓名、密码这两项,这一功能的实现对程序的运行是十分方便的,如上面提到的CheckUsers()函数的功能就是根据Cookies里的会员密码来验证会员是否登陆;因为一旦会员登陆后登陆处理程序会将该会员的密码暂存到Cookies中,所以只需验证当前Cookies里的会员密码是否为空就可以判断目前的用户是否登陆论坛。
CheckUnAdmin()函数则是创建一个ADO对象模块的两个Recordset对象实例来访问数据库中存放管理员身份信息和版主身份信息的表,读取有关管理员或版主身份的字段进行比较判断。
SubCheckUnAdmin()
Setwd=server.createobject("adodb.Recordset")
SQL="SelectBorderUserNamefromBBSForumID"
wd.OpenSQL,Conn,1,1
Ifwd("BorderUserName")<>Request.Cookies("BBS")("UserName")Then
………’省去部分代码
4.2系统主要功能分析
4.2.1用户注册
在论坛主页的工具栏里是会员享有的一般操作选项,该工具栏由在User_Auditing.asp文件里定义的MyBBSTop()函数实现,同样只需在以后的页面调用该函数实现工具栏的显示。
该函数一开始会先在Cookies里去查找会员姓名,如果发现会员姓名为空,则说明当前浏览论坛的用户未登陆,则工具栏中会显示未登陆的提示信息,以及显示未注册用户注册的信息。
若是未注册会员,则可点击“注册”链接到注册页面,如下图:
图4-1会员注册页面
用户进入该页面根据要求填写上述必要的信息后,会通过表单传递的“POST”方法将输入的内容传递给后台处理页面的Reg()函数对信息进行处理,其中在传递“用户名”、“密码”及“密码问题”等信息时又调用了MayHTMLEncode和ReplaceBadChar函数。
其中MayHTMLEncode函数的功能是将一些特殊符号替换成浏览器识别的符号,而ReplaceBadChar函数的功能是过滤非法的SQL字符。
从而保证了用户名等信息符合网页设计的要求。
当以上所有的数据都审核通过后,Reg函数便将返回的内容传递给自定义变量,然后创建一个ADO对象模块的Recordset对象实例来访问数据库的用户信息表,同样使用了Recordset对象的BOF和EOF属性来查看此用户名是否已被注册,使用一条If…else条件语句将条件定为Not(rs.EofAndrs.Bof),若为真,即数据不为空,说明用户名已被注册,则以Response对象的Redirect方法提示用户重新注册,保证了会员名的唯一性,方便论坛的管理。
若条件为假,则执行else以后的操作,即创建Recordset对象实例来将当前新的用户信息添加到数据库的用户信息表里,并将新会员数加1更新,完成注册功能,同时将所有注册后的会员信息写入Cookies中。
页面提示用户注册成功,以Response对象的Redirect方法跳转回论坛主页面,此时会员就可以享用所有会员权限,尽情游览论坛。
Response对象的Redirect方法是实现页面的跳转,使当前页面跳转到指定的页面。
本设计中都是以ClueInfo.asp文件中的函数来提示操作完成的信息或错误信息。
当操作成功时,则调用ClueInfo.asp文件中的“Yes”函数,该函数即是显示成功操作的信息,并将页面跳转链接重新定义回主页面;如果发生错误,则调用ClueInfo.asp文件中的“OtherErr”函数,该函数即是显示错误信息,然后同样将页面跳转链接重新定义回主页面,使用户可以重新操作。
4.2.2论坛显示
下图是论坛主页面,里面的分割区域将论坛五个话题不同的版块分别显示:
图4-2论坛主页面
考虑到用户访问及发帖的需要,在每个版块中以“ForumId”为不同的值表示不同的版块。
版块结构中分别创建了2个Recordset对象实例来访问数据库,一个对象实例以代表版块号的“ForumId”的值为查询条件查询存放版块信息的表,将数据库里存放的版块内容和版主名字读出,并将内容以Response对象的Write方法显示到页面上;另一个对象实例以代表版块号的“ForumId”的值为查询条件查询存放在该版块所发表的文章的表,为保证所查询的结果为最近的一条信息,在查询语句中“Top1”和“orderbydatetime”两个查询条件将时间最近的第一条信息以Response对象的Write方法将显示到页面上,查询语句的核心代码如下:
sql="SelectTop1*FromBBSWhereForumId=?
orderbydatetime"
用户任意点击一个版块名称即链接到相应版块:
图4-3论坛“校园新闻”版块页面
该页面关键技术是调用的Session对象。
除了在很多地方创建Recordset对象实例来访问数据库的表外,有时还必须根据需要对当前版块号“ForumId”进行保存,目的是在任意版块发帖的时候,能够将该帖子所要显示的版块号一起写入数据库,保证在哪个版块里发表的帖子能在哪个版块里显示,从而避免在不同版块发表文章却因为版块切换而造成的版块ID号与所要求的ID号不一致,不能正常显示的问题。
利用Session对象的特点就可以解决这个问题。
所以每个版块页面一开始都会先将版块号用Session对象保存。
然后在其他地方则都是创建Recordset对象实例来访问数据库的表,然后根据表中字段情况做不同的处理。
每个版块都分为两部分,一个部分是显示论坛公告等一系列重要主题的区域,另一部分则是显示普通文章的区域。
所以在重要主题区域都会创建一个Recor