巧用VFP实现中考招生投档

2019-07-08 02:23王晓龙
电脑知识与技术 2019年13期

王晓龙

摘要:中等学校招生录取工作分批次投档录取,同一批次志愿为平行志愿。该文在VFP中运用循环和分支选择结构巧妙的实现了中考志愿的投档工作。提高了工作效率,节省了时间,保证了各项数据的正确性,为中考志愿投档提供了有力的保障。

关键词:VFP;中考招生投档;平行志愿

中图分类号:TP311        文献标识码:A

文章编号:1009-3044(2019)13-0079-02

每年中考成绩出来之后,分数线的划分都是领导关心、万人瞩目的。而中考成绩数据量大,投档复杂。单靠手工管理已经显得力不从心,而且极容易出错。鉴于这种情况,设计一个基于数据库技术的中考投档系统是很有意义的。通過使用计算机系统,由计算机代替人工处理一些诸如数据查询、数据排序、数据更新以及自动投档等功能,这样就使中考投档工作更轻松、更高效、更准确。

1 投档前期准备

在投档前,我们有成绩库、志愿库、照顾生等dbf文件,还有从各招生学校发来的推荐生、特长生等xls文件。为了能够统一在VFP中操作,首先得把xls文件转换成dbf文件。

中等学校招生录取工作坚持“公平、公正、公开、择优”的原则,按照公布的招生计划,根据考生中考成绩、考生填报志愿,分批次投档录取,同一批次志愿为平行志愿,平行志愿投档原则是“分数优先、遵循志愿”。

在符合普通高中招生基本条件的前提下,按照中考总分高低和志愿顺序,按招生计划数的1:1投档录取。在普通高中录取中,如出现尾数同分,则根据考生语文、数学和英语三门学科总分,从高分到低分依次录取;若语文、数学和英语三门学科总分仍然相同,则根据语文和数学两门学科总分,从高分到低分依次录取;若语文和数学两门学科总分仍然相同,则根据数学成绩,从高分到低分依次录取。

志愿库(zyk.dbf)中有ksh,pcdm,xxdm,zysx,lqxx等,成绩库(cjk.dbf)中有ksh,xm,yw,sx,yy,ywsxyy,ywsx,zf等。根据平行志愿投档原则和普通高中录取办法,在VFP中,用zyk.dbf和cjk.dbf建立关联进行多表查询,并保存到zyk1.dbf中。代码如下:

SELECT zyk.ksh,pcdm,xxdm,zysx,lqxx,xm,yw,sx,yy,ywsxyy,ywsx,zf FROM zyk zyk LEFT JOIN cjk ON zyk.ksh=cjk.ksh ORDER BY zf DESC,ywsxyy DESC,ywsx DESC ,sx DESC INTO TABLE zyk1

其中 ORDER BY zf DESC,ywsxyy DESC,ywsx DESC ,sx DESC是按zf(总分)、ywsxyy(语文、数学和英语三门学科总分)、ywsx 、sx依次降序排列。

这样,zyk1.dbf中就有了ksh,pcdm,xxdm,zysx,xm,yw,sx,yy,ywsxyy,ywsx,zf等信息,并且是按照成绩从高到低降序排列的。

2 按批次投档

2.1 第一批次录取

第一批次中只有一个学校,招生计划数是880,把报考了该批次且名次在前880的学生标记为被海中录取并提取出来就可以了。未被第一批录取的学生也用select查询语句提取出来,并保存为zyk2p.dbf。

2.2 第二批次录取

第二批次中有两个四星级学校,按平行志愿投档,即“分数优先、遵循志愿”。

这个部分需要用到VFP的程序设计功能。程序代码如下:

***************************************************************************

*程序功能:把报考第二批次的学生,按平行志愿在两个学校中投档。

*******************************************************************************

SET TALK off

CLEAR

lnQzzsjh=730 &&创建内存变量lnQzzsjh,并赋初值730(曲塘中学录取计划)

lnQzzsrs=0

lnSzzsjh=680 &&创建内存变量lnSzzsjh,并赋初值680(实验中学录取计划)

lnSzzsrs=0

