基于ASP的某学校校园BBS的毕业设计Word文档下载推荐.docx
《基于ASP的某学校校园BBS的毕业设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于ASP的某学校校园BBS的毕业设计Word文档下载推荐.docx(34页珍藏版)》请在冰点文库上搜索。
![基于ASP的某学校校园BBS的毕业设计Word文档下载推荐.docx](https://file1.bingdoc.com/fileroot1/2023-4/30/e4f5b0d7-79b2-4dc7-8102-7c47139c031d/e4f5b0d7-79b2-4dc7-8102-7c47139c031d1.gif)
本论坛管理者才拥有的功能,可以对论坛中任意版块的帖子进行固顶,加精,删除等操作,还可以对论坛的一些基本设置进行修改。
(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表中字段
论坛版块号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(主键)
UserNameMD5
用户加密名称
FriendName
好友名字
JoinDate
加为好友时间
CheckUser
是否列入黑名单
表3-6message表中字段
消息ID号(主键)
消息标题
content
消息标内容
to_man
收件人
from_man
发件人
isread
是否已读
表3-7Users表中字段
UID
会员ID(主键)
会员姓名
会员姓名加密
UserPassWord
会员密码
UserQuestion
密码提示问题
UserAnswer
密码提示问题答案
UserHonour
会员头衔
UserFace
会员头像
UserSex
会员性别
UserHomePage
会员主页
UserEmail
会员邮箱
UserSignature
会员签名
UserBests
会员精华帖数
UserPost
会员发贴数
UserMoney
会员财富
UserMana
会员威望
会员注册时间
LastLoginIP
上次登陆IP
UserLogins
登陆次数
LastLogin
上次登陆时间
UserGroup
会员用户组名称
会员等级组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