无纸化考试系统论文

时间:2024.4.27

计算机考试系统的设计与实现

              题    目:  计算机考试系统

              专业班级:               

              姓    名:              

              学    号:                

          指导教师:                

日期:20##-3-23

【摘要

本论文以“计算机考试系统”的开发为背景,论述了计算机考试系统发展的历史及现状。全文共分为系统调查、 系统分析、功能设计、数据库设计、系统实现、 总结、参考文献。本文详细阐述了系统分析、系统设计的方法及其内容,对如何使用VB开发本系统作了较为详细的介绍。本系统包括题库的维护维护、考生的考试模块、评分模块,而且老师和学生可以分别使用不同的用户名进行登录,具有不同的操作权限。

Abstract

This thesis take the development of" the calculator examination system" as the background, discussing the history and the present condition of the calculator examination  system development.The full text is divided into the system inquisition, system analysis, the function design, database design, system realization, tallies up totally, reference.This text was detailed to elaborate that system analysis, method and its contentses of the system design, to how use the development of VB originally the system makes to compare to introduce detailedly.This system includes the examination mold piece, the grade point mold piece of maintenance maintenance, examinee of a database, and the different from student can use respectively user's name of teacher carries on the logging, having the different operation legal power.

【关键词】计算机考试系统  VB6.0  系统功能

【Keywords】The computer examination system   VB6.0  system function

目  录

摘要

关键词

前言

第一章 系统调查------------------------------------------------------------------------------------------3

第二章 系统分析------------------------------------------------------------------------------------------4

第三章 功能设计------------------------------------------------------------------------------------------9

第四章 数据库设计---------------------------------------------------------------------------------------12

第五章 系统实现------------------------------------------------------------------------------------------15

第六章 总结------------------------------------------------------------------------------------------------35

第七章 参考文献------------------------------------------------------------------------------------------35

“科学技术是第一生产力”,是邓小平同志坚持和发展马克思主义关于生产力的理论,于1988年提出的精辟论断。这个论断提示了科学技术在现代社会在的重要作用,为我国社会主义市场经济中科学技术发展指明了方向。科学技术的突飞猛进,给世界生产力的人类经济社会的发展带来了极大的推动。当前,以微电子技术为基础,以计算机、网络和通信技术为主体的信息技术,已渗透到经济的各个领域。信息技术的发展,已给人类经济生活方式带来质的变化。未来的科技发展还将产生新的重大飞跃。

我们作为新世纪的中国人,作为计算机专业的学生,理应为我们国家的发展做出自己应有的一份贡献。在学校里我们学习的都是非常理论的东西,虽然可能有上机的实践,但是确没有面对过一个真正的实际的问题,理论如果离开了理论,就失去了生长的土壤。也没有非常系统的使用过学习到的知识,可以这么说我们的水平可能还没有转化为生产力。如果学习的知识不加于应用,不但不容易透彻的理解理论知识,而且非常的容易忘记。所以我借着这次毕业设计的时候 ,好好的解决一个实际的问题,好好的,全面的运用自己所学的,为自己以后毕业后的工作生活打下一个良好的基础。

在人的一生中,总是要经历许许多多的考试,大到考研究生,小到单元测验。从在校的学生,到已经在社会上工作的人,从为人师的教师,到开出租车的司机,都要经历很多的考试。而现在传统的考试模式已经跟不上现在的发展,所以在这次毕业设计中,我准备做一个考试系统。可能该考试系统比较的简单,但是麻雀虽小,五脏俱全。包括了题库的维护维护、考生的考试模块、评分模块。还是具有一定的使用价值的。

在本系统设计的过程中我以我所学习的东北大学网络学院为设计背景进行设计的.具体的设计过程如以下各章所述.

第一章 系统调查

现在全国无论是政府、企业、学校还是农村的信息化建设都在如火如荼的展开着。信息化建设的一个必然结果就是电脑越来越普及了,现在很多的高中、初中都已经拥有自己的微机房了,甚至发展的比较好的小学也已经配置了不错的电脑。随着计算机技术的不断普及,计算机工作者也越来越多,水平也越来越高 ,同时学校也肯花钱请专门的人员来管理机房,这些就为实行无纸化考试系统提供了硬件条件。

随着计算机技术的发展,考试的方式也在不断的变化着。从最初的考试的时候,人工印刷试卷,到发考卷,然后收卷,然后改卷,然后发布成绩,整个流程相对的比较的复杂,而且涉及的人员较多,不容易协调。手工改卷,在主观题上是有他的优势的,毕竟电脑是没有评测主观题的能力,但是客观题也采用手工修改的话,对于评卷老师来说工作量就非常的大。面对几百份,甚至是上千份的试卷,精力在好、工作在认真的老师也会感觉头疼的。根据计算机的特点,我们该类试题正好可以使用计算机进行处理,于是在一套试题里,客观题和主观题同时存在的情况下,出现了另外一种考试的方法。那就是把主观体和客观题分开,主观题照样在原来的试卷上考试,而客观题则要求学生涂卡。这样客观题的评卷就变的简单了。但是如果考试纯粹考的是客观题,使用这种涂卡的方式,就暴露出了一些缺点了,比如,每回老师还是要下发试卷,上交试卷,封存试卷,这样操作对于老师来说比较的麻烦。还有一点就是考生还要花很长的时间来涂卡,无形间就增加了考试的时间,也就增加了考试的成本。所以现在全国比较流行的是使用无纸化考试系统,每回考试只要使用软盘等等存储介质带题库下来,在计算机上安装一个考试客户端(甚至有些就直接使用windows内置的浏览器就可以了),就可以考试了。考试完毕之后,学生交卷后,评分的时候只要带走一些数据,就可以完全使用电脑修改,评分过程可能也就在一两分钟左右。采取这种方法,不知不觉中就减少了考试时间,降低了考试成本,减少了老师的工作。而且一般情况下,该类考试系统都是使用随机组卷,电脑随机抽卷的,保证了公正性,即使是监考老师也无法干预电脑的随机抽卷。

