大家好,今天给大家介绍基于asp+sqlserver的电子论坛系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。
文章目录:
项目难度:中等难度
适用场景:相关题目的毕业设计
配套论文字数:11290个字36页
包含内容:整套源码+完整毕业论文
资源文件目录简图如下:

提示:以下为毕业论文的简略介绍,项目源码及完整毕业论文下载地址见文末。
1 引言
1.1 课题背景
省略
1.2 国内外研究现状
省略
1.3 本课题的研究意义
省略
2 系统分析
2.1 系统需求分析
首先找出论坛针对的对象,得出一个简洁的例表:
论坛的对象不是孤立的,它们是紧密联系的,下面是论坛各个对象之间的关联表,关联是单向的,是指左侧对象对上方对象的活动。无关联的用×表示,如果两者只要单向关联,那么在另一个对象关联时用√表示。
表1 各对象之间的关系表

至此,论坛的需要分析完成,接下来是论坛的功能设计。
2.2 系统功能描述
2.2.1 主要功能
首先从用户开始,用户关联的对象是自身,版面,公共信息,帖子。分别根据用户与这些对象的联系给出一个明确的菜单
表2 用户功能表

接下来的版面,公共信息,帖子都没有和其他对象的关联,它们在论坛中是被动对象,是被其它对象所操作。因此针对它们的主要功能是由其它对象产生,例如浏览版面就是用户的功能。
管理员是论坛的一个特殊群体,它们的主要工作是保证论坛的正常运行,他们可以和论坛的所有对象产生联系,因此他们的功能也很丰富
表3 管理员功能表

现在分析各个对象的相关操作,设计为对象的功能实现接口,即为对象的操作方法。各个板块有浏览列表和管理两个方法,管理方法又可以分为添加,修改,删除3个子方法。
帖子有浏览,发帖,回帖,搜索和管理5个方法,浏览方法又分为列表和查看两个子方法,管理方法分为编辑,删除,置顶,移动,指定精华5个子方法,如图。

图1 帖子对象的相关关系
用户有注册、登录2个方法,管理用户方法又分为删除和设置权限2个子方法,如图。

图2 用户对象的相关关系
这样分析完后,前面列出的功能列表就有了各自的归属对象。
论坛一般存在两种用户:注册用户和管理员。用户的权限是向下覆盖的,既上级权限包含下级权限,在论坛中,管理员是上级权限。
论坛的3大基本功能的相互关系如下图所示。

图3 论坛基本功能的关系
本系统还有一些是论坛的内容更加丰富的扩展功能。
2.2.2 论坛扩展功能
下面是个一个论坛扩展功能表。
表4 扩展功能表

添加了这几个扩展功能后,论坛就显得平易近人多了,也更具有使用性。
3 系统设计
3.1 功能模块
根据上一节给出论坛所必须的功能,划分模块。模块的划分主要是按照每一个对象的操作来归类。论坛操作的对象是上一节所归纳的5个。下面就针对这5个对象划分功能模块。
用户:有两个模块,一个是用户注册,登录,修改信息等功能组合,是用户对用户自身的操作;另一个是管理员对用户进行删除,授权,是管理员对用户的操作,如表5。


另外,对于用户使用的模块称为前台模块,管理员使用的模块称为后台模块。系统总体功能划分如图4。

图4 系统总体功能划分
3.2 数据库设计
本论坛使用Microsoft SQL Server 数据库,下面列出是数据库设计的详细。
1.建立数据表间的关系
本论坛数据库共有11个数据表,具体如表10所示。
表10 论坛数据表

下面是数据表之间的关系图,如图5。

图5 数据表关系
2.数据表结构的详细设计


在用户信息表里保存的是在论坛注册用户的信息,用户编号和用户名在论坛中是不能重复的,用户名不能重复还使用用户编号的原因是计算机对数字检索速度更快。

表12和13是版面信息表,这里使用两个表是为了编程方便,父版面和子版面是通过areaid字段关联的。


以上两张表是紧密关联的,论坛主题信息表记载了论坛中主题帖的信息,建立这个表的原因是用户在浏览论坛中的帖子时先应看到的是主题列表,如果主题能够吸引用户,用户才会去看其中的内容,否则用户一进来就看到帖子内容,会使用户感觉非常的杂乱。这两个表是通过topicid字段联系起来的,parentid字段是用来针对特定的帖子回复。
接下来几张表是论坛的其它功能需要的数据表。


