使用VFP随机抽签安排考生座位

时间:2022-06-13 07:17:50

摘要:市场见到的实验操作考试抽签软件存在工作非常繁重,尾数考场抽签不公平,工作量大等问题。用VFP编写的实验操作考试抽签软件,易操作,简单实用。

关键词:实验操作考试抽签;工作非常繁重且不公平;用VFP编写;易操作;简单实用

中图分类号:G632.0 文献标识码:A 文章编号:1992-7711(2017)03-0111

山西省在全省范围加试理化实验操作。每场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=bo1.value

use in fzh

use fzh1

if reccount()

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()

repl xk with "化学" for recn()>24 &&更新大于24的记录号xk为化学

repl zwh with recn() for recn()

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分钟就张榜公布。

(作者单位:山西省大同市教育技术装备中心 037000)

上一篇:大有不同 惠普全新A3系列复合机 下一篇:劳动力资源对长治市经济增长的影响和对策研究