herose  
     
     
 

  图书馆随书光盘下载系统基于ASP的设计与实现

张永强

摘要:本系统从动态网站基本理论出发,基于B/S模式的思想结合关系数据库理论设计并实现了数字化图书馆的光盘下载部分,包括了留言管理、用户管理、光盘数据管理、光盘查询下载、下载统计分析等五个主要模块。该文从实际出发给出了系统实现的基本思想,数据结构及部分程序的实现方法,充分地将计算机技术和图书馆相关理论融合为一体。
关键词:图书馆 随书光盘 下载 ASP 实现

    近几年,随着计算机应用的普及和读者阅读需求的多样化,电子出版物越来越受到人们的喜欢和认同。特别是印刷型和电子型混合载体形态的出版物(主要指配套书盘)的出现和剧增,已经引起图书馆界的高度重视。许多图书馆在匆忙上马多媒体阅览室、电子阅览室等“硬件”设施后,在“软”的服务方面呈现出不能同步跟进的“滞后”现象。如何科学地对配套光盘进行管理与利用已成为图书馆当前急需解决的重要问题。
    通过对我馆随书光盘的分析发现:在占总量 85% 的TP(计算机科学)类图书随书光盘中,90%的光盘讲解书中的示例、实例、练习、效果以及它们的源代码;65%提供具体的应用软件、程序、系统平台或仿真模拟环境;23%提供一些素材、控件等资源;7%是图书的电子版、教学盘或演示课件;3%包含了一些参考手册、说明文档、技术资料等等。即使非TP类图书所附光盘,包含的内容也无出其右。对这些随书光盘经过汇总发现:随书光盘是对图书内容的说明、使用的帮助、参考资料的提供,一般没有独立的内容,读者在阅读图书的过程中,可以通过对光盘的使用,加深对书中内容的理解,起到辅助学习的作用。由于它又分离于文献主体之外,所以随书光盘被认为是图书的附件。
    我馆对随书光盘大体经历三种管理阶段:一是将光盘随同图书一起外借给读者;二是随书光盘只能在图书馆电子阅览室使用,不允许外借;三是将随书光盘复制到图书馆专用服务器上,供学校师生下载使用。不难看出前两个阶段是传统图书馆服务的继续和延伸,管理起来较为简单,但存在着明显的缺点:光盘特有的质地属性,使其在外借或在计算机上多次使用时容易磨损、损坏、划伤!丢失,甚至影响到光盘所对应图书的使用;这两个阶段都存在着借阅期限和开馆使用时间的限制,并且在一定时间内只能供有限的读者使用。第三阶段充分利用了计算机网络信息技术,从根本上克服了上述两种方法的缺点,而且光盘上网使读者可以不受时空限制随时随地使用,使同一张光盘可被不同的人在任何时间和校园网上任何地点同时共同使用,实现了随书光盘内容信息的共享,总之,将随书光盘上网管理在目前是一举多得的好方法,已逐渐被我馆所采用,本文结合笔者自身工作实践,介绍如何创建一种简便实用的图书馆随书光盘下载系统。
一、确定系统总体功能构架
    图书馆随书光盘下载系统的设计思想是:提供书名、索书号、ISBN、编者、出版社、光盘简介等六个检索入口对随书光盘数据库进行检索,并在检索结果中提供按书名下载的链接,一般的检索下载过程分为两个步骤:收集检索条件;执行检索命令并显示搜索结果。根据这一流程,我们在设计程序时将其分为两个部分,实现这两个步骤,先用一个HTML表单来收集和传送输入的搜索条件,再用两个ASP文件来执行数据库的检索命令和显示具体检索结果。下面我们就以Windows2000,IIS5.0,Microsoft SQL2000系统环境下,SQL数据库bookrom中一个命名为rom的随书光盘数据表为例,具体说明系统的实现,rom的表结构如下:
 

字段名称

字段类型

字段大小

说明

是否允许为空

索书号

文本

20

光盘的索书号

ISBN

文本

15

光盘的ISBN

书名

文本

100

光盘的名字

编者

文本

30

光盘的编者

出版社

文本

50

光盘的出版社

路径

文本

50

光盘存放路径

加入时间

文本

20

光盘加入时间

下载次数

文本

10

光盘的下载次数

光盘介绍

文本

200

光盘的介绍

备注

文本

50

其它

                                        光盘信息表
二、确定系统主页结构及系统功能流程设计
    对于任何一个软件系统,其界面的友好性以及结构的合理性至关重要,本系统有五个模块具体来实现功能,主页采用表格网页结构,简洁、清晰、明了,其系统界面和具体思路如下:
    1.文件名:index.asp
    2.界面设计:

LOGO图片

光盘搜索模块

光盘下载排行模块

              发布新留言

用户留言和管理员

答复模块

更多流言

后台登录模块

常用网站推荐模块

版权声明

    3.设计思路与功能说明:
(1)Logo图片:表达网站内容与美观网站。
(2)光盘检索模块:用户在index.asp主页搜索栏目可以看到此界面,用户选择搜索类型输入关键字而后提交给srqk.asp页面,查找符合条件所需光盘。
(3)下载排行模块:用户打开主页后,系统对数据库ROM光盘数据进行统计后,显示下载次数最多前10张的光盘书名(以降序排列)。
(4)最新留言模块:用户打开index.asp主页后就可看到最新的两条留言,另外还可以通过“发布新留言”或者“更多留言”进一步根据需要操作,也可查看最近两条留言管理员的答复情况。
(5)后台登录模块:管理员通过这里进入后台维护,进入前,根据用户名和密码进行用户身份验证。
(6)网址精品推荐模块:推荐一些常用站点供用户参考。
(7)版权声明:网站版权声明,声明版权为图书馆所有。
三、关键技术实现如下:
    1.模块名称:用户密码验证处理模块
response.buffer=true
dim objrc
set objrc=server.createobject("Adodb.recordset")
dim sql
dim cr,zyq,zcr
zcr=""
cr=trim(request("textfield2"))
zyq="zhangyqzhangyqzhangyq"
for i=1 to len(cr)
zcr=zcr & chr(asc(mid(cr,i,1)) - asc(mid(zyq,i,1)) + 26)
next
sql="select count(*) from power where 用户名='" & trim(request("textfield")) & _
"' and 密码='" & zcr & "'"
objrc.open sql,objconn,1,1
if objrc(0)=0 then
response.redirect "yanz.htm"
else
response.cookies("cs").expires=date+1
response.cookies("cs")("passed")="yes"
response.redirect "houtai.asp?page=1"
end if
set objrs=nothing
    2.模块名称:翻页处理模块
if objrs.pagecount>1 then
select case int(page)
case 1
response.write "第一页上一页" & "<a href=morebbs.asp?page=2>下一页</a>" _
& "<a href=morebbs.asp?page=" & objrs.pagecount & ">最后一页</a>"
case objrs.pagecount
response.write "<a href=morebbs.asp?page=1>第一页</a>" & "<a href=morebbs_
.asp?page=" & objrs.pagecount-1 & ">上一页</a>" & "下一页最后一页"
case else
response.write "<a href=morebbs.asp?page=1>第一页</a>" & "<a href=morebbs_
.asp?page=" & page-1 & ">上一页</a>" & "<a href=morebbs.asp?page=" & page+1 & ">_
下一页</a>" & "<a href=morebbs.asp?page=" & objrs.pagecount & ">最后一页</a>"
end select
else
response.write "第一页上一页下一页最后一页"
end if
    3.模块名称:光盘查询参数处理模块
dim page
page=Request.QueryString("page")
if page=0 then
page=page+1
response.cookies("cs").expires=date+1
response.cookies("cs")("select")=request("select")
response.cookies("cs")("textfield")=trim(ucase(request("textfield")))
end if
dim rec
set rec=server.createobject("Adodb.recordset")
Sql = "select count(*) from rom where " & request.cookies("cs")("select") & " _
like '%" & request.cookies("cs")("textfield") & "%'"
rec.open sql,objconn,1,1
dim rc
rc=rec(0)
if rc=0 then response.redirect "srqk.htm"
dim objrs
set objrs=server.createobject("Adodb.recordset")
Sql = "select * from rom where " & request.cookies("cs")("select") & " like '%" _
& request.cookies("cs")("textfield") & "%'"
objrs.Open sql,objconn,1,1
objrs.pagesize=10
if page<objrs.pagecount then
rc=10
else
rc=rc mod 10
end if
if rc=0 then rc=10
    4.模块名称:文件夹路径处理模块
dim ssh
ssh=Request.QueryString("ssh")
dim url
url=""
if asc(mid(ssh,2,1)) > 64 and asc(mid(ssh,2,1)) < 91 then
url=left(ssh,1) & "/" & mid(ssh,2,1) & "/" & mid(ssh,3,len(ssh)-2) & ".ISO"
else
url=left(ssh,1) & "/" & mid(ssh,2,len(ssh)-1) & ".ISO"
end if
url="romdata/" & url
    5.模块名称:无组件上传类初始化