4 系统实现
4.1 首页
当用户打开论坛时,首先看到的是论坛首页,用户从首页可以看到和论坛相关的并且能激起用户兴趣的东西。比如发帖数,在线用户数以及论坛板块的情况,如图6所示。

图6论坛首页
首页分为3个部分,最上面的导航条为一部分,中间的公共信息为一部分,下面的版面为一部分。将导航条部分单独写入文件top.asp作为公共程序,以后任何一个页面需要就使用
来调用。下面是top.asp的程序。
1 <% If Session("userid") = "" Then %>
这里显示的是游客的导航条
2 <% Else %>
这里显示的注册用户的导航条
3 <% End If %>
程序说明:用户登录后将用户名存入session对象来判断用户状态。
公共信息部分是显示了论坛和当前用户的状态,该部分的详细内容将在后面的公共信息部分讨论。
版面部分显示了版面的列表,该部分的详细内容将在后面的版面部分讨论。
至此,首页的主要程序已经介绍了,以后章节是各个模块的主要程序。
4.2 数据库连接函数
SQL Server数据连接要求提供用户名,密码,数据库名及数据库服务器地址,下面是使用ADO连接数据库的代码:
1 <% dim conn’打开数据库连接
2 set conn = server.CreateObject("adodb.connection")
3 conn.open = "dirver ={sql server};server=(服务器地址);uid=用户名;pwd=密码;database=数据库名; " %>
4 <% conn.close’关闭数据库连接
5 Set conn=nothing %>
4.3 用户模块
4.3.1 用户登录
下面是一个用户登录的界面,如图7。

图7 用户登录界面
下面是对用户登录页面的表单处理程序
1 <% '验证码处理
2 If trim(request.form("validatecode"))=empty or
Trim(Session("cnbruce.com_ValidateCode"))<>Trim(Request.Form("validatecode")) Then
3 response.write("请注意正确输入验证码")
4 response.end
5 end if
6 session("user")=request.Form("username")
7 user=request.Form("username")
8 session("pwd")=request.Form("userpwd")
9 pwd=request.Form("userpwd")
10 ishidden=request.Form("hidden")
11 set rs = server.CreateObject("adodb.recordset")
12 sql="select * from user_t where username='"&session("user")&"' and userpassword='"&session("pwd")&"'"
13 rs.open sql,conn,3,3
14 if rs.eof and rs.bof then '判断用户是否存在
15 response.Redirect("login_error.asp")
16 else
17 session("userid")=rs("userid")
18 sql1="update user_t set userhidden='"&ishidden&"' where userid='"&session("userid")&"'"'用户是否隐身
19 conn.execute(sql1)
20 select case request("usercookie")'把用户信息写入Cookie
21 case "1"
22 response.Cookies("user")("username")=user
23 response.Cookies("user")("userpassword")=pwd
24 response.Cookies("user").expires=date()+1
25 case "2"
26 response.Cookies("user")("username")=user
27 response.Cookies("user")("userpassword")=pwd
28 response.Cookies("user").expires=date()+7
29 case "3"
30 response.Cookies("user")("username")=user
31 response.Cookies("user")("userpassword")=pwd
32 response.Cookies("user").expires=date()+365
33 end select
34 session("name")=request.Form("username")
35 response.Write(">")
36 response.Write(session("name"))
37 response.Write("!欢迎你回来!")
38 response.Write("两秒钟后自动转入首页")
39 end if
40 rs.close
41 set rs=nothing %>
程序说明:第1~5行是对验证码的处理;第6~10行是将从表单获取的数据存入变量;第11~14行是依据输入的用户名和密码为条件对用户信息表user_t进行查找,如果没有查找到记录说明该用户输入的用户名或密码错误;第15行转到错误处理页面;第18~19行是将用户是否隐身登录标记,即是对用户信息表中的userhidden字段标记;第20~33行是将用户信息写入Cookie。
4.3.2 用户注册
用户注册,首先要检查的就是用户填写的信息,其中包括:

