曾之光
摘要:大学计算机基础课程的考试主要考核的是学生的理论知识与实际操作两部分内容,理论知识采用选择题的形式考核,操作部分包括Windows的基本操作和office软件的应用操作进行考核。如果单纯依靠人工阅卷,效率会非常低,而且容易出现误判、漏判、给分不公正等问题。为了解决这些问题,我认真研究了很多资料,采用Python语言对选择题编写自动阅卷程序,使用VB语言编程,实现了操作题的自动阅卷功能。本文阐述了自动评分功能构成原理及各模块的设计与实现方法,从技术上给出了实现这些阅卷功能的主要代码。解决了这些问题将提高教师试卷批阅的工作效率,并且其准确性很高,可以广泛地应用于计算机基础课程考试的阅卷中。
关键词: 大学计算机基础;自动阅卷;Python;VB;选择题;操作题
0 引言
信息技术已融入社会生产和生活的各个方面。目前在我国计算机教育正在不断的进行普及,广大高校普遍都采用在计算机上直接操作的考核方式。但由于《大学计算机基础》是被是各大高校所有非计算机专业的公共必修课,上课学生数量多,考试的人数也多,单纯依靠人工进行阅卷会带来很大的工作量。电脑自动阅卷可以减轻阅卷教师工作量的同时,也可以降低判卷的错误率,提高阅卷的质量和客观性。因此,在计算机基础考试中采用自动评分是最好的选择。目前各个高校的计算机基础考试主要分理论选择题、 Windows操作题、文字处理Word、电子表格 excel、演示文稿PowerPoint等知识内容的考察。理论知识部分的选择题进行自动的评分相对比较容易实现,对于操作部分的题目进行自动评分还是有着较大的难度。该部分内容实践性很强,让学生按题目要求对 windows和office软件的操作题进行操作,再对操作结果进行判断。本人自主开发设计了针对选择题的自动改卷评分,针对windows操作题和office软件操作题的自动改卷评分等功能及解决方案。
1 利用Python编程设计对选择题考核自动阅卷的实现
Python语言因具有简洁、直接、易用的特点,被广泛地应用于解决实际问题,同时,它具有很大的灵活性,有非常强大的第三方库支持,工作效率高。大学计算机基础考试一般有20道理论选择题,都是单选题。每套题的题目和答案都不一样,需要在短时间内准确地把每个班的选择题成绩统计出来,实现自动化批改,要做以下工作。
1.1 准备工作
要实现自动化改卷,电子试卷的答题卡必须要统一模板。答题卡采用Excel文档,要在规定的位置填写姓名和学号,答案填在第三行,每一题的答案要填在对应的单元格,如图1所示。为了便于程序读取文件,所有的电子答题卡文件必须与Python程序放在同一个文件夹目录下。
1.2 读取Excel表格数据
Python要读取Excel表格数据就必须安装openpyxl库。在命令窗口输入:pip install openpyxl,然后回车就安装好了。本文以10道选择题的自动评分为例,选择题自动评卷的主要部分代码如下:
import openpyxl
print(“请输入答案所在的行数”)
# day = 3
day = int(input())
print(“请输入正确答案”)
print(“输入的答案是不带空格或逗号的大写字母”)
keys = [‘D’, ‘B’, ‘D’, ‘B’, ‘D’, ‘D’, ‘D’, ‘B’, ‘B’, ‘B’]
keys = input()
# DBDBDDDBBB
awb = openpyxl.Workbook()
awsheet = awb.active
# first row
for i in range(4, 14):
awsheet.cell(row=1, column=i - 1, value=i - 3)
awsheet.cell(row=1, column=1).value = “學号” # write in
awsheet.cell(row=1, column=2).value = “姓名”
awsheet.cell(row=1, column=13).value = “得分”
aws = []
# get answer 1-10
for i in range(4, 14):
charaws = ws.cell(row=day, column=i).value.upper() # turn into upper case
aws.append(charaws)
awsheet.cell(row=j, column=i - 1, value=charaws)
if charaws != keys[i - 4]: # WA
# thiscell.font.italic = True
awsheet.cell(row=j, column=i - 1, value=charaws).font = RedFont
if i <= 14:
score = score - 1
awsheet.cell(row=j, column=13, value=score)
else:
score = score - 1
awsheet.cell(row=j, column=13, value=score)
print(aws) # 打印答案数组
j = j + 1
# print(len(f)) # 目录下文件个数
# aws.cell(row = 1, column = 1).value = ‘test’
awb.save(‘aws.xlsx’)
print(“改卷完成,谢谢使用.”)
把上面编写的程序和学生的答题卡放在同一个文件夹,然后运行代码,会先弹出“请输入答案所在行数”,如果答题卡的答案填在第3行就输入一个“3”字再按回车。回车后会弹出“请输入正确答案”,并且显示“输入的答案是不带空格或逗号的大写字母”。按要求输入了正确答案后再按回车如图2所示:
最后得到一个Excel文档,记录了每位同学的选择题最后得分,如图3所示:
通过上面的代码我们可以对所有学生的选择题答题卡进行快速的自动批改,就算换了不同的题目,不同的答案,只要输入正确的答案都可以直接快速修改,而不需要修改代码,只要按原来答题卡的模板进行填写答案就可以,这样便捷而快速。
2 利用VB编程设计对操作题自动阅卷的实现
VisualBasic是由微软推出的用于Windows程序设计优秀编程语言。它对微软的Windows系统和Office软件的兼容性高。而且,它还引入了可视化的和面向对象的程序设计方法,大大提高了开发效率。所以,我利用VB编程设计对操作题进行了自动评卷。
2.1 Windows操作题考核自动阅卷的实现示例
本节介绍了 windows 操作考题自动阅卷的基本思想,并提出了解决方案。Windows 操作题自动阅卷最关键的技术就是对学生考题的对象属性进行提取与判断。考题对应的判断模块主要是通过选择性语句来实现对考生文件夹中对象的属性与考试要求逐一进行比较,如果比较结果一致表示正确,比较完成后将累加相应的得分。基于该思想,我利用 vb的相关知识编写了自动判断Windows操作题对错的代码。下面将对各个类型题目的自动阅卷的关键代码进行逐个介绍。由于全部阅卷的代码较多,这里只列出了部分关键性代码。
首先在计算机自动阅卷时 ,程序要和文件或文件夹放在同一个文件夹下进行 ,先进行读取,然后再判断正确与否,正确的增加相应的得分。比如:文件与文件夹在指定文件夹下是否存在,文件与件夹的属性是否正确等,利用 VB编程能比较方便地进行判断。主要代码如下:
我们以五题Windows操作题为例,首先,先定义五个变量为整数型作为每题获得的分数。
Dim one As Integer
Dim two As Integer
Dim three As Integer
Dim four As Integer
Dim five As Integer
然后我们新建一个EXCEL表格作为各学生成绩数据存放的地方,工作表中有姓名,总分,每一题得分等字段名,后面自动判断得出的评分数据可以按顺序自动填到相应的单元格。
exl.Workbooks.Add
Cells(1, 1).Value = “姓名”
Cells(1, 2).Value = “总分”
Cells(1, 3).Value = “第一题”
Cells(1, 4).Value = “第二题”
Cells(1, 5).Value = “第三题”
Cells(1, 6).Value = “第四題”
Cells(1, 7).Value = “第五题”
Dim o As String
Dim p As String
Dim pathstr As String
pathstr = Label3.Caption & “\” ‘父目录
p = Dir(pathstr, vbDirectory) ‘取第一个
Do While p <> “” ‘不为空就循环
If p <> “.” And p <> “..” Then ‘如果不是当前目录及上一级目录 . 及 ..
If (GetAttr(pathstr & p) And vbDirectory) = vbDirectory Then ‘是否是目录
Cells(i, 1).Value = p ‘确定是目录,添加到列表,这里可以自己处理
Cells(i, 3).Value = 4
End If
End If
p = Dir ‘取下一个
i = i + 1
Loop
具体操作是否正确得分,判断文件ATEND.DOC移动到JINK文件夹,判断USER.txt文件属性为只读和将文件夹REMOTE压缩在LOCAL文件夹中。如果操作正确则增加相应的得分,把得分填入相应的单元格,代码如下:
If Dir(Path & “JINK\” & “ATEND.DOC”, vbNormal) <> “” And Dir(Path & “success\” & “ATEND.DOC”, vbNormal) = “” Then two = two + 3
Cells(m, 4).Value = two
If Dir(Path & “PAINT\” & “USER.txt”, vbReadOnly) <> “” Then three = three + 3
Cells(m, 5).Value = three
If Dir(Path & “LOCAL\” & “REMOTE.rar”, vbNormal) <> “” Then four = four + 3
Cells(m, 6).Value = four
If Dir(Path & “MAULYH\” & “BADBOY”, vbDirectory) = “” Then five = five + 2
Cells(m, 7).Value = five
遍历考试文件夹里每位学生的学号和姓名文件夹,把各名学生的学号和姓名填入对应的单元格,把Windows文件操作题最后得分自动相加后填入EXCEL表格中,并把EXCEL文件命名为“操作成绩”,代码如下:
FName = Label3.Caption & “\” & “操作成绩.xls”
ActiveWorkbook.SaveAs FileName:=FName
i = 1
j = 1
Do While Cells(i, 1).Value <> “”
i = i + 1
Loop
Do While Cells(1, j).Value <> “”
j = j + 1
Loop
i = i - 1
j = j - 1
score = 0
For a = 2 To i
For b = 3 To j
If Cells(a, b).Value = Cells(1, b).Value Then score = score + 1
Next b
Cells(a, 2).Value = score
score = 0
Next a
Command1.Enabled = False
For k = 1 To j
最后通过窗体和控件把代码界面化便于操作和运行,最后的效果如下图2
2.2 Office操作题考核自动阅卷的实现示例
在VB中对Office操作题进行自动批改评分的思路与Windows操作题自动阅卷的思路一样。在Word、Excel、PowerPoint大题模块中有几道小题就先定义几个变量作为每题获得的分数,然后创建一个EXCEL表格填写成绩。通过IF和Then函数对题目进行判断,对的就在定义得分变量进行累加得分。最后遍历考试文件夹里每位学生的学号和姓名文件夹,把各名学生的学号和姓名填入对应的单元格,把Windows文件操作题最后得分自动相加后填入EXCEL表格中。
我们在对Office操作题目的设置做出判断时,要用到office软件自带的宏功能帮助。利用宏可以帮助我们快速写出批改程序,在不知道该用什么命令时,可以先录制好完成该题时的宏,然后去理解其中的宏命令含义,再编写相应的程序,这样可以提高编程效率。对于Office操作都可以采用这种方法获得宏命令代码,但要经过修改才能使用。比如想要判断字体、字号、字体颜色等等的操作是否正确时,我们可以先录制相应的宏命令,找出里面字体设置的代码,因为宏命令的脚本语言是VBscript,用到的代码在VB中一样适用。下面我们分别对Word、Excel、PowerPoint这三大模块的操作阅卷的主要实现代码做出讲解。
2.2.1 Word操作题实例
通过前面所说,我们对VB语言自动批改Word操作题已经有了大致的思路。下面,我们通过两个实例学习VB批改Word操作题的编程方法。
例1字体格式的评测。
题目要求:将标题段文字(“搜狐荣登Netvalue五月评测榜首”)的格式设置为:小三号宋体、红色、加下划线、居中,并添加蓝色底纹。 批改代码如下:
Set yirange = ActiveDocument.Paragraphs(1).Range ‘定义区域为第一段
With yirange
If .Font.Name = “宋体” And .Font.Size = 15 Then one = one + 1
If .Font.Color = wdColorRed Then one = one + 1
If .Font.Underline = wdUnderlineSingle Then one = one + 1
If .ParagraphFormat.Alignment = wdAlignParagraphCenter Then one = one + 1
If .Shading.Texture = wdTextureNone Then one = one + 1
例2表格格式的評测。
题目要求:将文档中第二页所提供的文字转换为一个6行3列的表格,再将表格内容设置成“中部右对齐”;设置表格各列列宽为3厘米,各行行高为1厘米,并将表格最外面的四条边线边框设置为红色、1.5磅粗细的双实线。 批改代码如下:
Set wurange = ActiveDocument.Paragraphs(5).Range ‘定义区域为第五段
With wurange
If .Paragraphs.CharacterUnitFirstLineIndent = 2 Then four = four + 1
End With
If wrd.Documents(s).Tables.Count > 0 Then five = five + 2
With wrd.Documents(s).Tables(1)
If.Borders(wdBorderBottom).LineStyle=wdLineStyleDouble And .Borders(wdBorderHorizontal).LineStyle = wdLineStyleSingle Then five = five + 2
If.Borders(wdBorderBottom).LineWidth=wdLineWidth150pt And .Borders(wdBorderHorizontal).LineWidth = wdLineWidth050pt Then five = five + 1
If .Borders(wdBorderBottom).Color = wdColorRed And .Borders(wdBorderHorizontal).Color = wdColorAutomatic Then five = five + 1
If .Rows(1).Range.Paragraphs.Alignment = wdAlignParagraphRight Then five = five + 2
If .Rows(1).Height = 28.35 Then five = five + 2
End With
2.2.2 Excel操作题实例
跟前面Word操作题自动评分的代码一样。下面,我们继续通过实例介绍VB批改Excel操作题的编程方法。
题目要求:1、将sheet1工作表的A1:G1单元格合并为一个单元格,文字水平居中对齐,设置第1行行高为20。2、用函数计算“合计” 、“平均值”列内容,将工作表命名为”家用电器销售数量情况表”。批改代码如下:
Set xlSheet = xlBook.Worksheets(1) ‘改过工作表名的设置活动工作表
If xlSheet.Range(Cells(1, 1), Cells(1, 7)).MergeCells = True Then one = one + 2
‘设置行高
If xlSheet.Rows(1).RowHeight = 20 Then one = one + 1
‘判断工作表名
If xlBook.Worksheets(1).Name = “家用电器销售数量情况表” Then two = two + 1
‘判断公式
Set xlSheet = xlBook.Worksheets(“家用电器销售数量情况表”)
If xlSheet.Range(“F3”).Formula = “=SUM(B3:E3)” And xlSheet.Range(“F6”).Formula = “=SUM(B6:E6)” Then two = two + 1
If xlSheet.Range(“G3”).Formula = “=AVERAGE(B3:E3)” And xlSheet.Range(“G6”).Formula = “=AVERAGE(B6:E6)” Then two = two + 1
2.2.2 PowerPoint操作题实例
我们再来看看PowerPoint的阅卷评分代码,全部幻灯片切换方案为“溶解”,评分的代码如下:
If pptApp.ActivePresentation.Slides.Count <> 2 Then
If pptApp.ActivePresentation.Slides(3).SlideShowTransition.EntryEffect = ppEffectDissolve Then one = one + 3
Else:If pptApp.ActivePresentation.Slides(1).SlideShowTransition.EntryEffect = ppEffectDissolve Then one = one + 3
End If
自动批改第二题,第二張幻灯片版式改为“两栏内容”,标题为“尼斯湖水怪”,插入图片“ppt2.jpg”,设置图片动画为“进入“动画的 “形状”,效果选项为“形状-菱形“,设置文本动画为”进入“-”飞人“,效果选项为”自左上部“。评分代码如下:
If pptApp.ActivePresentation.Slides.Count <> 2 Then
If pptApp.ActivePresentation.Slides(3).Layout = ppLayoutTwoObjects Then two = two + 1
If pptApp.ActivePresentation.Slides(3).Shapes(1).TextFrame.TextRange.Text = “尼斯湖水怪” Then two = two + 1
If pptApp.ActivePresentation.Slides(3).Shapes(3).Height < 205.5 Then two = two + 1 ‘插入图片
Set dhshape = pptApp.ActivePresentation.Slides(3).Shapes(2)
With dhshape
If dhshape.AnimationSettings.EntryEffect = ppEffectFlyFromTopLeft Then two = two + 1
End With
Set dh2shape = pptApp.ActivePresentation.Slides(3).Shapes(3)
With dh2shape
If dh2shape.AnimationSettings.EntryEffect = ppEffectDiamondOut Then two = two + 1
End With
Else: two = two + 0
End If
通过上面的代码分析知道,我们可以针对不同的题目内容去修改IF函数后面的条件,再对应给出相应的分值。最后一段统计分数的代码和前面Windows操作部分的代码类似,就是遍历文件夹里每位考生的Word、Excel、PowerPoint文档,最后把每位考试的姓名、学号和成绩都填到一个新建的Excel文档。当然,为了方便运行操作,我们也同样通过窗体和控件把代码进行界面化。
結束语
以上编程方法,有点繁复,也不一定很完美,但毕竟提供了一种阅卷思路,相比用人工去逐一打开学生的文件,然后进行评判来得省时、省力,而且阅卷者能根据自己的需要增减某些项目的评分要求。在Windows平台上完成计算机基础考试中各模块自然融合自动阅卷,已成功地应用于2020年第一学期大学计算机基础期末考试试题的批改中,经各位老师和实践验证表明,该阅卷程序性能稳定,阅卷速度快,结果完全正确。当然批改程序也不是万能的,只起辅助手段。学生答案可能千奇百怪,若实际操作过程中,出现评错分的情况时,一定要仔细研究,分析原因,修正程序,以免误导学生。
参考文献:
[1] 朱江,谢深泉.考试系统中 Word 操作题自动阅卷的实现[J].湘潭大学自然科学,2002,4(3):49-51.
[2] 王亚利,李井竹.基于 VBA 的 Office 操作题自动阅卷技术的研究与实现[J].廊坊师范学院学报然科学版),2008,8(4):5-7.
[3] 檀小璐.大学计算机基础考试系统的分析与设计[D].秦皇岛:燕山大学,2013.李昕.计算机基础考试系统的设计与实现 [D].青岛 : 中国海洋大学,2014.
[4] 姚利国,姚晖.计算机基础考试中 Office 操作题自动阅卷的实现[J].四川教育学院学报,2003,(12) :85-86.
[5]杨本伦. Visual Basic 开发技术大全.清华大学出版社, 2010.8
[6] 刘颖,荣义,刘伟.基于VBA 通用的上机考试制卷与评分系统的实现 [J].电脑编程技巧与维护,2010,8:32-34.