700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > asp毕业设计——基于asp+sqlserver的电子论坛系统设计与实现(毕业论文+程序源码)—

asp毕业设计——基于asp+sqlserver的电子论坛系统设计与实现(毕业论文+程序源码)—

时间:2020-05-20 05:24:14

相关推荐

asp毕业设计——基于asp+sqlserver的电子论坛系统设计与实现(毕业论文+程序源码)—

基于asp+sqlserver的电子论坛系统设计与实现(毕业论文+程序源码)

大家好,今天给大家介绍基于asp+sqlserver的电子论坛系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。

文章目录:

基于asp+sqlserver的电子论坛系统设计与实现(毕业论文+程序源码)1、项目简介2、资源详情3、关键词:4、毕设简介5、资源下载

1、项目简介

电子论坛即BBS已经是互联网上的一种极为常见的互动交流服务。论坛可以为网友提供开放性的分类讨论区专题服务,网友们可以在此发表自己的观感,交流某些技术,经验等。论坛也可以作为用户和商家交流的渠道,商家也可以在此回答用户提出的问题或发布某些消息。本系统使用ASP进行开发,数据库采用Microsoft SQL Server 。本文描述了电子论坛系统的设计与实现。首先对系统的需求进行了分析,建立系统工作流程图,设计系统数据库,对数据库结构进行了详细分析。然后划分系统功能模块,最后详细描述了各个功能模块实现的方法,并给出相应代码。

2、资源详情

项目难度:中等难度

适用场景:相关题目的毕业设计

配套论文字数:11290个字36页

包含内容:整套源码+完整毕业论文


3、关键词:

电子论坛系统;ASP;SQL Server

4、毕设简介

提示:以下为毕业论文的简略介绍,项目源码及完整毕业论文下载地址见文末。

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("_ValidateCode"))<>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")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,314 if rs.eof and rs.bof then '判断用户是否存在15 response.Redirect("login_error.asp")16 else17 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")'把用户信息写入Cookie21case "1"22 response.Cookies("user")("username")=user23 response.Cookies("user")("userpassword")=pwd24 response.Cookies("user").expires=date()+125 case "2"26 response.Cookies("user")("username")=user27 response.Cookies("user")("userpassword")=pwd28 response.Cookies("user").expires=date()+729 case "3"30 response.Cookies("user")("username")=user31 response.Cookies("user")("userpassword")=pwd32 response.Cookies("user").expires=date()+36533 end select34 session("name")=request.Form("username")35 response.Write("<meta http-equiv=refresh content='2;url=index.asp'>")36 response.Write(session("name"))37 response.Write("!欢迎你回来!")38 response.Write("两秒钟后自动转入首页")39 end if40 rs.close41 set rs=nothing %>

程序说明:第1~5行是对验证码的处理;第6~10行是将从表单获取的数据存入变量;第11~14行是依据输入的用户名和密码为条件对用户信息表user_t进行查找,如果没有查找到记录说明该用户输入的用户名或密码错误;第15行转到错误处理页面;第18~19行是将用户是否隐身登录标记,即是对用户信息表中的userhidden字段标记;第20~33行是将用户信息写入Cookie。

4.3.2 用户注册

用户注册,首先要检查的就是用户填写的信息,其中包括:

字段是否空白,若空白则不接受。输入的E-mail是否正确,若E-mail中没有@,@符号位于E-mail的第一个字符或者@位于E-mail的最后一个字符都算错误。两次输入的密码是否一致。用户名是否被使用。电子邮件是否被使用。

图8用户注册各个页面与数据库的关系

下面是验证用户注册信息的程序:

1 <% a=instr(request("userpassword"),"*")2 b=instr(request("userpassword")," ")3 if username=""or useremail=""or userquestion=""or useranswer=""or userpassword=""or userpassword1=""then4 response.Write("必填信息不能为空,请填完!")5 elseif userpassword<>userpassword1 then6response.Write("两次输入密码不一致,请重新输入!")7 elseif len(username)>10 then8response.Write("你输入的用户名太长,请重新输入!")9elseif len(userpassword)<6 or len(userpassword)>18 then10 response.Write("密码不符合要求,请重新输入!")11 elseif not isvalidemail(useremail) then12 response.Write("电子邮件地址错误,请重新输入")13 elseif a<>0 or b<>0 then14 response.Write("请不要将‘*’和‘ ’等符号作为密码!")15 elseif useronly(username,useremail) then16 response.Write("用户名被占用!")17 else 18 验证通过后将用户信息写入用户信息表user_t19 end if %>