图8用户注册各个页面与数据库的关系
下面是验证用户注册信息的程序:
1 <% a=instr(request("userpassword"),"*")
2 b=instr(request("userpassword")," ")
3 if username=""or useremail=""or userquestion=""or useranswer=""or userpassword=""or userpassword1=""then
4 response.Write("必填信息不能为空,请填完!")
5 elseif userpassword<>userpassword1 then
6 response.Write("两次输入密码不一致,请重新输入!")
7 elseif len(username)>10 then
8 response.Write("你输入的用户名太长,请重新输入!")
9 elseif len(userpassword)<6 or len(userpassword)>18 then
10 response.Write("密码不符合要求,请重新输入!")
11 elseif not isvalidemail(useremail) then
12 response.Write("电子邮件地址错误,请重新输入")
13 elseif a<>0 or b<>0 then
14 response.Write("请不要将‘*’和‘ ’等符号作为密码!")
15 elseif useronly(username,useremail) then
16 response.Write("用户名被占用!")
17 else
18 验证通过后将用户信息写入用户信息表user_t
19 end if %>
程序说明:第1~2行是取出密码中“*”和“ ”在字符串中的位置;第11行调用了isvalidmail函数,该函数是验证电子邮件地址正确性;第15行调用了useronly函数,该函数是验证用户名和电子邮件唯一性;下面给出验证电子邮件正确性的程序:
1 function isvalidemail(email)
2 dim names,named,I,c
3 isvalidemail=true
4 names=split(email,”@”)
5 if ubound(names)<>1 then
6 isvalidemail=false
7 exit function
8 end if
9 for each named in names
10 if len(named)<=0 then
11 isvalidemail=false
12 exit function
13 end if
14 for i=1 to len(named)
15 c=lcase(mid(named,I,1))
16 if instr(“abcdefghijklmnopqrstuvwxyz_-.”,c)<=0 and not isnumericI then
17 isvalidemail=false
18 exit function
19 end if
20 next
21 if left(named,1)=”.” Or right(named,1)=”.” Then
22 isvalidemail=false
23 exit function
24 end if
25 next
26 if instr(names(1),”.”)<=0 then
27 isvalidemail=false
28 exit function
29 end if
30 i=len(names(1))-instrrev(names(1),”.”)
31 if i<>2 and i<>3 then
32 isvalidemail=false
33 exit function
34 end if
35 if instr(email,”..”)>0 then
36 isvalidemail=false
37 end if
38 end function
下面是验证用户和电子邮件唯一性的程序:
1 function useronly(user,email)
2 set rs = server.CreateObject("adodb.recordset")
3 sql="select * from user_t where username='"&user&"' or useremail='"&email&"'"
4 rs.open sql,conn,3,3
5 if rs.eof and rs.bof then
6 useronly=false
7 else
8 useronly=true
9 end if
10 rs.close
11 set rs=nothing
12 end function
它包括修改信息(upadate_userinfo.asp)和修改密码(update_pwd.asp)两个页面。两个页面都是更新用户信息表user_t里的特定字段,这里就不再列出具体程序。
4.3.3 与其他用户联系
站内用户通过短消息与其他用户联系,下面是用户收/发短消息的页面:

