《在线考试系统设计毕业论文.doc》由会员分享,可在线阅读,更多相关《在线考试系统设计毕业论文.doc(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2003届计算机与信息管理专业毕业生论文(设计)课题名称:在线考试系统设计与实现 学生姓名:xxx 指导教师:xxx xxxxxxxxxxxxx 2006 年 x月毕业论文在线考试系统设计与实现摘要:相比传统的考试方式,网络考试系统极大地提高了教学的灵活性,现有许多领域已经有了广泛的应用。网上考试系统的最大优点是可以动态地管理各种考试信息,只要准备好足够大的题库,就可以按照要求自动生成各种试卷,这大大的降低了同学们作弊的可能性,也给了同学们最大的公平感。只要形成一套成熟的题库就可以实现考试的自动化。在各类考试中发挥高效、便捷的作用,能把老师从繁重的工作中解脱出来!关键词:ASP技术 SQL语句
2、 VBScript Access数据库。目录:摘要11.前言22.系统设计相关原理32.1 ASP技术介绍32.2 SQL语句介绍42.3 VBScript介绍43.需求分析43.1 系统需要解决的主要问题43.2 系统应该具备的基本功能54.系统总体设计54.1基本简介54.2 系统结构图64.3试题说明64.4数据库中表的设计64.5功能模块详细设计105.系统实现14小结14参考文献15ASP网上考试系统源码 16一前言:毕业论文是高等教育自学考试本科专业应考者完成本科阶段学业的最后一个环节,它是应考者的总结性独立作业,目的在于总结学习专业的成果,培养综合运用所学知识解决实际问题的能力。
3、从文体而言,它也是对某一专业领域的现实问题或理论问题进行科学研究探索的具有一定意义的论说文。完成毕业论文的撰写可以分两个步骤,即选择课题和研究课题。 首先是选择课题。选题是论文撰写成败的关键。因为,选题是毕业论文撰写的第一步,它实际上就是确定写什么的问题,亦即确定科学研究的方向。如?quot;写什么不明确,怎么写就无从谈起。 教育部自学考试办公室有关对毕业论文选题的途径和要求是为鼓励理论与工作实践结合,应考者可结合本单位或本人从事的工作提出论文题目,报主考学校审查同意后确立。也可由主考学校公布论文题目,由应考者选择。毕业论文的总体要求应与普通全日制高等学校相一致,做到通过论文写作和答辩考核,检
4、验应考者综合运用专业知识的能力。但不管考生是自己任意选择课题,还是在主考院校公布的指定课题中选择课题,都要坚持选择有科学价值和现实意义的、切实可行的课题。选好课题是毕业论文成功的一半。 第一、要坚持选择有科学价值和现实意义的课题。科学研究的目的是为了更好地认识世界、改造世界,以推动社会的不断进步和发展。因此,毕业论文的选题,必须紧密结合社会主义物质文明和精神文明建设的需要,以促进科学事业发展和解决现实存在问题作为出发点和落脚点。选题要符合科学研究的正确方向,要具有新颖性,有创新、有理论价值和现实的指导意义或推动作用,一项毫无意义的研究,即使花很大的精力,表达再完善,也将没有丝毫价值。具体地说,
5、考生可从以下三个方面来选题。首先,要从现实的弊端中选题,学习了专业知识,不能仅停留在书本上和理论上,还要下一番功夫,理论联系实际,用已掌握的专业知识,去寻找和解决工作实践中急待解决的问题。其次,要从寻找科学研究的空白处和边缘领域中选题,科学研究 还有许多没有被开垦的处女地,还有许多缺陷和空白,这些都需要填补。应考者应有独特的眼光和超前的意识去思索,去发现,去研究。最后,要从寻找前人研究的不足处和错误处选题,在前人已提出来的研究课题中,许多虽已有初步的研究成果,但随着社会的不断发展,还有待于丰富、完整和发展,这种补充性或纠正性的研究课题,也是有科学价值和现实指导意义的。 第二、要根据自己的能力选
6、择切实可行的课题。毕业论文的写作是一种创造性劳动,不但要有考生个人的见解和主张,同时还需要具备一定的客观条件。由于考生个人的主观、客观条件都是各不相同的,因此在选题时,还应结合自己的特长、兴趣及所具备的客观条件来选题。具体地说,考生可从以下三个方面来综合考虑。首先,要有充足的资料来源?quot;巧妇难为无米之炊,在缺少资料的情况下,是很难写出高质量的论文的。选择一个具有丰富资料来源的课题,对课题深入研究与开展很有帮助。其次,要有浓厚的研究兴趣,选择自己感兴趣的课题,可以激发自己研究的热情,调动自己的主动性和积极性,能够以专心、细心、恒心和耐心的积极心态去完成。最后,要能结合发挥自己的业务专长,
7、每个考生无论能力水平高低,工作岗位如何,都有自己的业务专长,选择那些能结合自己工作、发挥自己业务专长的课题,对顺利完成课题的研究大有益处。 选好课题后,接下来的工作就是研究课题,研究课题一般程序是:搜集资料、研究资料,明确论点和选定材料,最后是执笔撰写、修改定稿。 第一、研究课题的基础工作-搜集资料。考生可以从查阅图书馆、资料室的资料,做实地调查研究、实验与观察等三个方面来搜集资料。搜集资料越具体、细致越好,最好把想要搜集资料的文献目录、详细计划都列出来。首先,查阅资料时要熟悉、掌握图书分类法,要善于利用书目、索引,要熟练地使用其他工具书,如年鉴、文摘、表册、数字等。其次,做实地调查研究,调查
8、研究能获得最真实可靠、最丰富的第一手资料,调查研究时要做到目的明确、对象明确、内容明确。调查的方法有:普遍调查、重点调查、典型调查、抽样调查。调查的方式有:开会、访问、问卷。最后,关于实验与观察。实验与观察是搜集科学资料数据、获得感性知识的基本途径,是形成、产生、发展和检验科学理论的实践基础,本方法在理工科、医类等专业研究中较为常用,运用本方法时要认真全面记录。 第二、研究课题的重点工作-研究资料。考生要对所搜集到手的资料进行全面浏览,并对不同资料采用不同的阅读方法,如阅读、选读、研读。通读即对全文进行阅读,选读即对有用部分、有用内容进行阅读,研读即对与研究课题有关的内容进行全面、认真、细致、
9、深入、反复的阅读。在研读过程中要积极思考。要以书或论文中的论点、论据、论证方法与研究方法来触发自己的思考,要眼、手、脑并用,发挥想象力,进行新的创造。 在研究资料时,还要做好资料的记录。 第三、研究课题的核心工作明确论点和选定材料。在研究资料的基础上,考生提出自己的观点和见解,根据选题,确立基本论点和分论点。提出自己的观点要突出新创见,创新是灵魂,不能只是重复前人或人云亦云。同时,还要防止贪大求全的倾向,生怕不完整,大段地复述已有的知识,那就体现不出自己研究的特色和成果了。 根据已确立的基本论点和分论点选定材料,这些材料是自己在对所搜集的资料加以研究的基础上形成的。组织材料要注意掌握科学的思维
10、方法,注意前后材料的逻辑关系和主次关系。 第四、研究课题的关键工作执笔撰写。考生下笔时要对以下两个方面加以注意:拟定提纲和基本格式。 拟定提纲包括题目、基本论点、内容纲要。内容纲要包括大项目即大段段旨、中项目即段旨、小项目即段中材料或小段段旨。拟定提纲有助于安排好全文的逻辑结构,构建论文的基本框架。 基本格式:一般毕业论文由标题、摘要、正文、参考文献等4方面内容构成。标题要求直接、具体、醒目、简明扼要。摘要即摘出论文中的要点放在论文的正文之前,以方便读者阅读,所以要简洁、概括。正文是毕业论文的核心内容,包括绪论、本论、结论三大部分。绪论部分主要说明研究这一课题的理由、意义,要写得简洁。要明确、
11、具体地提出所论述课题,有时要写些历史回顾和现状分析,本人将有哪些补充、纠正或发展,还要简单介绍论证方法。本论部分是论文的主体,即表达作者的研究成果,主要阐述自己的观点及其论据。这部分要以充分有力的材料阐述观点,要准确把握文章内容的层次、大小段落间的内在联系。篇幅较长的论文常用推论式(即由此论点到彼论点逐层展开、步步深入的写法)和分论式(即把从属于基本论点的几个分论点并列起来,一个个分别加以论述)两者结合的方法。结论部分是论文的归结收束部分,要写论证的结果,做到首尾一贯,同时要写对课题研究的展望,提及进一步探讨的问题或可能解决的途径等。参考文献即撰写论文过程中研读的一些文章或资料,要选择主要的列
12、在文后。 第五、研究课题的保障工作修改定稿。通过这一环节,可以看出写作意图是否表达清楚,基本论点和分论点是否准确、明确,材料用得是否恰当、有说服力,材料的安排与论证是否有逻辑效果,大小段落的结构是否完整、衔接自然,句子词语是否正确妥当,文章是否合乎规范。 总之,撰写毕业论文是一种复杂的思维活动,对于缺乏写作经验的自考生来说,确有一定的难度。因此,考生要学习学习再学习,实践实践再实践,虚心向指导教师求教.二系统设计相关原理:2.1ASP技术介绍:Microsoft Active Server Pages 即我们所称的 ASP ,其实是一套微软开发的服务器端脚本环境, ASP 内含于 IIS 3.
13、0 和 4.0 之中 , 通过 ASP 我们可以结合 HTML 网页、 ASP 指令和 ActiveX 元件建立动态、交互且高效的 WEB 服务器应用程序。有了 ASP 你就不必担心客户的浏览器是否能运行你所编写的代码,因为所有的程序都将在服务器端执行,包括所有嵌在普通HTML 中的脚本程序。当程序执行完毕后,服务器仅将执行的结果返回给客户浏览器,这样也就减轻了客户端浏览器的负担,大大提高了交互的速度。 以下罗列了 Active Server Pages 所独具的一些特点: 1. 使用 VBScript 、 Jscript 等简单易懂的脚本语言,结合 HTML 代码,即可快速地完成网站的应用程
14、序。 2. 无须 compile 编译,容易编写,可在服务器端直接执行。 3. 使用普通的文本编辑器,如 Windows 的记事本,即可进行编辑设计。 4. 与浏览器无关 (Browser Independence), 用户端只要使用可执行 HTML 码的浏览器,即可浏览 Active Server Pages 所设计的网页内容。 Active Server Pages 所使用的脚本语言 (VBScript 、 Jscript) 均在 WEB 服务器端执行,用户端的浏览器不需要能够执行这些脚本语言。 5.Active Server Pages 能与任何 ActiveX scripting 语言
15、相容。除了可使用 VBScript 或 Jscript 语言来设计外,还通过 plug-in 的方式,使用由第三方所提供的其他脚本语言,譬如 REXX 、 Perl 、 Tcl 等。脚本引擎是处理脚本程序的 COM(Component Object Model) 物件。 6.Active Server Pages 的源程序,不会被传到客户浏览器,因而可以避免所写的源程序被他人剽窃,也提高了程序的安全性。 7. 可使用服务器端的脚本来产生客户端的脚本。 8. 物件导向( Object-oriented )。 9.ActiveX Server Components(ActiveX 服务器元件 )
16、具有无限可扩充性。可以使用 Visual Basic 、 Java 、 Visual C+ 、 COBOL 等编程语言来编写你所需要的 ActiveX Server Component 。2.2SQL语句介绍:掌握SQL四条最基本的数据操作语句:Insert,Select,Update和Delete。 练掌握SQL是数据库用户的宝贵财 富。在本文中,我们将引导你掌握四条最基本的数据操作语句SQL的核心功能来依次介绍比较操作符、选择断言以及三值逻辑。当你完成这些学习后,显然你已经开始算是精通SQL了。在我们开始之前,先使用CREATE TABLE语句来创建一个表(如图1所示)。DDL语句对数据库
17、对象如表、列和视进行定义。它们并不对表中的行进行处理,这是因为DDL语句并不处理数据库中实际的数据。这些工作由另一类SQL语句数据操作语言(DML)语句进行处理。SQL中有四种基本的DML操作:INSERT,SELECT,UPDATE和DELETE。由于这是大多数SQL用户经常用到的,我们有必要在此对它们进行一一说明。在图1中我们给出了一个名为EMPLOYEES的表。其中的每一行对应一个特定的雇员记录。请熟悉这张表,我们在后面的例子中将要用到它。INSERT语句用户可以用INSERT语句将一行记录插入到指定的一个表中。例如,要将雇员John Smith的记录插入到本例的表中,可以使用如下语句:
18、INSERT INTO EMPLOYEES VALUES (Smith,John,1980-06-10, Los Angles,16,45000);通过这样的INSERT语句,系统将试着将这些值填入到相应的列中。这些列按照我们创建表时定义的顺序排列。在本例中,第一个值“Smith”将填到第一个列LAST_NAME中;第二个值“John”将填到第二列FIRST_NAME中以此类推。我们说过系统会“试着”将值填入,除了执行规则之外它还要进行类型检查。如果类型不符(如将一个字符串填入到类型为数字的列中),系统将拒绝这一次操作并返回一个错误信息。如果SQL拒绝了你所填入的一列值,语句中其他各列的值也不
19、会填入。这是因为SQL提供对事务的支持。一次事务将数据库从一种一致性转移到另一种一致性。如果事务的某一部分失败,则整个事务都会失败,系统将会被恢复(或称之为回退)到此事务之前的状态。 回到原来的INSERT的例子,请注意所有的整形十进制数都不需要用单引号引起来,而字符串和日期类型的值都要用单引号来区别。为了增加可读性而在数字间插入逗号将会引起错误。记住,在SQL中逗号是元素的分隔符。同样要注意输入文字值时要使用单引号。双引号用来封装限界标识符。对于日期类型,我们必须使用SQL标准日期格式(yyyy-mm-dd),但是在系统中可以进行定义,以接受其他的格式。当然,2000年临近,请你最好还是使用
20、四位来表示年份。既然你已经理解了INSERT语句是怎样工作的了,让我们转到EMPLOYEES表中的其他部分:INSERT INTO EMPLOYEES VALUES (Bunyan,Paul,1970-07-04, Boston,12,70000);INSERT INTO EMPLOYEES VALUES (John,Adams,1992-01-21, Boston,20,100000);INSERT INTO EMPLOYEES VALUES (Smith,Pocahontas,1976-04-06, Los Angles,12,100000);INSERT INTO EMPLOYEES V
21、ALUES (Smith,Bessie,1940-05-02, Boston,5,200000);INSERT INTO EMPLOYEES VALUES (Jones,Davy,1970-10-10, Boston,8,45000);INSERT INTO EMPLOYEES VALUES (Jones,Indiana,1992-02-01, Chicago,NULL,NULL);在最后一项中,我们不知道Jones先生的工薪级别和年薪,所以我们输入NULL(不要引号)。NULL是SQL中的一种特殊情况,我们以后将进行详细的讨论。现在我们只需认为NULL表示一种未知的值。有时,像我们刚才所讨论
22、的情况,我们可能希望对某一些而不是全部的列进行赋值。除了对要省略的列输入NULL外,还可以采用另外一种INSERT语句,如下:INSERT INTO EMPLOYEES( FIRST_NAME, LAST_NAME, HIRE_DATE, BRANCH_OFFICE)VALUE( Indiana,Jones, 1992-02-01,Indianapolis);这样,我们先在表名之后列出一系列列名。未列出的列中将自动填入缺省值,如果没有设置缺省值则填入NULL。请注意我们改变了列的顺序,而值的顺序要对应新的列的顺序。如果该语句中省略了FIRST_NAME和LAST_NAME项(这两项规定不能为空
23、),SQL操作将失败。让我们来看一看上述INSERT语句的语法图:INSERT INTO table (column ,column)VALUES (columnvalue ,columnvalue);和前一篇文章中一样,我们用方括号来表示可选项,大括号表示可以重复任意次数的项(不能在实际的SQL语句中使用这些特殊字符)。VALUE子句和可选的列名列表中必须使用圆括号。SELECT语句SELECT语句可以从一个或多个表中选取特定的行和列。因为查询和检索数据是数据库管理中最重要的功能,所以SELECT语句在SQL中是工作量最大的部分。实际上,仅仅是访问数据库来分析数据并生成报表的人可以对其他SQ
24、L语句一窍不通。SELECT语句的结果通常是生成另外一个表。在执行过程中系统根据用户的标准从数据库中选出匹配的行和列,并将结果放到临时的表中。在直接SQL(direct SQL)中,它将结果显示在终端的显示屏上,或者将结果送到打印机或文件中。也可以结合其他SQL语句来将结果放到一个已知名称的表中。SELECT语句功能强大。虽然表面上看来它只用来完成本文第一部分中提到的关系代数运算“选择”(或称“限制”),但实际上它也可以完成其他两种关系运算“投影”和“连接”,SELECT语句还可以完成聚合计算并对数据进行排序。SELECT语句最简单的语法如下:SELECT columns FROM table
25、s;当我们以这种形式执行一条SELECT语句时,系统返回由所选择的列以及用户选择的表中所有指定的行组成的一个结果表。这就是实现关系投影运算的一个形式。让我们看一下使用图1中EMPLOYEES表的一些例子(这个表是我们以后所有SELECT语句实例都要使用的。而我们在图2和图3中给出了查询的实际结果。我们将在其他的例子中使用这些结果)。假设你想查看雇员工作部门的列表。那下面就是你所需要编写的SQL查询:SELECT BRANCH_OFFICE FROM EMPLOYEES;以上SELECT语句的执行将产生如图2中表2所示的结果。由于我们在SELECT语句中只指定了一个列,所以我们的结果表中也只有一
26、个列。注意结果表中具有重复的行,这是因为有多个雇员在同一部门工作(记住SQL从所选的所有行中将值返回)。要消除结果中的重复行,只要在SELECT语句中加上DISTINCT子句:SELECT DISTINCT BRANCH_OFFICEFROM EMPLOYEES;这次查询的结果如表3所示。现在已经消除了重复的行,但结果并不是按照顺序排列的。如果你希望以字母表顺序将结果列出又该怎么做呢?只要使用ORDER BY子句就可以按照升序或降序来排列结果:SELECT DISTINCT BRANCH_OFFICEFROM EMPLOYEESORDER BY BRANCH_OFFICE ASC;这一查询的结
27、果如表4所示。请注意在ORDER BY之后是如何放置列名BRANCH _OFFICE的,这就是我们想要对其进行排序的列。为什么即使是结果表中只有一个列时我们也必须指出列名呢?这是因为我们还能够按照表中其他列进行排序,即使它们并不显示出来。列名BRANCH_ OFFICE之后的关键字ASC表示按照升序排列。如果你希望以降序排列,那么可以用关键字DESC。同样我们应该指出ORDER BY子句只将临时表中的结果进行排序;并不影响原来的表。假设我们希望得到按部门排序并从工资最高的雇员到工资最低的雇员排列的列表。除了工资括号中的内容,我们还希望看到按照聘用时间从最近聘用的雇员开始列出的列表。以下是你将要
28、用到的语句:SELECT BRANCH_OFFICE,FIRST_NAME, LAST_NAME,SALARY,HIRE_DATEFROM EMPLOYEESORDER BY SALARY DESC, HIRE_DATE DESC;这里我们进行了多列的选择和排序。排序的优先级由语句中的列名顺序所决定。SQL将先对列出的第一个列进行排序。如果在第一个列中出现了重复的行时,这些行将被按照第二列进行排序,如果在第二列中又出现了重复的行时,这些行又将被按照第三列进行排序如此类推。这次查询的结果如表5所示。将一个很长的表中的所有列名写出来是一件相当麻烦的事,所以SQL允许在选择表中所有的列时使用*号:S
29、ELECT * FROM EMPLOYEES;这次查询返回整个EMPLOYEES表,如表1所示。 下面我们对开始时给出的SELECT语句的语法进行一下更新(竖直线表示一个可选项,允许在其中选择一项。):SELECT DISTINCT (column , columns)| *FROM table , tableORDER BY column ASC | DESC , column ASC | DESC ;定义选择标准在我们目前所介绍的SELECT语句中,我们对结果表中的列作出了选择但返回的是表中所有的行。让我们看一下如何对SELECT语句进行限制使得它只返回希望得到的行:SELECT colu
30、mns FROM tables WHERE predicates;WHERE子句对条件进行了设置,只有满足条件的行才被包括到结果表中。这些条件由断言(predicate)进行指定(断言指出了关于某件事情的一种可能的事实)。如果该断言对于某个给定的行成立,该行将被包括到结果表中,否则该行被忽略。在SQL语句中断言通常通过比较来表示。例如,假如你需要查询所有姓为Jones的职员,则可以使用以下SELECT语句:SELECT * FROM EMPLOYEESWHERE LAST_NAME = Jones;LAST_NAME = Jones部分就是断言。在执行该语句时,SQL将每一行的LAST_NAM
31、E列与“Jones”进行比较。如果某一职员的姓为“Jones”,即断言成立,该职员的信息将被包括到结果表中(见表6)。使用最多的六种比较我们上例中的断言包括一种基于“等值”的比较(LAST_NAME = Jones),但是SQL断言还可以包含其他几种类型的比较。其中最常用的为:等于 =不等于 小于 小于或等于 =下面给出了不是基于等值比较的一个例子:SELECT * FROM EMPLOYEESWHERE SALARY 50000;这一查询将返回年薪高于$50,000.00的职员(参见表7)。逻辑连接符有时我们需要定义一条不止一种断言的SELECT语句。举例来说,如果你仅仅想查看Davy Jo
32、nes的信息的话,表6中的结果将是不正确的。为了进一步定义一个WHERE子句,用户可以使用逻辑连接符AND,OR和NOT。为了只得到职员Davy Jones的记录,用户可以输入如下语句:SELECT * FROM EMPLOYEESWHERE LAST_NAME = Jones AND FIRST_NAME = Davy;在本例中,我们通过逻辑连接符AND将两个断言连接起来。只有两个断言都满足时整个表达式才会满足。如果用户需要定义一个SELECT语句来使得当其中任何一项成立就满足条件时,可以使用OR连接符:SELECT * FROM EMPLOYEESWHERE LAST_NAME = Jon
33、es OR LAST_NAME = Smith;有时定义一个断言的最好方法是通过相反的描述来说明。如果你想要查看除了Boston办事处的职员以外的其他所有职员的信息时,你可以进行如下的查询:SELECT * FROM EMPLOYEESWHERE NOT(BRANCH_OFFICE = Boston);关键字NOT后面跟着用圆括号括起来的比较表达式。其结果是对结果取否定。如果某一职员所在部门的办事处在Boston,括号内的表达式返回true,但是NOT操作符将该值取反,所以该行将不被选中。断言可以与其他的断言嵌套使用。为了保证它们以正确的顺序进行求值,可以用括号将它们括起来:SELECT *
34、FROM EMPLOYEESWHERE (LAST_NAME = JonesAND FIRST_NAME = Indiana)OR (LAST_NAME = SmithAND FIRST_NAME = Bessie);SQL沿用数学上标准的表达式求值的约定圆括号内的表达式将最先进行求值,其他表达式将从左到右进行求值。以上对逻辑连接符进行了说明,在对下面的内容进行说明之前,我们再一次对SELECT语句的语法进行更新:SELECT DISTINCT (column , column )| *FROM table , table ORDER BY column ASC | DESC , column
35、 ASC | DESC WHERE predicate logical-connector predicate ;NULL和三值逻辑在SQL中NULL是一个复杂的话题,关于NULL的详细描述更适合于在SQL的高级教程而不是现在的入门教程中进行介绍。但由于NULL需要进行特殊处理,并且你也很可能会遇到它,所以我们还是简略地进行一下说明。首先,在断言中进行NULL判断时需要特殊的语法。例如,如果用户需要显示所有年薪未知的职员的全部信息,用户可以使用如下SELECT语句:SELECT * FROM EMPLOYEESWHERE SALARY IS NULL;相反,如果用户需要所有已知年薪数据的职员的
36、信息,你可以使用以下语句:SELECT * FROM EMPLOYEESWHERE SALARY IS NOT NULL;请注意我们在列名之后使用了关键字IS NULL或IS NOT NULL,而不是标准的比较形式:COLUMN = NULL、COLUMN NULL或是逻辑操作符NOT(NULL)。这种形式相当简单。但当你不明确地测试NULL(而它们确实存在)时,事情会变得很混乱。例如,回过头来看我们图1中的EM-PLOYEES表,可以看到Indiana Jones的工薪等级或年薪值都是未知的。这两个列都包含NULL。可以想象运行如下的查询:SELECT * FROM EMPLOYEESWHE
37、RE GRADE = SALARY;此时,Indiana Jones应该出现在结果表中。因为NULL都是相等的,所以可以想象它们是能够通过GRADE小于等于SALARY的检查的。这其实是一个毫无疑义的查询,但是并没有关系。SQL允许进行这样的比较,只要两个列都是数字类型的。然而,Indiana Jones并没有出现在查询的结果中,为什么?正如我们早先提到过的,NULL表示未知的值(而不是象某些人所想象的那样表示一个为NULL的值)。对于SQL来说意味着这个值是未知的,而只要这个值为未知,就不能将其与其他值比较(即使其他值也是NULL)。所以SQL允许除了在true 和false之外还有第三种类
38、型的真值,称之为“非确定”(unknown)值。如果比较的两边都是NULL,整个断言就被认为是非确定的。将一个非确定断言取反或使用AND或OR与其他断言进行合并之后,其结果仍是非确定的。由于结果表中只包括断言值为“真”的行,所以NULL不可能满足该检查。从而需要使用特殊的操作符IS NULL和IS NOT NULL。UPDATE语句UPDATE语句允许用户在已知的表中对现有的行进行修改。例如,我们刚刚发现Indiana Jones的等级为16,工资为$40,000.00,我们可以通过下面的SQL语句对数据库进行更新(并清除那些烦人的NULL)。UPDATE EMPLOYEESSET GRADE
39、 = 16, SALARY = 40000WHERE FIRST_NAME = Indiana AND LAST_NAME = Jones;上面的例子说明了一个单行更新,但是UPDATE语句可以对多行进行操作。满足WHERE条件的所有行都将被更新。如果,你想让Boston办事处中的所有职员搬到New York,你可以使用如下语句:UPDATE EMPLOYEESSET BRANCH_OFFICE = New YorkWHERE BRANCH_OFFICE = Boston;如果忽略WHERE子句,表中所有行中的部门值都将被更新为New York。UPDATE语句的语法流图如下面所示:UPDAT
40、E tableSET column = value , column = value WHERE predicate logical-connector predicate;DELETE语句DELETE语句用来删除已知表中的行。如同UPDATE语句中一样,所有满足WHERE子句中条件的行都将被删除。由于SQL中没有UNDO语句或是“你确认删除吗?”之类的警告,在执行这条语句时千万要小心。如果决定取消Los Angeles办事处并解雇办事处的所有职员,这一卑鄙的工作可以由以下这条语句来实现:DELETE FROM EMPLOYEESWHERE BRANCH_OFFICE = Los Angele
41、s;如同UPDATE语句中一样,省略WHERE子句将使得操作施加到表中所有的行。DELETE语句的语法流图如下面所示:DELETE FROM tableWHERE predicate logical-connector predicate ;现在我们完成了数据操作语言(DML)的主要语句的介绍。我们并没有对SQL能完成的所有功能进行说明。SQL还提供了许多的功能,如求平均值、求和以及其他对表中数据的计算,此外SQL还能完成从多个表中进行查询(多表查询,或称之为连接)的工作。这种语言还允许你使用GRANT和REVOKE命令控制使用者的数据访问权限。2.3VBScript介绍:VBScript与B
42、asic语言有密切关系。如果你熟悉BASIC,你将会发现VBScript很容易学习和使用。VBScript是Microsoft Visual Basic的简化版本。VBScript是一种脚本语言。这意味着这种语言比BASIC语言的成熟版本容易使用又难于使用。编制简单的程序时,脚本语言是容易使用的。脚本语言的句法比较简单。但是,简单的句法也使开发大的应用程序变得很困难。你可以在HTML文件中直接嵌入VBScript脚本。这使你能够扩展HTML,使它不仅仅是一种页面格式语言。带有VBScript脚本的网页在每次下载到浏览器时都可以是不同的,而且可以对用户的操作作出反应。VBScript是Activ
43、e Sever Pages的缺省语言。你也可以在ASP网页中使用其它脚本语言客户端和服务器端编程语言VBScript既可以作为客户端编程语言,也可以作为服务器端编程语言。客户端编程语言是可以由浏览器解释执行的语言。Java和Jscript/javascript也可以作为客户端编程语言。当一个以这些语言中的任意一种编制的程序被下载到一个兼容的浏览器中时,浏览器将自动执行该程序。客户端编程语言的优点是浏览器完成了所有的工作,这可以减轻服务器的负担。而且客户端程序运行起来比服务器端程序快得多。当一个浏览器的用户执行了一个操作时,不必通过网络对其作出响应,客户端程序就可以作出响应。但是,一般来说,可以
44、解释VBScript脚本的浏览器只有Microsoft Internet Explorer。例如Netscape Navigater将忽略VBScript脚本。这意味着目前没有充分的理由把VBScript作为客户端编程语言。你不应该花费时间来编写只有少数浏览器可以解释的程序。3.需求分析下面就对在线考试系统的设计进行需求分析。3.1系统需要解决的主要问题因为考试是有特定的对象的,所以考生进入系统应该进行身份验证。考生进入考试系统后,需要选择考试科目,所以系统还应有考试科目选择的功能。鉴于考试环境一般为机房,考试者之间的距离很近,为了避免考试做弊,试卷的试题和题量都应是相同的,但试题并不相同。在
45、线考试基于网络环境,试卷应该从服务器的数据库随机抽取试题后动态生成的。另外,系统还应该对考试时间进行控制,时间到了会要求考试者交卷。考试者选择答案提交后,应该由计算机自动判卷,得到成绩后显示出来。考试完毕后,可以返回登录界面或继续考试。3.2系统应该具备的基本功能用户注册:用户可以进行注册,然后登录。用户信息的管理:管理员可以增删用户试题库管理:分科目,对单选、多选两种题型试题库的管理,使试题的增删、编辑更为简便。试卷生成:从试题库里随机抽取试题生成一份原始试卷。考试过程:系统严格控制整个考试过程,实行时间的监控与权限的控制,考生需要在限定的考试时间内交卷。计算机自动阅卷:本系统只考虑客观题,要求计算机能自动阅卷,然后马上显示出考生分数。成绩查阅:考生考完以后,管理员应该能对所有纪录进行查询,并应该可以删除指定纪录。4.系统总体设计4.1基本简介该系统是专门用于用户注册、登录、参加在线考试以及管理员进行试题录入、修改、删除、成绩查询、管理用户的ASP应用程序。它应该具有开放性、方便性和灵活