王曉龍
摘要:中等學校招生錄取工作分批次投檔錄取,同一批次志愿為平行志愿。該文在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]. 【通聯編輯:唐一東】