用Excel制作简易平时练习作业系统
2013-04-29蓝德均
摘 要:作者基于Excel优秀的信息管理功能,研究了简单易制的课程平时练习作业系统制作过程:以客观化为练习题编写模式,大量利用Excel中的宏录制功能和网络资源获取实现相应过程的VBA代码;实现按指定数量和题型随机抽题、省时的电子化作业方式;作业成绩的判定由系统自动快速完成、班级成绩自动汇总,无人为干涉;设计了较为严格的安全措施,防止作业题库内容的不合理传播,一定程度上减少了学生作业抄袭与考试作弊的可能;并简单介绍了该系统在实际应用过程中的情况。
关键词:Excel;制作;作业题库系统;电子化作业
中图分类号:G434 文献标志码:B 文章编号:1673-8454(2013)16-0081-04
平时练习作业,是学生学好课程的必要保证之一。对于工业分析、湿法冶金学这样的专业性很强的课程,也只有通过平时作业练习和实践操作,才能真正掌握课程的知识内容,才有可能具备灵活运用课程基础知识解决实际问题的能力。另一方面,为了解决湿法冶金学、工业分析这类课程“以考试为唯一判断标准”的弊端,过程环节被不断强化。[1]平时练习作业作为过程环节考核的重要组成部分之一,理应得到重视。平时练习作业对学生能力的训练主要有两方面,其一是通过平时练习作业达到熟练掌握课程基础知识的目的,这是打基础的作用,其二是训练对基础知识的灵活运用,这是课程培养较高层次的目标了。尽管后者才是课程的最终目标,但如果前者达不到较好的程度,则后者就如“空中楼阁”,无法实现。因此,在多年教学实践的基础之上,笔者认为平时练习作业应以“打基础”为主,灵活运用知识能力培养为辅,并且灵活应用能力培养应少而精。要打好基础,平时练习对课程知识的包涵必须泛而细,这就要求练习题必须达到一定的数量才有可能实现这一目标。然而,这样做的话,会给学生和教师额外增加不少的负担,使学生对课程产生厌烦情绪,也会使教师对改进课程教学方式提高教学效果缺乏兴趣。
为此,鉴于Excel软件具有强大的数据处理和信息管理能力,容易实现信息管理自动化的优势,笔者提出在Excel软件环境下建设课程题库,实现随机快速自动组卷,自动评分,自动处理学生成绩数据。并且利用Excel实现这一过程比较简单,不需要专门的编程能力,只要会用这一软件,就能够理解并实现这一系统。
一、Excel题库建设的基本思想
为了实现既能全面强化对基础的掌握,又能高效利用学生紧张的课外时间,题库题型全部客观化,即以练习时间相对较少的选择题和判断题为题库题型。练习题以课程章为单位进行编写,数量除了根据章的内容多少和课时比例进行确定之外,还应规定最低题量,每一章的习题数量一般应超过100道,其目的是为了保证在随机抽题过程中,任两个学生之间的题目在理论上都有可能不完全相同,并且还应保证一定的富余空间。为了适当减小任两个学生随机抽取的习题间尽可能小的相似率,这一基数有必要取得稍微大一些。为此,在随机抽取题数为50时,以100为基数,已经可以在较大程度上保证前述目的的实现。为了保证习题不被恶意修改,题库应采取适当的保护措施,以避免不被授权的人在接触到题库的任何时刻都不能够有机会修改题库中的习题和程序代码,并且也不能够轻松地复制出习题以进行不被授权的传播。为了减少教师的工作量,题库应具有自动评分和班级成绩自动汇总功能。
二、Excel题库的具体实现
上述系统完全可以在Excel中通过由宏录制功能产生的VBA代码来简单地实现,具体包括如下方面。
1.题的输入方式
选择题包括题干、选项和答案,它们在Excel工作表中的输入方式为“一行一题”,由随机数、原始序号、题干、选项(四个)、答案共8个部分(列)组成,每一部分占用一个单元格。判断题包括随机数、原始序号、题干、答案共四部分。选择题和判断题在不同的工作表中单独输入。它们的输入顺序建议按相关教材上相应知识点的教学顺序输入,这就是题库中题目的原始顺序,这样做可以方便今后的修改、增删。
2.随机抽题
在Excel中有一个随机数产生函数rand(),可以产生(0,1)之间的随机数,其小数位数高达9位。在题目的随机数单元格中通过rand()产生随机数,再借助于Excel的扩展区域排序功能,以随机数列为排序的主要排序关键字进行排序,从而可以实现一章题目的随机排列。每个学生的每章习题量为50题(可很容易地实现题量调节与题型组合),则选取经过随机排列的题目的前50题输出作为习题即可。这一过程在学生打开题库文件并按要求输入必要的信息(如姓名、学号等)并点击开始做题按钮之后由VBA代码自动实现。
在程序中的具体算法是,利用For-Next语句查询题目总数:指定一个比较大的循环数(取肯定大于每章题目数的一个值,比如1000),逐个判断题目序号单元格是否为空(“”),如果为空,中断循环,则当前循环数减去1即为题目数。经过转换、去空格、替换等字符处理之后,作为扩展区域排序语句中的输入值(此排序代码可由宏录制功能产生)。必须指出的是,Excel软件本身具有自动重算选项,只要某一单元格发生改变,软件即自动对所有单元格的公式进行重算,当然此功能无需在自编制的宏代码中实现。题库在运行过程中,总会有单元格发生改变,随机数也会自动重算而与上一次操作时不同。因此可实现不同的学生、不同的时候抽出的题目都是不一样的,都是随机的。完成了题目的随机排列之后,再用一段代码将随机排列后的前50题复制到另外一个工作表区“作业完成区”。在复制时,只复制题目和选项。也可灵活设置所随机抽取题目数,只需将题目数进行字符串处理后作为复制代码的输入值即可实现。至此,完成了随机抽题功能。
3.完成作业
在“作业完成区”表格里,已经预先设置好相关格式,指定好题的每一部分的位置。因此学生在做作业时,只需要在指定的答案位置(相应的单元格)里按要求(除了指定的答案字符外)输入答案即可。学生完成作业之后,有必要设置一段检查确认程序。它的功能就是检查学生输入的答案字符的合法性和学生是否全部输入完答案,检查无误后要求学生确认是否提交答案。这一段代码基本上使用If-Then-Else条件语句完成。
具体算法是:利用一循环语句遍历50个题的答案单元格,穷举判断答案字符是否合法(包括是否输入答案),如果遍历中发现非法答案输入,即用Exit语句强行退出该段子程序,并用Msgbox函数弹出相关提示信息“答案输入不正确,或者题未做完!请检查!检查修正后请重新点击提交!”。答案全部输入无误后(条件判断语句)仍用Msgbox函数弹出确认信息,学生确认提交答案后利用宏录制产生的代码实现作业区的不可修改保护,以防止误操作修改答案。同时可以计算作业成绩。
4.成绩计算与汇总
学生在输入完答案并确认提交之后,即可计算成绩。而成绩汇总则需要学生将完成的作业文件传送给教师,在教师的本地计算机上完成。
在发给学生的题目文件里,包含题库表格和作业区表格。在题库表格里是包含答案的,但该表格在发给学生的版本里被密码隐藏起来。在题库表格里的题被随机排序并将前50题复制到作业区表格中直至学生完成作业并提交,这一过程题库表格中题目的顺序并不发生变化,因此成绩的判定可以通过简单的一一对比进行,而无需再编写或录制宏代码来实现了。单独建立一张工作表,由于题库和作业的答案都是放在一列中的,因此在成绩判定表格里也任意选择一列,在其单元格中输入If函数,对题库表格中与作业区表格中对应位置(相同题目)题的答案是否相同进行判断,如果相同则得1分,不同则得0分。最后对所有50个题的得分进行求和,换算成百分制成绩。
成绩汇总是该简易题库中非常重要的一项功能。它的实现本身其实很简单,不需要特意编写或录制宏代码。在Excel单元格中,可以通过输入适当的公式实现不同Excel文件之间的数据传递。方法是打开成绩汇总的Excel文件和需要从其中读出数据的Excel文件(学生发送过来的作业文件),在成绩汇总的某单元格中输入“=”,然后单击作业文件中相应的单元格(学生作业文件中“成绩判定”表格里的成绩求和所在单元格),即可将该作业文件中的成绩数据输入到成绩汇总文件中。然而,必须要注意的是,我们要处理的作业文件数不是几份,而是几十乃至数百份,如果按照上述的过程去一一处理的话,工作量相当大,因此必须要借助于宏代码实现这一重复过程。首先录制这一完整过程的宏代码,然后将此宏代码放入一个二重For-Next循环语句中进行适当修改。外循环是列循环,即作业的各章循环;内循环是学生循环,即在某一章的学生作业文件中进行循环。灵活应用VBA的字符串处理函数,不断修改公式中的路径字符串,实现各章各学生作业成绩数据传递公式的自动输入,为更清楚地说明这一过程,现将代码列举如下:
Sub test1()
x = "......"
//此为宏录制产生的公式字符串样例,此处略
For i = 5 To 13 //此为列循环
Cells(1, i + 5).Select //选择章号单元格
dijizhang1 = Str(ActiveCell.Value)
//取章号单元格内的章号,并转换成章号字符串
dijizhang1 = Trim(dijizhang1) //去除空格
dijizhang2 = "\" & dijizhang1 & "\"
//形成相应的章号字符串字段
zhangbiaozhi = "=" & dijizhang1
For j = 1 To 38
//有38个学生,每列循环38次,此为行循环
Cells(j + 1, 3).Select //选择学号单元格
xuehao = Str(ActiveCell.Value)
//取学号单元格内的学号,并转换成字符串
xuehao = Trim(xuehao)
//去除学号字符串内的空格
path1 = Replace(x, "\4\", dijizhang2)
//修正文件路径字符串内的章号
path1 = Replace(path1, "=4", zhangbiaozhi)
//修正章标识
path2 = Replace(path1, "200810902063", xuehao)
//修正文件路径字符串内的学号
Cells(j + 1, i + 5).Select
//选择成绩接收单元格
ActiveCell.FormulaR1C1 = path2
//给成绩接收单元格赋于公式
Next j
Next i
End Sub
需要指出的是,为防止学生发错作业文件,在输入公式的时候应用了If函数,判断隐藏于题目文件中的章标识是否正确,正确则传递成绩,错误则给出错误标识“-1”。另外,如果学生的作业文件不存在,在运行此段宏代码时会弹出新建文件对话框,此时点击“取消”即可,但此时相应的单元格内会出现错误标识“!REF”。在以后相应的作业文件存在后,再次打开成绩汇总文件时选择更新,成绩自动从作业文件中输入进来,不再出现错误标识。
5.安全保护
题库内容都是笔者根据教学内容编写出来的,体现出了笔者在教学上的思想、观点,具有独创性。因此,为了防止学生在使用过程中可能会发生的无意或有意的未经授权的传播,题库系统必须考虑安全保护方面的措施。另外,该题库也作为考试题源之一,也需要考虑预防有些学生可能会将其作为作弊的资源。本题库系统具体的安全保护措施体现在如下几方面。
(1)深度隐藏题库表格
如前所述,题库表格其实是包含在发给学生的作业文件里的,这是为了随机抽题和判定成绩而设计的。学生除了随机抽到了50题外,其余的题必须对学生隐藏。在Excel里表格的“隐藏”有可见、一般隐藏和深度隐藏三个级别。一般隐藏在使用菜单栏里的取消隐藏命令后可以再显示出来(除非该工作薄加以保护),而深度隐藏则无法显示,必须在工作薄和表格未加保护的情况下,进入VBA代码窗口里更改表格的“Visible”属性(0、-1、-2分别对应着可见、一般隐藏、深度隐藏),而这则要求具有较高的对Excel的熟练使用能力。并且,为了增加安全性,打开代码窗口也设置了相应的密码。
(2)题库系统很多功能都是由宏代码实现的
对于安全性设置为“中”及以上的系统,它可以绕过宏代码打开文件,这样有可能对题库的安全性造成威胁,也使题库的很多功能不能体现。有多种方法实现这一功能,其具体过程在网上可查。[2]本系统采用设置宏表的方法实现。为此,题库系统里专门设置了一张宏表,它的功能就是强制性的要求打开文件必须应用宏,否则不能打开文件内容。为安全起见,宏表存在公式(命令语句)的单元格被隐藏起来,整个宏表也实施了密码保护。在发给学生的作业文件中,宏表可见,但宏表中的公式不可见,宏表也不可编辑与修改。
(3)基本保护措施
对学生可见的所有表格实施表格密码保护功能,整个文件实施工作簿密码保护措施。特殊地,在学生的作业完成区表格,这张表格要涉及到随机抽题和输入答案,在抽题之前还需要学生输入“姓名”、“学号”、“班级”三项信息,因此这张表格实施特殊保护措施,它的保护与去保护在宏代码中完成。在打开作业文件并选择作业完成区表格时,表格是被保护的,但三项基本信息输入单元格仍然可输入内容(保护之前去除这三个单元格锁定选项)。然后进行随机抽题,在宏代码里,成功输入基本信息之后和将所抽题目复制过来之前,解除对表格的保护功能;将题目复制到作业完成区之后,又恢复对表格的保护。只不过此次保护首先恢复基本信息单元格的锁定选项,其次去除答案输入区单元格的锁定选项,以使学生除了能够在指定答案输入区输入答案之外,该表中其它任何单元格在作业题出现之后都不能进行编辑与修改。特别重要的是,在保护表格的同时必须实现这一功能,被保护区域单元格不能被选定,也就不能复制被保护区域内单元格里的任何内容,尽量避免学生对题目内容的不合理利用。
(4)安全保护的强化措施
为了避免学生利用Excel软件提供的菜单项、功能按钮或者其它软件功能作出一些题库制作者预想不到的与完成作业无关的处理,通过宏代码完成下述强化保护措施:取消所有菜单项和功能按钮的功能,使它们在作业文件里对学生不可见,而仅仅是一张足够学生完成作业的表格。当然,这张表格里右键菜单也失效。这一功能必须在打开文件时就一起作业,因此应放在文件打开这一事件过程中;同时为了不影响计算机系统中其它Excel文件的正常使用,还必须有一个恢复过程,这一恢复功能应放在文件的关闭事件过程中。需要注意的是,失效与恢复语句必须完全一一对应,否则可能会引起一些Excel文件使用上的不方便。实现这一功能的详细过程网络可查。[3]
三、改进与建议
即使采取了上述安全措施,但在使用中仍然发现,学生中也不乏对Excel非常熟悉者,他们可以破解上述安全措施而获得答案,并没有达到本作业系统最初的训练目的。为此,作者提出如下改进措施。
1.答案本地化
如果不考虑随机抽题这一功能的话,所有学生的作业都是完全一样的,这一改进不难实现。但如果考虑随机抽题过程的话,实现这一功能就要复杂一些。可以考虑将每一道题赋予唯一的标志(如题号),学生在完成作业时随机抽取的题带上标识(当然是隐藏的)。成绩的判定在教师系统上完成而不在学生系统上实现,按标识在教师系统上的题库里检索比对答案从而实现评分。
2.作业题库本地化
将作业题库放在教师本地计算机上,并运行具有网络功能的题库界面,限定时段,学生在联网的另一台计算机上进行随机抽题产生作业文件。完成作业后,仍然将作业文件发送到教师计算机上判定并汇总成绩。这样的系统稍微复杂一些,但借助于Excel的控件工具箱,还是可以很简单地实现的。
本作业题库系统以客观题为题型,着重于对课程基础知识掌握程度的加强,因此建议在那些强调基础、基础知识内容多而复杂的课程中制作。
四、学生应用问题
在作业题库系统应用过程中,发现学生在应用过程中出现的一些问题。当然,这些问题可能并非源于题库系统,但却是我们在制作与应用过程中应注意的。
1.发错作业文件现象
笔者在应用过程中是分章发布作业的,在回收作业文件过程中发现偶尔有学生会发错作业文件,会将彼章作业文件当做此章作业文件发回来。根据前面的阐述,系统会自动发现错误的作业文件,并在成绩汇总表格里返回相关标识。
2.抄作业现象
这样的作业系统仍然避免不了学生的抄作业现象。极少数学习十分不积极的学生可能会将其它同学的作业文件名修改一下就当成自己的作业发送回来。目前,该系统里还没有对这个问题进行修改。初步的解决方案就是仍然采用If函数,当作业文件里的姓名、学号都一致时才输入成绩,否则输入相应的标识。因为已经完成的作业不能再做任何编辑与修改,文件名可以被修改,但里面的信息却改不了。
参考文献:
[1]蓝德均.化工类专业湿法冶金学课程考核模式研究[J]. 教育教学论坛,2011(31):201-203.
[2]百度文库[DB/OL].http://wenku.baidu.com/view/596620c0bb4cf7ec4afed05f.html.
[3]百度空间[DB/OL].http://hi.baidu.com/yuweiming/blog/item/e289b999acbc5a036f068c11.html.
(编辑:鲁利瑞)