程序说明:第1~2行是取出密码中“*”和“ ”在字符串中的位置;第11行调用了isvalidmail函数,该函数是验证电子邮件地址正确性;第15行调用了useronly函数,该函数是验证用户名和电子邮件唯一性;下面给出验证电子邮件正确性的程序:

1 function isvalidemail(email)2 dim names,named,I,c3isvalidemail=true4names=split(email,”@”)5if ubound(names)<>1 then6isvalidemail=false7exit function8end if9for each named in names10if len(named)<=0 then11 isvalidemail=false12 exit function13 end if14 for i=1 to len(named)15c=lcase(mid(named,I,1))16 if instr(“abcdefghijklmnopqrstuvwxyz_-.”,c)<=0 and not isnumericI then17 isvalidemail=false18 exit function19 end if20 next21 if left(named,1)=”.” Or right(named,1)=”.” Then22isvalidemail=false23 exit function24 end if25 next26 if instr(names(1),”.”)<=0 then27isvalidemail=false28 exit function29 end if30 i=len(names(1))-instrrev(names(1),”.”)31 if i<>2 and i<>3 then32 isvalidemail=false33 exit function34 end if 35 if instr(email,”..”)>0 then36 isvalidemail=false37 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,35 if rs.eof and rs.bof then6 useronly=false7 else8 useronly=true9 end if10 rs.close11 set rs=nothing12 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.close7 set rsmessage=nothing8 conn.close9 set conn=nothing10 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")&"'",conn4if rsmessage1.bof or rsmessage1.eof then5session("flag")=06else7k=08do while not rsmessage1.eof9k=k+110session("flag")=k11rsmessage1.movenext12loop13rsmessage1.close14set rsmessage1=nothing15end if16 conn.close17 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 = "" '发送邮件的服务器 7 jmail.AddRecipient username '邮件的收件人 8 jmail.SenderName = "地狱男爵" '邮件发送者的姓名 9 jmail.Sender = "rambo-1984@" '邮件发送者的邮件地址 10jmail.Priority = 1 '邮件的紧急程序,1 为最快,5 为最慢, 3 为默认值 11jmail.Subject = "找回你的密码" '邮件的标题 12jmail.Body = "你的密码是:"&userpwd '邮件的内容 13jmail.AddRecipientBCC email '密件收件人的地址 14jmail.AddRecipientCC admin'邮件抄送者的地址 15jmail.Execute() '执行邮件发送 16jmail.Close '关闭邮件对象 %>

4.3.5 用户登录添加验证码

使用验证码,用户每次登录时都不一样,这样做的目的是为了防止有人利用破解程序,暴力破解用户的密码。验证码的处理程序已经讨论过,这里给出生成验证码的程序:

