网络书店设计与实现

【摘要】

随着科技的发展,我们已经进入了一个高速发展的信息时代。以计算机技术为核心的多媒体以及通信技术被广泛应用于各种领域。多媒体电化教学、网络教学、远程教学等已在全国各地悄然兴起。各式各样的先进设备操作越来越复杂,使用户在使用时感到相当不便。多媒体中央控制系统利用计算机及微电脑技术对多媒体电教室、会议室中的各种设备进行集中控制、管理,以简单明了的按键方式提供给用户使用,将复杂的控制转化为简单的按键操作,真正实现"所见即所控"。

  随着校园网络和多媒体教室的快速普及,整个学校的计算机网络建设将越来越受到教育人士的重视。多媒体电化教学的无纸化、网络化和远程化,正以崭新的面貌和非凡的教学手段进入各大、中、小学校,对过去传统校园建设来说无疑是一次重大的飞跃和变化。电脑技术、通信技术、网络技术的高速发展将传统的教学手段带入一个全新的时代,借助先进的信息技术,教师可以将所教授的内容快速地传达给学生,并对学生的反馈及时地做出反应。通过高速网络技术实现了计算机互联,使得教师、学生之间能有效地实现信息数据的交流、共享。多媒体网络教学系统正日益成为现代化校园的基础设施,它将综合集成传输包括教室、办公室、会议室等的语音、图像信号,对电脑设备、影音设备、演播设备、监控设备、环境设备进行集中及远程控制。

  现代化校园所采用的系统一定要有先进性。力求高标准,并且有很强的适应性、扩展性、可靠性及长远利益,以满足未来的要求。根据现代教学发展的需求,应该把多媒体中央控制系统纳入整体的教学网络,形成网络控制教学系统。我们的电教室系统可利用校园网络实现对全校所有教室的远程监控和多媒体信息交互,使多媒体教室融入整个校园网络体系,让现代教学进入一个新时期。

本文中所做的主要工作如下:

(1)介绍了个性化页面的背景及Win2000server+IIS+ASP系统的一般原理;

(2)阐述整个个性化页面生成系统的系统结构及工作原理;分析了系统实现中的特殊性、难点和重点。

(3)设计实现用户管理、图书目录管理、图书信息录入管理、书店定单管理、图书的浏览和查找、书店购物结帐功能等ASP页面 。

(4)分析并解决实现中的若干技术问题。

(5)建立完整的网上书店,进行测试并分析结果。

【关键字】   网上书店   ASP   后台数据库

目    录

第一章:诸论…………………………………………………………….1

1.1设计思想……………………………………………………....... 1

1.2开发工具的选用及介绍………………………………………………1

第二章:网上图书的过程与制作

2.1网上图书的流程图………………………………………………….3

2.2网上购书的过程………………………………………………………4

2.3网上图书的制作…………………………………………………….7

第三章:关于ASP

3.1什么是ASP……………………………………………………….15

3.2 ASP的新功能……………………………………………………16

3.3 使用变量和常量…………………………………………………18

2.5 向浏览器发送内容……………………………………………19

第四章:详细计划

4.1 数据库应用系统开发简介……………………………………20

4.2 数据库系统设计及范式分析…………………………………24

4.3  SQL语言介绍……………………………………………………25

4.4 SQL基础 ………………………………………………………30

4.5 SQL语句……………………………………………………….32

结束语……………………………………………………………….32

参考文献……………………………………………………………32

第一章:诸论

在21世纪,数字化、网络化的信息革命从根本上推动了图书馆的发展进程,计算机日益成为图书馆的主要设备,图书馆采用了各种自动化集成系统建立自己的内部网络环境,呈现出网络化、信息化、智能化和社会化的特征。991年已经基本完成了大部分馆藏书籍和期刊回溯数据的建库工作,后来采用深圳大学图书馆的自动化管理系统,实现了采购、编目、流通的自动化管理,读者可以通过计算机迅速查到所需的书刊资料的存放和借阅情况,同时工作人员也大大的提高了工作效率,采编书刊可以一次输入多次输出,编目的格式整齐规范。2001年中山大学与中山医科大学合并后,南、北、珠海三个校区图书馆数据合并,统一使用深圳图书馆的ILASⅡ系统进行管理,成为CALIS 华南中心书目数据的重要组成部分,实现了国内外书目数据资源共享。本校读者可以在网上查寻三个校区的图书馆资源,三地图书馆通借通还。图书馆自动化管理一方面由于开展网上预约、催还书、推荐新书等业务,解决了紧俏文献的供需矛盾和逾期罚款的问题,使流通工作更具人性化,另一方面建立起图书馆工作的信息网络,可以合理配置文献资源﹑网上协作采访﹑集中编目以及馆际互借,管理所需的工作统计也变得非常方便快捷。与传统的手工操作相比,信息技术的使用促进完善了图书馆的管理工作。

1.1设计思想

一信息技术对图书馆服务的影响

   信息技术的发展和应用不仅改变了图书馆信息资源的结构和获取信息的方式,同时也促进图书馆传统功能模式向开放式、网络式的信息服务模式转变,由单一功能向多功能转变,改变了服务的理念。图书馆业务手段日趋多样化,服务范围日趋全球化。引进以计算机技术,通讯技术为核心的现代信息技术,是加快信息服务进程的重要一环。

众所周知,在医学图书馆,期刊在众多种类的文献中占有相当重要的地位。新技术、新成果大多首先在期刊上发表,据统计,80%的文献信息来自于期刊。期刊是医学图书馆中最活跃的因素。图书馆的参考咨询、文献检索、定题服务以及馆际互借服务等工作都是以期刊作为主要信息源和工作对象的。但是,由于期刊(尤其是外文期刊)的涨价幅度大与图书经费短缺的矛盾,外刊订购的品种每年都在递减,满足不了读者日益增长的要求。为了提高期刊的利用率,充分发挥馆藏期刊的作用,我馆很早就引入了“中国生物医学文献数据库”(CBMdisc)和美国的MEDLINE 光盘数据库,并且免费提供给读者使用,这大大的提高了读者的检索效率,并且质量非常高,真正确立了我馆为华南地区最大的医学文献信息服务中心的地位。在2001年合校后,我馆的馆藏资源得以不断完善,自动化建设和网络服务水平也有了提高和改善。近几年,我馆先后引进了“中国生物医学期刊文献数据库(CMCC)” 、中文期刊网全文数据库、SCI 、SPRINGER、OVID等电子数据库,还不断在购买国外的医学数据库,馆藏重心逐步向数字化方向转移。据2003年统计,我馆的医学数据库有28个,合校后引进的医学及其他学科数据库增加到64种,期刊全文型数据库有13个,各种可供检索利用的电子期刊的种类迅速增加,在国内高校医学图书馆中名列前茅,读者通过网络可获取的医学全文期刊超过2000种,印刷型文献和电子型文献各领风骚。这些数据库更新速度快,收录期刊全,如美国著名的Elsevier Science出版公司就有1200种的全文学术期刊,多种检索入口,读者可以根据自己的需要自由选择数据库进行检索浏览期刊文摘或全文,方便而快捷。通过引进综合性全文数据库和网络信息资源导航的建设,图书馆信息服务领域得到了更大的拓展。本校校园网的用户每周7天,每天24小时都可以通过校园网的任何一个终端使用图书馆提供的数字化信息服务,突破了时间和空间的障碍,实现了真正意义上的资源共享,也解决了因书刊价格不断上涨而经费短缺停订书刊的实际问题,使用网络资源和数据库产品成为获取信息的最具成本效益的途径。

    另外,图书馆开始有针对性的开展信息导航服务、网上咨询、文献传递等服务。例如在图书馆的主页上建立“医海导航”栏目,对医学资源网站和医学信息资源建立链接,并提供网上电子期刊的网址;用e-mail、留言板等形式接受参考咨询,传输检索结果,解答有关图书馆馆藏和服务的问题;提供下载申请查新的表格;向读者推荐使用新购买的数据库;征集读者对图书馆的建议或意见;发布图书馆的新闻和通知等等。最近,参考咨询部又向读者提供在线咨询服务,实时解答读者的疑难问题。

    现代信息技术的迅速发展使图书馆的信息环境发生了巨大变化,随着网上资源越来越丰富和网上参考咨询工作、网上教育的开展,读者对信息的需求也使图书馆的用户教育在时代的潮流中显示出其重要性。为此我馆还专门成立了文献检索课教研室,在医学本科生和研究生中开设文献检索和利用课程,对学生们进行信息素养教育,培养学生们的文献信息获取、识别、接受和利用的能力,使其在今后信息化、网络化的学习和科研环境中游刃有余。除此,参考咨询部定期以讲座的形式进行用户教育,面向全校师生、各附属医院员工,介绍馆内现有一些光盘和电子数据库的收录范围,各种数据库的特色及其检索使用方法,介绍网址的搜索方法和文件下载的方法,对网上检索工具进行评估,受到了读者的广泛好评。读者利用图书馆资源水平不断提高,反过来对图书馆用户教育和参考咨询服务要求也更高,这样形成良性互动,进一步促进图书馆资源的深层次开发利用和用户教育﹑服务水平的提高。2000年我馆开设了设备先进的电子阅览室,每周60小时向师生们提供馆藏书目数据、光盘数据库、引进电子资源和联机数据库的检索和利用以及INTERNET信息浏览等服务。电子阅览室投入使用后,利用率非常高,2002年一年就接待读者超过5万3千人次。

