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