孟漢卿
摘要:市場見到的實驗操作考試抽簽軟件存在工作非常繁重,尾數(shù)考場抽簽不公平,工作量大等問題。用VFP編寫的實驗操作考試抽簽軟件,易操作,簡單實用。
關(guān)鍵詞:實驗操作考試抽簽;工作非常繁重且不公平;用VFP編寫;易操作;簡單實用
中圖分類號:G632.0 文獻標(biāo)識碼:A 文章編號:1992-7711(2017)03-0111
山西省在全省范圍加試理化實驗操作。每場48人,要采取隨機抽簽的辦法分物理24人、化學(xué)24人,只考一科。為公平公正要求用計算機抽簽決定考生所考試題,目前見到各地市自編的軟件存在以下問題:首先,考試的前、后期準(zhǔn)備工作非常繁重,而且尾數(shù)考場抽簽非常不合理,把不到24人的考生放到一個考場,這樣對考生失去公平。其次,每場考試結(jié)束后登分,不能及時出成績,試卷按報名號順序整理,這樣勢必造成兩個考場考生試卷打亂,增加工作量。
為了不影響其他考生正常學(xué)習(xí),按照班級順序逐班考試。根據(jù)這些要求,用VFP編寫了一個《大同市中考理化實驗操作抽簽軟件》。
第一步:建表
新建兩個表,一個名為學(xué)生.dbf的表(學(xué)校,學(xué)號,姓名,班級),一個名為abc.dbf的表(學(xué)校,學(xué)號,姓名,班級,考場,學(xué)科,座位號,成績)。
第二步:建菜單
新建四個名為數(shù)據(jù)導(dǎo)入、考場設(shè)置、數(shù)據(jù)導(dǎo)出、退出的菜單。
1. 我們的數(shù)據(jù)是招辦提供的Excel格式的,我要把它轉(zhuǎn)換為以dbf擴展名的表。
use 學(xué)生 exclusive &&以獨占方式打開學(xué)生表
zap &&物理刪除表中所有記錄
append from getfile('xls','','',0,'選擇一個Excel文件')type xl5 &&添加以擴展名xls的表
delect for 姓名='' and 學(xué)號='' &&刪除姓名并且學(xué)號為空的記錄標(biāo)記
pack &&徹底刪除帶有刪除標(biāo)記的記錄
select * from 學(xué)生 into sursor 導(dǎo)入的數(shù)據(jù) &&查詢導(dǎo)入的數(shù)據(jù)“學(xué)生”,存放在臨時表“導(dǎo)入的數(shù)據(jù)”
brow &&瀏覽“導(dǎo)入的數(shù)據(jù)”表
2. 考場設(shè)置
close all &&關(guān)閉所有打開的數(shù)據(jù)庫,表和索引
delete file fzh.dbf &&從磁盤上刪除指定文件
if file("fzh.bak") &&如果發(fā)現(xiàn)備份文件
delete file fzh.bak &&刪除fzh備份文件
endif
use abc.dbf &&打開abc表
zap &&徹底刪除表中所有記錄
use &&關(guān)閉abc表
use 學(xué)生 &&打開學(xué)生表
copy to fzh &&復(fù)制到fzh表
use &&關(guān)閉fzh表
alter table fzh add kc c(2) &&在表中添加考場(ck)字段
use fzh &&打開zfh表
go top &&記錄指針指向第一條記錄
do while not eof() &&指針不在記錄尾循環(huán)
kch=1 &&給考場號賦值
kch=ceiling(recn()/48) &&記錄號除以48再利用函數(shù)ceiling()向上取整產(chǎn)生考場號
replac kc with padl(kch,2,[0]) &&更新kc
skip &&記錄指針向下走一個
kch=kch+1 &&考場號加1
enddo &&結(jié)束循環(huán)
use &&關(guān)閉表
set date to ymd &&設(shè)置日期為年月日
do form lh.scx &&運行理化實驗抽簽表單lh
3. 數(shù)據(jù)導(dǎo)出
判斷abc表是否使用,如果使用關(guān)閉當(dāng)前工作區(qū)中的abc表。如果fzh有記錄數(shù)據(jù),把數(shù)據(jù)導(dǎo)出到abc表中,并且出現(xiàn)一個信息提示對話框,程序代碼這樣寫:
IF Used("abc")
USE IN abc
ENDIF
USE abc
if recc()<>0
COPY TO PUTFILE("","","xls") TYPE xls
messagebox("數(shù)據(jù)導(dǎo)出成功",0+64,"提示信息")
else
messagebox("沒有數(shù)據(jù),不能導(dǎo)出",0+64+0,"提示!")
Endif
4. 退出
quit &&關(guān)閉所有文件并退出vfp
第三步:建表單
新建一個名為lh.scx的表單,表單上加兩個標(biāo)簽Label1、Label2的caption分別為大同市理化實驗操作抽簽程序、選擇場次作為提示。表單上加入一個下拉列表框,程序運行時用于選擇場次。表單上加入四個命令按鈕并將command1、command2、command3、command4的caption分別設(shè)為抽簽、預(yù)覽、打印、退出。
(1)在組合框的屬性RowSource中輸入:
select distinct kc from fzh into cursor temp &&查詢考場不重復(fù)的值保存到臨時表temp
在RowSourceType屬性里選擇3-SQL語句
(2)command1的click中輸入:
set safe off &&關(guān)閉程序運算的顯示過程
if file("fzh1.dbf") &&判斷表fzh1是否存在
release fzh1
endif
use fzh
copy to fzh1 for kc=thisform.combo1.value
use in fzh
use fzh1
if reccount()<48 &&判斷尾數(shù)考場是否為48人
n=48-reccount()
for i=1 to n
append blank
endfor
endif
use
select round(rand(),6) as sjh, * from fzh1 into cursor b1 &&添加一隨機6位數(shù)字段sjh保存到臨時表b1
select * from b1 order by sjh into table fzh2 &&對臨時表排序
use in fzh1
alter table fzh2 add xk c(8) &&添加字符型字段xk到fzh2
alter table fzh2 add zwh n(4) &&添加數(shù)值型字段zwh到fzh2
repl xk with "物理" for recn()<=24 &&更新小于24的記錄號xk為物理
repl xk with "化學(xué)" for recn()>24 &&更新大于24的記錄號xk為化學(xué)
repl zwh with recn() for recn()<=24 &&更新小于24的記錄號座位號
repl zwh with recn()-24 for recn()>24 &&更新大于24的記錄號座位號
IF USED("abc") &&判斷表abc是否存在
SELECT abc
ELSE
USE abc
ENDIF
use abc
append from fzh2 &&把數(shù)據(jù)追加到fzh2
use
(3)command2的click中輸入:
use fzh2
use in select( 'fzh')
if file("lh.frx")
REPORT FORM lh.frx NOEJECT NOCONSOLE preview
else
return
endif
(4)command3的click中輸入:
if file("lh.frx")
SET PRINTER TO NAME GETPRINTER()
report form lh.frx to printer prompt noconsole
else
return
endif
(5)command4的click中輸入:
messagebox("請退出程序前把數(shù)據(jù)導(dǎo)出",64,"理化實驗操作系統(tǒng)") &&提示對話框是否退出
*對學(xué)生、fzh、fzh1、fzh2四個表物理刪除全部記錄
use 學(xué)生.dbf
zap
use
use fzh.dbf
zap
use
use fzh1
zap
use
use fzh2
zap
use
thisform.release &&退出表單
《大同市中考理化實驗操作抽簽軟件》克服了上述的缺點,給考點工作人員減輕了不少負擔(dān),而且考試結(jié)束后,考生成績結(jié)果10分鐘就張榜公布。
(作者單位:山西省大同市教育技術(shù)裝備中心 037000)