二.信息技术对图书馆管理人员的影响

    信息技术的发展将不可避免的对原有的图书馆服务思想和服务体系带来冲击,图书馆管理人员在信息技术日益发展的环境下,要明确图书馆的使命并没有改变,信息技术并非取代图书馆管理人员,相反,图书馆管理人员作为桥梁、导航的作用将变得更为重要。信息技术使图书馆工作变得更加便利和高效,使资源共享更容易实现,只有传统的方式与现代的信息技术相结合,人和机器相协调,才能为读者提供更加优质的服务,才能提高学校的科研和教学水平。因此在网络环境下,对图书馆工作人员的工作技能和工作效率提出了更高的要求:要加强对自身的学习完善,必须具备精深的图书馆专业知识;必要的网络及信息技术知识;必要的计算机应用知识和外语知识,才可担任起“信息导航员”、“网络咨询员”等新角色。对馆员进行继续教育是图书馆发展的一项重要任务,馆员可通过在职进修﹑报读学位﹑学术研讨会议﹑讲座﹑短期培训等等形式提高自身的业务水平,努力使自己成为高层次﹑全方位﹑复合型的图书馆管理人才。只有拥有这样一批既具有深厚的专业知识、熟练的网络技能,又具有良好的文化修养,同时还具备获取、组织、传播信息能力的新型图书馆员,图书馆事业才可持续发展。

    信息技术对图书馆管理、服务及其馆员的影响是深远的,随着数字化技术和网络技术的发展,图书馆将成为高度发达的信息集散地,图书馆必然将朝着“数字化图书馆”的方向发展。

1.2开发工具的选用及介绍

ASP的优势:

Active Server Pages:“动态服务器网页”,一般简称为“ASP”,ASP之所以能受到大家的重视与使用的原因,主要在于所产生的执行结果都是标准的HTML格式,而且这些程序是在网络服务端中执行,使用一般的浏览器(如IE 或Netscape)都可以正确地获得ASP的“执行”结果,并且将这ASP执行的结果直接在浏览器中“浏览”,不像VBScript或 JavaScript是在客户端(Client)的浏览器上执行,若使用VBScript来设计程序,客户端(Client)在IE浏览器中可以显示程序执行的结果,可是,客户端(Client)若使用Netscape浏览器就无法显示VBScript的执行结果。

ASP的特点:Microsoft Active Server Pages 即我们所称的 ASP ,其实是一套微软开发的服务器端脚本环境, ASP 内含于 IIS 3.0 和 4.0 之中 , 通过 ASP 我们可以结合 HTML 网页、 ASP 指令和 ActiveX 元件建立动态、交互且高效的 WEB 服务器应用程序。有了 ASP 你就不必担心客户的浏览器是否能运行你所编写的代码,因为所有的程序都将在服务器端执行,包括所有嵌在普通 HTML 中的脚本程序。当程序执行完毕后,服务器仅将执行的结果返回给客户浏览器,这样也就减轻了客户端浏览器的负担,大大提高了交互的速度。 以下罗列了 Active Server Pages 所独具的一些特点

第二章:网上图书的过程与制作

1.1网上购书的流程

网上购书流程图

1.2详细介绍:

1、按分类查看

点击首页左边或详细分类页面的类别名,可以查看该类别的所有图书。

如图:

2、按书名查询

在查询栏“书名”后框内输入您要查找的书名,然后点击“查找”或直接按回车(ENTER)键,稍后,查询结果将显示出来。

提示:默认的书名查询方式是模糊查询,就是说,您只要输入书名的一部分,所有书名中包含您输入文字的图书都会列出来。您输入的条件越准确,查询结果也就越准确。

如图:

3、按图集号、ISBN号、作者查询

图集号只适用于图集的查找。按图集号、ISBN号作者等的查询与按书名查询方法相同。

如图:

4.按出版社查找图书

在“出版社”后的框内选择出版社名称,然后点击“查找”或直接按回车(ENTER)键,稍后,查询结果将显示出来。

如图:

5、组合查询

以上几种查询方法可以组合在一起进行查询,可以更精确的查找图书。例如:在“书名”后的框内输入“钢结构”,在出版社后的框内选择“中国建筑工业出版社”,按查找,就可以查找中国建筑工业出版社出版的,并且书名含有“钢结构”的所有书籍。


购物车使用

1、购买

每本书目旁边都有一个“购买”图标,点击“购买”,即将该书放入购物车,“购物车”的内容包括您订购书籍的信息:书名、数量、原价、会员价、书款合计等。

2、修改定购数量

每本书的默认订购数量是“1”册。如果要改变订购数量,请在数量框中填入您希望购买的数量,然后按下表格底端的“修改定购数量”按钮,系统会更新购物车信息。

注意:如果点击“购买”了相同的书,购物车内该书的数量会自动加“1”

3、删除购物车内的书籍

  已经放入购物车的书籍,如果不再购买,可以按书目信息右边的“删除”按钮,该书即被删除,系统会更新购物车信息。如果希望购买的书籍本网站暂时无货,请您将所需的图书的基本信息提供给我们,我们将会联系出版社查找,并将结果尽快通知您。图书的信息包括准确的书名、出版社、ISBN书号等。

注意:提交缺书登记前,请登录,这样系统可以自动填写您的联系信息。

5、会员登录: 

在本系统中,所有注册会员购物订单,系统中都有记录且购物金额有一定的继承性,为了对会员信息保密及系统安全考虑,系统设置必须通过用户登录才能查询订单或查看所属购物优惠级别等等。

