周志军,窦志强,朱春晓
(中国人民解放军信息工程大学 训练部考试中心,郑州 450001)
基于Excel VBA的讲课竞赛抽签系统设计与实现
周志军,窦志强,朱春晓
(中国人民解放军信息工程大学训练部考试中心,郑州 450001)
通过组织讲课竞赛等形式不断提高青年教师教学能力,是高等院校确保人才培养质量稳步提升的重要保证。在高校讲课竞赛等活动中,需要以公正、快捷、直观的方式对参加人员、讲课题目进行抽签,文章通过实例介绍基于Excel VBA设计讲课竞赛抽签系统的实现方法。
VBA;讲课竞赛;抽签系统;洗牌算法
在高等院校中,提高青年教师教学能力是不断提升人才培养质量的重要保证。组织以老带新、岗位练兵、讲课竞赛等形式的教学实践活动成为促进青年教师提高教学能力的有效手段。在讲课竞赛活动中,如何保证分组抽签环节的公开、公正、透明,成为参赛人员关注的焦点。由于通用抽签软件无法满足特定的抽签规则,对抽签数据格式和内容的具体需求存在差异,在解放军信息工程大学校2014年组织的青年教员讲课竞赛活动中,为了高效、公正、透明地进行抽签,自行开发了讲课竞赛抽签系统。在全年度的竞赛活动中,抽签系统发挥了重要作用。
在比赛前,按照竞赛规则,全校各教研室所有符合条件的青年教员均列入参赛备选人员名单,每人准备数个讲课题目。按照学科类别,将所有教研室分为4个大组,全年组织多轮次讲课比赛,每轮次从每组人员中抽取相同数量的选手参赛,讲课题目和出场顺序随机确定。同时,为了确保青年教员广泛参与,需要实现全年每个教研室青年教员参赛比例和覆盖面基本相当。在此规则下,抽签系统既要保证公平、公开,又须符合各项比例要求。系统需要实现以下功能:
(1)按组别抽选参赛选手和讲课题目。
(2)按教研室人员比例进行抽选。
(3)参赛人员和讲课题目随机选定。
(4)抽中人员出场顺序随机确定。
(5)抽选结果填入表格即时打印。
(6)生成各组参赛选手基本信息表用于讲课竞赛工作用表。
VBA是Visual Basic的一种宏语言,是微软开发出来在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。主要能用来扩展 Windows的应用程序功能,特别是 Microsoft Office软件。也可说是一种应用程序视觉化的Basic脚本。Office软件中的Word、Excel、Access、Powerpoint都可以利用VBA使这些软件的应用效率更高。VBA不但继承了VB的开发机制,而且VBA还具有与VB相似的语言结构,它们的集成开发环境IDE也几乎相同。
由于教员和选题信息是借助Excel来完成,因此,在 Excel文件中嵌入VBA程序即可直接实现随机抽签。
在数据准备阶段,需将所有教员、分组、课程、选题等信息汇总在一个统一的Excel表格中。在每次抽选时根据教研室所在组别确定选题抽选范围,利用随机函数在抽选范围内随机确定选手和题目。在抽选时需检测所抽选教员是否已在之前被选中过,不能重复抽选同一教员。对检测通过的教员,标记当前教员本次已被抽选,避免后续抽选过程中被重复抽选。为被选中教员利用随机函数确定出场顺序,抽选完成之后保存并显示抽选结果。利用打印按钮对抽选结果信息表进行打印,各教学单位抽签代表签字确认,并同步将各组参赛选手基本信息和选题信息从总表中提取出来,生成参赛选手基本信息表用于讲课竞赛工作用表。
系统程序逻辑结构图如图1所示。
图1程序逻辑结构
4.1程序界面
由于系统功能单一而明确,界面设计应立足实用,尽量简洁。在系统界面上设置必备的选项和按钮。选项用于选择抽选组别,按钮分别设置“抽签”、“重置”、“确定”、“打印”。“抽签”按钮用于实现抽签功能;“重置”按钮用于重置各项参数,使抽签操作可重复;“确定”按钮用于确认抽签结果,将抽签结果汇总至表格,并提取抽中的教员和题目信息填入参赛选手基本信息表;“打印”按钮用于打印抽签结果表格,供抽签人员现场确认使用。在按钮下方设置文本域,用于实时显示各组抽签结果,界面如图2所示。
图2系统界面
4.2主要功能实现
抽签的核心在于随机抽取教员和题目、随机确定出场顺序。由于教员、课程、选题等信息汇总在一个Excel表中,随机抽取教员和题目即可通过随机选择表格行号来实现。使用Randomize函数随机选择行号的实现是很简单的,关键点在于确定选择范围。不同教员归属于不同的教研室,不同教研室分布在不同的组中。使抽选结果符合抽选规则的过程便转化为使抽选范围符合竞赛规则的过程。为了合理确定抽选范围,只需将备选信息汇总表依次按照分组、教研室、教员、课程、选题的顺序排序,便可按照抽选要求确定一个连续的行号范围作为抽选范围赋值给边界变量。
Private Sub confirmRange()'确定抽选范围
Dim i As Integer
totalT=0'备选教研室选题总行数
startRow=0'备选教研室选题起始行
For i=2 To totalRow'从汇总表计算备选教研室jID抽选行号范围
If Cells(i,20).Value=jID Then
totalT=totalT+1
If totalT=1 Then
startRow=i
Else
End If
Else
End If
Next i
End Sub
确定抽选范围后,即可随机抽选教员和选题:
confirmRange
Randomize
iRnd=Int(Rnd*totalT+startRow)'所抽选行号
进行冲突检测后,将iRnd行的教员、课程、选题信息等所需提取的信息赋予二维数组tInfo(x,y)的第二维变量。
选题信息抽选完毕后,需要对出场顺序进行随机,若直接使用随机数产生出场序号,可能会出现出场序号重复的情形。因此,采用洗牌算法对出场顺序数组进行随机的方法实现。
Private Sub shuffle()'洗牌算法,随机出场顺序
Dim tmp As Integer
Dim i As Integer
Dim j As Integer
For i=1 To gpTotal'gpTotal为本组参赛人数
tOrder(i)=i
Next i
Randomize
For i=gpTotal To 1 Step-1
j=Int(Rnd*i)+1
tmp=tOrder(j)
tOrder(j)=tOrder(i)
tOrder(i)=tmp
Next i
End Sub
对出场顺序随机洗牌之后将数组tOrder()的值顺序赋予tInfo(x,y)的第一维变量,再将tInfo(x,y)按照第一维变量值的顺序输出第二维变量的内容,即得到随机出场顺序后的抽签结果。
本程序经过反复的修改和调试,运行结果达到了系统设计的目标。以Excel作为数据源,既便于基础数据整理,又不需进行数据转换,开发调试效率可大大提高,运行效果直观明了。VBA语法简单易学,基于Excel的VBA程序设计代码简洁、算法易懂,利用简单实用的工具便可高效快捷地实现开发需求。使用VBA可以为Excel应用程序开发很多新的功能或增强已有的功能,也使得用户对各种数据的处理更加得心应手,大大提高工作效率。实践证明,利用Excel软件和Excel VBA编程相结合,可高效解决很多日常工作中遇到的常见数据处理问题。
主要参考文献
[1]魏汪洋.Excel VBA语法速查手册[M].北京:化学工业出版社,2011.
[2]孙红梅.巧用VBA编程实现电大毕业生照片的批量查找[J].福建广播电视大学学报,2014(1):85-88.
[3]门珮玉.利用VBA编程搭建赛事自动计分系统[J].中国管理信息化,2014,17(20):87-89.
10.3969/j.issn.1673-0194.2016.11.112
TP317.3
A
1673-0194(2016)11-0187-04
2016-03-15
周志军(1979-),男,河北石家庄人,解放军信息工程大学训练部考试中心讲师,主要研究方向:考务管理、考试理论。