【最新版】C语言源程序的自动评判毕业设计 联系客服

发布时间 : 星期二 文章【最新版】C语言源程序的自动评判毕业设计更新完毕开始阅读ff5177d5dc88d0d233d4b14e852458fb770b38aa

第2章 概要设计

2.1 方案设计

本课题的任务是完成一个C源程序的自动评判系统。首先需要解决的问题是确定整个系统的开发环境和工作方式,然后是确定系统所要达到的目标,接着分析系统所应完成的功能以及可能遇到的问题,最后给出具体实现的步骤。

2.1.1 开发环境

经过与指导老师的交流,查阅有关资料,分析系统的整体情况,本系统更加类似于一个应用程序,再结合自己所学知识,决定采用微软的Visual C++集成开发环境来开发整个程序。Visual C++是Windows环境下最强大、最流行的程序设计语言之一。Visual C++可以用来开发各种类型、不同规模和复杂程度的应用程序,开发效率很高,生成的应用软件代码品质优良。

2.1.2 工作方式

分析整个系统,最主要的功能是:编译链接源程序,运行目标程序,目标程序输入输出的重定向。结合Visual C++开发环境来看,有批处理方式、普通应用程序方式、Add-in方式。考虑到Add-in的方式在使用Visual C++编译器去编译链接C源程序的时候更加方便,并且Add-in的方式也可以利用Visual C++的可视化界面的开发功能,所以工作方式采用Visual C++下的Add-in方式。Visual C++ Add-In基本上就是实现了IDSAddIn接口的COM对象。通过这个接口,Add-in能够掌管Visual C++环境,并且执行特定的任务,例如在Visual C++环境下打开工作空间,编译工程等等。在使用Add-in方式的时候,首先需要打开Visual C++环境,然后加载add-in文件(*.dll)。

2.1.3 系统目标

本系统最终目的是为了减轻老师负担,利用计算机自动评判编程作业,替代手工检查方式。要求学生将编写好的作业交至指定文件夹,然后老师运行本系统,编译链接,运行生成目标程序,通过比较程序输出与标准答案,可以得到每个源程序的评判结果。

2.2 系统功能

详细的分析整个系统功能应该包括: 1. 从文件夹抽取源程序。

2. 控制Visual C++编译器编译链接源程序。

3. 以测试数据运行生成的目标程序。 4. 程序输出与标准输出比较。 5. 根据比较结果得到评判结果。

2.3 需要解决问题

1. 存放C源程序的文件夹的组织方式和文件夹中C源程序的命名方式。

2. 程序通过何种方式提取C源程序。

3. 用程序控制Visual C++编译器去编译链接C源程序。 4. 如何处理编译链接时出错,没有生成目标程序的C源程序。 5. 通过何种方式运行编译链接之后生成的目标程序。

6. 在运行目标程序时,如何自动完成目标程序的输入和输出。 7. 对于运行目标程序时异常情况的处理。

8. 采用何种方式比较输出结果和正确答案,以及如何存储比较结果。

2.4 系统流程

2.4.1 基本流程

基本上本系统是一个顺序执行的过程,系统的实现也是一步一步来的。下一个模块需要用到上一个模块的数据。系统流程图如图1-1所示。

1. 系统从文件夹提取出所有的C源程序。

2. 系统控制Visual C++的编译器去编译链接提取出的C源程序,得到相应的生成的目标程序(exe)。

3. 系统以正确输入数据运行生成的目标程序(exe)。 4. 系统提取运行目标程序(exe)得到的输出数据。 5. 系统将输出数据与正确答案进行比较。 6. 根据比较结果得到评判结果。

图1-1 系统流程图

2.4.2 具体实现

根据系统应该完成的功能,结合需要解决的问题,系统的具体实现如下: 1. 文件夹的组织方式:每一个题目设置一个文件夹,同一题目的所有编

程作业(只交后缀名为*.c的文件)交至对应的唯一文件夹下。

2. 每个文件夹中C源程序的命名方式:以学号命名,后缀名为*.c,这样每个文件夹中的C源程序是唯一的,在评判时能更直观的得到结果。

3. 设置一个基本对话框,通过列表控件来提取选择的一个文件夹下的所有C源程序。

4. 编译链接方面,Visual C++不能直接编译链接后缀名为*.c的C源程序,因此提前新建一个WIN32空白工程文件,然后将C源程序的后缀名改为*.cpp,放至空白工程中,便可以解决不能直接编译链接的问题。通过Add-in接口,控制整个Visual C++环境,打开已放入改了后缀名的C源程序的空白工程文件,然后便可进行编译链接。在这里要设置循环,对列表框中的每一个C源程序都进行编译链接。

5. 循环过程中,编译链接后生成目标程序的C源程序,从空白工程文件的Debug文件夹中复制其目标程序到暂存的文件夹,并用其学号来命名生成的目标程序。然后循环继续直到所有C源程序都完成编译链接。

6. 对于编译链接后没有生成目标程序的C源程序,视为编译链接错误,将此结果先一步存至评判结果处。

7. 编译链接全部完成后,设置弹出一个对话框,用于输入测试数据、运行正确的目标程序,得到正确答案。同时通过列表框提取已经生成的所有以学号命名的目标程序。

8. 对于编译链接正确,已经生成的目标程序,设置循环,每次循环中通过新建一个进程来运行应用程序,如果程序正常结束,则关闭进程,循环继续去运行下一个目标程序。

9. 在运行目标程序时,通过管道技术来完成输入输出数据的重定向问题。 10. 对于目标程序运行时可能出现的种种异常情况,例如死循环等,通过设定一个时间,超出这个时间后进程强制结束来处理,进程强制结束后主循环继续,同时判定为运行时错误。

11. 在开始循环运行所有目标程序之前,需要老师首先运行此题目正确程序生成的应用程序,并且输入运行数据(如无需数据输入则省略此步骤),得到正确的输出数据,存入一个编辑框。然后每次运行生成的目标程序得到输出时与编辑框中字符串比较,来得到比较结果。结果是相同或是不同。

12. 最后的评判结果:没有生成目标程序,判为编译链接出错-50分;生成了目标程序,但是输出与正确答案不同,判为运行错误-60分;生成了目标程序,并且输出结果与正确答案相同,判为程序正确-100分。