1 <% Option Explicit2 Response.Buffer = True3 Response.Expires = -14 Response.AddHeader "Pragma","no-cache"5 Response.AddHeader "cache-ctrol","no-cache"6 Dim RndNum,ImgFileContent7 Randomize Timer8 RndNum = Cint(7999*Rnd+1000)9 Session("_ValidateCode") = Cstr(RndNum)10 ImgFileContent=NumCode(RndNum)11 Response.ContentType = "image/BMP"12 Response.BinaryWrite ImgFileContent13 Function NumCode(NumS)14 Dim NumI,NumJ15 Dim AdoM,AdoN16 Dim Arr_Img(4),NStr17 NStr=Cstr(NumS)18 For NumI=0 To 319 Arr_Img(NumI)=Cint(Mid(NStr,NumI+1,1))20 Next21 Dim Position22 Set AdoM=Server.CreateObject("Adodb.Stream")23 AdoM.Mode=324 AdoM.Type=125 AdoM.Open26 Set AdoN=Server.CreateObject("Adodb.Stream")27 AdoN.Mode=328 AdoN.Type=129 AdoN.Open30 AdoM.LoadFromFile(Server.Mappath("validatebody.fix"))31 AdoN.Write AdoM.Read(1280)32 For NumI=0 To 333 AdoM.Position=(9-Arr_Img(NumI))*32034 AdoN.Position=NumI*32035 AdoN.Write AdoM.Read(320)36 Next 37 AdoM.LoadFromFile(Server.Mappath("validatehead.fix"))38 Position=Lenb(AdoM.Read())39 AdoM.Position=Position40 For NumI=0 To 9 Step 141 For NumJ=0 To 342 AdoN.Position=NumI*32+NumJ*32043 AdoM.Position=Position+30*NumJ+NumI*12044 AdoM.Write AdoN.Read(30)45 Next46 Next47 AdoM.Position = 048 NumCode = AdoM.Read()49 AdoM.Close:Set AdoM=Nothing50 AdoN.Close:Set AdoN=Nothing51 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_t4 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",conn7 do while not rj.eof %>’打开表board_t8 <a href= "showTitle.asp?boardid=<%=rj ("boardid") %>"><% response.Write (rj("boardname")) %></a>’显示子版面名,并作为进入子版面主题列表的链接9 <% if not rj.eof then rj.movenext10 loop11 rj.close 12 set rj=nothing13 if not rs.eof then rs.movenext14 loop15 rs.close16 set rs=nothing %>

4.4.2 公共信息模块

公共信息部分的程序publicInfo.asp显示论坛和当前用户的状态,下面是一个统计在线人数的程序。

1 <%2 dim refreshtime,idletime,totalusers,onlineuser(),tmp(),num,i,id3 refreshtime=304 idletime=refreshtime*35 application.Lock()6 if application(session.SessionID&"lastaccesstime")=empty then7 if application("totalusers")=empty then application("totalusers")=08redim tmp(application("totalussers")+1)9num=010 if application("totalusers")>0 then11 for i=lbound(application("onlineuser")) to lbound(application("onlineuser"))12id=application("onlineuser")(i)13 if id<>session.SessionID then14tmp(num)=id15 num=num+116 end if17 next18 end if19 tmp(num)=session.SessionID20 application("totalusers")=num+121 redim preserve tmp(application("totalusers"))22 application("onlineuser")=tmp23 end if24 application(session.SessionID & "lastaccesstime") =timer25 redim tmp(application("totalusers"))26 num=027 for i=0 to application("totalusers")-128 id=application("onlineuser")(i)29 if (timer-application(id & "lastaccesstime"))<idletime then30tmp(num)=id31 num=num+132 else33 application(id & "lastaccesstime") =empty34 end if35 next36 if num<>application("totalusers") then37 redim preserve tmp(num)38 application("onlineuser") =tmp39 application("totalusers")=num40 end if41 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,intFlag3 strTemp=StringToBinary("Content-Disposition: form-data; name=""" & FormName & """; filename=""")4 intFlag=InstrB(formData,Divider & bncrlf & strTemp)5 Dim arrayTemp()6 If intFlag>0 Then7 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 Else26 Redim arrayTemp(0)27 arrayTemp(0)="0"28 End If '下面返回函数值29 GetFileInfo=arrayTemp30 End Function

2.帖子内容实现部分

要实现帖子内容多样化可以使用UBB码。UBB码上HTML的一个变种,是Ultimate Bulletin Board采用的一种特殊的TAG。为了避免用户无意或者有意使用HTML代码对论坛进行攻击。各种论坛基本上都屏蔽了HTML代码。但是为了使得论坛更加“多姿多彩”,论坛也会相应地开放一些自定义的TAG标签,类似于HTML中的TAG。这种自定义的TAG就是俗称的UBB代码。可以使用免费的UBB编辑器来自动生成UBB代码。

修改和发布帖子差不多,而删除相对简单,这里就不在讨论了。

4.5.2 帖子浏览模块

帖子浏览模块部分最重要的是对数据库的操作,如帖子的分页列表,首先来看帖子的分页是如何实现的,下面是几个和分页浏览有关的属性:

AbsolutePage: 当Recordset对象有设置分页时,AbsolutePage会返回目前的页码。PageCount: 返回Recordset对象的分页总数。PageSize: 当Recordset对象有设置分页时,PageSize为每页的记录条数。