’该模块部分参考化镜无组件上传类现有技术
Private Sub Class_Initialize
dim RequestData,sStart,vbCrlf,sInfo,iInfoStart,iInfoEnd,tStream,iStart,theFile
dim iFileSize,sFilePath,sFileType,sFormValue,sFileName
dim iFindStart,iFindEnd
dim iFormStart,iFormEnd,sFormName
set objForm=Server.CreateObject("Scripting.Dictionary")
set objFile=Server.CreateObject("Scripting.Dictionary")
if Request.TotalBytes<1 then Exit Sub
set tStream = Server.CreateObject("adodb.stream")
set Data_5xsoft = Server.CreateObject("adodb.stream")
Data_5xsoft.Type = 1
Data_5xsoft.Mode =3
Data_5xsoft.Open
Data_5xsoft.Write Request.BinaryRead(Request.TotalBytes)
Data_5xsoft.Position=0
RequestData =Data_5xsoft.Read
iFormStart = 1
iFormEnd = LenB(RequestData)
vbCrlf = chrB(13) & chrB(10)
sStart = MidB(RequestData,1, InStrB(iFormStart,RequestData,vbCrlf)-1)
iStart = LenB (sStart)
iFormStart=iFormStart+iStart+1
while (iFormStart + 10) < iFormEnd
iInfoEnd = InStrB(iFormStart,RequestData,vbCrlf & vbCrlf)+3
tStream.Type = 1
tStream.Mode =3
tStream.Open
Data_5xsoft.Position = iFormStart
Data_5xsoft.CopyTo tStream,iInfoEnd-iFormStart
tStream.Position = 0
tStream.Type = 2
tStream.Charset ="gb2312"
sInfo = tStream.ReadText
tStream.Close
'取得表单项目名称
iFormStart = InStrB(iInfoEnd,RequestData,sStart)
iFindStart = InStr(22,sInfo,"name=""",1)+6
iFindEnd = InStr(iFindStart,sInfo,"""",1)
sFormName = lcase(Mid (sinfo,iFindStart,iFindEnd-iFindStart))
'如果是文件
if InStr (45,sInfo,"filename=""",1) > 0 then
set theFile=new FileInfo
'取得文件名
iFindStart = InStr(iFindEnd,sInfo,"filename=""",1)+10
iFindEnd = InStr(iFindStart,sInfo,"""",1)
sFileName = Mid (sinfo,iFindStart,iFindEnd-iFindStart)
theFile.FileName=getFileName(sFileName)
theFile.FilePath=getFilePath(sFileName)
'取得文件类型
iFindStart = InStr(iFindEnd,sInfo,"Content-Type: ",1)+14
iFindEnd = InStr(iFindStart,sInfo,vbCr)
theFile.FileType =Mid (sinfo,iFindStart,iFindEnd-iFindStart)
theFile.FileStart =iInfoEnd
theFile.FileSize = iFormStart -iInfoEnd -3
theFile.FormName=sFormName
if not objFile.Exists(sFormName) then
objFile.add sFormName,theFile
end if
else
'如果是表单项目
tStream.Type =1
tStream.Mode =3
tStream.Open
Data_5xsoft.Position = iInfoEnd
Data_5xsoft.CopyTo tStream,iFormStart-iInfoEnd-3
tStream.Position = 0
tStream.Type = 2
tStream.Charset ="gb2312"
sFormValue = tStream.ReadText
tStream.Close
if objForm.Exists(sFormName) then
objForm(sFormName)=objForm(sFormName)&", "&sFormValue
else
objForm.Add sFormName,sFormValue
end if
end if
iFormStart=iFormStart+iStart+1
wend
RequestData=""
set tStream =nothing
End Sub
Private Sub Class_Terminate
if Request.TotalBytes>0 then
objForm.RemoveAll
objFile.RemoveAll
set objForm=nothing
set objFile=nothing
Data_5xsoft.Close
set Data_5xsoft =nothing
end if
End Sub
四、附盘加工过程
    1.由我馆编目部门在附盘上给出与图书相同的索书号和种次号,然后用光盘盒加以保护,同时在片边上标注与图书一样的标签。
    2.由维护人员通过点击主页管理入口对光盘数据进行维护。
    3.利用winiso软件将附盘的内容打包成一个文件保存,打包的目的是为以后刻录和使用下载的方便。
五、随书光盘的利用
    为使读者充分有效地利用这些随书光盘,除做好书目宣传工作,特别是对随书光盘在编目上进行充分描述外,还注意采取多途径的宣传措施,尤其是注重利用图腾系统的WEB部分信息平台加大宣传力度,提供随书光盘的网上检索功能,用于解决 CNMARC300字段不能用于检索的问题。只要有一个较好的宣传手段,随书光盘在读者中就能得到较好的充分利用。

参考文献:
1. 中国图书馆分类法编辑委员会.《中国图书馆分类法》使用手册 (第四版) . 书目文献出版社. 1999.8
2. 中国图书馆学会.图书馆理论与实践新探.书目文献出版社.2002
3. 陈青,刘时燕,王山. macromedia DREAMWEAVER MX 标准案例教材.人民邮电出版社.2002
4.尚俊杰.网络程序设计—ASP.北京:北方交通大学出版社,2002
5. 张海藩.软件工程导论.北京:清华大学出版社,1998
6. 阮文江. Web网站构造技术.中国人民大学出版社.1997
7.北京博彦科技发展有限责任公司. 编程高手ASP. 北京大学出版社,2001

(电脑编程技巧与维护杂志社版权所有。未经许可不得转载。)
 

 
 
     
     
 
2008 Copyright.《电脑编程技巧与维护》杂志社 版权所有