图9 用户收/发短消息页面
该功能包括了发短消息,发件箱和收件箱三部分,发短消息是向短消息表(message_t)添加记录,发件箱和收件箱都是从message_t表读取记录。
标记短消息是否已读是对数据表message_t中的flag字段操作。下面是标记短消息已读的程序:
1 <% '标记短消息已读
2 abc=request("mid")
3 set rsmessage = server.CreateObject("adodb.recordset")
4 rsmessage.open "select * from message_t where mid='"&abc&"'",conn' exec="update message_t set flag='1' where mid='"&abc&"'"
5 conn.execute(exec)
6 rsmessage.close
7 set rsmessage=nothing
8 conn.close
9 set conn=nothing
10 response.Redirect("messageInceptCon.asp?mid="&abc&"") %>
下面是统计未读消息数的程序:
1 <% '统计未读消息数
2 set rsmessage1 = server.CreateObject("adodb.recordset")
3 rsmessage1.open "select * from message_t where flag='0' and incept='"&session("user")&"'",conn
4 if rsmessage1.bof or rsmessage1.eof then
5 session("flag")=0
6 else
7 k=0
8 do while not rsmessage1.eof
9 k=k+1
10 session("flag")=k
11 rsmessage1.movenext
12 loop
13 rsmessage1.close
14 set rsmessage1=nothing
15 end if
16 conn.close
17 set conn=nothing %>
4.3.4 找回密码
当用户忘记密码时,可以使用找回密码功能。这就要用到用户信息表user_t里的userquestion和useranswer两个字段。系统根据用户名给出密码问题,用户给出密码答案,若匹配,系统会将用户的密码发至用户注册时填写的电子邮箱中。系统给出密码问题和用户给出密码答案是对数据表user_t的读/写操作,前面已经介绍过类似的程序,就不再讨论,这里给出系统是如何将密码发至用户邮箱的程序:
1 <% Set jmail = Server.CreateObject("JMAIL.SMTPMail") '创建一个JMAIL对象
2 jmail.silent = true 'JMAIL不会抛出例外错误,返回的值为FALSE跟TRUE
3 jmail.logging = true '启用使用日志
4 jmail.Charset = "GB2312" '邮件文字的代码为简体中文
5 jmail.ContentType = "text/html" '邮件的格式为HTML的
6 jmail.ServerAddress = "smtp.163.com" '发送邮件的服务器
7 jmail.AddRecipient username '邮件的收件人
8 jmail.SenderName = "地狱男爵" '邮件发送者的姓名
9 jmail.Sender = "rambo-1984@163.com" '邮件发送者的邮件地址
10 jmail.Priority = 1 '邮件的紧急程序,1 为最快,5 为最慢, 3 为默认值
11 jmail.Subject = "找回你的密码" '邮件的标题
12 jmail.Body = "你的密码是:"&userpwd '邮件的内容
13 jmail.AddRecipientBCC email '密件收件人的地址
14 jmail.AddRecipientCC admin'邮件抄送者的地址
15 jmail.Execute() '执行邮件发送
16 jmail.Close '关闭邮件对象 %>
4.3.5 用户登录添加验证码
使用验证码,用户每次登录时都不一样,这样做的目的是为了防止有人利用破解程序,暴力破解用户的密码。验证码的处理程序已经讨论过,这里给出生成验证码的程序:
1 <% Option Explicit
2 Response.Buffer = True
3 Response.Expires = -1
4 Response.AddHeader "Pragma","no-cache"
5 Response.AddHeader "cache-ctrol","no-cache"
6 Dim RndNum,ImgFileContent
7 Randomize Timer
8 RndNum = Cint(7999*Rnd+1000)
9 Session("cnbruce.com_ValidateCode") = Cstr(RndNum)
10 ImgFileContent=NumCode(RndNum)
11 Response.ContentType = "image/BMP"
12 Response.BinaryWrite ImgFileContent
13 Function NumCode(NumS)
14 Dim NumI,NumJ
15 Dim AdoM,AdoN
16 Dim Arr_Img(4),NStr
17 NStr=Cstr(NumS)
18 For NumI=0 To 3
19 Arr_Img(NumI)=Cint(Mid(NStr,NumI+1,1))
20 Next
21 Dim Position
22 Set AdoM=Server.CreateObject("Adodb.Stream")
23 AdoM.Mode=3
24 AdoM.Type=1
25 AdoM.Open
26 Set AdoN=Server.CreateObject("Adodb.Stream")
27 AdoN.Mode=3
28 AdoN.Type=1
29 AdoN.Open
30 AdoM.LoadFromFile(Server.Mappath("validatebody.fix"))
31 AdoN.Write AdoM.Read(1280)
32 For NumI=0 To 3
33 AdoM.Position=(9-Arr_Img(NumI))*320
34 AdoN.Position=NumI*320
35 AdoN.Write AdoM.Read(320)
36 Next
37 AdoM.LoadFromFile(Server.Mappath("validatehead.fix"))
38 Position=Lenb(AdoM.Read())
39 AdoM.Position=Position
40 For NumI=0 To 9 Step 1
41 For NumJ=0 To 3
42 AdoN.Position=NumI*32+NumJ*320
43 AdoM.Position=Position+30*NumJ+NumI*120
44 AdoM.Write AdoN.Read(30)
45 Next
46 Next
47 AdoM.Position = 0
48 NumCode = AdoM.Read()
49 AdoM.Close:Set AdoM=Nothing
50 AdoN.Close:Set AdoN=Nothing
51 End Function %>
4.4 版面/公共信息模块
4.4.1 版面模块
版面浏览指的是版面列表,下面是一个显示版面的程序,用了一个循环的嵌套来显示父版面和子版面,使用了表area_t和表board_t。
1 <% set rs = server.CreateObject("adodb.recordset")
2 rs.open "select * from area_t order by areaid",conn
3 Do While Not rs.Eof’创建一个对象实例,打开表area_t
4 response.Write(rs("areaname"))’显示父版面名
5 set rj = server.CreateObject("adodb.recordset")
6 rj.open "select * from board_t where areaid='"&rs("areaid")&"' order by boardid",conn
7 do while not rj.eof %>’打开表board_t
8 <a href= "showTitle.asp?boardid=<%=rj ("boardid") %>"><% response.Write (rj("boardname")) %></a>’显示子版面名,并作为进入子版面主题列表的链接
9 <% if not rj.eof then rj.movenext
10 loop
11 rj.close
12 set rj=nothing
13 if not rs.eof then rs.movenext
14 loop
15 rs.close
16 set rs=nothing %>
4.4.2 公共信息模块
公共信息部分的程序publicInfo.asp显示论坛和当前用户的状态,下面是一个统计在线人数的程序。
1 <%
2 dim refreshtime,idletime,totalusers,onlineuser(),tmp(),num,i,id
3 refreshtime=30
4 idletime=refreshtime*3
5 application.Lock()
6 if application(session.SessionID&"lastaccesstime")=empty then
7 if application("totalusers")=empty then application("totalusers")=0
8 redim tmp(application("totalussers")+1)
9 num=0
10 if application("totalusers")>0 then
11 for i=lbound(application("onlineuser")) to lbound(application("onlineuser"))
12 id=application("onlineuser")(i)
13 if id<>session.SessionID then
14 tmp(num)=id
15 num=num+1
16 end if
17 next
18 end if
19 tmp(num)=session.SessionID
20 application("totalusers")=num+1
21 redim preserve tmp(application("totalusers"))
22 application("onlineuser")=tmp
23 end if
24 application(session.SessionID & "lastaccesstime") =timer
25 redim tmp(application("totalusers"))
26 num=0
27 for i=0 to application("totalusers")-1
28 id=application("onlineuser")(i)
29 if (timer-application(id & "lastaccesstime"))<idletime then
30 tmp(num)=id
31 num=num+1
32 else
33 application(id & "lastaccesstime") =empty
34 end if
35 next
36 if num<>application("totalusers") then
37 redim preserve tmp(num)
38 application("onlineuser") =tmp
39 application("totalusers")=num
40 end if
41 application.UnLock %>
4.5 帖子模块
4.5.1 发布/删除/修改帖子模块
网络技术的发展日新月异,现在用户发言时使用的格式也是丰富多彩。例如:用户可以上传文件,可以粘贴多媒体等。下面是一个帖子的发布页面,如图10。

