黃濤
(大冶市第一中學(xué),湖北大冶435100)
基于VFP數(shù)據(jù)庫技術(shù)實現(xiàn)考場座位的隨機編排
黃濤
(大冶市第一中學(xué),湖北大冶435100)
考場編排是考試信息管理中的一項重要工作,科學(xué)的考場編排方法可以對考務(wù)管理起到很大的促進作用。然而面對這一繁重的資源安排和處理工作,長期以來學(xué)校教務(wù)部門一直主要靠非隨機完成,使排考效果非常不科學(xué)。本文根據(jù)全國普通高校招生考試有關(guān)編排考場的要求,結(jié)合VFP技術(shù)給出一類編排考場的算法,用于實現(xiàn)計算機自動編排考場,該算法具有速度快、易于實現(xiàn)、隨機性強的特點,通用性強。
考場編排;隨機算法;VFP;數(shù)據(jù)庫
1.怎樣得到一個指定范圍的隨機數(shù)值。隨機數(shù)的產(chǎn)生是隨機的,而針對每次考試的考生數(shù),應(yīng)該把隨機數(shù)值控制在考生數(shù)之內(nèi),如果超出就毫無意義。
2.如何設(shè)置數(shù)據(jù)庫中的表,使得算法更為迅速、簡潔。VFP數(shù)據(jù)庫技術(shù)必須要有考生的數(shù)據(jù)庫,而數(shù)據(jù)庫里面的表如何設(shè)置,將會影響整個算法的速度、簡潔性,不會造成混亂。
3.怎樣使得算法更具通用性。一個算法不是針對一個問題,而是針對一類問題,如果很好地處理通用性的問題,將會使算法得到廣泛的應(yīng)用。
4.算法中涉及的循環(huán)結(jié)構(gòu)該如何處理。所涉及的考生不只一個,要對每一個考生進行相同的操作,這就要涉及循環(huán),而對于不同的考生,考場及座位號不會相同,怎樣來處理這個循環(huán)結(jié)構(gòu)是關(guān)鍵。
學(xué)校舉行一次全真模擬考試,理科與文科假設(shè)一樣,共有考生人數(shù)為r,考場總數(shù)為kc。因為考室大小及考室多少的原因,每個考室坐的考生人數(shù)不盡相同,也許有的考室為32人,有的是28人,有的是27人。
結(jié)合問題描述和問題的模型,對算法中所遇到的難題,做以下分析解答:
1.在VFP中,隨機數(shù)的產(chǎn)生可以用隨機數(shù)函數(shù)rand(),它能產(chǎn)生介于0~1之間的任意小數(shù)。若要產(chǎn)生一個介于m,n(m 2.因為該算法涉及數(shù)據(jù)庫,因此該算法將主要是對表的操作。事先對相應(yīng)表進行一些設(shè)置,是整個算法的前提,決定整個算法的速度及簡潔。設(shè)要操作的表名為表1,包含的記錄有2100條,其中包含的必要字段有考號、姓名、考室、座位號、標志,如圖1。 一開始就把考室、座位號、標志設(shè)置為0。這里面除標志字段外,其他的字段都易理解。標志字段又有何用呢?這就要說說隨機函數(shù)rand()的特性。int (t*rand()%n+m)產(chǎn)生的隨機整數(shù)并不是每一次都不盡相同。就如這2100個考生,只要運行2100次int (t*rand()%n+m)就可以產(chǎn)生1100個不同的整數(shù),這是不可能實現(xiàn)的。有可能第1次隨機產(chǎn)生的數(shù)值與第101次產(chǎn)生的數(shù)值相同,而表1中每一條記錄代表著一個學(xué)生的考場信息,代表著不同的個體信息,這樣就會造成混亂。這里引用標志字段,如某次產(chǎn)生的隨機數(shù)值第一次指向某一條記錄。這時,將該條記錄的標志字段設(shè)置為1,等再次產(chǎn)生的隨機數(shù)值指向該條記錄時,可以用標志位來判斷該隨機數(shù)值是否產(chǎn)生過。這樣,我們就不會重復(fù)多次在同一個考生身上分配考場信息了。 3.通用性對于一個算法來說,是成與敗的至關(guān)重要條件,是得到別人認可的關(guān)鍵。針對問題的模型,我們知道每一次考試的考生數(shù)、考場數(shù)、每一考室的人數(shù)可能不盡相同。解決這一問題最好的方法,是在算法中引入input命令,每次考試都重新輸入考生人數(shù)、考場數(shù)、相同人數(shù)的考室的人數(shù)。這樣,就會很好地解決通用性的問題,以后每次考試都可以用相同的程序。 4.循環(huán)結(jié)構(gòu)對于整個算法來說是不可避免的,對于2100個考生,取隨機數(shù)值的次數(shù)決不僅僅是2100次,而是更多。如上面所設(shè),表1中共有2100個考生,要對每一個考生都分配考場信息,這就要至少2100次的調(diào)用int(t*rand()%n+m)來產(chǎn)生隨機數(shù)值。而前面我們也提到有可能每次產(chǎn)生的數(shù)值都相同,如果使用最常用的for循環(huán)的結(jié)構(gòu)語句,并不能很好地完成考場的分布。這時,條件循環(huán)結(jié)構(gòu)語句do while成為最為適合的選擇。設(shè)該條件為x<2100,x的初始值為0。這樣,結(jié)合標志字段每次產(chǎn)生一個正確的隨機數(shù)值,x就累加一次,一次累加到x=2100。這時循環(huán)將會退出,完成對每個考生分布考場的信息。條件循環(huán)語句無疑是整個算法最好的選擇。 根據(jù)考場編排的現(xiàn)狀,對于考場編排中隨機算法的實現(xiàn),將會為學(xué)校提供便利。特別是在考場編排中,隨機算法的實現(xiàn)能對考務(wù)管理起到很大的促進作用,使同??忌M量分散開來,彼此不相互鄰接,從而減少作弊的可能性。運用這種算法又快又合理地安排考試,直接決定了教務(wù)工作的效率。 附源代碼 USE表1 (編輯:劉軒) TP311 A 1673-8454(2010)06-0064-02四、結(jié)束語