本文通过分析国内外搜索引擎的发展现状,提出了一种功能强大,操作简单,通用性强,可以满足用户对信息搜索需要,利用ASP技术实现的一个B/S体系结构的搜索引擎系统方案。文中着重论述了该系统的功能与实现、数据流程与存储、后台管理等。并对关键的有关技术作了较详细的介绍。论文在撰写过程中,力求将理论与系统应用相结合,对各种理论进行阐述的同时配合系统从实际应用和操作技巧上加以说明,希望能够更充分地体现到这些知识与技术在本系统中的应用与实现。
搜索引擎已成为一个新的研究、开发领域。因为它要用到信息检索、人工智能、计算机网络、分布式处理、数据库、数据挖掘、数字图书馆、自然语言处理等多领域的理论和技术,所以具有综合性和挑战性。又由于搜索引擎有大量的用户,有很好的经济价值,所以引起了世界各国计算机科学界和信息产业界的高度关注,目前的研究、开发十分活跃,并出现了很多值得注意的动向:
(1)十分注意提高信息查询结果的精度,提高检索的有效性。用户在搜索引擎上进行信息查询时,并不十分关注返回结果的多少,而是看结果是否和自己的需求吻合。
(2)基于智能代理的信息过滤和个性化服务。信息智能代理是另外一种利用互联网信息的机制。它使用自动获得的领域模型(如Web知识、信息处理、与用户兴趣相关的信息资源、领域组织结构)、用户模型(如用户背景、兴趣、行为、风格)知识进行信息搜集、索引、过滤(包括兴趣过滤和不良信息过滤),并自动地将用户感兴趣的、对用户有用的信息提交给用户。
(3)采用分布式体系结构提高系统规模和性能。搜索引擎的实现可以采用集中式体系结构和分布式体系结构,两种方法各有千秋。但当系统规模到达一定程度(如网页数达到亿级)时,必然要采用某种分布式方法,以提高系统性能。
(4)重视交叉语言检索的研究和开发。交叉语言信息检索是指用户用母语提交查询,搜索引擎在多种语言的数据库中进行信息检索,返回能够回答用户问题的所有语言的文档。如果再加上机器翻译,返回结果可以用母语显示。该技术目前还处于初步研究阶段,主要的困难在于语言之间在表达方式和语义对应上的不确定性。
2 系统所用技术分析
通过基于Internet互联网的动态Web数据库技术,可以解决远程的数据传输与读取,远程的客户终端可以通过Web页面提交请求,查询远端的数据服务器上的信息,同时还可以向远端数据服务器的数据库中存储信息以实现信息的共享,同时利用Internet技术可以降低软件的开发和部署成本,只要在服务器端安装WEB应用就可以使每个客户端都能浏览使用。
2.1系统开发环境
本搜索引擎系统是一个B/S结构的系统,它的发布需要有Web服务器的支持,且需要数据库系统来方便的对系统数据进行存储,查询,修改,删除,及时更新系统信息,同时需要一种简单,方便的编程工具可以与数据库进行交互。鉴于上述需求我选择IIS 5.0+Microsoft Access+ASP作为我的开发环境。
2.2 B/S结构
B/S结构,即Browser/Server(浏览器/服务器)结构,是随着Internet技术的兴起,对C/S结构的一种改进的结构。在这种结构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现,形成3层结构。B/S结构主要利用了不断成熟的WWW浏览器技术,结合浏览器的多种Script语言,用通用浏览器就实现了原来需要复杂专用软件才能实现的强大功能,并节约了开发成本,是一种全新的软件系统构造技术。
2.3 IIS简介
IIS是Internet信息服务(Internet Information Server)的缩写,它是一种Web服务,主要包括WWW服务器、FTP服务器等,使得在Intranet(局域网)或Internet(因特网)上发布信息成了一件很容易的事。WWW服务提供维护网站和网页,并回复基于浏览器的请求。有了WWW服务和它内置的功能,通过Internet信息服务器可以创建各种各样的Internet应用程序,加上其内置的对数据库连接的支持,IIS的功能就更强大。SQL数据库信息或其他任何符合ODBC的数据库信息都能在Internet/Intranet上灵活应用。
2.4 Microsoft Access简介
Access是Office系列软件中用来专门管理数据库的应用软件。所谓数据库是指经过组织的、关于特定主题或对象的信息集合。数据库管理系统分为两类:文件管理系统和关系型管理系统。Access应用程序就是一种功能强大且使用方便的关系型数据库管理系统,一般也称关系型数据库管理软件。它可运行于各种Microsoft Windows系统环境中,由于它继承了Windows的特性,不仅易于使用,而且界面友好,如今在世界各地广泛流行。它并不需要数据库管理者具有专业的程序设计水平,任何非专业的用户都可以用它来创建功能强大的数据库管理系统。
2.5 ASP简介
ASP全称为Active Server Pages,即动态服务器页面,它是一套微软开发的服务器端脚本环境,ASP内含于IIS 3.0 以上版本中,通过ASP我们可以结合HTML网页、ASP指令建立动态、交互且高效的Web服务器应用程序。ASP脚本在服务器端解释执行,结果自动生成符合HTML语言的主页去响应用户的请求。ASP目前已成为目前应用最广泛的动态网页开发工具,同时应用ASP进行网络化的信息管理系统也逐步得到推广。ASP本身并不是一种脚本语言,它只是提供了一种使镶嵌在HTML页面中的脚本程序得以运行的环境。ASP程序其实是以扩展名为.asp的纯文本形式存在于Web服务器上的,可以用任何文本编辑器打开它。ASP程序中可以包含纯文本、HTML标记以及脚本命令。用户只需将.asp程序放在Web服务器的虚拟目录下(该目录必须要有可执行权限),就可以通过WWW的方式访问ASP程序了。
3 系统结构设计
本系统是一个B/S结构的系统,采用IIS 5.0+Microsoft Access+ASP作为开发环境。它的发布需要有Web服务器的支持,且需要数据库系统来对系统数据进行存储,查询,修改,删除,及时更新系统信息。系统设计6个功能模块,分别是网站搜索模块、图片搜索模块、分类目录模块、网站登录模块、网站管理模块和管理员登录模块。用户登录到首页,首先进入的是网站搜索界面。点击页面上其他功能模块的超链接,可进入相应的模块界面。网站登录模块和网站管理模块需要用户输入用户名和密码,成功通过验证才能进入相应的管理模块,如果验证失败则返回到前一个功能模块界面。管理员登录模块同样需要成功通过验证才能进入相应的管理模块。但他又提供了网站审核、网站管理和分类目录修改3个子模块。
3.1数据库设计
数据库结构设计几乎所有的Web项目都要基于数据库,这使得数据库的设计在整个项目中举足轻重。本购物系统中大部分前台的显示信息都是从数据库中读取所需信息,而系统管理员则只需在后台通过修改数据库中的数据即可达到改变前台显示内容的目的,所以数据库在本系统中作为中间介质连接前台和后台,其重要性不言而喻。本设计根据系统需求分析,选用Microsoft Access作为该系统的数据库。数据库取名为SEARCH.MDB,其中包含了系统中所有的数据。下面对一些关键表作详细说明。
网站登录数据信息数据库在数据库中标记的是Web数据表,它记录的是网站名称、网站简介、网站地址、是否审核、网站关键字、联系人姓名、联系人E-mail、联系人qq号码、联系人地址、联系人邮政编码、网站登录时间、网站单击次数、所属子类名称、子类路径和所属子类ID。Web表的具体结构如表1所示:
表1 网站登录数据表
字段名称 |
数据类型 |
说明 |
主关键字 |
ID |
自动编号 |
编号 |
* |
Title |
文本 |
网站名称 |
|
Content |
文本 |
网站内容简介 |
|
URL |
文本 |
网站地址 |
|
Verify |
是/否 |
管理员是否已经确认 |
|
Keyword |
文本 |
网站关键字 |
|
Name |
文本 |
联系人姓名 |
|
|
文本 |
联系人E-mail |
|
|
文本 |
联系人qq |
|
Address |
文本 |
联系人地址 |
|
PostCode |
文本 |
联系人邮政编码 |
|
Time |
日期/时间 |
网站登录时间 |
|
Click |
数字 |
网站访问次数 |
|
Sort |
文本 |
子类名称 |
|
Sort_path |
文本 |
子类路径 |
|
Sort_ID |
数字 |
子类ID |
分类目录数据库表在数据库中标记的是Sort数据表,它记录的是子类信息,包括子类名称、父类ID和是否在首页显示。Sort表的具体结构如表2所示:
表2 分类目录数据表
字段名称 |
数据类型 |
说明 |
主关键字 |
ID |
自动编号 |
编号 |
* |
Sort |
文本 |
子类名称 |
|
Sort-ID |
数字 |
父类ID |
|
Show |
数字 |
是否在首页显示 |
管理员数据表即:数据表Admin,记录的是管理员的登录名和密码。具体结构如表3所示:
表3 管理员数据表
字段名称 |
字段名称 |
说明 |
字段名称 |
ID |
自动编号 |
编号 |
* |
UserName |
文本 |
管理员登录名 |
|
Password |
文本 |
管理员密码 |
图片数据表即:PIC数据表,记录的是图片编号、图片名称、图片介绍、图片地址、是否确认、图片关键字、小图片相对路径、大图片相对路径、图片添加的日期、网站访问次数。具体结构如表5所示:
表4 图片数据表
字段名称 |
数据类型 |
说明 |
主关键字 |
id |
自动编号 |
编号 |
* |
Name |
文本 |
图片名称 |
|
Introduce |
文本 |
图片内容简介 |
|
URL |
文本 |
图片地址 |
|
Verify |
是/否 |
管理员是否已经确认 |
|
Keyword |
文本 |
图片关键字 |
|
smallImg |
文本 |
小图片相对路径 |
|
bigImg |
文本 |
大图片相对路径 |
|
recommendDate |
日期/时间 |
设置为图片添加的日期 |
|
Click |
数字 |
网站访问次数 |
4 系统前台模块设计
4.1网站搜索及图片搜索模块的实现
4.1.1功能描述
用户访问系统时,首先接触到的是首页面index.asp,它提供了到达6个功能模块的超链接,默认显示为网站搜索模块。另外页面还提供一个表单from,让用户输入要搜索的关键字,当用户输入关键字单击搜索按钮后,表单中的数据将被提交到search.asp文件中处理。在search.asp首先读取传递过来的数据,然后判断该数据是否为空。如果不为空。则将数据分割为多个关键字,然后在数据库中查找匹配的记录,并在页面上显示。
4.1.2流程图
在网站搜索模块中,数据流程如图2所示:
图片搜索结果如图4所示:
4.1.4代码设计
输入关键字后,数据被提交到search.asp中,首先使用Request对象的QueryString()方法读取表单传递过来的关键字。
if keyword="" then '关键词为空
'给出提示,返回前一页。history.back() 函数的作用是返回前一页
response.write ""
else
然后将多个关键字进行处理后分开保存在一维数组中:
keyword = replace(keyword,"'"," ") '用空格替换关键词中的字符"'"
keyword = replace(keyword,"["," ") '用空格替换关键词中的字符"["
keyword = replace(keyword,"]"," ") '用空格替换关键词中的字符"]" keyword = replace(keyword,","," ") '用空格替换关键词中的中文字符","
keyword = replace(keyword,","," ") '用空格替换关键词中的英文字符","
keyword = replace(keyword," "," ")
keyword = replace(keyword," "," ")
keyword = replace(keyword," "," ") '清除多余的空格
keyword=ltrim(rtrim(keyword)) '去掉关键词左边和右边的空格。函数LTrim 去掉字符串左边空格,函数RTrim 去掉字符串右边空格
keywordlist=split(keyword) '将用户输入的关键词用空格分成多个关键词并保存在一维数组keywordlist中
然后在循环写出查询的spl语句:
set rs=server.createobject("adodb.recordset") '建立RecordSet 对象
for i=0 to ubound(keywordlist) 'ubound 函数获得数组最大下标值
keywordlist(i) = Trim(keywordlist(i)) 'Trim 函数去掉字符串左边和右边函数
sql=sql &" web.title like '%" & keywordlist(i) & "%' or " 'sql 语句,web.title 指的是数据表web 中title 列的值,web.title 中包含关键词keywordlist(i)
sql=sql &" web.keyword like '%" & keywordlist(i) & "%' or "
sql=sql &" web.content like '%" & keywordlist(i) & "%' or "
sql=sql &" web.url like '%" & keywordlist(i) & "%' or "
next
sql=Left(sql,(LEN(sql)-3)) 'LEN 函数获得字符串的长度,left 函数获得字符串从左边数指定数目的字符,在此是去掉字符串中最后几位的"or "
if path="" or sort_path="/0/" then
search_sql="verify=0 and ("&sql&") order by click desc"
else
search_sql="sort_path like '%" & sort_path & "%' and verify=0 and ("&sql&") order by click desc"
end if
'从数据库中查询满足条件的记录,并保存在rs 中
rs.open
"selectid,sort_path,sort_id,title,keyword,url,content,address,postcode,verify,click from web where "&search_sql,conn,1,1
执行查询。使用html代码显示查询页面的网站搜索部分,然后判断是否存在满足条件的记录,如果存在,则使用showcontent()过程显示满足条件的所有记录,并将记录中的关键字用红色字体显示。然后使用showpage()过程显示记录的页数信息,包括当前页、总页数等。最后显示查询页面的底部的管理入口及版本信息,并建立到管理员登录的超连接。
4.2 分类目录模块的实现
4.2.1功能描述
分类目录界面由dir.asp实现,在该页面显示的分类信息包括sort_id=0的分类和sort_id=1的分类,即最上级分类和要求显示在首页上的下级分类。例如,如果把“医疗健康”作为最上级分类。“医疗健康”又分为以下10个类:紧急救助、瘦身、性保健/知识、心理健康、医院、癌症、医学、营养品、养生保健和女性健康。设置这10个分类也显示在首页上,即show=1。这10个分类的下一级分类不在首页上显示。当单击分类目录首页上的某分类时,将进入list.asp文件,在该文件中,将详细显示这一分类及其下级分类,并显示属于这一分类的所有网站信息。
4.2.2工作流程和代码设计
单击分类目录首页上的某一分类,进入list.asp文件,在该文件中,首先使用Request对象的QueryString()方法读取sort_id的值在数据库中查找这一分类的所有上级分类,并连接在一起,其逐级显示分类的代码如下:
locality=" >> "&sort '要在网页上显示的逐级分类,如计算机>>软件>>编程语言
if sort_id<>0 then 'sort_id <> 0 表示该类存在上级分类
for i=1 to 8 '8表示在本系统中分类只有8级
set rs=conn.execute("select * from sort where id="&sort_id)
if rs.eof and rs.bof then
else
sort=rs("sort")
locality=">>
"&sort&""&locality
sort_id=rs("sort_id") '上一层分类的id
end if
rs.close
set rs = nothing
next
end if
若该分类还存在下级分类,将显示下级分类,最后显示属于这一分类的所有网站信息,在显示网站信息的代码出来中,用到了两个过程:showcontent()过程和showpage()过程。Showcontent()过程显示所有满足条件的记录。Showpage()过程显示页数信息,包括当前页、总页数等,其中过程showpage()的处理代码如下:
Function showpage(totalnumber,maxperpage,filename) '定义过程
Dim n
If totalnumber Mod maxperpage=0 Then 'totalnumber能够整除maxperpage
n= totalnumber \ maxperpage
Else 'totalnumber不能够整除maxperpage
n= totalnumber \ maxperpage+1
End If
If CurrentPage<2 Then '当前页是第一页
%>
第一页 上一页
<%
Else '当前页不是第一页
%>
<%
End If
If n-currentpage<1 Then '总页数小于或等于当前页
%>
下一页 最后一页
<%
Else '总页数大于当前页
……
End If
%>
共<%=totalnumber%>个网站 页次:<%=CurrentPage%>/<%=n%>页
4.3网站登录模块的实现
4.3.1 功能描述
网站登录页面为jion.asp,在网站登录模块,包含一个表单,用于网站联系人输入网站和个人信息,在表单中,包含输入网站信息的文本域。其中。显示分类目录的文本域为sort_id,它为只读类型,只能单击文本域右边的“选择分类”按钮来输入,当网站联系人输入所有的信息,并单击“确定”按钮,然后判断用户输入的分类目录是否存在,如果存在,则生成输入网站的最终分类目录。接着再判断用户输入的网站网址是否已经保存在数据库中,如果没有保存在数据库中,则在数据库中插入一条新的记录。如果数据库中已经存在该网址,则给出提示,并返回到前一页,当所有的数据保存在数据库中之后,页面上显示网站登录成功的提示。
4.3.2 数据流程图
网站登录的数据流程图如图5:
4.3.3 工作流程
当网站联系人输入所有的信息提交后,表单中的数据首先在check()过程中检查其合法性,如果合法,数据将被提交到join_ok.asp文件中处理,在该文件中将使用Request对象的From()方法获取网站登录数据,然后判断用户输入的分类目录是否存在,如果存在,则生成输入网站的最终分类目录,接着再判断用户输入的网站网址是否已经保存在数据库中,如果没有保存在数据库中,则在数据库中插入一条新的记录:
rs.addnew '插入新记录
rs("sort")=path '子类名称
rs("sort_path")=path_id '子类id 路径
rs("sort_id")=sort_id '父类id
rs("title")=request.form("title") '网站名称
rs("url")=request.form("url") '网站网址
rs("keyword")=request.form("keyword") '关键字
rs("content")=request.form("content") '网站描述
rs("name")=request.form("name") '联系人姓名
rs("email")=request.form("email") '联系人email
if oicq="" then 'qq为空
rs("oicq")=null
else
rs("oicq")=oicq 'qq
end if
rs("address")=request.form("address") '联系人地址
rs("postcode")=request.form("postcode") '邮政编码
rs("verify")="-1" '-1表示为审查
rs("click")="0" '点击次数
rs("time")=date() '登录时间
rs.update '更数数据库
rs.close '关闭RecordSet 对象
end if
set rs=nothing
如果数据库中已经存在该网址,则给出提示,并返回到前一页。当所有的数据保存到数据库中后,将在页面上显示登录成功的提示。
4.4 网站修改模块
4.4.1 功能描述
管理员登录页面为admin.asp。在管理员登录页面上,包含两个表单。一张表单用来输入网站搜索的关键字,实现的功能与网站搜索模块一样。另一张表单是网站联系人登录时输入姓名和电子邮箱,在该表单中,输入联系人的姓名的文本域为name,输入联系人电子邮箱的文本域为email。从表单定义语句可以看出当网站联系人输入姓名和电子邮箱,单击“登录”按钮后,表单的数据将被提交到login.asp文件中处理,当网站联系人输入修改的信息。并单击“确定”按钮后,所有的数据提交到join_edit_ok.asp文件中,该文件将所有的数据保存在数据库中。并在页面上显示网站修改成功的信息。
4.4.2 界面设计
在首页页面或者分类目录页面或登录页面上单击“网站修改”超连接,首先进入网站修改登录页面,在该页面上输入网站登录时填写的联系人姓名和联系人电子邮件。单击“登录”按钮既可进入网站修改页面。网站修改页面也分两部分:上面为网站搜索部分,下面为网站信息修改部分。在信息修改部分,网站联系人可以修改输入的网站信息。网站修改的设计界面如图6所示:
4.4.3 工作流程
在表单中输入联系人名称以及邮箱后,数据被提交到login.asp文件中处理,在login.asp中首先使用QueryString()方法兑取action的值,如果action的值为login,则读取表单传递过来的联系人姓名和电子邮箱数据,判断联系人姓名和电子邮箱是否为空:
if name="" then '联系人姓名为空
response.write ""
else
if email="" then '联系人电子邮
response.write""
如果二者都不为空,则从数据库中查询email列的值为输入电子邮箱的记录。如果存在记录,则判断输入的用户名是否正确,如果不正确,返回到登录页面。如果全部正确,则登录成功,保存联系人登录的电子邮箱和id,并将页面转到jion_edit_ok.asp修改页面。进行网站登录信息的修改。
5 系统后台模块设计
前台页面可以看成是对数据库中表的查询,读入,而后台则是对数据库中表中的信息进行修改,添加,删除,从而改变前台的显示信息。后台由管理员通过管理员id和密码登录进行操作。管理员登录模块示意图如图7所示:
5.1 网站管理模块的实现
5.1.1 功能描述
管理员登录之后,首先进入的就是网站管理模块,该模块管理员能够对已审核的网站进行修改和删除操作。网站管理模块的界面如图8:
5.1.2 工作流程和代码设计
进入该界面时,程序首先从数据库中查询verify=0的记录,然后将所有的记录分页显示在页面上。当管理员单击某个网站对应的“删除”超连接,就可以将该网站及其所有信息从数据库中删除。执行删除文件的部分代码如下:
if session("admin")="" then
response.write""
end if
If Request("action")="delete" Then
delid=replace(request("id"),",","") '获得要删除记录的id,Replace 过程将获得的id 字符串中的"'"用空字符""替换
if delid="" or isnull(delid) then '要删除的记录id 为空
'则给出提示
response.write ""
response.redirect "main.asp" '返回到网站管理界面
response.end
else 'id 存在
'执行数据库中的删除操作,删除数据库中id 列的值在delid数组中的记录
conn.Execute("delete * from web where ID in ("&delid&")")
'删除成功,给出提示
response.write ""
response.redirect "main.asp"
5.2 网站审核
网站审核模块与网站管理模块非常相似。不同的地方在于,网站审核模块显示的所有网站均为未审核网站,已经审核了的网站将不会在次页面显示。而网站管理模块显示的是已审核网站,网站审核模块查询数据库的代码如下:
Set rs=server,createobject(“adodb.recordset”)
rs.open”select id,sort_id,title.url.verify.click.time.from web where verify=-1 order by id desc”.conn,1,1
5.3 分类管理模块
5.3.1 分类编辑
在分类显示界面的每个分类的下面,对应着一个“编辑”超连接,单击该超连接,进入该分类的编辑界面,分类编辑界面和分类添加界面相同,二者的界面是由同一个文件生成,进入某一分类的界面,则在界面上显示该分类保存在数据库中的信息。当用户输入修改后的信息,单击确定按扭,所有的数据将被提交到sort_ok.asp文件中处理,部分处理代码如下:
case "edit" 'action 的值为edit
show=request.form("show") '是否首页显示
sort_id=request.form("sort_id") '上级ID
set rs=server.createobject("adodb.recordset") '创建RecordSet 对象
'从数据库中查询id 列的值为request.form("id")的记录,将结果保存在rs 中
rs.open "select * from sort where id="&request.form("id"),conn,1,3
rs("sort")=request.form("sort") '分类名称
………
rs.update '更新数据库
rs.close '关闭RecordSet 对象
if sort_id="0" then '判断sort_id 的值,并根据sort_id 的值返回到不同的界面
response.write ""
else
response.write ""
end If
case "delete" '删除操作
delid=request.QueryString("id") '读取要删除记录的id
sort_id=Request.QueryString("sort_id") '读取sort_id 的值
If sort_id = "" Then
sort_id = 0
End If
Del sort_id,delid
if sort_id="0" then '判断sort_id 的值,并根据sort_id 的值返回到不同的界面
response.write ""
else
response.write ""
end If
end select
5.3.2分类添加
在分类显示界面的最下方,有一个“添加分类”超连接。单击该超连接,能够添加当前分类的下一层分类。界面中包含表单forms,用来输入要添加的分类信息。表单中定义分类名称文本域为sort。首页显示为一个下拉列表show。可以选择是否要在首页显示,默认为否,上级id文本域为sort_id。操作文本域为action。它为只读型,当操作为添加时,文本域中显示“add”。表单中还定义了一个隐藏域id,用来保存当前分类的id。其页面显示如图9所示:
当输入要添加的分类信息并单击“确定”按钮后,表单中的数据被提交到sort_ok.asp文件中处理。在sort_ok.asp文件中,首先判断用户是否登录,如果登录,则读取操作action的值,如果action的值为add,则执行添加处理。分类添加的部分代码如下:
action = request("action")h '读取action 的值
select case action 'select条件语句
case "add" 'action 的值为add
show=request.form("show") '是否首页显示
sort_id=request.form("sort_id") '上级ID
set rs=server.createobject("adodb.recordset") '创建RecordSet 对象
'从数据库中查询id 为空的记录,将结果保存在rs 中
rs.open "select * from sort where id is null",conn,1,3
rs.addnew '添加新记录
rs("sort")=request.form("sort") '分类名称
……
rs("sort_id")=sort_id
end If
rs.update '更新数据库
rs.close '关闭RecordSet 对象
Set rs=nothing
if sort_id="" or sort_id = "0" then '判断sort_id 的值,并根据sort_id 的值返回到不同的界面
response.write""
else
response.write ""
end If
5.3.3 分类删除
删除操作也是在sort_ok.asp文件中执行的。在sort_ok.asp文件中,如果读取action的值为delete,则执行删除操作,在代码中,首先读取id和sort_id的值,然后执行del()过程将所有相关分类删除,最后根据sort_id的值将页面转到相关页。其中del()过程是一个递归过程,其基本思想是:首先判断改分类的下级分类,对每一个下级分类,如果是,则直接删除改分类,完成操作。如果不是最下级分类,则查询该分类的下级分类,对每一下级分类,执行与该分类同样的操作,即首先根据情况处理。最后直到所有的下级分类以及下下级分类等都删除掉,然后再将改分类删除。del()的具体代码如下:
Function Del(sort_id,id)
Set drs = Server.CreateObject("ADODB.RecordSet")
drs.Open "Select * from sort where sort_id="&id,conn,1,3
If drs.EOF or drs.BOF Then '不存在满足条件的记录,即该分类是最下级分类
conn.Execute("delete * from sort where ID="&id) '删除该分类
Exit Function '跳出Function 过程
Else '还存在下级分类
Do While Not drs.EOF '循环处理每一个下级分类
nid = drs("id") '下级分类的id
Del id,nid '删除该下级分类
drs.MoveNext '指向下一条记录
Loop
End If
drs.Close '关闭RecordSet 对象
Set drs = nothing
conn.Execute("delete * from sort where id="&id) '删除该分类
End Function
6 系统性能测试
6.1 系统测试环境
本系统测试环境:CPU intel(R)2.10GHz,内存SDRAM 256M,WIN2000/XP,2003下均测试通过。
6.2 测试结果
在系统的各个模块设计完成之后,需要对整个系统进行全面的测试。目的是让整个系统能够快速、稳定、安全的运行。在进行系统测试过程中会出现如下几种情况:
1.管理员能准确无误的对数据库进行修改。
2.客户能顺利的进行查询、登录和修改。
3.管理员和客户都能进行基本信息的修改。
4.可以安全退出系统。
5. 权限控制,通过session会话变量对管理员和用户的权限进行控制。
6. 页面的编码方式不同,需要的对字符串进行转码操作。