Excel及VFP分班方法论

时间:2022-10-19 06:59:04

Excel及VFP分班方法论

在中小学教务工作中,每年的新生分班是一项重要工作。网上虽也有分班软件,但不一定适合自己的需要,且在不注册的情况下功能受限。自己做程序困难又大,笔者长期从事教务工作,对分班工作有一些见解。

首先简要说一下情况:

软件:从目前学校教务工作来看,大多还是使用VFP数据库或excel电子表格进行数据加工,我们以下的操作环境主要基于这两种软件。

方法:第一种,“S”形分班,有的也称为拐“8”字形,假设要分3个班,则从最高分向下依次是1、2、3、3、2、1、1……反复循环直到最低分。分完以后,所有为班级为“1”的即1班,这样分出来较均衡。当然,有时可能会考虑更多因素,像男女生均衡,住校与不住校均衡。

第二种,“错位法”,如表1。

表1

意见:“S”形分班中,只要情况许可,尽量只按分数进行分班,因为考虑因素越多,分完班后成绩越不均衡。在完全按照成绩进行分班的情况下,“错位法”分班要比“S”形分班更均衡一些。

下面介绍方法,共分两种类型,“S”形和“错位”形,每一种又分别介绍vfp数据库方法和Excel方法。

一、“s”型分班

(一)Excel方法

在Excel表中,假设表结构如表2。简要步骤如下:

表2

1.按总分从高到低进行排序。(最好是用“筛选”进行排序)

2.在序号栏中进行填充,从“1”开始填充,有100个学生则填充到100,注意不是填充名次。

3.在E2中,填入以下公式:“=IF(MOD(D2,2*8)>8,8-MOD(D2,8)+1,(IF(MOD(D2,2*8)=0,1,MOD(D2,2*8))))”(引号不要输入)。在以上公式中,“8”是要划分的班级个数,可以根据班级数的变化而修改,若分成n个班级,则总公式为“=IF(MOD(D2,2*n)>n,n-MOD(D2,n)+1,(IF(MOD(D2,2*n)=0,1,MOD(D2,2*n))))”(引号不要输入,在输入以上公式时,均在英文状态下输入)。

(二)VFP编程方法

如果习惯使用Microsoft VisuaL Foxpro程序,我们首先建立一个分班数据库,数据库结构如表3所示。在命令窗口中键入“modi comm fb.prg”(没有引号且要回车)创建源程序(如果打开程序后没有命令窗口,则点击vfp中“窗口”―“命令窗口”调出,或直接按CtrL+F2键也可以),然后我们输入以下代码(输入时,除在输入必要汉字时,其他均在英文状态下输入,在输入代码时,“&&”及后面字符为解释此语句的作用,以帮助您理解此语句的作用,您可以不用输入,此程序在windows7系统,vfp9.0中文版测试通过。为方便您区分数字“1”和小写字母“l”,本文中所有小写字母“l”已经替换为“L”)。

表3

set taLk off

SET SAFETY OFF

acce"请输入要分班的数据库:" to k

acce"请输入分班的数量 :" to sL

inde on -zf to zf

do whiL !eof()

x=1

do whiL x

repL bj with x

x=x+1

IF EOF()

EXIT

ELSE

SKIP

endif

endd

x=&sL

do whiL x>=1

repL bj with x

x=x-1

IF EOF()

EXIT

ELSE

SKIP

endif

endd

endd

brow &&查看结果

代码键入完成后,我们按“Ctrl+W”保存,命令窗口中我们键入“do fb.prg”,输入数据库名及要分班的数量即可完成分班。分班完成后可以用“List to prin for bj=1”语句将每个班的数据打印出来(bj=1,bj=2……分别打印),也可以用“copy to bj1.xls type xls for bj=1”语句将结果导出成xLs格式。

二、“错位”分班法

(一)Excel方法

ExceL方法如下(exceL结构如表4):

表4

1.按总分进行排序;

2.在“序号”栏中进行填充,从“0”开始填充,100个学生则填充到99;

3.在分班E2单元格中,填入公式:“=MOD(INT(D2/4)+MOD(D2,4),4)+1”

如果要分为其他班级数(n为班级数),则通用公式为:“=MOD(INT(D2/n)+MOD(D2,n),n)+1”

(二)VFP编程方法

此程序在windows7系统,vfp9.0中文版测试通过。

SET TALK OFF

SET SAFETY OFF

acce"请输入要分班的数据库:" to sjkmc_fb

acce"您要从几班开始分?(数学1,2,3...)" to a1

acce"告诉我最后一个班级数是多少?(数字1,2,3...)"to a2

fbks=VAL(a1)&&将a1变量转为数值型

fbjs=VAL(a2)&&将a2变量转为数值型

USE(sjkmc_fb)

SORT TO tempLs ON zf/dec

IF fbks=1

USE tempLs

REPLACE ALL bj WITH MOD(INT((RECNO()-1)/ fbjs)+MOD(RECNO()-1,fbjs),fbjs)+1

COPY TO (sjkmc_fb)

USE (sjkmc_fb)

Brow

ELSE

USE tempLs

fbks_a=fbks-1

fbjs_a=fbjs-fbks+1

REPLACE ALL bj WITH MOD(INT((RECNO()-1)/fbjs_a)+MOD(RECNO()-1,fbjs_a),fbjs_a)+1+fbks_a

COPY TO (sjkmc_fb)

USE (sjkmc_fb)

brow

ENDIF

SET TALK ON

SET SAFETY on

经过比较,错位分班法要较走“S”形分班,在分数分布上更加均匀一些。

参考文献:

[1]高大庆.电脑爱好者[J].2008(16):58.

上一篇:漫谈高效课堂 下一篇:创设教学情境,让历史课堂 “活” 起来