毕业设计-编程考试机器评卷系统论文.doc
《毕业设计-编程考试机器评卷系统论文.doc》由会员分享,可在线阅读,更多相关《毕业设计-编程考试机器评卷系统论文.doc(41页珍藏版)》请在三一文库上搜索。
1、编程考试机器评卷系统1 前言1.1 课题背景及意义目前全国计算机应用能力等级考试及各省的高校计算机教学水平考试都有上机操作考试,编程考试是其主要内容之一。在编程考试中,一方面,由于考生人数多,必须采用机器评卷;另一方面,由于考生之间水平差距较大,针对同一问题编写的程序千姿百态。编译、连接、运行都可能出错,尤其是运行过程可能会产生死循环,因此,目前还没有采用完整的源程序作为机器评卷的依据。现在已投入使用的采用机器评卷的考试题型有填写问题的结果和填写少量语句两种。前一种题型的缺点一是容易舞弊,二是有些问题不编程也可得到结果;后一种题型的缺点是,难以看出考生独立解决问题的能力。因此有必要提出一种基于
2、完整源程序分析且能采用机器阅卷的考试题型及评卷算法,吸取以前机器评卷系统的优点,运用其部分设计思路,结合了自己的思想设计完善编程考试机器评卷系统。加强自身对计算机系统知识运用能力的锻炼。此编程考试机器评卷系统通过对考生编制的每个源程序的分析过程给出评分。1.2 课题相关技术的研究现状1.2.1编译原理简介在计算机科学的课程中,编译原理占有非常重要的位置,它是每个优秀的计算机专业人员必修的一门课程。它主要介绍编译程序的基本构造、一般设计方法和常用实现技术,讲解编译程序自动构造的原理和工具。具体内容包括:形式语言、有穷自动机原理及词法分析程序的自动构造、自上而下和自下而上的语法分析、语法制导翻译及
3、中间代码生成,目标程序运行时的存储组织策略及代码生成等等。并结合教授内容,安排学生在剖析一个简单的编译程序的基础上,完成编译程序的有关实验。经过本课程的学习,要求学生不但掌握一般高级语言编译程序的初步设计和实现的基本技能,并能为不同模式和不同领域的语言的实现方案寻找解决途径,另外还能运用编译程序构造的原理和技术完成相关软件工具的设计和开发工作。词法分析阶段的任务是对构成源程序的字符串从左到右进行扫描和分解,根据语言的词法规则,识别出一个一个具有独立意义的单词( 也称单词符号, 简称符号 )。语法分析的任务是在词法分析的基础上, 根据语言的语法规则从单词符号串中识别出各种语法单位( 如表达式、说
4、明、语句等 ) ,并进行语法检查,即检查各种语法单位在语法构上的正确性。语义分析与中间代码的生成。语义分析的任务是首先对每种语法单位进行静态的语义审查,然后分析其含义,并用另一种语言形式 (比源语言更接近于目标语言的一种中间代码或直接用目标语言 ) 来描述这种语义。代码优化的任务是对前阶段产生的中间代码进行等价变换或改造,以期获得更为高效即省时间和空间的目标代码。编译程序在工作过程中需要建立一些表格,以登记源程序中所提供的或在编译过程中所产生的一些信息,编译各个阶段的工作都涉及到构造、查找、修改或存取有关表格中的信息,因此,在编译程序中必须有一组管理各种表格的程序。图1.1编译程序的总体结构图
5、1.2.2 C语言基本语法总结(1)标识符 由字母、数字和下划线组成。标识符必须以字母或下划线开头。大、小写的字母分别认为是两个不同的字符。不同的系统对标识符的字符数有不同的规定,一般允许7个字符。(2)注释/和/必须成对出现;注释不能嵌套;注释可出现在程序的任何位置。(3) 常量整型常量十进制常数(八进制常数、十六进制常数、长整型常数);字符常量(用单引号括起来的字符);字符串常量(用双引号括起来的字符序列);浮点型常量(小数形式、指数形式)。(4) 表达式算术表达式(整型表达式、实型表达式);逻辑表达式(用逻辑运算符连接的整型量,结果为一个整数0或1,逻辑表达式可以认为是整型表达式的一种特
6、殊形式);字位表达式;强制类型转换表达式(用类型运算符使表达式的类型进行强制转换);逗号表达式;赋值表达式(将赋值号=右侧表达式的值赋给赋值号左边的变量);条件表达式;指针表达式(对指针类型的数据进行运算)。(5) 数据定义对程序中用到的所有变量都需要进行定义。对数据定义其类型,需要时要指定其存储类别。类型标识符可用:int、short、long、unsigned、char、float、double、struct 结构体名、union 共用体名等;存储类别可用:auto、static、register、extern(如不指定存储类别,作auto处理)。注意:外部数据定义只能用extern或st
7、atic,而不能用auto或register。(6) 函数定义形式为:存储类别数据类型函数名(形参表列);形参说明;函数体。函数的存储类别只能用extern或static。函数体是用花括弧括起来的,可包括数据定义和语句。(7) 变量的初始化可以在定义时对变量或数组指定初始值;静态变量或外部变量如未初始化,系统自动使其初值为零(对数值型变量)或空(对字符型数据);对自动变量或寄存器变量,若未初始化,则其初值为一不可预测的数据;只有静态或外部数组才能初始化。1.3 本文主要研究内容对考生编制的每个源程序的分析过程包括编译、连接、运行和结果评分。控制被评程序相应进程的运行。由于编译、连接、运行考生的
8、被评程序都是在评卷程序的召唤下进行的,因此控制被评程序相应进程的运行是评卷算法的主要任务。对被评程序运行过程中可能存在的死循环进行识别。为了避免因考生的被评程序中可能含有死循环而使评卷无法继续,算法中采取修改定时中断的方法。当被评程序相应进程运行足够长时问后仍未结束,则判定它含有死循环,可强行终止它。然后对该程序记分。当考生的一个程序被评分后,就可以对考生的下一个程序或下一个考生开始评分。为便于机器阅卷,可在试题类型上做如下要求:(1)源程序中主程序与所有子程序均存入同一文件且只能取规定的文件名;(2)所有的输入均由与试题相应的某一文件提供;(3)所有的输出结果均按指定的格式存入一个与试题相应
9、的文件中。2.开发平台及工具简介2.1 Visual C+简介:几乎所有世界级的软件,从业界领先的Web浏览器到面向任务的企业应用,都是使用Microsoft Visual C+开发系统来开发的。要用C+来开发Windows和Web上的高性能应用程序,Visual C+是效率最高的首选工具。Visual C+ 6.0在不牺牲灵活性、性能和控制力度的同时,给C+带来更高水平的生产效率。除了IntelliSense Technology(智能感应技术)和Edit and Continue(即编即调)等显著缩短开发时间的新特性外,Visual C+ 6.0还为Web开发和企业开发提供更良好的支持。M
10、icrosoft Visual C+ 6.0专业版的健壮的构件开发、强大的数据库工具和完备的Internet支持将使您从中受益,创建出策略性的商务解决方案来。Visual Studio C+6.0采用一种非常巧妙的方法将原本非常复杂的Windows编程步骤封装起来,使编程人员可以轻松容易地编写Windows应用程序。Visual C+6.0是Microsoft Visual Studio6.0的一个子集,他对低版本开发程序兼容。它有如下的特点:(1) Visual C+6.0提供了用于开发Windows环境下的应用程序和简捷、快速的开发环境。利用Visual C+6.0开发Windows应用程
11、序具有很高的效率。(2) Visual C+6.0提供了MFC类,开发者只需要做少量的工作就可以得到功能齐全的Windows应用程序。与使用C和Windows SDK开发Windows应用程序相比,使用Visual C+6.0建立一个完美的Windows应用程序所花费的时间要少得多。(3) Visual C+6.0还提供了一个高度集成的工具集,使得在开发应用程序的全过程中都保证了较高的效率。集成化便于程序开发,开发者可以同时在编辑、建立、调试等不同任务之间快速切换,甚至可以同时进行。(4)调试方便:在程序调试时,在遇到编译错误时,会在输出窗口显示出错误类型、行号及错误提示等信息。在输出窗口中双
12、击错误提示时,光标会自动指向出现错误的代码所在行应方便快速找出错误。Visual C+支持断点调试,同时也可以在调试窗口观察有关变量的值,以方便查找出有关的逻辑错误。2.2 ADO技术1) ADO的技术特点 ADO的全称是ActiveX Data Object,它是微软公司为数据库应用程序开发的新接口。ADO基于COM,提供编程语言可利用的对象,它不仅面向Visual C+,同时还提供面向其他开发工具的应用,如Visual Basic、VJ等,甚至还提供面向诸如 VBScript、JavaScript等脚本语言的应用。ADO的底层是OLE DB,不仅能访问关系数据库,也能访问非关系型数据库。A
13、DO对OLE DB的包装是相当成功的,相对于OLE DB中众多的接口来说,ADO对象模型简明扼要,没有一点多余的东西,并且其功能还要比DAO强大的多。并且可以说到目前为止,ADO是目前最快的数据库访问的中间层。2) ADO的结构ADO模型包含了7个对象和4个集合,ADO的结构图如图2.1所示。2.3 SQL语句简介SQL是一种面向数据库的通用数据处理语言规范,能完成以下几类功能:提取查询数据,插入修改删除数据,生成修改和删除数据库对象,数据库安全控制,数据库完整性及数据保护控制。本文用到的SQL语句主要为select语句和insert语句。连接对象(Connection)错误集合(Errors
14、)错误对象(Error)属性集合(Properties)属性对象(Property)命令对象(Command)参数集合(Parameters)参数对象(Parameter)属性集合(Properties)属性对象(Property)记录集对象(Recordset)域集合(Fields)域对象(Field)属性集合(Properties)属性对象(Property)图2.1 ADO的结构图3 需求分析与概要设计3.1系统需求分析本课题的名称为:编程考试机器评卷系统。编程考试是计算机等相关专业的常见考试,其具体要求为对指定的题目设计算法并使用考试所规定的编程语言(如:C语言、JAVA语言、pyth
15、on语言)编写程序实现其设计的算法以完成题目的要求。由此我们可以把本课题按照要求分为两大功能模块来完成:某种编程语言的解析(语法分析、词法分析等);评分系统的设计(如何针对错误来打分、分数如何存储与显示给用户)。a) 某种语言的解析:本模块是系统中最重要的模块也是最难实现的模块是其他模块的基础。在这里选用最熟悉的、使用也最为广泛的C语言进行解析。C语言有着较为复杂的语法与词法规则。在本课题中拟模仿微软的经典编译器VC+的设计,来完成对C语言的解析,包括语法词法分析、关键字的高亮现实、输出程序中出现的错误等等。显示风格模拟VC+6.0的界面设计。b) 评分系统的设计:机器评卷永远也代替不了人来评
16、卷,使用机器评卷系统终归会遇到很多机器很难解决的问题。例如在程序中某一处发生用户丢失标点符号,这个现象对于评卷来说是一个小问题,但是对于程序来说就是一个大的问题(语法错误程序无法通过编译)。而且机器评卷永远也不可能如人评卷那样准确。因此,在本课题中评卷系统的设计遵守两大原则:尽量体现人性化设计对于小错误、小问题不给予严重的扣分;模拟VC+6.0的编译功能,已其检查的出的错误为评分标准。3.2 系统整体框架图C语言解析模块总体结构图如图3.1所示。程序运行后用户选择其所需要评阅的试卷,点击评卷开始阅卷。首先进入的就是C语言的解析部分。 首先,程序将对用户打开的C语言编程试卷.C文件,进行词法和语
17、法的分析。然后通过特定的数据结构生成语法树,在这个阶段将检查出基本的语法词法错误,语法树是进行解析的基础。其作用与原理在后文中讲继续详细说明。在语法树生成成功之后,解析程序建立起关于考卷(C语言程序)的符号表。在符号表的基础上,程序能够对考卷进行类型匹配等表复杂的错误的检查。例如,函数的参数传递错误,结果返回错误等。图3.1 C语言解析模块总体结构图评卷系统总体框架如图3.2所示,当解析程序对源程序分析完毕后,系统根据解析结果对源程序进行评分。在评分中尽量体现人性化设计,例如源程序中如果出现标点符号漏掉等错误按照其他错误的一半分来扣。评分结束后根据分数写出对应的评语,为了方便分数的管理,将对应
18、的分数、评语、源程序名存入到数据库中。评分系统还提供评卷成绩列表用于现实所有的分数。图3.2 评卷系统总体框架图3.3 系统目标本系统为编程考试的机器评卷。系统中最为核心的目标为:对考生的C语言源程序进行解析。这就需要实现几个核心的算法,例如语法分析、词法分析、类型匹配等等。同时要实现评分的智能化、人性化,仅仅检查出语法、词法上存在错误是不够的。还需准确地获取错误的具体情况,根据不同的情况进行打分。因此本系统模拟VC+6.0编辑器,实现对C语言源程序的解析,并输出错误类型。为了方便用户的使用,在系统主界面中还添加一些类VC+编辑器的辅助功能,例如关键字高亮、错误行数提示等。在完成评分后,为了方
19、便成绩的管理,系统添加数据库功能,用数据库存储考试成绩,以方便管理与维护。本系统用VC开发,连接数据库采用ADO方式与Access进行连接。4. 详细设计4.1 数据库的创建本系统采用Access数据库来存储相关信息,建立数据库的过程如下:在工程所在目录下点击鼠标邮件,在弹出的快捷菜单中将鼠标移到“新建”,再在弹出的字菜单中点击“新建Microsoft Office Access 应用程序”。到此数据库就建立好了,将改Access文件改名C语言考试评分成绩.mdb。数据库表格的建立:本系统中数据库是用于存储考试成绩信息。本系统建立一张表:成绩表。成绩表只包含三个字段:题目、分数、评语,设计如表
20、4.1所示。表4.1 成绩表字段含义字段名数据类型C语言源程序标题题目Text程序得分分数Int评语评语Text4.2 MFC连接数据库本系统在进行数据库连接时采用的是ADO方式进行连接。ADO(ActiveX Data Object)是Microsoft数据库应用程序开发的新接口,是建立在OLE DB之上的高层数据库访问技术,即使你对OLE DB,COM不了解也能轻松对付ADO,因为它非常简单易用,甚至比你以往所接触的ODBC API、DAO、RDO都要容易使用,并不失灵活性。ADO数据库开发的基本流程,它的基本步骤如下:1)初始化COM库,引入ADO库定义文件2)用Connection对象
21、连接数据库3)利用建立好的连接,通过Connection、Command对象执行SQL命令,或利用Recordset对象取得结果记录集进行查询、处理。4)使用完毕后关闭连接释放对象。接下来详细介绍连接过程:COM库的初始化我们可以使用AfxOleInit()来初始化COM库,这项工作通常在CWinApp:InitInstance()的重载函数中完成,代码:BOOL CADOTest1App:InitInstance()AfxOleInit();. 2)用#import指令引入ADO类型库为了引入ADO类型库,需要在项目的stdafx.h文件中加入如下语句:#import c:program f
22、ilescommon filessystemadomsado15.dll no_namespace rename(EOF,adoEOF)这一语句的作用同我们已经十分熟悉的#include类似,编译的时候系统会为我们生成msado15.tlh,ado15.tli两个C+头文件来定义ADO库。开发环境中msado15.dll不一定在这个目录下,要按实际情况修改;在编译的时候可能会出现如下警告,对此微软在MSDN中作了说明,并建议我们不要理会这个警告:msado15.tlh(405) : warning C4146: unary minus operator applied to unsigned
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 毕业设计 编程 考试 机器 评卷 系统 论文
链接地址:https://www.31doc.com/p-3943461.html