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