注册会员后,可通过会员登录查看所属组别、所有员组及相应的购物优惠比例。

会员登录可以通过两种方法:

1.  在首页中的“会员登录”图框中直接输入会员号及密码即可。

2.  通过系统导航栏中的会员登录项,转入“会员登录”页面来登录。

如图:

6、会员资料修改 

会员的注册资料难免会有所变化需要修改,会员可以修改除了"会员代号"以外的所有资料。

要修改会员资料,您只需点击页底的"修改注册信息"设置,通过会员登录后,就可以在“会员信息修改”页面进行修改。 所有修改经保存后才不效

如图:

7、进入购物区: 

系统首页为总的购物区,你可以在此浏览、挑选或有目的的查询某类商品,本系统设置以下四种方式浏览商品。

1.  推荐商品:

即由商店推荐给顾客的较好商品。它以很简洁的信息显示,或附上图片。推荐商品可以直接放进购物车。可通过详细信息按钮查看它的详细说明。详细说明包括:商品基本信息、产品功能说明及内容提要。

2.  最新商品:

即商店最近推出的新商品。系统以列表形式简要显示最新商品的价格信息,可以通过商品名称的链接仔细查看商品详细内容。详细说明包括:商品基本信息、产品功能说明及内容提要。

8、付款结帐 

系统根据购买者在本网上商店身份的不同,有不同的结帐手续。

1.  如果你是会员。在去收银台时可以在“会员区”直接填写用户名及密码,系统会让购买者再次进行用户信息确认,如果无误可以直接确认,到时送货人就根据上面的地址送货;也可修改会员信息或确认不同的送货地点及联系方式。

2.  如果你不是会员。可以在“用户信息区”中按提示详细填写你的信息如送货地点、时间等;确定购买。

9、确认定单 

由于在网上商店属于远程购物,不象一般日常现实购物可以当时结算、直接拿走商品。所以购物者在选购完商品后必须确认一种支付方式并选择一种送货方式,以便于商店查收款帐、按时发货。选择一种由系统给出的支付方式及送货方式,执行“决定购买”操作,即向商店确定了此定单。

如果选择在线支付,系统在您确认定单后会直接转入在线支付系统,让您直接在线支付。

1.3网上图书的制作“

3.2网上图书馆

网上图书馆将学校图书馆图书放到网络上供人借阅,这样不仅方便了校内的学生与教职员工使用图书馆的资源,还为图书馆管理员提供了一种简便地管理图书馆的方法.

3.2.1功能

网上图书馆系统可以进行图书的出借和归还.还可以在系统中按照多种字段对图书进行查找,还可以浏览某个种类的所有图书.该应用程序也为图书馆管理员提供了一些功能,如添加、编辑以及删除图书等,或者在分类层次结构中添加新的种类。

3.2.2系统的层次结构

   下图的每个方框代表校园图书馆网站中的一个页面。除了只包含HTML的Search页面外,其他的均为ASP页面。因为每个图书的页面都不同,所以大多数的页面实际上都是多页面

 本系统共使用3个数据表:

LibBooks表包含与图书有关的所有数据。该表中的字段内容的图书的通用信息。另外,对于已经出借的图书,该表中还包含借阅该图书的用户的ID号,以及图书的状态。

 表视图如下:

字段名 意义 字段类型 字段名 意义 字段类型

bookid 书号(主键) 数字 (no null) status 状态 文本

title 书名 文本 checkedoutto 用户id 数字

author 著者 文本 reservedby 用户学号 数字

Subject 主题 文本 description 描述 文本

Isbn Isbn号 文本 keywords 关键字 文本

LibCategories 表包含Library中的所有类别,在访问者浏览图书列表时将会用到这些类别。每个类别都可以作为另外类别的父类别。有一个特殊的类别,Top-Level,没有出现在类别列表中,但是可以作为其他任何类别的父类别。

字段名 意义 字段类型

Categoryname 类别 文本(noll)

parentcategory 父类别 文本(noll)

LibEmps表包含可以访问图书馆网站的用户信息。该表包含一些通用的信息字段,比如用于进入图书馆的用户密码等。

字段名 意义 字段类型 字段名 意义 字段类型

empid 用户id (主键no null) 数字 password 用户密码 文本

Empname 用户姓名 文本 manager 管理员代号 数字

emailaddress 用户邮箱 文本

图书馆数据库的数据关系如图9-22所示。其中表LibEmps和表Lib Categories与表LibBooks之间都是一对多的关系。每个雇员都可以借阅多本图书,每个类别都可以包含多本图书。

3.2.3界面设计与重点代码的设计

网上图书馆系统有两种用户,一是管理员。另一种是只允许使用图书馆系统,而没有管理功能的一般用户。访问者进入网站,首先要进行登录,如下图所示。登录页面(index.asp)

访问者输入E-mail地址和密码来登录,然后单击“登录”按钮。输入的数据提交后与数据库中的用户表进行匹配。

须创建一个记录来保存基于访问者登录的用户信息

set RSFindEmp = conn.Execute("select EmpID, Manager from LibEmps where " _

& "EmailAddress = '" & Request.Form("EmailAddress") & "' and " _

& "Password = '" & Request.Form("Password") & "'")

if RSFindEmp.EOF then

TheMessage = "密码或email地址不对."

else

Session("EmpID") = RSFindEmp("EmpID")

Session("Manager") = RSFindEmp("Manager")

Response.Redirect "../yk.htm"

end if

表单域EmailAddress和Password 用于Where了句中来获取一个记录。如果访问者输入了一个无效的用户名,则记录集中将不会返回匹配的记录。我们可以通过查看EOF标记来判断一个记录集是否为空。为空,则访问者将被拒绝进入该系统。不为空,则访问者的EmpID值和Manager值将从记录集中返回。写入Session 变量, 变量将在整个网站的所有网页中都是有效的。这些变量的存在与否及其取值将用于确定是否允许进入一个特定的网页,同时也用于访问者进行书目的归还和借阅操作。

图书馆菜单页面

图书馆菜单页面包含指向其他4个页面的链接:管理页面、搜索页面、图书列表页面和主页面。还有一个可显示用户所借书籍的按纽。如果访问者是图书馆管理员,则菜单界面如图所示。如果访问者不是图书馆管理员,则看到如图所示的界面。非管理员的访问者的界面上没有指向管理员菜单页面的链接。

实现办法:访问者登录时在登录页面上的创建的会话变量Session 用于从数据库中获取访问者的有关信息,表示它是否是管理员。如果值为1,就表明访问者是一个管理员,则用如下代码写入一个指向管理员页面的链接:

<% If Session("Manager") = 1 then %>

<A HREF="../html/management_menu.asp">管理员菜单</A>

<% end if %>

通过按纽B1是否为空来判断要不要显示用户所借图书,利用一个记录集来获取访问者已经借出了的所有图书的列表。

if NOT isempty(Request.Form("B1")) then

set RSBooks = conn.Execute ("select BookID, Title from LibBooks where " _

& "CheckedOutTo = " & Session("EmpID"))

end if

再用循环语句将所借书以表格形式显示出来。

<table border=1 width="90%" >

<% if NOT isempty(Request.Form("B1")) then

Do Until RSBooks.EOF%>

<TR >

<TD WIDTH=40% height="20"><% Response.Write RSBooks("Title") %></td></tr>

<% RSBooks.MoveNext

loop

end if

%>

</table>

