王晓龙
摘要:中等学校招生录取工作分批次投档录取,同一批次志愿为平行志愿。该文在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]. 【通联编辑:唐一东】