试卷自动生成系统论文_第1页
试卷自动生成系统论文_第2页
试卷自动生成系统论文_第3页
试卷自动生成系统论文_第4页
试卷自动生成系统论文_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要:在21世纪,随着计算机科学的发展,数据库技术在人们日常工作中的应用越来越广泛,为广大用户提供了更加周到和人性化的服务。数据库技术已逐渐成为当今计算机应用的潮流。本文主要是通过制作一款数据库软件——即“试卷自动生成系统”来介绍数据库技术在人们日常生活、学习和工作中的应用。本论文所做的主要工作如下:(1)设计了整个“试卷自动生成系统”的系统结构及工作原理;分析了系统实现中的特殊性、难点。(2)设计实现对数据库的操作功能、数据库查询功能、数据库打印功能。(3)分析并解决实现中的若干技术问题。(4)建立完整的“试卷自动生成系统”,进行测试并分析结果。关键字计算机数据库技术试卷自动生成系统AbstractAtthe21stcentury,withthedevelopmentofcomputerscience,Databasetechnologyiswidelyusedinthepeople’slifeandwork.Thismakesuserscanenjoymoreconvenientandindividualservices.Databasetechnologyisthetrendoftoday’scomputerapplications.Inthiswork,westudythetechniquetobuildsoftwarenamedThePaperAutomaticCreatingSysteminordertointroducetheapplicationsofdatabasetechnologyinthepeople’slifeandwork.Themainworkofthispaperis:(1) Havedesignedwholesystematicstructurethat"ThePaperAutomaticCreatingSystem"andoperationprincipal;theparticularityintheanalyticalsystemisrealized,difficultpoint.(2) Designandrealizethatinquirestotheoperationfunction,databaseofthedatabasethattypesthefunctioninfunction,database.(3) Analysesandresolvesthetechnicalproblemsinimplementation.(4) Establishesatestsoftwareandanalysestheresultaftertestingonit.KeyWordsComputerTechnologyofthedatabaseThePaperAutomaticCreatingSystem目录第一章绪论……………………11.1试卷自动生成系统的产生……………………11.2试卷自动生成系统的目的……………………11.3目前教学考试中面临的问题…………………11.4课题的主要内容………………2第二章系统的整体设计…………42.1试卷自动生成系统的设计原理………………42.2方案选择………………………42.3方案特点………………………52.4试卷自动生成系统的生成……………………52.5数据流图………………………52.6数据字典………………………52.7系统程序流图…………………72.8系统功能模块图………………72.9数据库设计……………………82.10算法流程图……………………10第三章系统的具体实现…………113.1系统各模块及其功能…………113.1.1.用户登陆模块…………113.1.2.主界面模块……………113.1.3.用户管理模块…………123.1.4.题库管理模块…………123.1.5.试卷自动生成模块……………………133.1.6.生成试卷显示模块……………………133.1.7.关于模块………………143.2给数据库加密…………………143.3开发工具选择…………………143.3.1Delphi介绍……………143.3.2数据库操作界面中基本功能介绍……153.3.3Ado技术介绍及使用方法……………153.4程序设计过程中遇到的问题和解决方法……173.4.1:第三方控件安装后在使用过程中,仍然不能运行的问题………173.4.2:如何在程序中用代码打开一个带密码的Access数据库…………183.5系统中部分核心代码及难点代码的解释……19第四章系统性能测试……………23总结………………23致谢………………24参考文献……………25附录………………26第一章绪论1.1试卷自动生成系统的产生计算机在教学管理中的应用是实现教学管理科学化、现代化的关键。要提高教学质量,必须把握各个教学环节,考试是重要一环,是检测学生学习效果和对学生进行客观评价的一种手段,也是课程建设的重要组成部分。在学校教学工作中,传统的试题管理通常是以试题集或者试卷集的形式进行的,各位老师单独或集体命题,采用手工方式,题量大、工作复杂。随着科学技术的飞速发展,现代化教育手段广泛使用,教学测试方法不断改进,传统的试题管理模式和手工组卷模式将逐步被计算机代替,使教学检测更客观、更科学、更公正,从而不断提高学校的教学质量、教学水平。1.2试卷自动生成系统的目的建立题库并利用计算机加以管理,能够节省大量的人力物力,避免了教师的重复性劳动,消除了人工组卷中的人为因素,更加客观公正地考察课程的教与学,促进教学互长都有很大好处,同时也是教学改革的需要。本课题研究的意义如下:(1)利用计算机建立题库,实现计算机自动选题组卷,是实现考试规范化、科学化的重要措施。利用计算机选题组卷,不仅能节省教师的宝贵时间,提高工作效率,而且能消除出卷人主观意志的影响,使试卷的具有较好的保密性,还可以使考试更加标准化、客观、真实、全面反映教学的实际效果,有利于促进教学质量的提高。加快试题更新的速度,可以有效地利用教师资源,避免试题难度出现大的波动,是提高现代教育水平、与国际教育接轨的一项重要举措。(2)试卷自动生成系统是一种随着计算机信息技术的发展而发展起来的智能试题管理软件,主要用来提高教师的工作效率和出卷质量。使用试卷自动生成系统对教师的命题工作将起到快速、方便、简单、有效的作用,将大大减轻教师的工作负担,使命题工作更具有客观性和科学性。试卷自动生成系统的研制成功,标志着命题工作进入了崭新的时期。本文研究了一种基于数据库技术的试卷自动生成系统的设计及实现过程。本系统能够对试题进行科学的管理,能够按照所输入的参数迅速生成符合要求的试卷,出一份令人满意的试题。1.3目前教学考试中面临的问题(1)传统的手工出卷不仅工作量大,而且容易出错。考试中心管理工作中一项非常重要的工作就是考试管理工作,每年企事业单位招考专业考试,从组织试卷,到试卷的印制、试卷评分及试卷的管理等,工作繁琐且工作量很大;而且试卷的标准化程度、难易程度、区分度、题量大小、试卷错漏缺现象等方面难以控制,难以形成有效的试题库,不利于充分发挥历年优秀试题及试卷的作用,给试题和试卷的管理带来很多问题和困难。在学校的教学中,考试是考察教学成果的必要手段之一。我国历来采用手工出卷的传统方式,试卷的编辑、整理,成为每位教师繁重而又重复的工作,且存在着试卷缺乏规范性等弊端。(2)传统的手工出卷难以做到公正、全面的考核。目前,大数学校学生的期末考试仍采用任课老师考前出题的方式,这势必造成对学生掌握知识能力的测试因人而异,难以做到公正、全面的考核。试题、试卷查阅困难,许多有价值的试题常会因为得不到及时的积累而流失,一些陈旧毫无考察意义的试题却由于不能及时更新而长久地保留,这不仅大大增加了教师出题组卷的工作量和难度,降低了效率,也影响了试卷的质量。为解决学生押题、考前漏题、补考试题与正式考试试题题量及难度差异等问题,教务管理部门通常要求教师同时出多套试卷,其题量与难度要求相同,并且要同时给出答案和评分标准。这样做虽能解决一些问题,但给教师增加了很大的工作负担。若上下界学生的同一门课程由同一教师承担,则难免几届学生用相同几套试卷,若由不同教师任课出题,则上下届学生的成绩之间又不具有很强的可比性。1.4课题的主要内容通过对大量有关教学和考务文献的研究,我们利用软件工程的思想,采用面向对象程序设计方法,开发一套基于数据库的试卷自动生成系统,系统开发平台为Windows98/2000,开发工具为Delphi及Access2000。本系统主要有七大模块组成:用户登陆模块、主界面模块、用户管理模块、题库管理模块、试卷自动生成模块、生成试卷显示模块、关于模块。主要工作介绍如下:(1)设计了用户登陆模块:本模块主要为用户提供系统保护功能。只有知道用户名和登录密码的用户才能进入本系统。(2)设计了主界面模块:本模块的主要功能是为其他模块的运行提供一个的操作平台,或者说主界面模块是其他模块运行的入口,通过主界面模块才可能进入其他功能模块。(3)设计了用户管理模块:本模块的主要功能是能让具有系统管理员权限的用户能对用户进行添加、删除、修改等功能。(4)设计了题库管理模块:本模块主要是对题库里的内容进行管理,包括试题的录入、修改、删除、浏览等。(5)设计了试卷自动生成模块:本模块的主要功能就是根据考试的需要,自动从题库中按要求随机抽出试题并组成一套试卷。(6)设计了生成试卷显示模块:本模块的功能很简单,就是接收试卷自动生成模块中从题库中选取的试题并显示在屏幕上。(7)设计了关于模块:主要显示本系统的名称、版本、制作人员、完成日期等信息。系统的整体设计在这次设计过程中我主要负责试卷自动生成系统的设计。下面我就着重分析这个系统的设计原理和方案选择。2.1试卷自动生成系统的设计原理试卷自动生成系统的最终目的是要生成一份试卷,我们知道试卷是由试题组成的,所以该试卷自动生成系统的核心部分就在于有一个试题数据库。因此我的设计目标就是利用Delphi7.0及Access2000作为设计平台设计一个试卷自动生成系统。该系统包括题库浏览、修改题库试题、添加新试题、生成试卷等功能。题库管理的主界面中,所有题目按编号、题型、难度进行安排。题目列表显示了题目的所有属性,可对题目进行编辑、删除、复制和剪切等操作。由于题库浏览是对题库直接进行操作,使用过程中,最好要遵循一般的试题录入规则。这将有利于题库的统一,防止试题信息的错乱、繁杂。当用户选到自己需要编辑的试题时,可点击这些按钮,此后,试题的相关属性就呈现为可编辑状态。用户编辑完毕后,点击保存,修改的试题信息将自动录入题库。在试卷自动生成系统中,初步设定这些功能,为了满足对题库的兼容性,在试卷自动生成系统试题属性的处理上对试题的难度、题目、答案等作为一般属性对待。题库的管理操作(添加、删除、修改试题、题库浏览)可随时对这些属性更新。但对试题编号这一属性,系统将自动处理。(例如系统在添加试题过程中,试题编号是将题库中最低端的试题编号加一)同时用户也可根据个人需求对试题编号自己更新,但更新过程中很有可能对前面的试题覆盖。2.2方案选择在设计之前,我曾经考虑到了两种设计方案。一种是以浏览试题库为主要目的设计思路。这种方案的主要优点是可以在已有的试题库中进行修改试题,保存试题,并且可以浏览到试题库中所有的试题,对所有类型的试题内容及试题数量有一个很清楚的了解,便于用户确定是否需要添加新的试题到试题库中。但是缺点就是由于需要采用主菜单的形式,因此实施起来有一定的难度,而且界面空洞。所以我采用了目前软件比较流行的窗体式格式,在这个界面上用户不仅可以浏览到试题的编号、难度、内容、答案等,还可以进行添加试题、修改试题、保存试题、删除试题等操作。并且我在设计这个界面时,使用了“到第一个试题”,“到最后一个试题”,“上一个”,“下一个”四个按钮进行试题的切换,当用户切换到自己所需的试题时,可以点击“修改”和“删除”按钮进行修改试题和删除该试题的操作;当用户需要添加新的试题到题库中时,点击“添加”按钮,用户便可以添加试题了。当填完试题的类型、难度、内容和答案等项目时,点击“保存”按钮便可以把试题添加到题库中。2.3方案特点这个试卷自动生成系统的优点是方便和使用简单,任何用户只要一看界面便一目了然,且操作简洁。在设计过程中,我曾经参考了一些市面上流行的相关软件,这些软件都有一个共同特点,就是其功能强大,从多方面考虑了用户的实际使用目的,且操作也很简单,操作界面非常吸引人。这个系统最大的优点是能够从题库中随机抽取试题并自动生成试卷,并且可以输出到word,这样不仅节省了教师时间,也提高了教师的工作效率。2.4试卷自动生成系统的生成试卷自动生成系统以题库为基础,自动生成试卷,主要包括试题类型设置、试题难度设置、试题编辑与生成试卷。在试卷自动生成模块中,用户需要对自动生成的试卷设置一定的约束条件,系统就能自动从题库中按要求随机抽出试题并组合成一套试卷。在操作时,用户需要输入选题条件:如选择题难题几道、中等难度的题几道、简单的题几道,填空题、计算题也是一样。在输入完成后,按“生成试卷”按钮,系统就会根据输入的条件自动从题库中抽取试题并组合成一套试卷并显示在文本框中。2.5数据流图(简称DFD图):教师课程重点试题录入试题信息试题编辑题库试题选择试教师课程重点试题录入试题信息试题编辑题库试题选择试卷抽取试题图2.1数据流图(简称DFD图)2.6数据字典绘制好数据流图后,只是对数据处理和彼此之间的联系进行了说明,为了进一步明确数据的详细内容和数据加工过程,应将最底层数据流图中的全部数据流及其组成部分的数据元素、数据存储和加工通过数据字典描叙清楚,以便系统设计时使用。在系统中,记录所需要的编号、难度、类型、问题、答案、标志等信息,各字段的相关设置如下表2.1所示:题库信息表:字段名称数据类型说明编号自动编号自动编号难度文本试题难度:难、中等、简单类型文本试题类型:选择题、填空题、计算题问题备注每一道试题具体问题的内容答案备注每一道试题具体问题的答案标志数字用于判断是否已经被选中过表2.1题库信息表在本系统中出于安全考虑要求对系统的权限进行限制和管理,无权的用户禁止进入,管理员享有所有权利,普通用户享有除用户管理和数据库清空外的所有权利。为此,我又设计了一个表“表2.2”来存储用户的用户名、密码以及权限。各字段的相关设置如下列表所示:用户信息表:字段名称数据类型说明编号自动编号自动编号User文本用户名Password文本密码Kind备注用户类型:1为管理员,0为普通用户表2.2用户信息表2.7系统程序流图退出系统退出系统否是否继续是系统初始化身份认证正确试卷自动生成错误数据库清空关于登陆用户管理题库管理 图2.2系统程序流图2.8系统功能模块图根据系统分析的结果,对系统进行功能分解,得到试卷自动生成系统的系统功能模块图,首先得到的是系统的第一轮HIPO图,如图2.3所示:试卷自动生成试卷自动生成系统题库管理试卷自动生成生成试卷显示登陆用户管理关于本系统数据库清空图2.3系统功能模块图2.9数据库设计试题{试题编号、问题、答案}试题类型{选择题、填空题、计算题}试题难度{简单、中等、难}用户{用户编号、用户名、密码}按照上面的设计方法生成的实体及其属性图:试题试题试题编号问题答案试题类型选择题计算题填空题图2.4图2.5难度简单难度简单中等难用户用户编号密码用户名图2.6图2.7分析这些实体及其属性图中实体之间的联系,得到完整的系统实体联系图(E-R图),如图2.8所示。用户登陆用户登陆权限管理员普通用户清空数据库信息管理用户信息对题库进行管理生成试卷录入修改删除退出输入条件生成试卷退出添加用户修改用户删除用户图2.8系统的实体联系图(E-R图)2.10算法流程图试卷自动生成系统在按教师设置的条件随机从题库中抽取试题的流程如图2.9所示:将题库的所有标志位清将题库的所有标志位清0抽取一个随机数n判断是否没有超过所要选的各条数移动记录指针到第n个记录判断此记录是否已经选过,如未选过判断该题的题型分类加此题目到题库中,同时改写是否已经选过的标志,同时使题目条数+1图2.9算法流程图第三章系统的具体实现3.1系统各模块及其功能本系统主要有七大模块组成:用户登陆模块、主界面模块、用户管理模块、题库管理模块、试卷自动生成模块、生成试卷显示模块、关于模块。下面简单介绍一下每个模块的功能。3.1.1.用户登陆模块本模块主要是要为用户提供系统保护功能。只有知道用户名和登录密码的用户才能进入本系统。其他人将无法使用本软件也就无法浏览和管理数据库。本系统支持多用户登录。同时用户登录类型又可以分为系统管理员和普通用户。系统管理员拥有操作软件的所有权利,而普通用户拥有除“用户管理”和“清空数据库”外的所有权利。如图3.1所示。图3.1用户登陆模块3.1.2.主界面模块:本模块的主要功能是为其他模块的运行提供一个的操作平台,或者说主界面模块是其他模块运行的入口,通过主界面模块才可能进入其他功能模块,如:题库管理模块、试卷自动生成模块。如图3.2示。图3.2主界面模块3.1.3.用户管理模块:本模块的主要功能是能让具有系统管理员权限的用户能对用户进行添加、删除、修改等功能。如图3.3所示。图3.3用户管理模块3.1.4.题库管理模块:本模块主要是对题库里的内容进行管理,包括试题的录入、修改、删除、浏览等。用户在输入数据库里要注意选择新录入试题的类型、难度的选择。如图3.4所示。图3.4题库管理模块3.1.5.试卷自动生成模块:本模块的主要功能就是根据考试的需要,自动从题库中按要求随机抽出试题并组合成一套试卷了。在操作时,用户要首先输入选题条件:如选择题难题几道、中等难度的题几道、简单的题几道,填空题、计算题也是一样。在输入完成后,按“生成试卷”按钮,系统就会根据输入的条件自动从题库中抽取试题并组合成一套试卷并显示在文本框中。如图3.5所示。图3.5试卷自动生成模块3.1.6.生成试卷显示模块:本模块的功能很简单,就是接收试卷自动生成模块中从题库中选取的试题并显示在屏幕上。如图3.6所示。图3.6生成试卷显示模块3.1.7.关于模块:主要显示本系统的名称、版本、制作人、运行环境、完成日期等信息。如图3.7所示。图3.7关于模块3.2给数据库加密要保护好自己的数据库就必须为制作好的数据库添加密码,即对其进行加密处理,也就是增加口令。这样在每次打开数据库时,如果输入密码不正确,就无法浏览数据,从而保证数据库中数据的绝对安全。方法其实很简单,首先要以“独占”的方式打开制作好有待加密的数据库(注意一定要以“独占”的方式打开,否则无法进行加密)。然后单击“工具”菜单,选中其中的“安全”项,在弹出的子菜单项中选择“设置数据库密码”项,这时会弹出密码设置窗体,在其中输入两次要设置的密码(注意密码要上下相同),然后单击“确定”,数据库密码设置就完成了。在本软件所用的数据库tk.mdb中,其数据库密码为200434。当然软件运行时还需要用程序指令来对加密的数据库进行访问,对于这一方面的内容将在后面的论文中加以阐述[1]。3.3开发工具选择因为Delphi提供了强大的数据库编程的功能和友好的用户接口,只要掌握Delphi的基本语法和一些数据库编程的基本知识,并且开发系统方便,所以开发工具选择了Delphi7.0。后台数据库选用了Access2000。3.3.1Delphi介绍Delphi实际上是Pascal语言的一种版本,但它与传统的Pascal语言有天壤之别。一个Delphi程序首先是应用程序框架,而这一框架正是应用程序的“骨架”。在骨架上即使没有附着任何东西,仍可以严格地按照设计运行。您的工作只是在“骨架”中加入您的程序,缺省的应用程序是一个空白的窗体(Form),您可以运行它,结果得到一个空白的窗口。这个窗口具有Windows窗口的全部性质:可以被放大缩小、移动、最大最小化等,但您却没有编写一行程序。因此,可以说应用程序框架通过提供所有应用程序共有的东西,为用户应用程序的开发打下了良好的基础[2]。

