沈健 楊慶
在中小學(xué)教務(wù)工作中,每年的新生分班是一項(xiàng)重要工作。網(wǎng)上雖也有分班軟件,但不一定適合自己的需要,且在不注冊的情況下功能受限。自己做程序困難又大,筆者長期從事教務(wù)工作,對分班工作有一些見解。
首先簡要說一下情況:
軟件:從目前學(xué)校教務(wù)工作來看,大多還是使用VFP數(shù)據(jù)庫或Excel電子表格進(jìn)行數(shù)據(jù)加工,我們以下的操作環(huán)境主要基于這兩種軟件。
方法:第一種,“S”形分班,有的也稱為拐“8”字形,假設(shè)要分3個班,則從最高分向下依次是1、2、3、3、2、1、1……反復(fù)循環(huán)直到最低分。分完以后,所有為班級為“1”的即1班,這樣分出來較均衡。當(dāng)然,有時可能會考慮更多因素,像男女生均衡,住校與不住校均衡。
第二種,“錯位法”,如表1。
表1
意見:“S”形分班中,只要情況許可,盡量只按分?jǐn)?shù)進(jìn)行分班,因?yàn)榭紤]因素越多,分完班后成績越不均衡。在完全按照成績進(jìn)行分班的情況下,“錯位法”分班要比“S”形分班更均衡一些。
下面介紹方法,共分兩種類型,“S”形和“錯位”形,每一種又分別介紹VFP數(shù)據(jù)庫方法和Excel方法。
一、“s”型分班法
(一)Excel方法
在Excel表中,假設(shè)表結(jié)構(gòu)如表2。簡要步驟如下:
表2
1.按總分從高到低進(jìn)行排序。(最好是用“篩選”進(jìn)行排序)
2.在序號欄中進(jìn)行填充,從“1”開始填充,有100個學(xué)生則填充到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”是要劃分的班級個數(shù),可以根據(jù)班級數(shù)的變化而修改,若分成n個班級,則總公式為“=IF(MOD(D2,2*n)>n,n-MOD(D2,n)+1,(IF(MOD(D2,2*n)=0,1,MOD(D2,2*n))))”(引號不要輸入,在輸入以上公式時,均在英文狀態(tài)下輸入)。
(二)VFP編程方法
如果習(xí)慣使用Microsoft VisuaL Foxpro程序,我們首先建立一個分班數(shù)據(jù)庫,數(shù)據(jù)庫結(jié)構(gòu)如表3所示。在命令窗口中鍵入“modi comm fb.prg”(沒有引號且要回車)創(chuàng)建源程序(如果打開程序后沒有命令窗口,則點(diǎn)擊vfp中“窗口”—“命令窗口”調(diào)出,或直接按CtrL+F2鍵也可以),然后我們輸入以下代碼(輸入時,除在輸入必要漢字時,其他均在英文狀態(tài)下輸入,在輸入代碼時,“&&”及后面字符為解釋此語句的作用,以幫助您理解此語句的作用,您可以不用輸入,此程序在windows7系統(tǒng),vfp9.0中文版測試通過。為方便您區(qū)分?jǐn)?shù)字“1”和小寫字母“l(fā)”,本文中所有小寫字母“l(fā)”已經(jīng)替換為“L”)。
表3
set taLk off
SET SAFETY OFF
acce"請輸入要分班的數(shù)據(jù)庫:" to k
acce"請輸入分班的數(shù)量 :" to sL
inde on -zf to zf
do whiL !eof()
x=1
do whiL x<=&sL
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 &&查看結(jié)果
代碼鍵入完成后,我們按“Ctrl+W”保存,命令窗口中我們鍵入“do fb.prg”,輸入數(shù)據(jù)庫名及要分班的數(shù)量即可完成分班。分班完成后可以用“List to prin for bj=1”語句將每個班的數(shù)據(jù)打印出來(bj=1,bj=2……分別打?。部梢杂谩癱opy to bj1.xls type xls for bj=1”語句將結(jié)果導(dǎo)出成xLs格式。
二、“錯位”分班法
(一)Excel方法
ExceL方法如下(exceL結(jié)構(gòu)如表4):
表4
1.按總分進(jìn)行排序;
2.在“序號”欄中進(jìn)行填充,從“0”開始填充,100個學(xué)生則填充到99;
3.在分班E2單元格中,填入公式:“=MOD(INT(D2/4)+MOD(D2,4),4)+1”
如果要分為其他班級數(shù)(n為班級數(shù)),則通用公式為:“=MOD(INT(D2/n)+MOD(D2,n),n)+1”
(二)VFP編程方法
此程序在windows7系統(tǒng),vfp9.0中文版測試通過。
SET TALK OFF
SET SAFETY OFF
acce"請輸入要分班的數(shù)據(jù)庫:" to sjkmc_fb
acce"您要從幾班開始分?(數(shù)學(xué)1,2,3...)" to a1
acce"告訴我最后一個班級數(shù)是多少?(數(shù)字1,2,3...)"to a2
fbks=VAL(a1)&&將a1變量轉(zhuǎn)為數(shù)值型
fbjs=VAL(a2)&&將a2變量轉(zhuǎn)為數(shù)值型
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
經(jīng)過比較,錯位分班法要較走“S”形分班,在分?jǐn)?shù)分布上更加均勻一些。
參考文獻(xiàn):
[1]高大慶.電腦愛好者[J].2008(16):58.