摘要:市场见到的实验操作考试抽签软件存在工作非常繁重,尾数考场抽签不公平,工作量大等问题。用VFP编写的实验操作考试抽签软件,易操作,简单实用。
关键词:实验操作考试抽签;工作非常繁重且不公平;用VFP编写;易操作;简单实用
山西省在全省范围加试理化实验操作。每场48人,要采取随机抽签的办法分物理24人、化学24人,只考一科。为公平公正要求用计算机抽签决定考生所考试题,目前见到各地市自编的软件存在以下问题:首先,考试的前、后期准备工作非常繁重,而且尾数考场抽签非常不合理,把不到24人的考生放到一个考场,这样对考生失去公平。其次,每场考试结束后登分,不能及时出成绩,试卷按报名号顺序整理,这样势必造成两个考场考生试卷打乱,增加工作量。
为了不影响其他考生正常学习,按照班级顺序逐班考试。根据这些要求,用VFP编写了一个《大同市中考理化实验操作抽签软件》。
第一步:建表
新建两个表,一个名为学生.dbf的表(学校,学号,姓名,班级),一个名为abc.dbf的表(学校,学号,姓名,班级,考场,学科,座位号,成绩)。
第二步:建菜单
新建四个名为数据导入、考场设置、数据导出、退出的菜单。
1.我们的数据是招办提供的Excel格式的,我要把它转换为以dbf扩展名的表。
use 学生 exclusive &&以独占方式打开学生表
zap &&物理删除表中所有记录
append from getfile('xls','','',0,'选择一个Excel文件')type xl5 &&添加以扩展名xls的表
delect for 姓名='' and 学号='' &&删除姓名并且学号为空的记录标记
pack &&彻底删除带有删除标记的记录
select * from 学生 into sursor 导入的数据 &&查询导入的数据“学生”,存放在临时表“导入的数据”
brow &&浏览“导入的数据”表
2.考场设置
close all &&关闭所有打开的数据库,表和索引
delete file fzh.dbf &&从磁盘上删除指定文件
if file("fzh.bak") &&如果发现备份文件
delete file fzh.bak &&删除fzh备份文件
endif
use abc.dbf &&打开abc表
zap &&彻底删除表中所有记录
use &&关闭abc表
use 学生 &&打开学生表
copy to fzh &&复制到fzh表
use &&关闭fzh表
alter table fzh add kc c(2) &&在表中添加考场(ck)字段
use fzh &&打开zfh表
go top &&记录指针指向第一条记录
do while not eof() &&指针不在记录尾循环
kch=1 &&给考场号赋值
kch=ceiling(recn()/48) &&记录号除以48再利用函数ceiling()向上取整产生考场号
replac kc with padl(kch,2,[0]) &&更新kc
skip &&记录指针向下走一个
kch=kch+1 &&考场号加1
enddo &&结束循环
use &&关闭表
set date to ymd &&设置日期为年月日
do form lh.scx &&运行理化实验抽签表单lh
3.数据导出
判断abc表是否使用,如果使用关闭当前工作区中的abc表。
期刊文章分类查询,尽在期刊图书馆如果fzh有记录数据,把数据导出到abc表中,并且出现一个信息提示对话框,程序代码这样写:
IF Used("abc")
USE IN abc
ENDIF
USE abc
if recc()<>0
COPY TO PUTFILE("","","xls") TYPE xls
messagebox("数据导出成功",0+64,"提示信息")
else
messagebox("没有数据,不能导出",0+64+0,"提示!")
Endif
4.退出
quit &&关闭所有文件并退出vfp
第三步:建表单
新建一个名为lh.scx的表单,表单上加两个标签Label1、Label2的caption分别为大同市理化实验操作抽签程序、选择场次作为提示。表单上加入一个下拉列表框,程序运行时用于选择场次。表单上加入四个命令按钮并将command1、command2、command3、command4的caption分别设为抽签、预览、打印、退出。
(1)在组合框的属性RowSource中输入:
select distinct kc from fzh into cursor temp &&查询考场不重复的值保存到临时表temp
在RowSourceType属性里选择3-SQL语句
(2)command1的click中输入:
set safe off &&关闭程序运算的显示过程
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 &&判断尾数考场是否为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位数字段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) &&添加数值型字段zwh到fzh2
repl xk with "物理" for recn()<=24 &&更新小于24的记录号xk为物理
repl xk with "化学" for recn()>24 &&更新大于24的记录号xk为化学
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 &&把数据追加到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("请退出程序前把数据导出",64,"理化实验操作系统") &&提示对话框是否退出
*对学生、fzh、fzh1、fzh2四个表物理删除全部记录
use 学生.dbf
zap
use
use fzh.dbf
zap
use
use fzh1
zap
use
use fzh2
zap
use
thisform.release &&退出表单
《大同市中考理化实验操作抽签软件》克服了上述的缺点,给考点工作人员减轻了不少负担,而且考试结束后,考生成绩结果10分钟就张榜公布。
论文作者:孟汉卿
论文发表刊物:《中学课程辅导●教学研究》2017年3月下
论文发表时间:2017/5/27
标签:考场论文; 数据论文; 大同市论文; 表单论文; 操作论文; 理化论文; 考生论文; 《中学课程辅导●教学研究》2017年3月下论文;