循环将遍历Rsbooks记录集中的每个记录,直到该记录集结束:

该网站中的所有ASP页面都会在访问者访问之前对其进行登录检查。这样就可以避免访问者通过输入某个页面地址然后在没有登录的情况下直接进入该页面的情况发生。此外,每个管理页面都要确认访问者是管理员。

管理菜单页面有一个HTML表单,根据选择的按钮的不同,可以进行5种不同的操作:图书的归还、图书的编辑、图书的删除、图书的添加和类别的添加。不管选择了哪一个按钮,该表单都提交人其自身进行处理。

要进行图书的归还、图书的编辑、图书的删除三种操作,须先进行搜索,找到该书后,由图书Book.asp返回一个链接:

<% If Session("Manager") = 1 then %>

<A HREF="../html/management_menu.asp?title=<% response.write RSBooks("Title") %>&BOOKID=<% response.write RSBooks("BOOKID") %>">管理员菜单</A>

<% end if %>

而管理者页面通过下列语句

<%=request.querystring("title")%>

<inputzztype=hidden name="BOOKID1"value="<%=request.querystring("BOOKID")%>>

这样就将所找到的书的书号BookID、书名Title传递管理者页面。再进行所须操作。共有3个不同的铵纽,可以进行3种操作。若单击“修改”钮:

则重定向到编辑图书页面,同时把Bookid 传递给该页面。

Response.Redirect "./edit_book.asp?BOOKID="&request("BOOKID1")

将其他的情况需要建立到数据库的连接:

set conn = server.createobject ("adodb.connection")

Conn.Open("FILEDSN=c:\Program Files\Common Files\ODBC\Data Sources\ms access database.dsn")

if NOT isempty(Request.Form("Delete")) and request("BOOKID1")<>"" then

conn.Execute "delete from LibBooks where BOOKID ="&request("BOOKID1")

end if

if (NOT isempty(Request.Form("checkin"))) and request("BOOKID1")<>"" then

conn.Execute "update LibBooks set checkedoutto= 0, status= 'Available' where BookID="&Request("BOOKID1")

end if

页面中的添加新的种类部分包含一个文本控件和一个选择控件。其中选择控件是用所有已经存在的类别列表进行填充的,包括特殊类别 Top level ,该类别表明当前类别是处于类别层次结构中的最顶层。代码如下:

先用一个记录集来填充父类别选择控件:

set RSCategories = conn.Execute("select CategoryName from LibCategories order by CategoryName")

再用下列循环语句:

<%

Do Until RSCategories.EOF

%>

<OPTION VALUE="<% response.write RSCategories("CategoryName") %>"><% response.write RSCategories("CategoryName") %></OPTION>

<%

RSCategories.MoveNext

Loop

%>

遍历RSCategories记录集中的每个记录,并作为一个选项添加到列表中,而记录集中CategoryName 同时作为显示值和传递值:

本页面还包含一个指向添加图书页面的链接。

搜索结果页面

搜索页面的代码获取与访问者查找规则相匹配的图书,然后将这些图书显示给访问者。

搜索页面上的表单包含一个选择控件和一个文本控件。选择控件中的选项是用可搜索 的字段填充的:

需要用一个记录集来保存与访问者的查找规则相匹配的记录:

set RSBooks = conn.Execute("select BookID, Author, Title, Subject from LibBooks where " _

& Request.Form("SearchField") & " Like '%" & Request.Form("SearchCriteria") & "%'")

注意:,符号%表示的是一个广义搜索。这一点类似于ACCESS中的符号*。

然后将所找到的书以表格形式显示出来。代码如下:

<% Do Until RSBooks.EOF %>

<TR VALIGN="top" ALIGN="left">

<TD WIDTH=40% height="20"><B>书名:</B> <A HREF="../html/book.asp?BookID=<% Response.Write RSBooks("BookID") %>"><% Response.Write RSBooks("Title") %></A></TD>

<td width=20% height="20"><B>著者:</B> <% Response.Write RSBooks("Author") %></td>

<td width=30% height="20"><B>主题:</B> <% Response.Write RSBooks("Subject") %> </td>

<% RSBooks.MoveNext

Loop %>

图书页面

图书页面的代码显示图书的有关信息,以及管理图书的出借操作。

该页面通过Querystring 传递BookID

if isempty(Request.QueryString("BookID")) then

Response.Redirect "./search.html"

end if

如果其中不存在,则访问者将被重定向到搜索页面:

如果同时传递表单中包含的变量Action不为空,则表明访问者正借阅该图书:

if Not isempty(Request.QueryString("Action")) then

在这种情况下,需要将图书状态改为 Checkout, 同时需要将Checkedoutto 字段修改为该访问者:

conn.Execute "update LibBooks set Status = 'Checked Out', " _

& "CheckedOutTo = " & Session("EmpID") & " where BookID = " _

& Request.QueryString("BookID")

Response.Redirect "./library_menu.asp"

end if

然后将该访问者重定到图书馆菜单页面:

下一步,利用图书的状态来确定不同的链接

未借出时链接如下:

if RSBooks("status") = "Available" then

LinkText = "<A HREF=""../html/book.asp?Action=CheckOut&BookID=" _

