答辩题的随机选择
2021-01-12杨皓许倩
杨 皓 许 倩
(北京科技大学机械工程学院 北京 100083)
《机械设计基础》是材料、采矿、冶金等非机械类专业的专业必修课,它原本是从《机械设计》课程简化而来。机械类的学生在学完《机械设计》后,一般会安排《课程设计》,这是机械设计课程的重要实践教学环节。
课程设计的题目一般是一套简单的整体设备设计,包括电动机、传动装置及执行机构。工科类专业的学生应在本次课程设计中学习运用标准、规范、手册、图册,查阅科技文献,掌握基本的机械设计技能和获取相关信息的能力。
在课程设计结束时,要求每个学生完成设备总装配图1张、部件装配图1张、零件工作图若干张,设计计算说明书1份,学生完成了这些工作后,最后需要参加一个小小的答辩,帮助教师了解学生的机械设计水平。
一位教师通常带2-3个班,大约60-90名同学,完成一次课程设计。因此教师需要准备若干题目,让同学们参加答辩。答辩时题目应从答辩题库中随机抽取3-5道,从学生的回答中往往能看出学生对《机械设计基础》的掌握情况,堪比期末考试的准确度。
由于答辩往往集中在《课程设计》的最后两天,每位同学的答辩时间都不可能很长,题目也不会太多,所以题目的随机性非常重要。必须避免某位同学刚刚答辩完,下一位或几位同学答辩时,所采用的题目与前一位同学相同的情形,所以题目的数量应比较多,至少在100道以上。
1 程序的界面
为了达到这个目标,我专门用ppt中附带的开发工具,开发了一个小程序。这个开发工具就是office自带的VB程序设计功能,只要启用宏即可使用。一般的office在安装时都附带了此功能,所以程序编写调试成功后,在任意安装了Office的电脑上像往常一样打开ppt文件,就可以运行,唯一需要注意的是运行时,Offiice会给出提示:“是否启用宏?”单击“启用”即可。
图1:界面的布置
编写这个程序时,首先要准备好答辩题库,题库中的题目可以随时添加,这里采用了.txt文件类型,因为VB可以直接读取它,该文件也可以用普通的文本文件编辑器编辑 (当然word也没问题),非常方便(见图1)。
接着就是ppt界面的布置。因为这个ppt的内容是要展示给学生看的,所以pprt界面上只有三个对象:一个文本框,用于显示学生要回答的题目,一个按钮,用于单击显示下一题,另一个按钮,用于启动小程序。
2 编写代码
界面布置好后,就需要先打开答辩题库,将库中的题目读取到一个数组中。在此之前,需要先声明一些变量,如下所示:
其中i是用于读取文件中题目的计数整型变量,setTemp是用于读取题目的字符串变量,irnd和n是用于循环的整型变量。
之后,打开题库文件,用Do While语句把每一行(即每个问题)读入setTemp,再将setTemp的内容写入一个全局数组strWord(i)中,最后给i加1,记录目前读入了多少道题。
Do While循环结束后,把i的值赋予一个全局变量lLen,表示题库中一共有多少道题。代码如下所示:
下面是这个小程序中最重要的部分,即打乱题目顺序,让每位同学看到的都是不同的题目。首先建立一个全局数组(因为“下一题”按钮需要使用它),用For循环给每个数组元素赋值,该值与数组的下标相同,该数组称为下标数组a(i),如下所示:
再次建立一个循环,在循环中先把当前数组元素的值赋予一个中间整型变量t,再利用随机函数给整型变量n生成一个随机数并取整Fix(Rnd*lLen),随机数的范围是0-小于等于题目数,所以需要加1,因为第一题的下标是1,而数组一般从0开始。把随机数赋予题目下标数组a(i)的当前元素,(注意:因为前一个循环把下标赋予数组元素本身,所以第i个数组元素的值就是i),最后把中间整型变量t赋予随机数组元素。整个过程相当于把当前数组元素与随机数组元素的值对调,如下所示:
执行完这一步后,下标数组的值就是随机的,且不会重复。也就是说,假定题库中有100道题,程序执行到这里,下标数组a(100)中各元素的值就是1、2、3......100,只是其顺序是打乱的,且任何两个数组元素的值都不相同。
接着要在单击“下一题”时,显示下一题,这比较简单,先把下标数组中的最后一个元素赋予中间变量irnd,再从题目数组中读取一道题,注意这不一定是最后一题,因为下标数组的值已经被打乱,它可能是(1-题目总数)之间的任何一道题。接着把题目总数减去1,读取题目数组中的下一道题,其下标是下标数组中的倒数第二个元素,以此类推,就可以遍历所有答辩题目。
为了避免题目数组中的所有题都已读取出来,但使用者不知道,这里特意加了一个判断语句,当题目总数小于等于0,就表示题目都已读取完毕,此时显示一个消息框,告知用户,如图2所示。
这时,若答辩未完成,可以点击“确定”,再点击“启动”,就可以重新启动程序,再点击“下一题”,继续答辩,只不过题目会与前面的重复,但考虑到题库中的题目个数超过100道,所以即使题目重复了,学生也看不太出来,因为大多数同学都没有耐心从头看到尾,最多看三五个人的答辩,所以不会影响答辩。
图2:消息框
由上面的编程过程可知,在这个小程序中,有三个变量需要设置为全局的,如下所示:
其中strWord(200),是存储题目的字符串数组,a(200)是存储题目下标的数组,lLen是存储题目个数的整型变量。这三个变量搜用于“启动”和“下一题”按钮。
3 结论
今年和去年的《课程设计》答辩中,我都使用这个小程序给学生答辩,目前来看,程序运转正常,学生回答的问题基本上没有重复的。每位同学答辩时,我都允许其他同学在旁边观看,而不是把当前不答辩的同学赶出去。甚至今年在答辩时,直接在教室的讲台上进行,参加答辩的同学站在讲台上,在笔记本电脑上查看题目,回答问题;其他同学则坐在自己的座位上忙乎自己的事情,两不干扰。
从今年的答辩情况来看,我正在考虑进行全班同学的集体答辩。因为题库中的题目已经积累了百多道,某同学可能碰巧知道某道题的答案,但其他题目就不一定知道了,若采用集体答辩的方式,则每位同学都可以听到所有题目的答案。这对同学们掌握课程设计的内容颇有好处。当然还需要考虑集体答辩的细节,比如如何保证所有同学都有回答问题的机会,而不仅仅是几个学霸回答问题;如何调动同学们回答问题的积极主动性等等。