抛弃Excel 统计答题卡信息

技术与开发

答题卡大家都不陌生吧,现在很多大中型考试都要用到它。在考试结束后,专用的答题卡软件会收集答题卡上的答案并判断对错,不过它却不会对收集来的信息进行深入地分析。浙江工业大学刘邦明在发现这个缺陷后,产生了一个想法,要为现有的答题卡软件找个“搭档”。

01-f9-01.jpg

浙江工业大学刘邦明:全国英语四六级考试结束没有几天,成绩统计分析的工作就开始了,我负责的计算机中心就参与了这样的工作。在这个过程中,我发现当前的答题卡软件缺少对试题答案的统计分析——这些原始答案中包含着学生对各知识点的掌握情况。

询问其他的英语老师,得知他们都是在Excel中完成后续工作的,答题卡软件只是用来快速得到答案。好歹也是专业软件,怎么不把后续的知识点统计分析功能包含进去?对我的提问,大家开始都比较茫然(从来没有想过这个问题),后来都有这个想法了。

于是我开发了一款成绩统计分析的小工具(工具下载地址:http://www.shudoo.com/bzsoft),弥补了答题卡软件这个不足。该工具与答题卡软件配套使用,非常方便,大家赶紧来试试。

明确设计要求和思路

答题卡各知识点掌握程度主要表现在3个指标:1.各小题所有备选项(A、B、C、D,单选)的选择率,各选项选择率高低所包含的问题;2.各小题回答正确率,帮助教师直观了解哪些是知识薄弱点;3.各种题型的得分率,揭示学生掌握某类型题目能力的高低。另外,还应允许教师只统计自己关注学生的相关数据。

为了减少对现有软件系统数据库(Microsoft SQL Server)的影响,我们只与其中的“题型表”、“读卡数据表”发生单向的只读关系(表结构见表1和表2)。借助SQL Server支持的T-SQL语言编写存储过程,不但具有编程灵活、数据统计功能强大的优势,而且可以由任何支持SQL Server存储过程的客户端编程语言读取数据。

bg1-1.jpg
bg1-2.jpg

开发这个小工具的关键是存储过程如何统计各小题所有备选项的选择率。首先,应根据TestItems生成各题号对应行,并从Results表筛选出某教师关注的那些学生的“机读答案”作为统计样本(#Results)。

然后,计算#Answers第i小题的选A率=(∑#Results.机读答案第 i位置字符='A'的记录数)/#Results记录数;以此类推,计算出选B率、选C率、选D率以及该小题的“未选率”情况。

利用不带WHERE的UPDATE #Answers操作,一次性即可统计出所有小题各备选项的选择率。最后,利用UPDATE可以统计出各小题的正确率(=正确答案'X'对应的'选择率X');各题型得分率=(∑本题型各小题正确率)/本题型小题数。

具体开发过程

第一步:启动Visual Studio C#,新建一个Windows窗体应用工程,并在窗体上添加相应控件(表3)。

bg1-3.jpg

第二步:新建SQL Server存储过程(usp_Answers),输入相关代码,其中关键代码如下所示(完整代码下载地址:http://www.shudoo.com/bzsoft):

update #Answers ——存放统计结果的临时表

set 选A率=(select count(*)

from #Results ——包含所有符合统计方式、约定值的“机读答案”。

where len(机读答案)>= #Answers.题号

and substring(机读答案,#Answers.题号,1)='A'

)*100.0/@nCount, —— *100是取x.xx%的x.xx值。

选B/C/D率类似选A率……

未选率=(select count(*)

from #Results

where len(机读答案) < #Answers.题号

or substring(机读答案,#Answers.题号,1)=' '

)*100.0/@nCount;

第三步:在C#工程中,添加System.Data.SqlClient控件,并定义SqlConnection、SqlDataAdapter、SqlCommand、DataTable四种对象,并分别命名为Cn、Da、Cmd、Dt。在“执行统计”中调用存储过程,获取统计结果。输入相关代码,其中关键代码如下所示(完整代码下载地址:http://www.shudoo.com/bzsoft):

//传入参数值

Cmd.Parameters["@统计方式"].Value = cboFilterType.Text;

Cmd.Parameters["@限定值"].Value=txtFilterValue.Text;

Cmd.Parameters["@统计各小题"].Value=(rdbByItem.Checked?1:0);

………

Da.Fill(Dt);

dgv.DataSource=Dt; //dgv为表格控件,显示数据。

第四步:运行本程序,输入相关数据,单击“执行统计”按钮,统计数据就显示在表格中了。

小提示:由于各统计率均只保留两位小数,所以精度有所损失,但不影响结果。

温馨提示

想与刘邦明老师直接交流,探讨答题卡软件的不足吗?请登录http://f.shudoo.com。