& Request.QueryString("BookID") & """>借这本书</A>"

如果图书已经借出,就创建一个不同的消息,并将链接设置为指向Library menu 页面:

LinkText = "<A HREF=""../html/library_menu.asp"">图书已出借,返回主菜单。</A>"

最后根据是否是管理员,显示管理员菜单链接。

<% If Session("Manager") = 1 then %><A HREF="../html/management_menu.asp?title=<% response.write RSBooks("Title") %>&BOOKID=<% response.write RSBooks("BOOKID") %>">管理员菜单</A><% end if %>

第三章:关于ASP

3.1什么是ASP:

ASP是Active Server Page的缩写,意为“活动服务器网页”,ASP的网页文件的格式是.asp,现在常用于各种动态网站中。与HTML相比,ASP网页具有6大特点。ASP是Active Server Page的缩写,意为“活动服务器网页”。ASP是微软公司开发的代替CGI脚本程序的一种应用,它可以与数据库和其它程序进行交互,是一种简单、方便的编程工具。ASP的网页文件的格式是.asp,现在常用于各种动态网站中。 ASP是一种服务器端脚本编写环境,可以用来创建和运行动态网页或web应用程序。ASP网页可以包含HTML标记、普通文本、脚本命令以及COM组件等。利用ASP可以向网页中添加交互式内容(如在线表单),也可以创建使用HTML网页作为用户界面的web应用程序。 与HTML相比,ASP网页具有以下特点:

    (1)利用ASP可以实现突破静态网页的一些功能限制,实现动态网页技术;

    (2)ASP文件是包含在HTML代码所组成的文件中的,易于修改和测试;

    (3)服务器上的ASP解释程序会在服务器端制定ASP程序,并将结果以HTML格式传送到客户端浏览器上,因此使用各种浏览器都可以正常浏览ASP所产生的网页;

     (4)ASP提供了一些内置对象,使用这些对象可以使服务器端脚本功能更强。例如可以从web浏览器中获取用户通过HTML表单提交的信息,并在脚本中对这些信息进行处理,然后向web浏览器发送信息;

      (5)ASP可以使用服务器端ActiveX组建来执行各种各样的任务,例如存取数据库、发现哦那个Email或访问文件系统等。

      (6)由于服务器是将ASP程序执行的结果以HTML格式传回客户端浏览器,因此使用者不会看到ASP所编写的原始程序代码,可放置ASP程序代码被窃取。

 ASP是一种类似HTML(Hypertext Markup Language超文本标识语言)、Script与CGI(Common GAteway Interface

      通用网关接口)的结合体,但是其运行效率却比CGI更高、程序编制也比HTML更方便且更有灵活性,程序安全及保密性也比Script好。如果您是第一次接触互连网(Internet),那么您可能不很了解上述名词,以下对各种名词加以解释并说明它们之间的区别。 HTML(Hypertext Markup

    Language)是一种超文本标识语言,文件通过这种格式可以在互连网上载送浏览,用户只要使用网页浏览器工具就可以浏览这些文件,目前比较常用的工具包括Microsoft  Internet Explorer,Netscape

     Communicator等,由于HTML文件都是由标签(tag)所组成,因此它比较适合制作静态网页,再者,由于先天上的限制HTML是无法直接存取数据库的,所以存取数据库的工作大多是依靠CGI来处理。ASP不但可以包含HTML标签,也可以直接存取数据库及使用无限扩充的ActiveX控件,因此在程序编制上要比HTML方便而且更富有灵活性。 CGI(Common Gateway

    Interface)是一种共用网关接口,它可以称之为一种机制.因此您可以使用不同的程序编写适合的CGI程序,这些程序语言包括Visual

     Basic、Delphi或C/C++等,您将已经写好的程序放在WEB服务器的计算机上运行,再将其运行结果通过WEB服务器传输到客户端的浏览器上。事实上,这样的编制方式比较困难而且效率低下,因为你每一次修改程序都必须重新将CGI程序编译成可执行文件。而ASP与Script(脚本)的编写方式非常类似,它完全不需要重新编译成可执行文件就可以直接运行,再者ASP内置的ADO组件,允许用户通过客户端浏览器存取各种各样的数据库。此外,ASP与CGI最大的不同在于对象向导和组件重用,ASP除了内置的Request对象、Response对象、Server对象、Session对象、Application对象、ObjectContext对象等基本对象外,另外可以允许用户以外挂的方式使用ActiveX控件。当然,ASP本身也提供了多个ActiveX控件供使用,这些组件包括广告轮显组件、文件存取组件、文件连接组件几数据库存取组件等,这些大量扩充且重复使用的组件使ASP的功能远大于CGI。

    Script(脚本)是由一组可以在WEB服务器或客户端浏览器运行的命令组合而成,目前在网页编制上比较流行的脚本语言包括

VBScript,JavaScript。这些脚本大都是在客户端运行,因此,客户端可以很清楚的取得脚本的内容。所以,就安全性而言,这些客户端的脚本语言的确有危险。ASP虽然具有脚本语言的方便性,但由于他是在WEB服务器端运行,运行后再将运行结果以HTML格式传送至客户端的浏览器。因此ASP与一般的脚本语言相比,要安全的多。

归纳出ASP的特点:

        ASP可以和HTML或其它脚本语言(VBScript,JavaScript)相互嵌套

        ASP是一种在WEB服务器端运行的脚本语言,程序代码安全保密

        ASP以对象为基础,因此可以使用ActiveX控件继续扩充其功能

        ASP内置ADO组件,因此可以轻松的存取各种数据库

        ASP可以将运行结果以HTML的格式传送至客户端浏览器,因而可以适用与各种浏览器

3.2 ASP的新功能:

Active Server Pages 在功能方面有所增强,更易于开发应用程序。

    Microsoft 脚本调试程序。 您可以使用脚本调试程序调试 .asp 文件。请参阅 调试 ASP 脚本

    事务性脚本。 ASP 页和页中使用的对象可以运行于事务环境之下。在页上的全部工作只有两种结果:提交或终止。事务可以保护应用程序免于因失败而导致数据丢失。请参阅 创建事务性脚本。

    管理工具。 许多应用程序设置可在 Internet 服务管理器上进行,这是 Internet Information Server 和 Personal Web Server(在 Windows NT Workstation 上)的管理工具。请参阅 配置 ASP 应用程序。

    隔离 ASP 应用程序。 您可以隔离 ASP 应用程序以便它们能在 Web 服务器上独立的内存空间内运行。万一某个应用程序失败时,可以保护其他应用程序和 Web 服务器。它也使您可以在不停止 Web 服务器的情况下,停止一个应用程序或从内存中卸载其组件。请参阅 隔离应用程序.

    文件上载。 浏览器可以通过 Posting Acceptor 应用程序将文件上载到 Web 服务器。可以编写 ASP 脚本来发送带有从 Posting Acceptor 传来的信息的 email,如每一个上载文件的位置和名称。请参阅 Posting Accepter 文档(在 Microsoft Site Server Express 的目录表中)。

    新的 ASP 组件。 ASP 提供了新的基础组件。有关概述请参阅 ActiveX 组件。

     应用程序根目录的改变。 ASP 应用程序的根目录在您的 Web 站点上可以是物理目录。以前,根目录必须映射为虚拟目录。现在可以用 Internet 服务管理器指示 ASP 应用程序的根目录。请参阅 创建应用程序。必须将 .asp 文件置于应用程序树中,Web 服务器才能检测文件的改变并且自动重装它们。

     支持 Internet Explorer 4.0 通道和 Web 预测。 当 ASP 要发送包含通道定义命令的文件时,它会自动告诉 Internet Explorer 4.0。使用 ASP 很容易就能生成通道定义 (.cdf) 文件。

     支持 HTTP 1.1 协议。 Internet Information Server 和 Personal Web Server 支持 HTTP 1.1 协议。在响应支持 HTTP 1.1 的浏览器(例如 Internet Explorer 4.0)时,这一支持可使 ASP 利用新协议的高效率。例如,当向浏览器返回页的时候,ASP 使用大块转换编码以提高网络效率。

3.3 使用变量和常量:

变量是计算机内存中已命名的存储位置,其中包含了数字或字符串等数据。变量包含的信息被称为变量的值。变量使用用户便于理解脚本操作的名称为用户提供了一种存储、检索和操作数据的途径。

声明和命名变量

    命名和声明变量应遵循脚本语言的规则及指导。即使在使用变量前不需要去声明变量,也应养成在编程时声明变量的良好习惯,因为这样有助于防止错误发生。声明一个变量意味着告诉脚本引擎,有一个特定名称的变量,这样就可以在脚本中引用该变量。

VBScript

     VBScript 并不需要声明变量,但在使用所有变量前声明它们是一种好的脚本书写习惯。要在 VBScript 中声明变量,请用 Dim、 Public 或 Private 语句。例如:

<% Dim UserName %>

     可以在需要显式声明变量的 .asp 文件中用 VBScript Option Explicit 语句。Option Explicit 必须在任何一个 ASP 指令之后及任何一个 HTML 文本或脚本命令之前出现。该语句仅影响用 VBScript 书写的 ASP 命令,而不会影响 JScript 命令。

关于这些命令的详细信息,请参阅 VBScript 语言参考。

JScript

     Microsoft JScript 仅当变量为本地过程变量时才需声明,但在使用所有变量前声明它们是一种好的脚本书写习惯。要声明一个变量,请使用 var 语句。例如:

<% var UserName; %>

有关 var 语句的详细信息,请参阅 JScript 语言参考。

变量作用域

        变量的作用域即生命期,决定哪些脚本命令可访问变量。在过程内部声明的变量具有局部作用域。每执行一次过程,变量就被创建然后消亡。而过程外部的任何命令都不能访问它。在过程外部声明的变量具有全局作用域,其值能被 ASP 页上的任何脚本命令访问和修改。

         声明变量时,局部变量和全局变量可以有相同的名称。而改变其中一个的值并不会改变另一个的值。如果没有声明变量,则可能不小心会改变一个全局变量的值。例如,以下脚本命令返回值 1,虽然有两个名为 Y 变量:

<%

Dim Y

Y = 1

Call SetLocalVariable

Response.Write Y

Sub SetLocalVariable

Dim Y

Y = 2

End Sub

%>

        由于变量没有显式声明,以下的脚本命令将返回 2。当过程调用将 Y 设置为 2 时,脚本引擎认为该过程是要修改全局变量:

<%

Y = 1

Call SetLocalVariable

Response.Write Y

Sub SetLocalVariable

Y = 2

End Sub

%>

      养成显式声明所有变量的编程习惯可以避免许多问题。尤其在当您用 #include 语句将文件包含进 ASP 主页时,就显得更为重要。一个独立文件中被包含的脚本是被当作整个包含它的文件的一部分来处理的。用不同的名称来命名主脚本和被包含脚本中用到的变量,这容易被遗忘,除非声明变量。

为变量赋予会话或应用程序作用域

     全局变量仅在单个 ASP 页中可用,要使它在单个 ASP 页之外可用,就必须为变量赋予会话或应用程序作用域。会话作用域变量对一个用户所请求的 ASP 应用程序中的所有页都是可用的。应用程序作用域变量也如此。对单个用户来说,会话变量是存储信息的最佳途径,例如,首选项、用户名或用户标识。对于一个特殊应用程序的所有用户,应用程序作用域是存储信息的最佳途径,例如,应用程序特定的问候语或应用程序所需的初始值。

ASP 提供两个内建对象来让您存储变量:Session 对象和 Application 对象。

      您也可以创建具有会话或应用程序作用域的对象实例。详细信息,请参阅 设置对象作用域。

会话作用域

      要为变量赋予会话作用域,将该变量存储到 Session 对象中即可,方法是为该对象的已命名条目指派一个值。例如,以下命令将两个新的变量存储到 Session 对象中。

<%

Session("FirstName") = "Jeff"

Session("LastName") = "Smith"

%>

     要 Session 对象中检索信息,可以用输出指令 (<%=) 或 Response.Write 访问已命名的条目。以下示例用输出指令显示 Session("FirstName") 的当前值:

Welcome <%= Session("FirstName") %>

         可在 Session 对象中存储用户首选项,然后就可以访问这些首选项,从而决定将哪一页返回给用户。例如,您可以允许用户在应用程序的第一页指定纯文本内容,然后将这一选择应用到用户在该应用程序中访问的所有后续页。

<% If Session("ScreenResolution") = "Low" Then %>

This is the text version of the page.

<% Else %>

This is the multimedia version of the page.

<% End If %>

应用程序作用域

     要为变量赋予应用程序作用域,将该变量存储到 Application 对象中即可,方法是为该对象的已命名条目指派一个值。例如,以下命令将一个应用程序特定的问候语存储到Application 对象中:

<% Application("Greeting") = "Welcome to Exploration Air" %>

     要从 Application 对象中检索信息,可以使用 ASP 输出指令 (<%=) 或 Response.Write 从该应用程序的任意后续页中访问已命名条目。以下示例用输出指令显示 Application("Greeting") 的值:

<%= Application("Greeting") %>

使用常量

    常量是用来代替一个数或字符串的名称。一些随 ASP 提供的基本组件,例如 ActiveX Data Objects (ADO),定义了您在脚本中可以使用的常量。组件可在一个组件类型库中声明常量,组件类型库是一个包含 ActiveX 组件所支持的对象和类型的信息的文件。一旦在 Global.asa 文件中声明了一个类型库,您就可以在该应用程序的任意页中使用已定义的常量。

  可在 Global.asa 中用 <METADATA> 标记为应用程序声明类型库。例如,要声明 ADO 类型库,可用以下语句:

<!--METADATA TYPE="typelib"

FILE="c:\program files\common files\system\ado\msado15.dll"

-->

这样,您就可以在与 Global.asa 文件相同的应用程序的中使用 ADO 常量。在下面的示例中,adOpenKeyset 和 adLockOptimistic 是 ADO 常量:

'Create and Open Recordset Object

Set RsCustomerList = Server.CreateObject("ADODB.Recordset")

RsCustomerList.ActiveConnection = OBJdbConnection

RsCustomerList.CursorType = adOpenKeyset

RsCustomerList.LockType = adLockOptimistic

有关 <METADATA> 标记的参考信息,请参阅 TypeLibrary 声明。

        在以前版本的 ASP 中,一些组件在文件中提供常量定义,每个使用那些组件的 ASP 文件必须包含该文件。用 #include 指令来包含常量定义的用法仍被支持,但使用类型库通常更方便并且能使脚本更易于升级。在以后版本的 ASP 中,组件可能将不再提供常量定义文件。

        您可以定义自己的常量。在 VBScript 中,用 Const 语句,在 JScript 中,用 var 语句。如果在多个 ASP 页中使用常量,可在独立的文件中放置常量,然后将其包含进每一个使用该常量的 ASP 文件中去。

第四章:详细计划

3.1 数据库应用系统开发简介

一个成功的信息管理系统,是建立在许多条件之上的,而数据库是其中一个非常重要的条件和关键技术。

信息管理系统所涉及的数据库设计分五个步骤:数据库需求分析、概念设计、逻辑设计、物理设计与加载测试。

(1) 数据库需求分析的任务是将业务管理单证流化为数据流,划分主题之间的边界,绘制出DFD图,并完成相应的数据字典。

(2) 概念设计的任务是从DFD出发,绘制出本主题的实体-关系图,并列出各个实体与关系的纲要表。

(3) 逻辑设计的任务是从E-R图与对应的纲要表出发,确定各个实体及关系的表名属性。

(4) 物理设计的任务是确定所有属性的类型、宽度与取值范围,设计出基本表的主键,将所有的表名与字段名英文化(现在很多软件能支持中文字段,如MS SQL Server,我就是用的中文字段名),实现物理建库,完成数据库物理设计字典。

(5) 加载测试工作贯穿于程序测试工作的全过程,整个录入、修改、查询、处理工作均可视为对数据库的加载测试工作。

要设计出一个好的信息管理系统数据库,除满足系统所要求的功能外,还必须遵守下列原则:

² 基本表的个数越少越好。

² 主键的个数越少越好。键是表间连接的工具,主键越少,表间的连接就越简单。

² 字段的个数越少越好。

² 所有基本表的设计均应尽量符合第三范式。

数据库的设计中,如何处理多对多的关系和如何设计主键,是两个有着较大难度、需要重点考虑的问题。下面我们着重从SQL应用、数据库设计范式和查询优化等方面来分析本课题的系统关键技术和实现难点并加以解决。

3.1  数据库系统设计及范式分析

信息系统的主要任务是通过大量的数据获得管理所需要的信息,这就必须存储和管理大量的数据。因此建立一个良好的数据组织结构和数据库,使整个系统都可以迅速、方便、准确地调用和管理所需的数据,是衡量信息系统开发工作好坏的主要指标之一。

3.1.1 数据库系统设计

数据库设计主要是进行数据库的逻辑设计,即将数据按一定的分类、分组系统和逻辑层次组织起来,是面向用户的。数据库设计时需要综合企业各个部门的存档数据和数据需求,分析各个数据之间的关系,按照DBMS提供的功能和描述工具,设计出规模适当、正确反映数据关系、数据冗余少、存取效率高、能满足多种查询要求的数据模型。

数据库设计的步骤是:

(1) 数据库结构定义:目前的数据库管理系统(DBMS)有的是支持联机事务处理CLTP(负责对事务数据进行采集、处理、存储)的操作型DBMS,有的可支持数据仓库、有联机分析处理CLAP(指为支持决策的制定对数据的一种加工操作)功能的大型DBMS,有的数据库是关系型的、有的可支持面向对象数据库。针对选择的DBMS,进行数据库结构定义。

(2) 数据表定义:数据表定义指定义数据库中数据表的结构,数据表的逻辑结构包括:属性名称、类型、表示形式、缺省值、校验规则、是否关键字、可否为空等。关系型数据库要尽量按关系规范化要求进行数据库设计,但为使效率高,规范化程度应根据应用环境和条件来决定。数据表设计不仅要满足数据存储的要求,还要增加一些如反映有关信息、操作责任、中间数据的字段或临时数据表。

(3) 存储设备和存储空间组织:确定数据的存放地点、存储路径、存储设备等,备份方案,对多版本如何保证一致性和数据的完整性。

(4) 数据使用权限设置:针对用户的不同使用要求,确定数据的用户使用权限,确保数据安全。

(5) 数据字典设计:用数据字典描述数据库的设计,便于维护和修改。

为了更好地组织数据和设计出实际应用数据库,应该注意如下问题:

规范化地重组数据结构:对数据进行规范化表达,这在后面将会具体讨论。

关系数据结构的建立:在进行了数据基本结构的规范化重组后,还必须建立整体数据的关系结构。这一步设计完成后数据库和数据结构设计工作基本完成,只待系统实现时将数据分析和数据字典的内容代入到所设计的数据整体关系结构中,一个规范化数据库系统结构就建立起来了。

建立关系数据结构涉及三方面内容:确定关联的关键指标项并建立关联表;确定单一的父系记录结构;建立整个数据库的关系结构。

(1)链接关系的确定

在进行了上述数据规范化重组后,已经可以确保每一个基本数据表(我们简称为表)是规范的,但是这些单独的表并不能完整地反映事物,通常需要通过指标体系整体指标数据才能完整全面地反映问题。也就是说在这些基本表的各宇段中,所存储的是同一事物不同侧面的属性。那么计算机系统如何能知道哪些表中的哪些记录应与其它表中的哪些记录相对应,它们表示的是同一个事物呢?这就需要在设计数据结构时将这种各表之间的数据记录关系确定下来。这种表与表之间的数据关系一般都是通过主或辅关键词之间的连接来实现的。因为在每个表中只有主关键词才能唯一地标识表中的这一个记录值(因为根据第三范式的要求,表中其它数据字段函数都依赖于主关键词),所以将表通过关键词连接就能够唯一地标识出某一事物不同属性在不同表中的存放位置。

(2)确定单一的父子关系结构

所谓确定单一的父系关系结构就是要在所建立的各种表中消除多对多(以下用M:N来表示)的现象,即设法使得所有表中记录之间的关系呈树状结构(只能由一个主干发出若干条分支,而不能有若干条主干交错发出若干条分支状况)。所谓的“父系”就是指表的上一级关系表。消除多对多关系可以借助于E-R图的方法来解决,也可以在系统分析时予以注意,避免这种情况的发生。

消除这种M:N情况的办法也很简单,只需在二表之间增加一个表,则原来M:N的关系就改成了M:1,1:N的关系了。

确定数据资源的安全保密属性:

一般DBMS都提供给我们自己定义数据安全保密性的功能。系统所提供的安全保密功能一般有8个等级(0-7级),4种不同方式(只读、只写、删除、修改),而且允许用户利用这8个等级的4种方式对每一个表自由地进行定义。

定义安全保密性的方法一般有如下几种:

a.原则上所有文件都定义为4级,个别优先级特别高的办公室(终端或微机的入网账号)可定义高于4级的级别,反之则定义为低于4的级别。

b.统计文件(表)和数据录入文件一般只对本工作站定义为只写方式,对其它工作站则定义为只读方式。

c.财务等保密文件一般只对中工作站(如财务科等)定义为可写、可改、可删除方式,对其它工作站则定义为只读方式,而且不是每个人都能读,只有级别相同和高级别者才能读。

2.1.2  数据库设计范式分析

建立起一个良好的数据指标体系,是建立数据结构和数据库的最重要的一环。一个良好的数据指标体系是建立DB的必要条件,但不是充分条件。我们完全可以认为所建指标体系中的一个指标类就是关系数据库中的一个基本表,而这个指标类下面的一个个具体指标就是这个基本表中的一个字段。但如果直接按照这种方式建库显然还不能算最佳。对于指标体系中数据的结构在建库前还必须进行规范化的重新组织。

a.  数据组织的规范化形式

在数据的规范化表达中,一般将一组相互关联的数据称为一个关系(relation),而在这个关系下的每个数据指标项则被称为数据元素(data element),这种关系落实到具体数据库上就是基本表,而数据元素就是基本表中的一个字段(field)。规范化表达还规定在每一个基本表中必须定义一个数据元素为关键字(key),它可以唯一地标识出该表中其它相关的数据元素。在规范化理论中表是二维的,它有如下四个性质:

l 在表中的任意一列上,数据项应属于同一个属性(如图中每一列都存放着不同合同记录的同一属性数据)。

l 表中所有行都是不相同的,不允许有重复组项出现(如图中每一行都是一个不同的合同记录)。

l 在表中,行的顺序无关紧要(如图中每行存的都是合同记录,至于先放哪一个合同都没关系)。

l 在表中,列的顺序无关紧要,但不能重复(如图中合同号和合同名谁先谁后都没关系,但二者不可重复或同名)。

在对表的形式进行了规范化定义后,数据结构还有五种规范化定义,定名为规范化模式,称为范式。在这五种范式中,一般只用前三种,对于常用系统就足够了。而且这五种范式是“向上兼容”的,即满足第五范式的数据结构自动满足一、二、三、四范式,满足第四范式的数据结构自动满足第一、二、三范式,……,依此类推。

第一范式(first normal form,简称1st NF)就是指在同一表中没有重复项出现,如果有则应将重复项去掉。这个去掉重复项的过程就称之为规范化处理。在本文所讨论的开发方法里,1st NF实际上是没有什么意义的。因为我们按规范化建立的指标体系和表的过程都自动保证了所有表都满足1st NF。

第二范式(second normal form,简称 2nd NF)是指每个表必须有一个(而且仅一个)数据元素为主关键字(primary key),其它数据元素与主关键字一一对应。例如,在图l9.7中如果我们将合同号定义为主关键字(其它数据元素中的记录数据都有可能重名,故不能作为主关键字),故只要知道了一个合同记录的合同号,就可以唯一地在同一行中找到该合同的任何一项具体信息。通常我们称这种关系为函数依赖(functional depEndence)关系。即表中其它数据元素都依赖于主关键字,或称该数据元素唯一地被主关键字所标识。

第三范式(third normal form,简称 3rd NF)就是指表中的所有数据元素不但要能够唯一地被主关键字所标识,而且它们之间还必须相互独立,不存在其它的函数关系。也就是说对于一个满足了 2nd NF的数据结构来说,表中有可能存在某些数据元素依赖于其它非关键宇数据元素的现象,必须加以消除。

为防止数据库出现更新异常、插入异常、删除异常、数据冗余太大等现象,关系型数据库要尽量按关系规范化要求进行数据库设计。

3.3  SQL语言介绍

3.3.1  SQL基础

SQL(Structured Query Language,结构查询语言)是一个功能强大的数据库语言。SQL通常使用于数据库的通讯。ANSI(美国国家标准学会)声称,SQL是关系数据库管理系统的标准语言。SQL语句通常用于完成一些数据库的操作任务,比如在数据库中更新数据,或者从数据库中检索数据。使用SQL的常见关系数据库管理系统有:Oracle、 Sybase、 Microsoft SQL Server、 Access、 Ingres等等。虽然绝大多数的数据库系统使用SQL,但是它们同样有它们自立另外的专有扩展功能用于它们的系统。但是,标准的SQL命令,比如"Select"、 "Insert"、 "Update"、 "Delete"、 "Create"和 "Drop"常常被用于完成绝大多数数据库的操作。MS SQL Server 就是用的Transact- SQL。

SQL语言有着非常突出的优点,主要是:

n 非过程化语言

n 统一的语言

n 是所有关系数据库的公共语言

非过程化语言:SQL是一个非过程化的语言,因为它一次处理一个记录,对数据提供自动导航。SQL允许用户在高层的数据结构上工作,而不对单个记录进行操作,可操作记录集,所有SQL 语句接受集合作为输入,返回集合作为输出。SQL的集合特性允许一条SQL语句的结果作为另一条SQL语句的输入。

SQL不要求用户指定对数据的存放方法, 这种特性使用户更易集中精力于要得到的结果;所有SQL语句使用查询优化器,它是RDBMS的一部分,由它决定对指定数据存取的最快速度的手段,查询优化器知道存在什么索引,在哪儿使用索引合适,而用户则从不需要知道表是否有索引、有什么类型的索引。

统一的语言:SQL可用于所有用户的DB活动模型,包括系统管理员、数据库管理员、 应用程序员、决策支持系统人员及许多其它类型的终端用户。

SQL为许多任务提供了命令,其中包括:

n 查询数据

n 在表中插入、修改和删除记录

n 建立、修改和删除数据对象

n 控制对数据和数据对象的存取

n 保证数据库一致性和完整性

以前的数据库管理系统为上述各类操作提供单独的语言,而SQL 将全部任务统一在一种语言中。

所有关系数据库的公共语言:由于所有主要的关系数据库管理系统都支持SQL语言,用户可将使用SQL的技能从一个RDBMS(关系数据库管理系统)转到另一个,所有用SQL编写的程序都是可以移植的。

3.3.2  SQL语句

SQL功能强大,是一种完备的数据处理语言,不仅用于数据库查询,而且用于数据库中的数据修改和更新,概括起来,它可以分成以下几组:

DML(Data Manipulation Language,数据操作语言):用于检索或者修改数据;

DDL(Data Definition Language,数据定义语言): 用于定义数据的结构,比如 创建、修改或者删除数据库对象;

DCL(Data Control Language,数据控制语言):用于定义数据库用户的权限。

DML组可以细分为以下的几个语句:

SELECT:用于检索数据;

INSERT:用于增加数据到数据库;

UPDATE:用于从数据库中修改现存的数据;

DELETE:用于从数据库中删除数据。

DDL语句可以用于创建用户和重建数据库对象。下面是DDL命令:

CREATE TABLE,ALTER TABLE,DROP TABLE,CREATE INDEX,DROP INDEX

下面是一个简单SQL语句的例子:

我们使用SQL语句来从Book中检索‘借书证号’为‘000001’的借阅者姓名:

SELECT 姓名  FROM  Book   WHERE 借书证号 = ‘000001’

2.2.2.1 DDL与DML

数据定义语言DDL:它是用来创建和修改数据库结构的一种语句,包括 Create、Alter和Drop 语句。

数据操作语言DML:包括数据查询与数据更新。数据查询主要是由Select语句完成,这一点不再赘述。而数据更新所造成的风险大大超过数据查询。数据库管理系统必须在更改期内保护所存储的数据的一致性,确保有效的数据进入数据库,数据库必须保持一致性,DBMS还必须协调多用户的并行更新,以确保用户和它们的更改不至于影响其它用户的作业。

用于修改数据库内容的 SQL 语句主要有以下三个:

(1)  Insert,向一个表中加入新的数据行

(2)  Delete,从一个表中删除数据行

(3)  Update,更改数据库中已经存在的数据

Insert标准语法:

INSERT INTO  table_name (col1, col2...)  VALUES(value1, value2...)

下例要将借书证号为‘000001’作为一个新的借书情况加入借书情况表OWNER中

 Insert Into

 owner (借书证号,图书编号,借书日期)

  values (‘000001’,‘00000001’,‘2002-9-12’)

Insert 语句还可以将多行数据添加到目标表中去,在这种形式的 Insert 语句中,新行的数据值不是在语句正文中明确地指定的,而是语句中指定的一个数据库查询。添加的值来自数据库自身的行,在某些特定的状态下,这是非常有用的。多行 Insert 语句为拷贝数据提供了一种紧凑而高效的方法,但我在自已做的图书管理系统中没有使用这种方法,我在系统中是使用循环依照上面的用法来完成多个记录的插入。

Update语句用于更新单表中选定行的一列或多列的值。要更新的目标表在语句中定义,Set子句则指定要更新哪些列并计算它们的值。Update语句总是包含Where语句,而且Update语句比较危险,所以您必须明确地认识到Where语句的重要性,Where语句被用来指定需要更新的行。

标准语法:

UPDATE table_name

SET columnname1 = value1

[, columname2 = value2]...

WHERE search_condition

Delete 语句标准语法:

DELETE FROM  tablename   WHERE  condition

2.2.2.2 复杂操作实现

在信息管理系统中,我们往往会遇到归类、汇总、映射、索引、子查询等复杂操作,相应的支持与实现如下:

u GROUP BY方法

GROUP BY子句语法为:

SELECT column1, SUM(column2)

FROM "list-of-tables"

GROUP BY "column-list";

这个GROUP BY子句将集中所有的行在一起,它包含了指定列的数据以及允许合计函数来计算一个或者多个列。

在本人的系统中在显示数据时用到了此语句来对查询所得的内容排序然后再显示。

u 组合条件和布尔运算符

以下的SQL语句中就含有组合条件:

SELECT column1, SUM(column2)

FROM "list-of-tables"

WHERE "condition1" AND "condition2";

下面是一个示例:

SELECT 身份描述

FROM ID,user

WHERE ID.身份编号=USER.身份编号 and user.借书证号=’000001’;

这条SQL语句是从user、id表中查找借阅证号为000001的借阅者的身份描述,第三条语句中如果其中有一个条件为假,那么就什么都没有显示。

u UNION子句

有些时候,需要一起浏览多个查询的结果、组合它们的输出,我们可以使用UNION关键字。

结束语:

经过了两个多月的学习和工作,我终于完成了论文。从开始接到论文题目到系统的实现,再到论文文章的完成,每走一步对我来说都是新的尝试与挑战,这也是我在校期间独立完成的最大的项目。在这段时间里,我学到了很多知识也有很多感受

参考文献:

1  雷震甲等,计算机网络,西安电子科技出版社

2. 刘衍绗等,计算机网络,科学出版社

3. 杨孔雨等,计算机网络技术原理,经济科学出版社

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

等天晴i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值