有了这几个属性,在使用for……next循环就可以以分页的方式显示帖子了。具体的程序和版面浏览模块相似,这里就不给出程序了。

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")="" then2 response.Write("<p align='center'><font color='#FF0000'size='3'>你没选用户!</font></p>")3 response.Write("<meta http-equiv=refresh content='2;url=user.asp'>")4 else5 set rs=server.CreateObject("adodb.recordset")6 rs.open "select * from user_t ",conn7 for each i in request("checkbox")8 exec="delete from user_t where userid='"&i&"'"9 conn.execute(exec)10 next11 rs.close12 set rs=nothing13 conn.close14 set conn=nothing15 response.Write("<p align='center'><font color='#FF0000'size='3'>用户删除成功!</font></p>")16 response.Write("<meta http-equiv=refresh content='2;url=user.asp'>")17 end if %>

用户授权

用户授权即指定版主,将用户授予版主的权限首先应该判断用户是否存在,然后在选择相应的版面来作为该版的版主,具体操作是将版面信息表boardid中的master字段更新为指定用户的用户名,其代码与其它写入数据库的代码类似。

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("<p align='center'><font color='#FF0000'size='3'>数据备份失败!</font></p>")&err.Descripting 7conn.close8set conn =nothing9response.Write("<meta http-equiv=refresh content='2;url=data.asp'>") 10 else 11 response.Write("<p align='center'><font color='#FF0000'size='3'>数据备份成功!</font></p>")12path=request("path")13dim objfso,objts'将数据库备份文件地址保存到文件14set objfso=server.CreateObject("scripting.filesystemobject")15set objts=objfso.opentextfile(server.MapPath("path.txt"),2,true)16objts.write(path)17objts.close18set objts=nothing19set objfso=nothing20conn.close21set conn =nothing 22response.Write("<meta http-equiv=refresh content='2;url=data.asp'>") 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("<p align='center'><font color='#FF0000'size='3'>数据恢复错误!</font></p>")&err.Descripting 10 conn.close11 set conn=nothing12 response.Write("<meta http-equiv=refresh content='2;url=data.asp'>") 13 else 14 response.Write("<p align='center'><font color='#FF0000'size='3'>数据恢复成功!</font></p>") %>15 conn.close16 set conn=nothing17 response.Write("<meta http-equiv=refresh content='2;url=data.asp'>") 18 end if %>

结 论

至此,本论文从设计到实现展示了一个简单的BBS系统。从宏观上分析,功能不过于用户管理,发帖,回复及论坛管理等几个最常用的功能。同时,在系统的实现过程中首要的是对需求的分析。然后,是对数据库的设计,只要设计好数据库,就做好了实现系统的基础,同时也方便对系统功能的扩展,在此看来,做一个好的系统首先要设计一个好的数据库。接下来是对各个功能模块的具体实现,其实现的方法都大体类似。总之,从设计到实现这个电子论坛系统,可以学到研究这一类Web系统的通用方法,为以后研究其它Web系统打下基础。

参考文献

[1] 方睿,刁仁宏, 吴四九.网络数据库的原理及应用[M].成都:四川大学出版社,。

[2] 邓文渊, 陈惠贞, 陈俊荣. ASP与网络数据库技术[M].北京:中国铁道出版社,。

[3] 明日科技. ASP程序开发范例宝典[M].北京:人民邮电出版社,。

[4] 顼宇峰,马军. ASP网络编程入门到精通[M].北京:清华大学出版社,。

[5] 王恩波, 张露, 刘柄兴. 网络数据库实用教程[M].北京:高等教育出版社,。

[6] 郭晶,孙伟娟. ASP网站开发四“酷”全书[M].北京:电子工业出版社,。

[7] 尚俊杰. ASP无组件上传原理简明教程[EB/OL]./,。

致 谢

省略


5、资源下载

本项目源码及完整论文如下,有需要的朋友可以点击进行下载。如果链接失效可点击下方卡片扫码自助下载。

asp毕业设计——基于asp+sqlserver的电子论坛系统设计与实现(毕业论文+程序源码)——电子论坛系统

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。