图10 帖子发布页面
1.文件长传部分
文件上传可以分为组件上传和无组件上传,本论坛使用的是无组件上传,它的好处是不受系统环境的影响。并且将文件上传到文件夹,将文件信息写入文件信息数据表file_t中。首先分析上传数据格式,在标签中增加enctype="multipart/from-data"属性后,上传的数据是一个长长的二进制字符串,其中包含了文件浏览框的名字,文件的客户端路径,文件的MIME类型,文件内容,文本框的名称,文本框的值等信息。同时表单提交的是二进制字符串,需要转换为文本字符串才能在页面上显示。下面是获取上传文件信息的函数:
1 Function GetFileInfo(FormName)
2 Dim strTemp,dataStart,dataEnd,dataLen,temp,intFlag
3 strTemp=StringToBinary("Content-Disposition: form-data; name=""" & FormName & """; filename=""")
4 intFlag=InstrB(formData,Divider & bncrlf & strTemp)
5 Dim arrayTemp()
6 If intFlag>0 Then
7 Redim arrayTemp(4)
8 dataStart=intFlag+LenB(Divider & bncrlf & strTemp) '定位到第1个字符
9 dataend=InstrB(datastart,formdata,bncrlf)-2 '定位到最后1个字符
10 dataLen=dataend-datastart+1 '返回要取信息的长度
11 arrayTemp(0)=MidB(formdata,datastart,datalen) '返回文件路径
12 arrayTemp(0)=BinaryToString(arrayTemp(0)) '转换为文本字符串
13 arrayTemp(1)=Mid(arrayTemp(0),InstrRev(arrayTemp(0),"\")+1)
'返回文件的扩展名,其实只要从文件名称中分析出文件扩展名即可
14 arrayTemp(2)=Mid(arrayTemp(1),InstrRev(arrayTemp(1),".")+1)
'下面获取文件的MIME类型
15 temp=dataend '记住当前位置
16 datastart=temp+18 '定位到第1个字符
17 dataend=InstrB(datastart,formdata,bncrlf & bncrlf)-1 '定位到最后1个字符
18 dataLen=dataend-datastart+1 '返回要取信息的长度
19 arrayTemp(3)=MidB(formdata,datastart,datalen) '返回MIME类型
20 arrayTemp(3)=BinaryToString(arrayTemp(3)) '转换为文本字符串
21 temp=dataend '下面获取文件大小
22 datastart=dataend+5 '定位到第1个字符
23 dataend=InstrB(datastart,formdata,divider)-3 '定位到最后1个字符
23 arrayTemp(4)=dataend-datastart+1 '返回文件大小
25 Else
26 Redim arrayTemp(0)
27 arrayTemp(0)="0"
28 End If '下面返回函数值
29 GetFileInfo=arrayTemp
30 End Function
2.帖子内容实现部分
要实现帖子内容多样化可以使用UBB码。UBB码上HTML的一个变种,是Ultimate Bulletin Board采用的一种特殊的TAG。为了避免用户无意或者有意使用HTML代码对论坛进行攻击。各种论坛基本上都屏蔽了HTML代码。但是为了使得论坛更加“多姿多彩”,论坛也会相应地开放一些自定义的TAG标签,类似于HTML中的TAG。这种自定义的TAG就是俗称的UBB代码。可以使用免费的UBB编辑器来自动生成UBB代码。
修改和发布帖子差不多,而删除相对简单,这里就不在讨论了。
4.5.2 帖子浏览模块
帖子浏览模块部分最重要的是对数据库的操作,如帖子的分页列表,首先来看帖子的分页是如何实现的,下面是几个和分页浏览有关的属性:
4.5.3 帖子搜索模块
该部分的帖子显示和浏览模块的帖子显示基本一致,这里重点讨论ASP如何操作SQL语句,以及SQL语句是如何工作的。下面先来看下搜索条件。

图11 帖子搜索页面
从上图可以看出帖子的搜索条件:首先要选择版面,搜索方式分为标题和作者,搜索时间是附加搜索条件。帖子搜索本质上是有条件的对数据表查找,所以要满足以上条件的搜索应该使用下面的SQL语句:
1 select * from topic_t where "&kind&" like '%"&keyword&"%' and boardid='"&boardid&"' and DateAndTime > '"&posttime&"' order by DateAndTime desc
4.5.4 其它功能
4.6 管理员模块
4.6.1 用户管理
管理员对用户的管理主要包括用户的批量删除和用户授权。
1 <% if request("checkbox")="" then
2 response.Write("你没选用户!
")
3 response.Write("")
4 else
5 set rs=server.CreateObject("adodb.recordset")
6 rs.open "select * from user_t ",conn
7 for each i in request("checkbox")
8 exec="delete from user_t where userid='"&i&"'"
9 conn.execute(exec)
10 next
11 rs.close
12 set rs=nothing
13 conn.close
14 set conn=nothing
15 response.Write("用户删除成功!
")
16 response.Write("")
17 end if %>
4.6.2 版面管理
版面管理包括版面的添加,删除和修改。其具体实现方法均是对父版面信息表area_t和子版面信息表board_t操作。其三者主要不同之处在于SQL语句的不同,添加版面需要使用insert,删除版面需要使用delete,修改版面需要使用update。
4.6.3 帖子管理
管理员对帖子管理包括批量删除帖子和批量移动帖子。而版主对帖子的管理包括删除单个帖子,移动单个帖子,置顶帖子,指定精华帖。批量删除帖子与批量删除用户类似。而批量移动帖子不同之处使用下面的SQL语句:
update topic_t set boardid=‘“&request(“boardid”)&”’ where TopicID=‘“&i&”’
4.6.4 数据库备份和恢复
下面是数据备份程序:
1 <% '备份数据库
2 sql="backup database bbs to disk='"&request("path")&"' with init"
3 set conn=server.createobject("adodb.connection")
conn.open = "driver={sql server};server=(local);uid=sa;pwd=123456;database=bbs;"
conn.Execute(sql)
4 on error resume next
5 if err<>0 then
6 response.Write("数据备份失败!
")&err.Descripting
7 conn.close
8 set conn =nothing
9 response.Write("")
10 else
11 response.Write("数据备份成功!
")
12 path=request("path")
13 dim objfso,objts'将数据库备份文件地址保存到文件
14 set objfso=server.CreateObject("scripting.filesystemobject")
15 set objts=objfso.opentextfile(server.MapPath("path.txt"),2,true)
16 objts.write(path)
17 objts.close
18 set objts=nothing
19 set objfso=nothing
20 conn.close
21 set conn =nothing
22 response.Write(">")
23 end if %>
下面是数据库恢复程序:
1 <% '断开用户到数据库的连接
2 sqla="declare hcforeach cursor global for select 'kill '+rtrim(spid) from master.dbo.sysprocesses where dbid=db_id('bbs') exec sp_msforeach_worker '?'"
3 sqlb="restore database bbs from disk='"&request("pathname")&"'"
4 set conn=server.createobject("adodb.connection")
conn.open = "driver={sql server};server=(local);uid=sa;pwd=123456;database=master;" '数据库在连接时不能恢复,所以要连接到master数据库
5 conn.Execute(sqla)
6 conn.Execute(sqlb)
7 on error resume next
8 if err<>0 then
9 response.Write("数据恢复错误!
")&err.Descripting
10 conn.close
11 set conn=nothing
12 response.Write("")
13 else
14 response.Write("数据恢复成功!
") %>
15 conn.close
16 set conn=nothing
17 response.Write("")
18 end if %>
结 论
至此,本论文从设计到实现展示了一个简单的BBS系统。从宏观上分析,功能不过于用户管理,发帖,回复及论坛管理等几个最常用的功能。同时,在系统的实现过程中首要的是对需求的分析。然后,是对数据库的设计,只要设计好数据库,就做好了实现系统的基础,同时也方便对系统功能的扩展,在此看来,做一个好的系统首先要设计一个好的数据库。接下来是对各个功能模块的具体实现,其实现的方法都大体类似。总之,从设计到实现这个电子论坛系统,可以学到研究这一类Web系统的通用方法,为以后研究其它Web系统打下基础。
参考文献
[1] 方睿,刁仁宏, 吴四九.网络数据库的原理及应用[M].成都:四川大学出版社,2005。
[2] 邓文渊, 陈惠贞, 陈俊荣. ASP与网络数据库技术[M].北京:中国铁道出版社,2003。
[3] 明日科技. ASP程序开发范例宝典[M].北京:人民邮电出版社,2006。
[4] 顼宇峰,马军. ASP网络编程入门到精通[M].北京:清华大学出版社,2006。
[5] 王恩波, 张露, 刘柄兴. 网络数据库实用教程[M].北京:高等教育出版社,2003。
[6] 郭晶,孙伟娟. ASP网站开发四“酷”全书[M].北京:电子工业出版社,2006。
[7] 尚俊杰. ASP无组件上传原理简明教程[EB/OL].http://www.jjshang.com/,2005。
致 谢
省略
本项目源码及完整论文如下,有需要的朋友可以点击进行下载
| 序号 | 毕业设计全套资源(点击下载) |
|---|---|
| 本项目源码 | 基于asp+sqlserver的电子论坛系统设计与实现(源码+文档)_asp_BS架构_电子论坛系统.zip |