现在网络发展的非常的快,网络的无地域性也不停的拉近了我们之间的距离。宽带的资费也由刚开始的高不可攀,到现在的平民化。网络正在慢慢的影响着我们的生活方式。不知不觉网络办公,网上购物,都被人们所接受。那么通过internet网进行网络考试如何呢?答案是可能的。该类考试系统现在也已经冒出了很多,采取的基本上是B/S结构的。客户端只要在特定的时间通过浏览器登陆到考试服务器上面去,然后系统会在浏览器上显示出考试的题目,可以说这种模式真正的实现了在家考试。但是这种考试也有一些本身的问题,第一、客户端是通过internet访问服务器的,网络速度和稳定性方面就是个考验。第二、对服务器的要求非常的高,试问,如果有几百个人甚至上网个人同时在线考试的话呢?服务器的负荷是非常大的。网上考试是以后的发展趋势,但是现在还是有些问题存在的。

从以上的调查我们可以总结出一个结论,现在的考试系统越来越简单,越来越网路化,无论是局域网还是internet网。而且无纸化的考试系统越来越流行。这更加坚定了我做这么个考试系统的决心。

第二章 系统分析

参考了很多计算机考试系统,可以看到这些考试系统的特点如下:

2. 1 考试系统的特点

1操作界面和操作方法简单。如果操作过于复杂化的化,老师培训学生考试操作就得很长得时间,这样使用无纸化考试系统可以说是得不偿失。所以操作界面一定要简单,操作方法也一定要简单。

2、提示必须正确,没有歧异。对于参加考试得学生,通常都非常得紧张,可以说是非常得惶恐,非常的怕自己考不好,所以出现提示的时候,如果提示说不明确或者是有歧异,会马上问老师的,这样不但不利于考生的正常发挥 ,而且考场秩序也会非常的混乱。

3、必须有很强的错误处理能力。参加考试的学生,其中可能有很大一部分计算机操作都不是很熟练,不熟练的意思就是可能会乱删文件,可能会做些正常情况下不会去使用的功能。所以一定要防止学生进行这种操作,即使是操作了,也该有相应的错误提示。

4、稳定性。考试系统的稳定性非常非常的重要,必须能够保证正确得考试流程。这表现在考试数据不容易丢失,不会出现一些写入错误等等。总之除非发生硬盘损害等等非可抗的能力,否则必须得保证考生得数据不丢失。如果考试机意外重启,应该也运行考生能够继续做试题。而不是完全重新开始做。

5 、考生考试数据集中管理。所谓考生考试数据集中管理是只一个考场里的考生数据最好是存放在一个地方,而不是存放于各自的考生计算机上。为什么要强调这一点呢?因为如果把考试的数据都存放在下面各自的机器上的时候,监考老师要一个一个的进行收卷,我想这样和下发试卷可能非常的类似,这样也没有发挥出计算机考试的优势。如果直接都存放在服务器上,那么数据采集就非常的简单了,只要直接从服务器上取得就可以了

6 、网络化。现在考试系统的发展就是向网络化发展,从最初的单机,到局域网,到internet网。所以考试系统必须支持网络化操作。

2.2 考试系统主要功能(我的毕业设计只是做了下面的一部分)

一般情况下,整套的考试系统需要如下的模块。

1 、 报名模块

该模块的主要功能是记录每个考生的信息,比如报名日期等等。

2 、 题库维护模块

该模块的主要功能是制作题库使用的。

3 、 考生考试模块

该模块是提供给考生考试使用的,包括答题和交卷等等功能。

4 、 考场数据采集模块

该模块是导出考生的考试信息,评分模块依赖于该考试信息来评分。

5 、 评分模块

评出考生的成绩。

6 、 学生成绩和分析模块

对考生的成绩进行统计分析,比如及格人数是多少,通过率有多少等等。

2.4 开发环境的选择

2.4.1 操作系统的选择

现在主流的操作系统有Windows和linux,最近Linux的发展很快,在界面上的友好度上面已经做的越来越好了,据说在稳定性上面已经超过了Windows操作系统。但是linux操作系统用的比较多的还是服务器的版本,在桌面上的普及始终还是不如windows,而且windows的操作更加的傻瓜化,可以这么说windows操作系统更加的适合于入门的用户,而且我们也知道现在学校里几乎上使用的都是Windows 操作系统,所以使用Windows操作系统变成了我们的首选。Windows操作系统也分为很多种,包括Win95、Win98、Win20##、WinXp、Win2003。虽然win98操作系统发行已经很多年了,但是一直以它的操作方便性深受用户的喜爱,所以我们这里的操作系统当仁不让的选择Win98操作系统

2.4.2 开发工具的选择

现在在市场上,流行的Windows开发工具主要由两个供应商提供,一个是微软公司,另外一个是Borland公司。而这两个公司的最有名的RAD(快速开发工具)为Visual Basic 和Delphi。因为Visual Basic是微软专门为开发Windows程序而设计的,特点是简单易用,开发快速,和Windows结合紧密,语言简单,试想学计算机的谁没有学过Basic语言呢?虽然Delphi功能也很强大,但是考虑到简单性,所以我决定使用Visual Basic。

2.4.2.1 Visual Basic介绍

我们先来了解一下Visual Basic,经过总结我觉得Visual Basic有主要有如下的三个特点:

1、Visual BASIC提供可视化的编程工具

用传统的高级语言编程时,程序的各种功能、用户界面和显示的结果全要由程序语句来实现,这就增加了编程难度。而用Visual BASIC开发应用程序,包括两部分工作:一是设计用户界面,二是编写程序代码。

Visual BASIC向程序设计人员提供图形对象(窗体、控件、菜单等)来进行应用程序的界面设计,例如程序人员可以根据用户的需要轻而易举地在屏幕上画出下图的用户界面。Visual BASIC提供的“工具箱”内存放若干个“控件”,程序设计者可以自由地从工具箱中取出所需控件,放到窗体中的指定位置,而不必为此编写程序。也就是说,屏幕上的用户界面是用Visual BASIC提供的可视化设计工具直接“画”出来的,而不是用程序“写出来的”。

2、程序采用“事件驱动“方式

在设计好用户界面后,第二件事是编写程序。Visual BASIC改变了程序的机制,它没有传统意义上的主程序,而由“事件”来驱动子程序的运行。一般来说,每个子程序要实现的功能是单一的,子程序的规模一般不会太大,也就是说,把原来一个统一控制的、包罗万象的大程序分解为许多个独立的、小规模的子程序,分别由各种“事件”来驱动执行,于是编程难度大大降低了。

3、Visual BASIC融入了最新的计算机技术

Visual BASIC的设计者在Visual BASIC中融入了最新的计算机技术,使得用Visual BASIC编程能充分利用了这些最新的技术,例如在多媒体方面的应用、在Internet 方面的应用等。

总之,Visual BASIC是面向对象的、结构化的计算机语言。Visual BASIC的界面由一些对象组成,每个对象有若干个属性、方法和事件,程序人员的任务是设计这些对象的事件处理过程。Visual BASIC是一种很容易学习并很快就可以熟练掌握的功能强大的编程语言。

2.4.3 数据库的选择

考试系统里有很多的地方需要存取数据,为了能够更好的组织数据,并且使编码更加的简单,决定使用数据库技术来组织所有的数据,包括题库数据和考生在考试的时候的数据。现在市场上主流的数据库分为网路型的数据库和桌面型的数据库。网络型的数据库一般情况下使面向企业级的用户,数据存储比较的稳定,而且安全,数据存储的容量也非常的巨大。而桌面型的数据库一般是面向一些中小型的用户,他们的数据量不是非常的庞大,由于一般情况下,不是通过网络来存取的,所以速度相对来说要快一点,而且价格方面要便宜的多,缺点是数据安全性方面稍差。而本次毕业设计使用的数据库Access2000更是微软Office2000中的一个套件。为了减少成本,而且对于一个考场的考生来说使用Access数据库已经足够,而且减低了整个系统的造价。

1 、 Access简介

作为Microsoft的office套件产品之一,access已经卖出了近900万份,成为世界上最流行的桌面数据库系统。Access与许多优秀的关系数据库一样,可以让你很容易地连接相关的信息而且还对其他的数据库系统有所补充。它能操作其它来源的资料,包括许多流行的PC数据库程序(如dBASE,Paradox,Microsoft FoxPro)和服务器、小型机、大型机上的许多SQL数据库。Access还完全支持Microsoft的OLE技术。

    Access还提供windows操作系统的高级应用程序开发系统。Access与其它数据库开发系统之间相当显著的区别就是:您不用写一行代码,就可以在很短的时间里开发出一个功能强大而且相当专业的数据库应用程序,并且这一愉快的过程是完全可视的!如果您能给它加上简短的VBA代码,那么您的程序决不比专业程序员潜心开发的程序差。

2 、 Access的总体结构

    Access将所有具有名字的东西都成为对象(object),在Access 2000中,最重要的对象有表,查询,窗体,报表,宏和模块。

表 用户定义的存储资料的对象。每一个表都包含有关某个主体的信息。表包括存储不同种类资料的字段(列),而记录(行)则收集特定主体实例的所有信息。

查询 为来自一个或多个表的资料提供定制视图的对象。在Access中,可以利用图形化的实例查询机制(QBE)或通过SQL语句来建立查询。你可以在查询中选择、更新、插入或删除资料,也可以用查询来建立新表。

窗体 窗体是主要的人机接口。大量的操作(几乎所有)都要通过窗体完成。窗体通过运行宏(macro)或Visual Basic for Applicatinns(VBA)过程,来响应大量的事件。Access 2000为我们提供了强大的(同时也是相当方便的向导)来建立标准的Windows窗体。

报表 为格式化、计算、打印选定资料而设计的对象。它是衡量一个优秀的数据库的重要标准(有时甚至是唯一的标准)。

宏 为了响应已定义的事件,需要让Access去执行一个或多个操作,而宏就是对这些操作的结构化的定义对象。它可以让你像堆积木一样建立一个功能强大的程序,而无须写大量的代码。

模块 包括用VBA编码的定制过程的一个对象。模块提供了独立的动作流以捕获错误,而宏做不到。模块能直接响应窗体或报表事件,也可以从应用程序的任何地方被调用。

3 、为何要选择Access

Access 功能强大,使用方便,是开发桌面数据库的最优秀的工具之一。如果你具有下面的情况,就应该考虑选择Access。

1、 我要建立一个数据库系统,却不愿因此而去系统地区学习编程。

2 、我略懂编程,希望能够建立一个专业的数据库系统。

3 、我精通C++,但我发现要用它做许多复杂的报表是一件令人头疼的事。

4 、我有大量的资料要处理,却不会写SQL语句。

5 、我精通多种数据库语言,但我希望工作更轻松一些。