Delphi7.0软件开发工具是Borland公司推出的一个可视化系统开发环境的工具。它具有功能强大、运行速度快、易于学习和使用以及开发迅速等特点,所以一经推出就受到广大用户的喜欢。Delphi结合了可视化技术、面向对象技术、数据库技术以及网络技术等多种先进的软件编程技术和思想,并使用了世界上最快的编译器,使其成为创建功能丰富、界面友好的Windows应用软件的工具之一。Delphi7.0版本功能更为强大,不但继承了前面所有版本的优良特性,而且纠正了一些错误,它对Web服务、数据库的支持更加完善[3]。3.3.2数据库操作界面中基本功能介绍数据库主界面主要包括了对数据库的各种操作,包括数据库中记录的修改、记录的添加、记录的删除以及记录的浏览。这些都是数据库操作中所必须的内容。其代码如下:(1)增加记录:adotable1.Edit;adotable1.Append;//append为增加模式;(2)保存修改:Adotable1.Edit;adotable1.Post;//这是个关键按钮,将对数据修改的结果存入数据库!对数据库的任何修改,只有按了这个按钮后才真正将修改的结果存入数据库。3.3.3Ado技术介绍及使用方法ADO(ActiveXDataObject,ActiveX数据对象)是微软提出的新标准。从原理上来说,ADO与第三方构件并无多大区别,只是它是Inprise官方开发的;同时,它连接的不是某个具体的数据库,而是微软提供的ADO对象。从理论上讲,ADO能够支持任何类型的数据库(甚至包括流式数据)。用ADO来取代Delphi自代的BDE的确是一个不错的解决方案,而且在Delphi中使用ADO也相当方便[4]。下面简单介绍一下ADO的使用方法,也就是本毕业设计程序操作数据库的方法。本毕业设计就是用ADO操作数据库tk.mdb。在Delphi组件面板上有ADO组件页,其中前6个是ADO组件。在空白窗体上放置一个ADOConnection1组件,一个ADOTable1组件、一个DataSource1组件、一个DBGrid1组件。先设定一下部分组件属性如下:设定DBGrid1组件的DataSource属性为DataSource1,设定DataSource1组件的DataSet属性为ADOTable1。双击ADOConnection1组件或者在其属性列表中点击ConnectionString后的省略号都可以打开连接字符串设定窗口如下图3.8所示:

图3.8点击“Build”按钮,将打开数据连接属性窗口如下图3.9所示,其中有四个页面,在第一个“提供者”页面中,列出了可以使用的各种驱动数据库驱动。对于ACCESS97数据库来说,用MicrosoftJet3.51OLEDBProvider驱动即可,当然选择MicrosoftJet4.0OLEDBProvider驱动也可,但对于ACCESS2000数据库来说必须使用MicrosoftJet4.0OLEDBProvider,不能使用MicrosoftJet3.51OLEDBProvider。选择完毕数据库驱动后,点击“连接”页面,在这里输入或选择数据库,这里我们查找选择数据库为“tk.mdb”,如果数据库有密码可将“空白密码”复选框去掉选择,就可以输入密码,选中“允许保存密码”这样以后就可以无需再输入密码了。接下来可以点击“测试连接”按钮,如果提示“测试连接成功”那么说明数据库可正常连接上。在“高级”页面中选择访问权限为“ReadWrite”。在“所有”页面中显示的是用户目前设定的连接属性,用户可以再修改。点击“确定”按钮后返回到上图,这时可以看到属性设定字符串已经自动生成,点击“OK”按钮返回即可。再把ADOConnection1组件的LoginPrompt属性设定为false,这样以后程序在运行时就不会弹出密码输入框了。但如果你的数据库有密码且在上面的“连接”页面中没有输入密码没有选中“允许保存密码”,那么不要把此属性设定为false,因为你以后需要手工输入密码。图3.9有输入密码没有选中“允许保存密码”,那么不要把此属性设定为false,因为你以后需要手工输入密码。

