王曉龍
摘要:中等學(xué)校招生錄取工作分批次投檔錄取,同一批次志愿為平行志愿。該文在VFP中運(yùn)用循環(huán)和分支選擇結(jié)構(gòu)巧妙的實(shí)現(xiàn)了中考志愿的投檔工作。提高了工作效率,節(jié)省了時(shí)間,保證了各項(xiàng)數(shù)據(jù)的正確性,為中考志愿投檔提供了有力的保障。
關(guān)鍵詞:VFP;中考招生投檔;平行志愿
中圖分類號(hào):TP311 ? ? ? ?文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2019)13-0079-02
每年中考成績(jī)出來(lái)之后,分?jǐn)?shù)線的劃分都是領(lǐng)導(dǎo)關(guān)心、萬(wàn)人矚目的。而中考成績(jī)數(shù)據(jù)量大,投檔復(fù)雜。單靠手工管理已經(jīng)顯得力不從心,而且極容易出錯(cuò)。鑒于這種情況,設(shè)計(jì)一個(gè)基于數(shù)據(jù)庫(kù)技術(shù)的中考投檔系統(tǒng)是很有意義的。通過(guò)使用計(jì)算機(jī)系統(tǒng),由計(jì)算機(jī)代替人工處理一些諸如數(shù)據(jù)查詢、數(shù)據(jù)排序、數(shù)據(jù)更新以及自動(dòng)投檔等功能,這樣就使中考投檔工作更輕松、更高效、更準(zhǔn)確。
1 投檔前期準(zhǔn)備
在投檔前,我們有成績(jī)庫(kù)、志愿庫(kù)、照顧生等dbf文件,還有從各招生學(xué)校發(fā)來(lái)的推薦生、特長(zhǎng)生等xls文件。為了能夠統(tǒng)一在VFP中操作,首先得把xls文件轉(zhuǎn)換成dbf文件。
中等學(xué)校招生錄取工作堅(jiān)持“公平、公正、公開、擇優(yōu)”的原則,按照公布的招生計(jì)劃,根據(jù)考生中考成績(jī)、考生填報(bào)志愿,分批次投檔錄取,同一批次志愿為平行志愿,平行志愿投檔原則是“分?jǐn)?shù)優(yōu)先、遵循志愿”。
在符合普通高中招生基本條件的前提下,按照中考總分高低和志愿順序,按招生計(jì)劃數(shù)的1:1投檔錄取。在普通高中錄取中,如出現(xiàn)尾數(shù)同分,則根據(jù)考生語(yǔ)文、數(shù)學(xué)和英語(yǔ)三門學(xué)科總分,從高分到低分依次錄取;若語(yǔ)文、數(shù)學(xué)和英語(yǔ)三門學(xué)科總分仍然相同,則根據(jù)語(yǔ)文和數(shù)學(xué)兩門學(xué)科總分,從高分到低分依次錄取;若語(yǔ)文和數(shù)學(xué)兩門學(xué)科總分仍然相同,則根據(jù)數(shù)學(xué)成績(jī),從高分到低分依次錄取。
志愿庫(kù)(zyk.dbf)中有ksh,pcdm,xxdm,zysx,lqxx等,成績(jī)庫(kù)(cjk.dbf)中有ksh,xm,yw,sx,yy,ywsxyy,ywsx,zf等。根據(jù)平行志愿投檔原則和普通高中錄取辦法,在VFP中,用zyk.dbf和cjk.dbf建立關(guān)聯(lián)進(jìn)行多表查詢,并保存到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(語(yǔ)文、數(shù)學(xué)和英語(yǔ)三門學(xué)科總分)、ywsx 、sx依次降序排列。
這樣,zyk1.dbf中就有了ksh,pcdm,xxdm,zysx,xm,yw,sx,yy,ywsxyy,ywsx,zf等信息,并且是按照成績(jī)從高到低降序排列的。
2 按批次投檔
2.1 第一批次錄取
第一批次中只有一個(gè)學(xué)校,招生計(jì)劃數(shù)是880,把報(bào)考了該批次且名次在前880的學(xué)生標(biāo)記為被海中錄取并提取出來(lái)就可以了。未被第一批錄取的學(xué)生也用select查詢語(yǔ)句提取出來(lái),并保存為zyk2p.dbf。
2.2 第二批次錄取
第二批次中有兩個(gè)四星級(jí)學(xué)校,按平行志愿投檔,即“分?jǐn)?shù)優(yōu)先、遵循志愿”。
這個(gè)部分需要用到VFP的程序設(shè)計(jì)功能。程序代碼如下:
***************************************************************************
*程序功能:把報(bào)考第二批次的學(xué)生,按平行志愿在兩個(gè)學(xué)校中投檔。
*******************************************************************************
SET TALK off
CLEAR
lnQzzsjh=730 &&創(chuàng)建內(nèi)存變量lnQzzsjh,并賦初值730(曲塘中學(xué)錄取計(jì)劃)
lnQzzsrs=0
lnSzzsjh=680 &&創(chuàng)建內(nèi)存變量lnSzzsjh,并賦初值680(實(shí)驗(yàn)中學(xué)錄取計(jì)劃)
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表中查詢出報(bào)考第二批次的學(xué)生,并保存到zyk2p1.dbf中。 UPDATE zyk2p1 SET zyk2p1.lqxx="null" &&更新lqxx字段值為“null”。
GO top &&將記錄指針?lè)胖迷诒碇械牡谝粭l記錄上。
DO WHILE .not.eof() ?&&循環(huán)語(yǔ)句:只要不是記錄尾,就一直循環(huán)。
Scatter Name oRec ?&&創(chuàng)建一個(gè)帶有基于表中字段的屬性的對(duì)象。
DO CASE &&多分支選擇結(jié)構(gòu)語(yǔ)句。
CASE oRec.xxdm="2103" And lnQzzsrs oRec.lqxx="曲塘中學(xué)" GATHER NAME oRec && 把oRec.lqxx的值"曲塘中學(xué)"寫入相應(yīng)記錄的lqxx字段中。 lnQzzsrs = lnQzzsrs+1 && 錄取人數(shù)變量加1 。 kaoshihao=oRec.ksh ?&& 定義一個(gè)變量kaoshihao,記錄下當(dāng)前記錄的ksh(考試號(hào))。 jilu1=RECNO() ?&& 把當(dāng)前表中的當(dāng)前記錄號(hào)保存到變量jilu1中。 SKIP && 在表中向后移動(dòng)記錄指針。 DO WHILE .not.eof() ?&& 分支一內(nèi)嵌套循環(huán),把ksh=kaoshihao的學(xué)生標(biāo)注為"曲塘中學(xué)"。 Scatter Name oRec1 IF oRec1.ksh=kaoshihao && 條件判斷 oRec1.lqxx="曲塘中學(xué)" GATHER NAME orec1 && 把ksh=kaoshihao的學(xué)生lqxx字段賦值為"曲塘中學(xué)"。 SKIP ELSE SKIP endif ?&& 結(jié)束條件判斷 ENDDO ?&& 嵌套循環(huán)結(jié)束。 GO jilu1+1 && 指針從jilu1向后移一個(gè)記錄。 CASE ?oRec.xxdm="2109" AND ?lnSzzsrs oRec.lqxx="實(shí)驗(yàn)中學(xué)" GATHER NAME orec ?&& 把oRec.lqxx的值"實(shí)驗(yàn)中學(xué)"寫入相應(yīng)記錄的lqxx字段中。 lnSzzsrs = lnSzzsrs+1 kaoshihao=oRec.ksh jilu2=RECNO() SKIP DO WHILE .not.eof() && 分支二內(nèi)嵌套循環(huán),把ksh=kaoshihao的學(xué)生標(biāo)注為"實(shí)驗(yàn)中學(xué)"。 Scatter Name oRec2 IF oRec2.ksh=kaoshihao oRec2.lqxx="實(shí)驗(yàn)中學(xué)" GATHER NAME orec2 && 把ksh=kaoshihao的學(xué)生lqxx字段賦值為"實(shí)驗(yàn)中學(xué)"。 skip ELSE SKIP endif enddo GO jilu2+1 && 指針從jilu2向后移一個(gè)記錄。 OTHERWISE && 已被錄取的記錄,直接跳過(guò)。 skip ENDCASE && 結(jié)束多分支選擇語(yǔ)句。 ENDDO ?&& 結(jié)束循環(huán)語(yǔ)句。 USE SET TALK ON 以上這段程序運(yùn)行之后,表zyk2p1中,第二批平行志愿投檔已經(jīng)基本完成。 運(yùn)行以下代碼,從zyk2p1中提取出被“曲塘中學(xué)”和“實(shí)驗(yàn)中學(xué)”錄取的學(xué)生,分別存入“曲塘中學(xué).dbf”和“實(shí)驗(yàn)中學(xué).dbf”。 SELECT * FROM zyk2p1 WHERE lqxx="曲塘中學(xué)" AND xxdm="2103" INTO TABLE 曲塘中學(xué) SELECT * FROM zyk2p1 WHERE lqxx="實(shí)驗(yàn)中學(xué)" AND xxdm="2109" INTO TABLE 實(shí)驗(yàn)中學(xué) 2.3第三批次錄取 第三批次中有三個(gè)學(xué)校,也是按平行志愿投檔。這個(gè)部分需要用到的程序代碼可參照第二批次的代碼稍作修改即可,這里就不贅述。 3 結(jié)束語(yǔ) 以上數(shù)據(jù)處理方法解決了中考志愿自動(dòng)投檔問(wèn)題,提高了工作效率,節(jié)省了時(shí)間,保證了各項(xiàng)數(shù)據(jù)的正確性,為中考志愿投檔提供了有力的保障,更好,更快地完成了招生投檔工作。 參考文獻(xiàn): [1] 海安縣2018年普通高中招生錄取辦法[Z]. [2] 金勤.Visual FoxPro9.0程序設(shè)計(jì)教程[M].杭州:浙江大學(xué)出版社,2011. [3] Visual FoxPro9.0幫助文檔[Z]. 【通聯(lián)編輯:唐一東】