从上面的VB和Access的介绍后,我们知道如果使用这两种软件来开发是个比较不错的选择,所以决定使用这两个软件进行本次的开发和设计。

第三章 功能设计

在经过系统的分析和设计后,我设计了这么一个简化版本的考试系统,功能图如下:

 

3.1 题库维护模块

3.1.1 用户登陆

由于题库设置相当的重要,试想如果谁都能进入该模块进行题库操作的话,那么题库将是非常的危险的.所以有必要对登陆的人员进行控制.

3.1.2 退出系统

退出系统。

3.1.3 套号设置

所谓一套试题,其实就是完整的一份试卷。之所以采取这种套来区分题库里面的内容,一个原因是为了管理方便,另外一个原因是为了后面的随机抽题设计的,随机抽题也是按照套来随机抽题的。也就是说如果有三套,那么每回随机抽卷就是在这三套里进行抽取,当然本系统也有指定一套进行抽题的模式的。

3.1.4 题库内容维护

对于一道选择题来说,是分为题目描述和备选答案两个部分的,这里的题库内容维护,只的就是题目描述的维护,当然也包括题目的正确答案输入和分值的输入。

1 、 题目内容增加

其实就是往题库里增加一道题目。

2 、 题目内容修改

在录入的过程中难免有错误,该功能就是修改题目内容到数据库中去。

3 、 题目内容删除

当题目录入错误的时候,或者是该题目不再使用的时候,就使用该功能,但是当该题目内容下面已有备选答案设置的时候,本系统将不允许删除该题目内容的.

4 、 题库内容浏览

当题目编辑完毕的时候,可以使用该功能对所有的题目进行浏览。

5 、备选答案维护

    每道选择题都有备选答案,该功能就是维护备选答案的

① 备选答案增加

针对某到题目内容,其实就是某道题目,增加一个备选题目。

② 备选答案修改

备选答案录入错误,使用该功能进行修改。

③备选答案删除

备选答案录入错误或者是备选答案不在需要的时候,可以使用该功能进行删除。但是如果该备选答案对应的试题已经在考试的过程中被抽到,将不能删除该备选答案。

6 、 备选答案浏览

通过选择题目来浏览它对应的备选答案。

7 、抽题设置

由于本系统在考试的时候有两种抽题模式,一种是由计算机从题库里随机抽取,也就是说在场的考生可能使用的都是不同的试题。另外一种指定一套试题给考生考,也就是全场所有的考生都是使用一套试题。如果选择了使用一套试题的模式,则从题库里选择一套。

3.2 考生考试模块

1 、 考生登陆

每个考生登陆本系统必须得输入考生的准考证号,在这里系统也将会验证登陆的考生是否已经交过卷了,如果是已经处于已经交卷的状态,则将不能再次登陆到本系统进行考试。

2 、 考生答题

考生使用该功能进行考试

①加载系统抽取的或者是已经指定的套数。

② 加载考生已经做过的试题的考生答案。这样可以防止考生在考生的过程中由于不可抗因素退出系统后,还可以继续进行答题,而不是完全重新开始答题。

③考试答案保存 自动保存考生做过的答案

④显示当前的考生答题的位置,也就是做到哪一道了,总共有多少题。

3 、 考生交卷

本功能是考生答卷的终点,考生交卷了就保证该考生本次考试结束了,也就不能再次进入进行考试了。

3.3 考试评分模块

1 、 考生浏览

浏览所有的登陆本系统考试的考生,包括该考生的交卷状态,做的是哪一套试题。

2  、考生答题浏览

浏览该考生抽取的试题的具体内容

3 、 考生成绩浏览

浏览该考生的每道题的对错,还有得分情况。

4 、考试评分

使用该功能对考生进行评分。

第四章 数据库设计

经过了上面的分析,我们现在已经知道了我们系统的所有具有的功能,也就知道了系统需要存取些什么数据了,接下来我们进行数据库的设计。

4.1 题库主表

该表存储的是题目的主表信息,经过分析,我们可以知道,一道选择题只有一个题目内容(题目描述),一个答案,而会有多个的备选答案,所以我们有必要把题目内容的存储和备选答案分开来存储。表的结构如下:

4.2 题目明细

存储题目的备选答案,正好是前面题库主表的从表。表的结构如下:

4.3 套号

存储套号的信息,自动抽取的时候,就是从这个表里的ID来随机抽取的,而题目主表里的套号也是来自该表的ID,表结构如下:

    4.4 题库设置

   在前面的功能设计中,我们知道本系统有两种抽题的模式,而系统采取的模式就是存在这张表中的。表结构如下:

    4.5 考生

每次考生登陆的时候,系统是会记录考生的信息,考生的考试套号的。而且还要验证该考生是否已经交卷了,都是从该表里读取数据的。该表结构如下:

4.6 考生答案

为了能够了解考生的具体答题信息,并且在考生意外退出后能够重新加载考生的信息,我们需要记录该考生的答案。表结构如下:

4.7题库主表

在设计数据库的时候,我们考虑到系统的可扩展性和数据减少数据库容量的考虑,经常是采取分开几张表存储的方式,比如说前面的题库主表和备选答案的处理就是经常采取的方式。所以我们要想得到所有的信息,或者说是具体的信息,我们往往要借助视图了,题库主表就是采取视图的方式显示,该视图的SQL 语句如下:

SELECT 题库主表.ID, 题库主表.题目编号, 题库主表.题目内容, 题库主表.题目套号, IIf([题目类型]=False,"单选题","多选题") AS 类型, 题库主表.题目答案, 题库主表.题目分值, 题库主表.题目备注  FROM 题库主表;

4.8 评分表