接着设定ADOTable1组件的Connection属性为ADOConnection1,单击ADOTable1组件的tablename属性后的省略号,将可以看到数据库tk.mdb中的所有数据表名称列表,从中选择一个如“表1”,设定ADOTable1组件的Active属性为True,则马上可以在DbGrid中看到表中的数据了。如果马上运行程序就可以在窗口中浏览和编辑数据了[5]。3.4程序设计过程中遇到的问题和解决方法在软件制作的过程中遇到了大大小小、很多很多的问题。只要有一个没有解决整个软件就完成不了。所以掌握解决问题的方法是关键,这是我这次毕业设计过程中的最重要的体会之一。下面列出制作过程中遇到的一些较为典型的问题。3.4.1:第三方控件安装后在使用过程中,仍然不能运行的问题。即:第三方控件在按照安装提示准确地安装完毕后,然后在窗体上放上该控件,设置好控件属性后运行。系统会提示找不到某某*.dcu文件。这是因为软件运行是需要将该控件所对应的*.dcu文件加载到可执行文件中。所以需要设置一下控件所对应*.dcu的路径。具体方法如下:单击“project”,然后选中“Options”,这时会弹出“ProjectOptionsfor…”的设置窗体。在“Directories/Conditionals”项的SearchPath里面进入该控件所对应的*.dcu的文件路径即可[6]。3.4.2:如何在程序中用代码打开一个带密码的Access数据库。因为要保证数据库中数据的安全,所以要对数据库进行加密,而如何打开一个带密码的Access数据库却难倒了我,通过查阅资料我终于找到了方法。首先:要按上面提到Ado连接数据库的一般方法来配置Adotable1的connectionstring属性。在“数据链接属性”页面的“连接”项中选择您要链接的数据库,本系统中为tk.mdb。如果仅这样只能正确打开没有密码的数据库,要打开有密码的Access数据库,还需要点击“数据链接属性”页面的“所有”项,如图3.10所示:图3.10然后编辑“JetOLEDB:DatabasePassword”的值,即输入数据库的正确密码,这样connectionstring属性就成功配置完成了。其次:要在程序开始时在源代码部分再一次用代码对Adotable1的connectionstring属性进行赋值,即:connectionstring:='provider=Microsoft.jet.oledb.4.0;'+'persistsecurityinfo=false;'+'datasource='+dbpath+'tk.mdb;'+'jetoledb:databasepassword=200434';//重新设置connectionstring属性[7]3.5系统中部分核心代码及难点代码的解释(1)统计题库中各题型各难度题目的数量在试卷自动生成模块中,为了让操作人员知道题库中目前各题型即选择题、填空题、计算题的不同难度的题目的总数各是多少,以便让操作人员能够有针对性地选择不同类型、不同难度的题目,所以需要对这些题目的信息进行统计,这也是本系统关键的地方这一。代码及其解释如下:procedureTForm3.FormShow(Sender:TObject);//这是在试卷自动生成模块的窗体产生事件中触发的。vardbpath:string;begindbpath:=extractfilepath(paramstr(0));withadotable1dobeginconnectionstring:='provider=Microsoft.jet.oledb.4.0;'+'persistsecurityinfo=false;'+'datasource='+dbpath+'tk.mdb;'+'jetoledb:databasepassword=200434';active:=true;end;withadoquery1dobeginconnectionstring:='provider=Microsoft.jet.oledb.4.0;'+'persistsecurityinfo=false;'+'datasource='+dbpath+'tk.mdb;'+'jetoledb:databasepassword=200434';//以下是得到选择题中难的题目的总数active:=false;//先关闭查询控件adoquery1,以便向其中加入sql语句的查询内容SQL.Clear;//清空sql语句sql.Add('select*fromtk1where类型="选择题"and难度="难"');//向sql中增加查询语句的内容active:=true;//打开查询控件adoquery1label1.Caption:='共'+inttostr(recordcount)+'题';//将本题型题目(本段中即:选择题中难度为难的那类题目)的总数赋值给label1,显示在软件中(2)生成试卷代码解释:本段代码是整个系统中的核心代码。它的作用就是根据操作人员输入的选题条件自动从题库中抽取试题并组合成一套试卷并显示在文本框中。有多种方法可以实现这一功能,通过比较后我选择了其中相对而言容易理解、容易操作的一种方法来完成。下面就以选择题为例,程序代码及其解释如下:procedureTForm3.Button1Click(Sender:TObject);vari1,i2,i3,j1,j2,j3,h1,h2,h3:integer;ii1,ii2,ii3,jj1,jj2,jj3,hh1,hh2,hh3:integer;m1,m2,m3:string;//m1用于接受所有选择题的数据m2用于接受所有填空题的数据m3用于接受所有计算题的数据k:integer;count:integer;begincount:=adotable1.RecordCount;//记录总数,没用到i1:=strtoint(edit1.Text);//选择题中有难度的i2:=strtoint(edit2.Text);//选择题中有中等难度的i3:=strtoint(edit3.Text);//选择题中简单的j1:=strtoint(edit4.Text);//填空题有难度的j2:=strtoint(edit5.Text);//填空题中有中等难度的j3:=strtoint(edit6.Text);//填空题中简单的h1:=strtoint(edit7.Text);//计算题有难度的h2:=strtoint(edit8.Text);//计算题中有中等难度的h3:=strtoint(edit9.Text);//计算题中简单的m1:='[选择题]'+#10+#10;//注:#10是换行的意思。m2:='[填空题]'+#10+#10;m3:='[计算题]'+#10+#10;adotable1.first;whilenotadotable1.eofdobeginadotable1.Edit;//注意此处一定要加,而且不能加在循环外面,否则会提示"未处于编辑模式下"adotable1.FieldByName('标志').Value:=0;adotable1.next;end;//以上循环语句是将标志位清0adotable1.Close;adotable1.Open;randomize();//随机数初始化ii1:=0;ii2:=0;ii3:=0;//选择题(ii是与i相对应的比较用的)jj1:=0;jj2:=0;jj3:=0;//填空题(jj是与j相对应的比较用的)hh1:=0;hh2:=0;hh3:=0;//计算题(hh是与j相对应的比较用的)form4.richedit1.clear;//清空用于接收题目内容的richedit中的内容while(ii1<i1)or(ii2<i2)or(ii3<i3)or(jj1<j1)or(jj2<j2)or(jj3<j3)or(hh1<h1)or(hh2<h2)or(hh3<h3)dobeginadotable1.First;k:=random(count);//k是接收产生的随机数adotable1.MoveBy(k);//将指针从第一条记录移动到第k个记录ifadotable1.FieldByName('标志').Value=0then//判断是否已经被选过beginifadotable1.FieldByName('类型').value='选择题'then//如果是选择题beginifadotable1.FieldByName('难度').value='难'thenbeginifii1<i1thenbeginm1:=m1+adotable1.FieldByName('题').Value;m1:=m1+#10;//在后面加入一空行m1:=m1+#10;//在后面再加入一空行ii1:=ii1+1;//将已经选中的几条记录的标志ii加1//以下三行是将该题是否已经选中的标记设为1,这样再选时就不会选中这条记录了,从而避免重复现象的产生adotable1.Edit;adotable1.FieldByName('标志').Value:=1;adotable1.post;end;end;//以下代码与上面基本相同,不作过多解释。ifadotable1.FieldByName('难度').value='中等'thenbeginifii2<i2thenbeginm1:=m1+adotable1.FieldByName('问题').Value;m1:=m1+#10;m1:=m1+#10;ii2:=ii2+1;adotable1.Edit;adotable1.FieldByName('标志').Value:=1;adotable1.post;end;end;ifadotable1.FieldByName('难度').value='简单'thenbeginifii3<i3thenbeginm1:=m1+adotable1.FieldByName('问题').Value;m1:=m1+#10;m1:=m1+#10;ii3:=ii3+1;adotable1.Edit;adotable1.FieldByName('标志').Value:=1;adotable1.post;end;end;end;form4.RichEdit1.Lines.Add(m1);//这里及以下两句是将m1(选择题),m2(填空题),m3(计算题)的内容一起输出到richedit1中。form4.RichEdit1.Lines.Add(m2);form4.RichEdit1.Lines.Add(m3);form4.Show;//显示窗体4,即将从题库中自动随机抽取的试题组成的试卷的内容显示出来。end;系统性能测试经过不断的努力,终于完成了试卷自动生成系统的初步设计和编制。我对本系统进行改编的性能测试。测试环境:P=3\*ROMANIII256M/64G操作系统:WindowsXP系统平台:Delphi7.0系统调试过程:程序的最后调试工作是应用程序的最后检查阶段,该阶段主要完成的任务有以下几点:.程序遇到用户错误操作时能否正确处理;.程序在遇到运行错误时是否能够正确的处理错误;.程序的预定功能是否达到。利用Delphi的系统调试器对整个系统进行了跟踪调试,发现了其中的函数使用错误,数据表名称输入错误等一些问题,及时的修改了每个错误。在上述环境中,将设计和编译好的试卷自动生成系统进行首次运行。当进入系统,发现一些问题,如各表单的属性设置不够完整,使用其在调用过程中出现错误,我经过反复检查核对,终于找出了问题并调试通过。最后对应用程序的功能调试,发现应用程序的运行结果满足用户要求,达到了预想的程序设计目的。同时还对系统界面的进行了调整,提高其友好性。通过对程序的调试,查找资料我学到了一些程序调试基本方法,使我学到许多新的知识,积累了更多的经验,也对本程序的完整性有了进步的了解,整个的编程思想也更加的完整,为我在今后的工作打下了良好的基础。测试结果:系统各功能运行一切正常,并达到了设计要求。总结本次毕业设计,任务较重,时间紧,涉及的范围又比较多,也是我第一次做这种比较大的程序设计课题。从课题的确定到逐步深入直至最终完成各项目标任务,每一个过程都具有很大的挑战性。在设计过程中,也曾遇到各式各样的问题,如程序的调试过程,经常会出现运行不正常等情况。虽然困难很多,但在自己的不懈努力及通过查找资料、请教老师、询问同学和同事等办法,最终都能找到解决问题的办法。在克服困难、攻破一个个困难的过程中,学到了许多平时没有学到的知识,收获很大,从而使自己的知识在完成课题的过程中不断充实,水平也得到了一定的提高。应该说本次毕业设计,达到了毕业设计开题所预期的目标。同时,设计过程也培养了我独立工作的能力,树立了对自己工作能力的信心,相信会对我今后的学习工作生活能产生非常重要的影响。最重要的是通过本次课题锻炼了自己独自分析解决问题的能力和自我学习的能力。采用试卷自动生成系统进行考试,其优点以成为教育专家的共识,它使的试题的收集和管理自动化和标准化,而试题的标准化和自动化又有利于教学质量的提高,它为计算机辅助教学及学校的计算机管理的进一步实施创造了条件,题库管理与试卷自动生成系统的研究和开发也就成为近年来教育系统中一个十分引人注目的课题。建立一个好的题库管理与试卷自动生成系统,并运用于教学中可以节省教师出题、制卷的时间,减轻劳动强度、提高工作效率;可以避免因不同教师出题而产生的试题内容及重点、难度的差异;有利于教学质量的统一评估;可以使考试更加规范化、标准化、科学化。当然,由于时间较紧,加上是初次涉及到比较大的程序的设计和开发,经验上相对缺乏,本系统只能对同一门课程的试卷进行题库管理,以及不能按章节录入试题,最好还应该能按章节选择试题的功能。因此软件做得还不是很好,还需要以后加以进一步改进。通过本毕业设计的学习以及思考制作,我基本掌握了操作数据库的各种方法。同时在设计过程中我遇到了很多问题,通过自己查阅资料,不断的调试最后都成功地解决了。在本毕业设计过程中我感受最深的就是:完成工作的过程中要学会自学,同时我还认识到在遇到问题的时候如何去分析问题,找出问题,然后去解决问题,我想虽然我的毕业设计已经成功做完了,但我收获最大的确是学会了以上两点。致谢大学学习生活即将结束,在此,我要感谢所有曾经教导过我的老师和关心过我的同学,他们在我成长过程中给予了我很大的帮助。本文能够成功的完成,要特别感谢我的指导老师张刚林的关怀和教导,感谢各位师兄师姐的关心和帮助。最后还要感谢我的父母,是他们一直在背后支持着我。谨以此文献给他们!参考文献[1]齐治昌,谭庆平,宁洪著.软件工程[M].北京:高等教育出版社,2002:16-31[2]MicrosoftCorporation著,微软(中国)有限公司译.Delphi6.0中文版程序员指南[M].微软出版社,1998:30-35,39[3]高峰霞,廖彬山著.Delphi6.0中文版提高与应用[M].北京:电子工业出版社,1999:59-62[4]萨师煊,王珊著.数据库系统概论[M].北京:高等教育出版社,2005:24-28[5]吕伟臣著.Delphi7入门与提高[M].清华大学出版社,2004:54-60[6]陈豫龙,何旭洪著Delphi7数据库系统开发实例导航[M].北京:人民邮电出版社,2004:45-51[7]飞恩科技产品研发中心.Delphi7高级程序设计[M].北京:电子工业出版社.2003:67-73附录A用户登陆模块unitUnit6;interfaceusesWindows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,WinSkinData,DB,ADODB,StdCtrls;typeTForm6=class(TForm)Label1:TLabel;Label2:TLabel;Button2:TButton;Button3:TButton;Edit1:TEdit;Edit2:TEdit;ADOTable1:TADOTable;SkinData1:TSkinData;Label3:TLabel;procedureButton2Click(Sender:TObject);procedureFormCreate(Sender:TObject);procedureButton3Click(Sender:TObject);procedureEdit2Change(Sender:TObject);private{Privatedeclarations}public{Publicdeclarations}end;varForm6:TForm6;implementationusesUnit1,Unit4;{$R*.dfm}procedureTForm6.Button2Click(Sender:TObject);vari:integer;j:integer;beginif(edit1.Text='')or(edit2.text='')thenshowmessage('您还没有输入用户名或密码!')elsebeginifadotable1.active=falsethenadotable1.Active;adotable1.first;i:=1;j:=2;whilenotadotable1.Eofdobeginif(edit1.Text=adotable1.FieldByName('password').AsString)and(edit2.Text=adotable1.FieldByName('user').AsString)thenbegini:=2;ifadotable1.FieldByName('kind').AsString='1'thenj:=1;ifadotable1.fieldByName('kind').AsString='0'thenj:=0;end;adotable1.Next;end{if(edit1.Text=adotable1.FieldByName('password').AsString)or(edit1.Text='pdsword123459')thenbeginform1.show;form4.hide;end}end;ifi=2thenbeginifj=0thenbeginform1.button5.visible:=false;form1.Button4.Visible:=false;end;form1.show;form6.hide;endelseshowmessage('您输入的用户名或密码不正确,请重新输入');end;procedureTForm6.FormCreate(Sender:TObject);varmaindbpath:string;beginmaindbpath:=extractfilepath(paramstr(0));withadotable1dobeginconnectionstring:='provider=Microsoft.jet.oledb.4.0;'+'persistsecurityinfo=false;'+'datasource='+maindbpath+'tk.mdb;'+'jetoledb:databasepassword=200434';active:=true;end;end;procedureTForm6.Button3Click(Sender:TObject);beginform6.Close;end;procedureTForm6.Edit2Change(Sender:TObject);beginend;end.主界面模块unitUnit1;interfaceusesWindows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,WinSkinData,DB,ADODB;typeTForm1=class(TForm)Button1:TButton;Button2:TButton;Button3:TButton;Label1:TLabel;Label2:TLabel;Button4:TButton;ADOTable1:TADOTable;Label3:TLabel;Button5:TButton;Button6:TButton;procedureButton1Click(Sender:TObject);procedureButton3Click(Sender:TObject);procedureButton2Click(Sender:TObject);procedureButton4Click(Sender:TObject);procedureFormCreate(Sender:TObject);procedureButton6Click(Sender:TObject);procedureButton5Click(Sender:TObject);procedureLabel2Click(Sender:TObject);private{Privatedeclarations}public{Publicdeclarations}end;varForm1:TForm1;implementationusesUnit2,Unit3,Unit5,Unit7;{$R*.dfm}procedureTForm1.Button1Click(Sender:TObject);beginform2.show;end;procedureTForm1.Button3Click(Sender:TObject);beginapplication.Terminate;end;procedureTForm1.Button2Click(Sender:TObject);beginform3.show;end;procedureTForm1.Button4Click(Sender:TObject);beginifmessagedlg('是否真的要清空所有数据?',mtinformation,[mbyes,mbno],0)=mryesthenbeginadotable1.First;whilenotadotable1.eofdobeginadotable1.Edit;adotable1.Delete;adotable1.Prior;adotable1.Post;end;showmessage('数据库清空完毕!');end;end;procedureTForm1.FormCreate(Sender:TObject);vardbpath:string;begindbpath:=extractfilepath(paramstr(0));withadotable1dobeginclose;connectionstring:='provider=Microsoft.jet.oledb.4.0;'+'persistsecurityinfo=false;'+'datasource='+dbpath+'tk.mdb;'+'jetoledb:databasepassword=200434';active:=true;end;end;procedureTForm1.Button6Click(Sender:TObject);beginaboutbox.show;end;procedureTForm1.Button5Click(Sender:TObject);beginform1.Hide;form7.show;end;procedureTForm1.Label2Click(Sender:TObject);beginend;end.题库管理模块unitUnit2;interfaceusesWindows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,ExtCtrls,DB,ADODB,DBCtrls,Mask;typeTForm2=class(TForm)Label1:TLabel;Bevel1:TBevel;Bevel2:TBevel;ADOTable1:TADOTable;ADOTable1DSDesigner:TAutoIncField;ADOTable1DSDesigner2:TWideStringField;ADOTable1DSDesigner3:TWideStringField;ADOTable1DSDesigner4:TMemoField;ADOTable1DSDesigner5:TMemoField;ADOTable1DSDesigner6:TIntegerField;Label2:TLabel;DBEdit1:TDBEdit;DataSource1:TDataSource;Label3:TLabel;Label4:TLabel;Label5:TLabel;DBMemo1:TDBMemo;Label6:TLabel;DBMemo2:TDBMemo;Label7:TLabel;Button1:TButton;Button2:TButton;Button3:TButton;DBNavigator1:TDBNavigator;Label8:TLabel;DBEdit4:TDBEdit;DBComboBox1:TDBComboBox;DBComboBox2:TDBComboBox;procedureFormCreate(Sender:TObject);procedureButton2Click(Sender:TObject);procedureButton3Click(Sender:TObject);procedureButton1Click(Sender:TObject);private{Privatedeclarations}public{Publicdeclarations}end;varForm2:TForm2;implementation{$R*.dfm}procedureTForm2.FormCreate(Sender:TObject);vardbpath:string;begindbpath:=extractfilepath(paramstr(0));withadotable1dobeginconnectionstring:='provider=Microsoft.jet.oledb.4.0;'+'persistsecurityinfo=false;'+'datasource='+dbpath+'tk.mdb;'+'jetoledb:databasepassword=200434';active:=true;end;adotable1.last;end;procedureTForm2.Button2Click(Sender:TObject);beginclose;end;procedureTForm2.Button3Click(Sender:TObject);beginadotable1.Edit;adotable1.Append;end;procedureTForm2.Button1Click(Sender:TObject);beginadotable1.Post;end;end.试卷生成模块unitUnit3;interfaceusesWindows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,DB,ADODB;typeTForm3=class(TForm)GroupBox1:TGroupBox;Label1:TLabel;Edit1:TEdit;Label2:TLabel;Edit2:TEdit;Label3:TLabel;Edit3:TEdit;Label4:TLabel;GroupBox2:TGroupBox;Label5:TLabel;Label6:TLabel;Label7:TLabel;Label8:TLabel;Edit4:TEdit;Edit5:TEdit;Edit6:TEdit;GroupBox3:TGroupBox;Label10:TLabel;Label11:TLabel;Label12:TLabel;Edit7:TEdit;Edit8:TEdit;Edit9:TEdit;Button1:TButton;Button2:TButton;ADOTable1:TADOTable;ADOTable1DSDesigner:TAutoIncField;ADOTable1DSDesigner2:TWideStringField;ADOTable1DSDesigner3:TWideStringField;ADOTable1DSDesigner4:TMemoField;ADOTable1DSDesigner5:TMemoField;ADOTable1DSDesigner6:TIntegerField;Label13:TLabel;ADOQuery1:TADOQuery;Label14:TLabel;Label15:TLabel;Label9:TLabel;Label16:TLabel;Label17:TLabel;Label18:TLabel;Label19:TLabel;Label20:TLabel;Label22:TLabel;Label23:TLabel;Label21:TLabel;procedureButton1Click(Sender:TObject);procedureButton2Click(Sender:TObject);procedureFormShow(Sender:TObject);procedureGroupBox1Click(Sender:TObject);private{Privatedeclarations}public{Publicdeclarations}end;varForm3:TForm3;implementation{$R*.dfm}usesunit4;procedureTForm3.Button1Click(Sender:TObject);vari1,i2,i3,j1,j2,j3,h1,h2,h3:integer;ii1,ii2,ii3,jj1,jj2,jj3,hh1,hh2,hh3:integer;m1,m2,m3:string;k:integer;count:integer;begincount:=adotable1.RecordCount;i1:=strtoint(edit1.Text);i2:=strtoint(edit2.Text);i3:=strtoint(edit3.Text);j1:=strtoint(edit4.Text);j2:=strtoint(edit5.Text);j3:=strtoint(edit6.Text);h1:=strtoint(edit7.Text);h2:=strtoint(edit8.Text);h3:=strtoint(edit9.Text);adotable1.first;whilenotadotable1.eofdobeginadotable1.Edit;adotable1.FieldByName('标志').Value:=0;adotable1.next;end;adotable1.Close;adotable1.Open;randomize();ii1:=0;ii2:=0;ii3:=0;jj1:=0;jj2:=0;jj3:=0;hh1:=0;hh2:=0;hh3:=0;m1:='[选择题]'+#10+#10;m2:='[填空题]'+#10+#10;m3:='[计算题]'+#10+#10;form4.richedit1.clear;while(ii1<i1)or(ii2<i2)or(ii3<i3)or(jj1<j1)or(jj2<j2)or(jj3<j3)or(hh1<h1)or(hh2<h2)or(hh3<h3)dobeginadotable1.First;k:=random(count);adotable1.MoveBy(k);ifadotable1.FieldByName('标志').Value=0thenbeginifadotable1.FieldByName('类型').value='选择题'thenbegin

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论