《软件报》 2007年3月26日 第13期
两个Excel文件开发的网络版开放式选择题考试系统 在信息技术课中给学生做些选择题的测验,本人通过excel的VBA功能,两个excel文件也能轻松实现自动改卷和网络交卷及自动登记学生成绩的功能,并且如更换选择题后也只要更改答案及其他的一些简单设置即可完成测验任务。 1、服务器端文件的准备: 新建一个excel文件命名为server.xls,此文件主要用来登记学生的成绩和学生的答案,学生的答案主要可以用来考后分析题目的正确率等。打开server.xls后第一行可写上班级、学号、姓名、总分、题目1、题目2……。如图1,为了能让多个学生在提交总分和答案信息时都能打开这个文件,因此还要把这个文件设置为‘保护并共享工作簿’,具体在菜单‘工具’——‘保护’——‘保护并共享工作簿’中,还必须在‘以追踪修订方式共享’前打钩,也可设置密码保护。服务器端文件完成后,在服务器上建立一个kaoshi的文件夹,把server.xls文件放在这个文件夹里面,再设置kaoshi文件夹完全共享为kaoshi$。 2、学生端考试文件的准备: 再新建一个excel文件命名为student.xls,把要考试的题目全部放在工作表sheet2中。在工作表sheet1上设计一张答题卷版面(如图2),班级、学号、姓名由学生自己输入,强调学号一栏必须输入1~n的数字(写入server.xls要用到)。除了答案和学生自己输入信息的三个单元格可编辑之外其它都可以设置工作表密码保护。 在工作表sheet1和sheet2中间可插入一个命名为set的工作表,主要用来存放标准答案和系统其他的一些设置(如图3),这个工作表最后要设置隐藏和工作簿保护。题号和标准答案老师先设置好,而学生答案一栏引用sheet1上的学生做的答案,而每题分数通过公式(=IF(B2=C2,F$2,0))来批改每个题目的得分情况,再由老师设置好‘总题目数’,‘每题分值’,‘服务器IP’,‘总分’一栏放每题分数的求和,即在set工作表中就完成判分和计算总分工作。设置好后把set工作表隐藏,并设置‘工具’——‘保护’——‘保护工作簿’,‘结构’前打钩加密码即可。 最后,在‘考试结束 提交答案’按钮的内部编程为: Private Sub CommandButton1_Click() a = MsgBox("你确定要交卷吗?考生注意只能交一次!", 257, "提示对话框") If a = 1 Then Sheets("sheet1").Select ‘把班级、学号、姓名的值赋值给变量bj,xh,xm 。 bj = Sheets("sheet1").Range("g5").Value xh = Sheets("sheet1").Range("g6").Value xM = Sheets("sheet1").Range("g7").Value ‘定义数组answer( ),把set工作表中e2单元格的题目数赋值给变量tishu,再通过循环语句把学生的答案赋值给数组answer( )。 Dim answer(200) tishu = Sheets("set").Range("e2").Value For i = 1 To tishu answer(i) = Sheets("sheet1").Range("B" & (i + 1)).Value Next ‘把set工作表中的总分,服务器IP赋值给变量zongfen,ip。 zongfen = Sheets("set").Range("g2").Value tishu = Sheets("set").Range("e2").Value ip = Sheets("set").Range("h2").Value ‘把excel的运行转入后台,打开服务器上的共享文件server.xls。 Excel.Application.Visible = False Workbooks.Open Filename:="\\" & ip & "\kaoshi$\server.xls" Sheets("sheet1").Select ‘判断server.xls工作表姓名列,学号+1栏有无数据,若无即把个变量的值赋值给单元格。 If Sheets("Sheet1").Range("C" & (xh + 1)).Value = "" Then Sheets("Sheet1").Range("A" & (xh + 1)).Value = bj Sheets("Sheet1").Range("B" & (xh + 1)).Value = xh Sheets("Sheet1").Range("C" & (xh + 1)).Value = xM Sheets("Sheet1").Range("D" & (xh + 1)).Value = zongfen L = 5 For i = 1 To tishu Sheets("Sheet1").Cells((xh + 1), L) = answer(i) L = L + 1 Next ‘保存工作表server.xls并退出,把excel转入前台,交卷按钮设置为不能用 Workbooks("server.xls").Close savechanges:=True Excel.Application.Visible = True CommandButton1.Enabled = False Sheets("sheet1").Select MsgBox ("提交答案完成,点确定关闭该文件") Workbooks("student.xls").Close savechanges:=True Else MsgBox ("请检查你自己输入的学号,并立即和老师联系") Workbooks("server.xls").Close savechanges:=True Excel.Application.Visible = True End If End If End Sub 最后在考试时,只要把student.xls文件通过网络教室系统发给每个同学即可开始考试,一个班的成绩在考试结束后都在server.xls文件中,换另一个班级只要再换个server.xls即可。 注意事项: 1)在set工作表中学生答案,每题分数,总分等这几项数据引用及公式一定要准确。 2)如遇到两个学生输入相同学号而引起交卷问题时,老师可让后交那个学生更改学号为其他同学没有的号码。 3)系统中设置学生交卷只能一次,也是为了防止学生用其他学号多次交卷产生问题。 |
|