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