i=0

USE zyk2p

SELECT * FROM zyk2p WHERE pcdm="12" ORDER BY zf DESC,ywsxyy DESC,ywsx DESC ,sx DESC INTO TABLE zyk2p1 &&从zyk2p.dbf表中查询出报考第二批次的学生,并保存到zyk2p1.dbf中。 UPDATE zyk2p1 SET zyk2p1.lqxx="null" &&更新lqxx字段值为“null”。

GO top &&将记录指针放置在表中的第一条记录上。

DO WHILE .not.eof()  &&循环语句:只要不是记录尾,就一直循环。

Scatter Name oRec  &&创建一个带有基于表中字段的属性的对象。

DO CASE &&多分支选择结构语句。

CASE oRec.xxdm="2103" And lnQzzsrs

oRec.lqxx="曲塘中学"

GATHER NAME oRec && 把oRec.lqxx的值"曲塘中学"写入相应记录的lqxx字段中。

lnQzzsrs = lnQzzsrs+1 && 录取人数变量加1 。

kaoshihao=oRec.ksh  && 定义一个变量kaoshihao,记录下当前记录的ksh(考试号)。

jilu1=RECNO()  && 把当前表中的当前记录号保存到变量jilu1中。

SKIP && 在表中向后移动记录指针。

DO WHILE .not.eof()  && 分支一内嵌套循环,把ksh=kaoshihao的学生标注为"曲塘中学"。

Scatter Name oRec1

IF oRec1.ksh=kaoshihao && 条件判断

oRec1.lqxx="曲塘中学"

GATHER NAME orec1 && 把ksh=kaoshihao的学生lqxx字段赋值为"曲塘中学"。

SKIP

ELSE

SKIP

endif  && 结束条件判断

ENDDO  && 嵌套循环结束。

GO jilu1+1 && 指针从jilu1向后移一个记录。

CASE  oRec.xxdm="2109" AND  lnSzzsrs

oRec.lqxx="实验中学"

GATHER NAME orec  && 把oRec.lqxx的值"实验中学"写入相应记录的lqxx字段中。

lnSzzsrs = lnSzzsrs+1

kaoshihao=oRec.ksh

jilu2=RECNO()

SKIP

DO WHILE .not.eof() && 分支二內嵌套循环,把ksh=kaoshihao的学生标注为"实验中学"。

Scatter Name oRec2

IF oRec2.ksh=kaoshihao

oRec2.lqxx="实验中学"

GATHER NAME orec2 && 把ksh=kaoshihao的学生lqxx字段赋值为"实验中学"。

skip

ELSE

SKIP

endif

enddo

GO jilu2+1 && 指针从jilu2向后移一个记录。

OTHERWISE && 已被录取的记录,直接跳过。

skip

ENDCASE && 结束多分支选择语句。

ENDDO  && 结束循环语句。

USE

SET TALK ON

以上这段程序运行之后,表zyk2p1中,第二批平行志愿投档已经基本完成。

运行以下代码,从zyk2p1中提取出被“曲塘中学”和“实验中学”录取的学生,分别存入“曲塘中学.dbf”和“实验中学.dbf”。

SELECT * FROM zyk2p1 WHERE lqxx="曲塘中学" AND xxdm="2103" INTO TABLE 曲塘中学

SELECT * FROM zyk2p1 WHERE lqxx="实验中学" AND xxdm="2109" INTO TABLE 实验中学

2.3第三批次录取

第三批次中有三个学校,也是按平行志愿投档。这个部分需要用到的程序代码可参照第二批次的代码稍作修改即可,这里就不赘述。

3 结束语

以上数据处理方法解决了中考志愿自动投档问题,提高了工作效率,节省了时间,保证了各项数据的正确性,为中考志愿投档提供了有力的保障,更好,更快地完成了招生投档工作。

参考文献:

[1] 海安县2018年普通高中招生录取办法[Z].

[2] 金勤.Visual FoxPro9.0程序设计教程[M].杭州:浙江大学出版社,2011.

[3] Visual FoxPro9.0帮助文档[Z].

【通联编辑:唐一东】