该表是用来显示学生的答题正确于否,以及做的试题是什么,还包括考生的自身信息,可以说是一张非常重要的视图了,该视图的SQL语句如下:

SELECT 题库主表.*, 考生答案.考生答案, 考生答案.准考证号, IIf([考生答案]=[题目答案],"正确","错误") AS 是否正确, IIf([考生答案]=[题目答案],[题目分值],0) AS 得分FROM 题库主表 INNER JOIN 考生答案 ON 题库主表.题目编号 = 考生答案.题目编号;

第五章 系统实现

在经过了前面的功能设计之后,我们进入到了我们的系统实现部分,也就是真正的代码实现阶段了。在经过了前面的铺垫工作以后,这里实现起来思路就相对来说非常的清晰了。下面来分几个重要的模块来说一下设计思路和实现方法,对于一些很显示的我就不在说明了

5.1 ADO技术

在本系统中我们用到了数据库的技术,在VB中,有很多的方法,可以访问数据库,比如比较原始比较底层 的 ODBC,专门为Access数据库设计的DAO,还有专门为了远程设计的RDO。但是现在微软的推崇的数据访问技术是ADO技术

ADO(ActiveX Data Objects)Active数据对象。ADO设计为一种极为简单的格式,通过ODBC的方法同数据库接口。可以用任何一种ODBC数据源,如:SQL Server、Oracle、Access、Excel、文本文件、图形文件和无格式的数据文件。而且ADO访问数据库的代码非常的简单,而且很容易让人理解。最重要的是他能够访问不同的数据库。如果代码写的质量高的话,完全可以使用同一种代码访问不同的数据库。

5.2 VB中的错误处理

系统运行难免有错误,比如说系统的可使用内容不够了,即使我们的代码没有错误,也将不能运行,但是如果不能运行就非法退出的话,我想对于客户是不能接受的,至少也该来个系统内存不足的提示,给客户一些好的建议,我想客户肯定会非常满意的。不知不觉就会提高你产品的形象,必定顾客是上帝,我们不可能一点都不顾客户的感受。所以我们有必要在可能发生错误的地方加上我们错误处理代码,来捕获这种错误了。

VB的错误代码处理非常的简单,简单的来说,就是遇见错误,忽略。另外一种是遇到错误跳出执行。我们来看看典型的两种方式呀

比如有如下的代码:

dim I as Integer

on  error goto Proc_Exit

在这里发生了错误,则会直接跳到Proc_Exit后面的代码执行,那么I=I+1就不执行了

I=I+1

Proc_Exit:

另外一段代码:

dim I as Integer

on  error Resume next

在这里发生了错误,继续执行I=I+1的代码

I=I+1

两种错误处理方法都是有不同的使用的地方的,就看我们如何灵活的掌握了。我在这个系统里主要采用的还是第一种的错误处理。

5.3 套号设置

套号设置是一个基础的设置,要想添加新的一份试卷,首先我们该使用该功能来添加一个套的信息,我们设计了如下的界面:

在文本框里输入套号名称后确定就可以在数据库里添加该套号了,添加成功后,系统会自动转入下一个添加状态,也就是可以接着再添加套号。这里的代码实现如下:

其中确定按钮的代码如下:

Private Sub Command1_Click()

Dim rst As Recordset

On Error GoTo Proc_Exit

    If Len(Text1) > 0 Then

        Set rst = New Recordset

        rst.Open "select * from 套号", pCN, adOpenStatic, adLockBatchOptimistic

        rst.AddNew

        rst![套号名称] = Text1

        rst.UpdateBatch

        Text1 = ""

    End If

Proc_Exit:

    If Err.Number <> 0 Then

        If Err.Number = -2147467259 Then

            MsgBox "套号名称不能重复!", vbInformation

        Else

            MsgBox "发生意外错误,错误号:" & Err.Number & " 错误描述:" & Err.Description, vbInformation

        End If

        Err.Clear

    End If

End Sub

在本段代码里,我就运用了错误处理的代码。由于套号名称是唯一的,所以当用户添加同样的套号名称的时候,就会发生错误,从上面的代码我们知道,这时候的错误代码就是-2147467259。我们捕获了该错误,然后对用户进行提示。最后把该错误清除了。而发生其他的错误时候,我们就把错误给显示出来,这样非常的有利于我们来维护使用我们的系统。

5.4 题库内容维护和备选答案维护

在前面的设计的时候我们已经知道饿了题库内容和备选答案正好是主表和子表的关系,所以有必要把这几个模块一起处理的。所以我设计了一个典型的主表和子表的浏览界面如下:

上面的表格就是题目的内容部分,下面的表格就是该道试题的备选答案的内容。而上面表格列出是哪套试题,取决于在组合框里选择的是哪一套试题了。

我们来了解一下这里的代码实现了,为了充分发挥VB的RAD开发工具的优势,我们这里采取了数据绑定来显示数据和更新数据,整个代码就显的非常的简单了:

首先我们在窗体加载的时候,我们要加载界面的显示内容,我们可以在Form的Load事件里进行这些初始化工作的。比如加载题库套号数据,然后加载该套试题的数据。

Private Sub Form_Load()

    Call InitSubjectSet

    Call InitSubject

End Sub

'' 初始化组合框里的数据

Private Sub InitSubjectSet()

Dim rst As Recordset

Dim i       As Integer

    Set rst = New Recordset

    rst.LockType = adLockBatchOptimistic

    rst.CursorLocation = adUseClient

    rst.CursorType = adOpenStatic

    rst.ActiveConnection = pCN

    rst.Source = "select * from 套号"

    rst.Open

    Me.Combo1.Clear

    For i = 1 To rst.RecordCount

        Me.Combo1.AddItem rst![套号名称]

        Me.Combo1.ItemData(Me.Combo1.ListCount - 1) = rst![ID]

        rst.MoveNext

    Next i

    If Combo1.ListCount > 0 Then

        Combo1.ListIndex = 0

    End If

    Set rst = Nothing

