苗立江
(新疆教育考試院 辦公室,新疆 烏魯木齊 830001)
高考錄取關系到每個考生人生發(fā)展方向,牽動著千家萬戶。近年來,我國教育部門在高考錄取方式、錄取規(guī)則方面進行了深入的探索,在確保高校生源質(zhì)量的同時,向著逐步提升考生滿意度的目標邁進[1]。2008年,教育部在安徽省、湖南省、江蘇省、遼寧省、上海市與浙江省6個省區(qū)實行完全平行志愿投檔錄取模式的試點改革,2011年起,新疆開始分批次逐步實行完全平行志愿投檔,2017年起,合并本科二、三批次為新的本科二批次,使新疆高考改革的步伐進入快車道[2]。
平行志愿投檔時,省級招生主管部門根據(jù)高校提出的投檔比例,按照投檔原則進行投檔,投檔后由高校審閱考生電子檔案,按照錄取原則決定考生是否被錄取。平行志愿投檔以考生分數(shù)作為最高優(yōu)先級的投檔方式,決定了考生一旦被高校退檔,則失去了該批次此次平行志愿投檔的機會[3][4]。因此,在正式投檔前,省級招生主管部門會根據(jù)高校提出的投檔比例進行模擬投檔,供高校參考,以保證考生利益最大化[5];但對于招生人數(shù)較多的高校,如果根據(jù)模擬投檔數(shù)據(jù)手工分檔來確定考生錄取專業(yè)(如以考生分數(shù)排名,考生志愿無法滿足的,則需要進行專業(yè)調(diào)劑或者退檔),此項工作量繁重,且模擬投檔數(shù)據(jù)的處理有嚴格時間限制。因此,急需通過軟件來解決模擬投檔數(shù)據(jù)自動分檔的問題。
根據(jù)平行志愿投檔的錄取原則及要求,我們設計了高校模擬投檔數(shù)據(jù)自動分檔的軟件執(zhí)行流程如圖1所示:
圖 1 模擬投檔流程圖
(1)根據(jù)模擬投檔考生數(shù)據(jù)按科類(文、理)分組,將考生投檔成績+位次降序排列,從高到低逐條讀取考生信息。
(2)讀取當前考生的投檔批次的志愿集,由于模擬投檔考生志愿信息以(序號,位次,投檔成績,志愿1,志愿2,志愿3……)的形式組織,因此進行模擬分檔前,應將數(shù)據(jù)做行列轉(zhuǎn)換處理,處理后的數(shù)據(jù)每個志愿為一行記錄,模擬分檔時逐行讀取每條志愿記錄。
(3)如果讀取到的考生志愿記錄不為空,則獲取該志愿對應專業(yè)的剩余招生計劃數(shù),并判斷招生計劃數(shù)是否大于0,若大于0則將考生分配至該專業(yè),并更新該專業(yè)的剩余招生計劃數(shù),若小于或等于0則讀取考生下一志愿。
(4)如果讀取到的考生志愿記錄為空,說明考生所有填報的志愿均未分檔成功,此時需要判斷考生是否選擇專業(yè)調(diào)劑,若不允許專業(yè)調(diào)劑則該考生標注為預退檔狀態(tài);若允許調(diào)劑則暫時將考生狀態(tài)標注為調(diào)劑,轉(zhuǎn)入調(diào)劑子流程。
(5)標記為調(diào)劑狀態(tài)的所有考生其所報志愿均不滿足分檔要求,因此可在剩余未錄滿專業(yè)中進行調(diào)劑,調(diào)劑前可將未錄滿專業(yè)按缺檔人數(shù)多少設置權重值,高??赏ㄟ^權重值的調(diào)整決定優(yōu)秀調(diào)劑缺檔人數(shù)少的專業(yè)或缺檔人數(shù)多的專業(yè),個別考生可手工處理。
考慮到考生可填報的高校專業(yè)個數(shù)可能存在變化,為了增強系統(tǒng)的擴展性,本系統(tǒng)采用動態(tài)調(diào)用系統(tǒng)表的方式完成專業(yè)志愿行轉(zhuǎn)列的處理方式,具體實現(xiàn)如下:代碼在T-SQL下調(diào)試能夠正常運行
DECLARE @sql VARCHAR(8000)
SELECT @sql=isnull(@sql+'union a ll','')+'select ksxh,kszy='+quotename(Name,'''')+' , zyh='+quotename(Name)+' from ksxx'
FROM syscolumns
WHERE Name!='ksxh' AND ID=object_id('ksxx')
--表名ksxx,不包含列名為考生序號的其他列
ORDER BY colid
exec(@sql+' order by ksxh')
由于預投檔考生數(shù)量較多的情況下動態(tài)轉(zhuǎn)換每個考生的志愿可能會影響處理的性能,因此在具體處理時可先將所有考生志愿轉(zhuǎn)換完畢,然后再進行分檔處理。
根據(jù)圖1所示的處理過程,考生分檔處理偽代碼如下:
輸入:考生數(shù)據(jù)庫D;按考生科類分組處理
輸出:D中考生的預分檔結果,調(diào)劑考生需等所有考生分檔完畢后處理
(1)L=Sort_Student_By_Grade(D)//通過數(shù)據(jù)獲取函數(shù)讀取待分檔考生數(shù)據(jù)集L
(2)For each transaction t L{//循環(huán)掃描考生數(shù)據(jù)集L,獲取每一位考生t的數(shù)據(jù)(含所報志愿列表、考生特征數(shù)據(jù)等)
(3)Ct=Subset(t);//獲取當前考生t所有的志愿集
(4)For each wish C Ct{//循環(huán)掃描考生志愿集Ct,獲取每一志愿C
(5)Surplus_num=Get_Wish(c);//根據(jù)志愿變量c,獲取當前志愿對應的專業(yè)剩余計劃數(shù)
(6)If(surplus_num>0) {//判斷當前專業(yè)計劃數(shù)是否大于0,如果大于0則志愿可投需修改考生志愿和專業(yè)招生人數(shù),否則轉(zhuǎn)入下一志愿
(7)Update_student(t,C);//更新考生錄取專業(yè)及考生狀態(tài)
(8)}
(9)Else if(IS_Adjust){//判斷考生志愿是否允許調(diào)劑,允許調(diào)劑則更新考生狀態(tài),否則考生將被退檔。
(10)Update_student(t,adjust); //更新考生為等待調(diào)劑狀態(tài)
(11)}
(12)Else{
(13)Update_student(t,refuse);//更新考生為退檔狀體
(14)}
(15)}
(16)}
以上程序代碼需針對每種科類分別執(zhí)行,也可通過參數(shù)傳遞的方式選擇需要處理的考生科類,預分檔結束后考生預錄取的專業(yè)已被更新,分數(shù)低且不服從專業(yè)調(diào)劑的考生將按照退檔處理,被標記為調(diào)劑狀態(tài)的考生根據(jù)調(diào)劑人數(shù)選擇手動調(diào)整或者計算機處理;程序自動調(diào)劑的情況下需設置專業(yè)調(diào)劑的權重,如采用缺檔比(缺檔人數(shù)/專業(yè)招生人數(shù))作為設置權重依據(jù),比值高的優(yōu)先考慮調(diào)劑生源。
本系統(tǒng)在高校招生規(guī)則的框架范圍內(nèi),采用計算機自動處理來代替手工分檔,在模擬投檔人數(shù)較多的情況下具有準確性高、處理速度快的優(yōu)點;由于高考錄取規(guī)則處在不斷調(diào)整、完善的階段,因此在根據(jù)高校錄取的原則和特點開發(fā)一套簡單、易擴展、適合其招生政策的系統(tǒng)有一定的現(xiàn)實意義,本文在考生調(diào)劑權重設計方面仍然有改進空間,后期將探索更加靈活的方式設置專業(yè)調(diào)劑權重。