End Sub

根据选中的套号从数据库里检索出数据,并且在题目内容的表格里进行显示,代码如下:

Private Sub InitSubject()

    Me.Adodc1.ConnectionString = pCN.ConnectionString

    Me.Adodc1.RecordSource = "select * from 题库主表 where 题目套号=" & Me.Combo1.ItemData(Me.Combo1.ListIndex)

    Me.Adodc1.Refresh

    Set Me.MSHFlexGrid1.Recordset = Me.Adodc1.Recordset

    If Me.MSHFlexGrid1.Rows > 1 Then

        Me.MSHFlexGrid1.Row = 1

    End If

    Call InitSubjectAnswer

End Sub

由于我们在选中上面表格的每道试题的时候,需要显示下面的数据,当表格的选中的单元格发生改变的时候会发生RowColChange事件,所以我们把备选答案的显示放在该事件里做,代码如下:

Private Sub MSHFlexGrid1_RowColChange()

    Call InitSubjectAnswer

End Sub

Private Sub InitSubjectAnswer()

    If Me.MSHFlexGrid1.Rows > 1 Then

        Me.Adodc2.ConnectionString = pCN.ConnectionString

        Me.Adodc2.RecordSource = "select * from 题目明细 where 题目编号='" & Me.MSHFlexGrid1.TextMatrix(Me.MSHFlexGrid1.Row, 1) & "'"

        Me.Adodc2.Refresh

        Set Me.MSHFlexGrid2.Recordset = Me.Adodc2.Recordset

    Else

        Me.MSHFlexGrid2.Rows = 1

    End If

End Sub

按上面的增加按钮后我们就弹出如下的界面:

该代码里比较重要的代码如下:

留给外部窗体调用的时候的接口代码:

Public Function EditSubject(Optional ByVal lngID As Long = 0, Optional lngSubjectSetID As Long)

Dim rst As Recordset

    mlngSubjectID = lngSubjectSetID

    mlngID = lngID

    mblnEdit = IIf(lngID > 0, True, False)

    If mblnEdit Then

        Set rst = New Recordset

        rst.Open "select * from 题库主表 where ID=" & lngID, pCN, adOpenStatic, adLockBatchOptimistic

        Text3 = rst![题目编号]

        If rst![题目类型] Then

            Option2.Value = True

        Else

            Option1.Value = True

        End If

        Text1 = rst![题目内容]

        Text4 = rst![题目分值]

        Text5 = rst![题目答案]

        Text2 = rst![题目备注] & ""

        Text3.BackColor = &H80000018

        Text3.Locked = True

    Else

        Text3.BackColor = vbWhite

        Text3.Locked = False

    End If

    Set rst = Nothing

    Me.Show 1

End Function

保存代码如下

Private Sub Command1_Click()

Dim rst As Recordset

Dim strTemp As String

Dim i  As Integer

On Error GoTo Proc_Exit

    If Len(Text3) = 0 Then

        MsgBox "题目编号不为空!", vbInformation

        GoTo Proc_Exit

    End If   

    If Len(Text1) = 0 Then

        MsgBox "题目内容不为空!", vbInformation

        GoTo Proc_Exit

    End If   

    If Len(Text5) = 0 Then

        MsgBox "题目答案不为空!", vbInformation

        GoTo Proc_Exit

    End If   

    For i = 1 To Len(Text5)

        strTemp = Mid(Text5, i, 1)

        If Not (Asc(strTemp) >= 65 And Asc(strTemp) <= 90) And Not (Asc(strTemp) >= 97 And Asc(strTemp) <= 122) Then

            MsgBox "题目答案必须为字母!", vbInformation

            GoTo Proc_Exit

        End If

    Next i

    Set rst = New Recordset

    If mblnEdit Then

        rst.Open "select * from 题库主表 where ID=" & mlngID, pCN, adOpenStatic, adLockBatchOptimistic

    Else

        rst.Open "select * from 题库主表", pCN, adOpenStatic, adLockBatchOptimistic

        rst.AddNew

    End If

    rst![题目编号] = Text3

    If Option1.Value Then

        rst![题目类型] = False

    Else

        rst![题目类型] = True

    End If

    rst![题目内容] = Text1

    rst![题目分值] = Val(Text4)   

    rst![题目答案] = UCase(Text5)

    rst![题目备注] = Text2

    rst![题目套号] = mlngSubjectID

    rst.UpdateBatch

    Text1 = ""

    Text2 = ""

    Text3 = ""

    Text4 = ""

    Text5 = ""

    mblnEdit = False

    Text3.BackColor = vbWhite

    Text3.Locked = False

Proc_Exit:

    Set rst = Nothing

    If Err.Number <> 0 Then

        If Err.Number = -2147467259 Then

            MsgBox "题目编号不能重复!", vbInformation

        Else

            MsgBox "发生意外错误,错误号:" & Err.Number & " 错误描述:" & Err.Description, vbInformation

        End If

        Err.Clear

    End If

End Sub

备选答案的界面如下:

由于代码类似,我这里就不在介绍了。

5.5 考生登陆模块

设计了如下的界面:

这里面比较重要的代码如下,也就是考生验证和试题抽取的代码了:

Private Sub Command1_Click()

Dim rst As Recordset

Dim rstAnswer As Recordset

Dim i       As Integer

    If Trim(Text1) = "" Then

        MsgBox "请输入准考证号!", vbInformation

        Text1.SetFocus

        GoTo Proc_Exit

    End If   

    If Trim(Text2) = "" Then

        MsgBox "请输入考生姓名!", vbInformation

        Text2.SetFocus

        GoTo Proc_Exit

    End If   

    Set rst = New Recordset

    rst.ActiveConnection = pCN

    rst.Source = "select * from 考生 where 准考证号='" & Text1 & "'"

    rst.CursorLocation = adUseClient

    rst.LockType = adLockBatchOptimistic

    rst.CursorType = adOpenStatic

    rst.Open   

   

    ''如果该考生已经登陆

    If rst.RecordCount > 0 Then

        'If MsgBox("该考生已经考过了,你要重新开始做吗?", vbQuestion + vbYesNo) = vbNo Then GoTo Proc_Exit

        If rst![考生状态] = "已交卷" Then

            MsgBox "该考生已经交卷了,将不能再次进入考试!", vbInformation

            Unload Me

            GoTo Proc_Exit

        End If

        ''然后这里产生随机的试卷

        pintSetNumber = rst![考试套号]

    Else      

        ''随机产生考试的套号

        'pintSetNumber = 1

        Call GetSetNumber       

        ''往考生表中写入该考生的信息

        rst.AddNew

        rst![准考证号] = Text1

        rst![考生姓名] = Text2

        rst![考试套号] = pintSetNumber

        rst.UpdateBatch       

        rst.Close

        rst.Source = "select * from 题库主表 where 题目套号=" & pintSetNumber

        rst.Open           

        ''往学生答案表里加入抽到的试题

        Set rstAnswer = New Recordset   

        rstAnswer.ActiveConnection = pCN

        rstAnswer.Source = "select * from 考生答案"

        rstAnswer.CursorLocation = adUseClient

        rstAnswer.LockType = adLockBatchOptimistic

        rstAnswer.CursorType = adOpenStatic

        rstAnswer.Open       

        For i = 1 To rst.RecordCount

            rstAnswer.AddNew

            rstAnswer![准考证号] = Text1

            rstAnswer![题目编号] = rst![题目编号]           

            rst.MoveNext

        Next i       

        rstAnswer.UpdateBatch   

    End If

    pudtStudent.考生姓名 = Text2

    pudtStudent.准考证号 = Text1   

    Unload Me

    frmAnswer.Show 1

Proc_Exit:

    Set rst = Nothing

    Set rstAnswer = Nothing

End Sub

5.6 考生答题模块和交卷模块

这套系统里有单选题和多选题,但是界面是可以统一的,所以设计了如下的界面:

在这里非常重要的代码就是保存考生答案的代码了,代码如下:

Private Sub chkAnswer_Click(Index As Integer)

Dim i As Integer

Dim strAnswer As String

Static isBusy As Boolean

Dim rst As Recordset

    If isProgChangeValue Then GoTo Proc_Exit

    If Not isBusy Then

        isBusy = True

        If Not rstMain![题目类型] Then

            For i = 0 To chkAnswer.UBound

                If i <> Index Then

                    chkAnswer(i).Value = 0

                Else

                    chkAnswer(i).Value = 1

                    strAnswer = chkAnswer(i).Caption

                End If

            Next i

        Else

            For i = 0 To chkAnswer.UBound

                If chkAnswer(i).Value = 1 Then

                    strAnswer = strAnswer & chkAnswer(i).Caption

                End If

            Next i

        End If

        Set rst = New Recordset

        rst.ActiveConnection = pCN

        rst.Source = "select * from 考生答案 where 准考证号='" & pudtStudent.准考证号 & "' and 题目编号='" & rstMain![题目编号] & "'"

        rst.CursorLocation = adUseClient

        rst.CursorType = adOpenStatic

        rst.LockType = adLockBatchOptimistic

        rst.Open

        rst![考生答案] = strAnswer

        rst.UpdateBatch

        Set rst = Nothing

        isBusy = False

    End If

Proc_Exit:   

End Sub

交卷的代码如下:

''交卷

Private Sub Command3_Click()

Dim rst As Recordset

    If MsgBox("交卷后将不能在进行考试,你真的要交卷了吗?", vbQuestion + vbYesNo) = vbYes Then

        ''整理进行交卷动作

        Set rst = New Recordset

        rst.LockType = adLockBatchOptimistic

        rst.CursorLocation = adUseClient

        rst.CursorType = adOpenStatic

        Set rst.ActiveConnection = pCN

        rst.Source = "select * from 考生 where 准考证号='" & pudtStudent.准考证号 & "'"

        rst.Open

        rst![考生状态] = "已交卷"

        rst.UpdateBatch

        Unload Me

    End If   

End Sub

因为交卷了之后该考生就不能在登陆考试了,所以这里想进行提示,确认后在进入交卷动作了。

5.7 评分模块

经过了上面的考试和题库设置之后,评分其实就剩下了简单的比较的功能了,实现起来也比较的简单了,设计了如下的界面:

主要代码如下:

评分代码:

Private Sub Command1_Click()

    Me.Adodc1.ConnectionString = pCN.ConnectionString

    Me.Adodc1.RecordSource = "select ID,准考证号,考生姓名,考试套号,考生状态 from 考生"

    Me.Adodc1.Refresh

    Set Me.MSHFlexGrid1.Recordset = Me.Adodc1.Recordset

    Me.MSHFlexGrid1.Refresh

End Sub

得到考生成绩信息代码如下:

Private Sub MSHFlexGrid1_Click()

Dim i As Integer

Dim sinSum As Single

    If Me.MSHFlexGrid1.Rows > 1 Then

        Me.Adodc2.ConnectionString = pCN.ConnectionString

        Me.Adodc2.RecordSource = "select 题目编号,题目内容,题目分值,题目答案,考生答案,是否正确,得分 from 评分表 where 准考证号='" & MSHFlexGrid1.TextMatrix(Me.MSHFlexGrid1.Row, 1) & "'"

        Me.Adodc2.Refresh

        Set Me.MSHFlexGrid2.Recordset = Me.Adodc2.Recordset

        Me.MSHFlexGrid2.Refresh

        For i = 1 To Me.MSHFlexGrid2.Rows - 1

            sinSum = sinSum + Val(Me.MSHFlexGrid2.TextMatrix(i, Me.MSHFlexGrid2.Cols - 1))

        Next i

        Me.MSHFlexGrid2.AddItem "总得分:" & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & sinSum

    End If

End Sub

整体的代码设计部分就介绍到这里了。

第六章 总结

本次毕业设计,虽然设计的东西相对的简单,而且由于时间和技术实现上面的原因很多的想法都没有实现,感觉非常的遗憾。但是实际的解决了一些问题,并且把自己学习的知识应用到了实际工作中,感觉非常的自豪,而且对于老师所讲的也是一种巩固。非常感谢老师对于我的关心和帮助,如果不是你们的教导和鼓励,我想我是不能顺利完成这此毕业设计的,再次感谢所有的老师们。

第七章 参考文献

【1】数据库系统原理教程 清华大学出版社    作者 王珊 陈红

【2】Visual Basic 程序设计与数据库应用  电子工业出版社      作者 王新民 张彦玲

【3】Vosual Basic 实用培训教材 人民邮电出版社 作者 金英姿 邓少鹍

【4】Visual Basic6.0数据库系统开发实例导航      作者 刘韬 骆娟 何旭洪

【5】软件工程导论 清华大学出版社       作者 张海藩

更多相关推荐:
中文毕业论文范文篇

浅析苔丝悲剧命运的成因摘要英国著名作家托马斯哈代的小说德伯家的苔丝描写的是一个美丽而又纯洁的乡村少女苔丝的悲剧命运小说通过对苔丝丰富深刻的精神世界的描写对资本主义社会的法律宗教伦理婚姻制度以及资本主义实质做了大...

中文系毕业论文格式(样本)

中文系08届毕业论文格式样本封面从网上下载基本信息填写清楚正文页面统一用A4纵向打印页边距设置为左317cm右317cm上254cm下254cm左侧装订1淮北煤炭师范学院论文分类号20xx届学士学位论文从纯洁到...

中文系毕业论文格式模板 (1)

中文系毕业论文材料规范汇总20xx315本科生毕业论文开题报告填写规范一立论依据二研究方案三论文进度安排四论文选题评议五考核组成员2中文系学生论文手册填写说明一总体要求字迹工整除成绩评定外其他项目的填写内容必须...

中文本科毕业论文范文

浅议荷马史诗的艺术魅力四川师范大学汉语言文学曹世芳指导老师内容摘要诗史是用诗歌的形式书写一个民族的历史在世界文学史上成就最高流传最广影响最大的诗史当属荷马史诗古住今来东西方文学家哲学家都从不同角度对荷马史诗给予...

中文系毕业论文模板

毕业论文设计题目院系中文系专业汉语言文学师范姓名指导教师完成日期201年月日目录中英文摘要和关键词X引言X一一级标题AX一二级标题AX二二级标题BX二一级标题BX一二级标题AX二二级标题BX三一级标题CX一二级...

中文系毕业论文格式

定西师范高等专科学校毕业论文论文题目系别专业班级学号姓名指导教师年月日空二号两行题目二号加粗居中空五号一行学生某某某指导教师某某居中五号学生某某某与指导教师间空4格空五号二行摘要五号加粗内容不加粗关键字五号加粗...

中文系毕业论文写作规范

中文系毕业论文写作规范为使我系毕业论文规范化标准化根据中华人民共和国国家标准科学技术报告学位论文和学术论文的编写格式和邵阳学院毕业设计论文编写规定结合文科学位论文写作的实际特制定中文系毕业论文编写规范一毕业论文...

中文系开题报告模板

滨州学院毕业设计论文开题报告题目系院中文系年级20xx级专业汉语言文学班级1班学生姓名学号指导教师职称滨州学院教务处二一二年三月开题报告填表说明1开题报告是毕业设计论文过程规范管理的重要环节是培养学生严谨务实工...

毕业论文写作中存在问题浅析

毕业论文写作中存在问题浅析时间20xx年12月02日来源吴学平广州大学人文学院广东广州510405摘要本文揭示了近年来中文专业本科生毕业论文写作中存在的主要问题分析了出现这些问题的原因并由此阐述了深化教学改革全...

中文系毕业论文写作规范

中文系毕业论文写作规范为使我系毕业论文规范化标准化根据中华人民共和国国家标准科学技术报告学位论文和学术论文的编写格式和邵阳学院毕业设计论文编写规定结合文科学位论文写作的实际特制定中文系毕业论文编写规范一毕业论文...

20xx中文系毕业论文范文

20xx中文系毕业论文范文第1篇中文系毕业论文课程改革下的语文课堂是人文性与工具性的有机结合语文教材在编排上又多选择句段优美的文字所以实施新教材的语文教师在带领学生亲近文本的过程中不仅自己被教材所迷在引导学习过...

文学论文开题报告

一选题的依据1本选题的理论实际意义1理论意义女性主义的起源可以追溯到法国大革命之前的启蒙运动当时的思想家已经能够用笔指出男女之间的不平等现象了法国大革命之后是女性主义蓬勃发展的时期女性主义文学始终伴随女性运动而...

中文系论文(37篇)