(武漢工程科技學院信息工程學院,湖北武漢 430200)
教務管理系統(tǒng)(以下簡稱教務系統(tǒng))是目前幾乎所有高校都在使用的一種管理信息系統(tǒng),作為數(shù)字化校園中最重要的核心系統(tǒng)之一,教務系統(tǒng)與其它系統(tǒng)之間通常都存在不同程度上的聯(lián)系[1-7]。其中,教務系統(tǒng)中學籍信息的基礎數(shù)據(jù)來源通常都是招生管理系統(tǒng)(以下簡稱招生系統(tǒng)),一般由招生系統(tǒng)提供當年招生錄取數(shù)據(jù),教務系統(tǒng)在此基礎上生成學籍信息[8-20]。在常見設計方案中,教務系統(tǒng)與招生系統(tǒng)對接模塊的數(shù)據(jù)結構通常被設置成固定的,學籍生成模塊通常只是根據(jù)新生專業(yè)分配學籍[21-26]。隨著時代發(fā)展,招生工作模式在不斷發(fā)生變化,各高校招生部門紛紛為新生提供各種便利化服務,使得有些原本在新生獲得學籍后才安排的工作被提前到招生錄取工作中,從而導致招生部門最終提交給教務處的新生基礎數(shù)據(jù)常包含一些約束性因素,這給教務學籍管理工作帶來了新的挑戰(zhàn),傳統(tǒng)教務管理系統(tǒng)學籍生成模塊已難以適用于這類數(shù)據(jù)結構。因此,設計一種能夠適應新形勢下需求的學籍自適應生成模塊成為教務系統(tǒng)開發(fā)的重要內容。
本文通過分析招生數(shù)據(jù)中與專業(yè)字段組合后對學籍分配構成約束性影響的字段特性,提出以專業(yè)為單位構建學生與約束因素組合數(shù)據(jù)集,將約束因素值排序后以連續(xù)首尾取值方式為學生分配學籍,從而實現(xiàn)約束因素下的學籍自適應生成。
目前,高校教務管理系統(tǒng)中常見的學籍生成模塊通常是通過統(tǒng)計各專業(yè)新生人數(shù)并根據(jù)預設的班級人數(shù)上限,自動生成各專業(yè)班級信息和各班學生信息,從而生成學籍數(shù)據(jù)。該模式在基于傳統(tǒng)僅以專業(yè)為學籍分配要素的招生數(shù)據(jù)環(huán)境下能夠高效運作。
然而,在筆者主持的一個教務系統(tǒng)開發(fā)項目中,遇到了一個新問題。學校原本招生處向教務處提供的數(shù)據(jù)只包含學生基本信息和錄取專業(yè),教務處根據(jù)該數(shù)據(jù)設置班級并為學生分配學號和所屬班級,以生成學籍信息,再由后勤部門根據(jù)學生分班情況分配宿舍,宿舍分配遵循“同班新生盡量集中”原則,以便于日后管理。此時,教務處在分配學籍時相對簡單,只需考慮同專業(yè)的各班級人數(shù)和男、女生比例盡量均衡即可。但由于招生處又為新生提供了一項新服務——新生來校之前即可在網(wǎng)上自行選擇并確認宿舍,由此帶來的改變是新生在還未獲得學籍的情況下就已確定了宿舍。考慮到“同班新生宿舍盡量集中”原則,此時教務處在分配學籍時必須考慮兩個要素:①同專業(yè)的各班級人數(shù)和男、女生比例盡量均衡;②同宿舍同專業(yè)的新生盡量安排在一個班,以便于管理。該校原有教務系統(tǒng)僅根據(jù)新生專業(yè)分配學籍的模式已無法生成符合要求的學籍信息,教務處不得不依靠人工方式分配學籍后再導入系統(tǒng),效率極大降低。為此,學校教務處希望新教務系統(tǒng)的學籍生成模塊能夠基于新的招生數(shù)據(jù)結構自適應生成學籍和班級信息。
通過分析不難發(fā)現(xiàn),學籍分配是以專業(yè)為中心點展開,因此應考察招生數(shù)據(jù)中其它相應字段與專業(yè)字段組合后是否對學籍分配產生影響,如果產生了影響,則說明該字段是影響學籍分配的一個約束因素,這樣的約束因素可能有若干個。在項目需求中,要求同專業(yè)同宿舍的新生盡量分配到一個班,故該約束因素就是新生宿舍。本文以宿舍要素為例,闡述主要設計思路。
提取招生數(shù)據(jù)中部分字段加以說明,其結構如表1 所示。
Table 1 Some fields in enrollment data表1 招生數(shù)據(jù)中部分字段
在設計時,可按以下步驟進行:
(1)預設班級年份(入學年份,例如20 級)以及各專業(yè)班級人數(shù)上限(不同專業(yè)的班級人數(shù)上限可能不同)。
(2)統(tǒng)計表1 中所有專業(yè)及各專業(yè)男、女生人數(shù)和總人數(shù)等數(shù)據(jù),生成按專業(yè)進行統(tǒng)計的數(shù)據(jù)集,其中邏輯數(shù)據(jù)表結構如表2 所示。
Table 2 Structure of professional statistical data table表2 專業(yè)統(tǒng)計數(shù)據(jù)表結構
表2 中的“學生組合x”和“宿舍組合x”均為字符串形式,分別表示該專業(yè)具體的學生數(shù)據(jù)和與學生數(shù)據(jù)對應的宿舍數(shù)據(jù),結構分別為“學生1;學生2;學生3;……;學生n”和“宿舍1;宿舍2;宿舍3;……;宿舍n”,宿舍與學生數(shù)據(jù)之間是一一對應關系(學生1 對應宿舍1,學生2 對應宿舍2,其它依此類推)。以C#語言(下同)描述此算法:首先創(chuàng)建數(shù)據(jù)集DataSet 對象ds_zy,并增加數(shù)據(jù)表和表中字段列,用于存儲按專業(yè)進行統(tǒng)計后的數(shù)據(jù),代碼如下:
讀取表1,逐行掃描每行記錄,取出“專業(yè)”字段的值zy,判斷在ds_zy.Tables[0]中是否存在“專業(yè)”字段的值為zy 的記錄,如果不存在,則新增一條記錄將當前學生的相關信息錄入ds_zy.Tables[0],各字段的值分別為:zy、0 或1(取決于性別)、0 或1(取決于性別)、當前學生(姓名—性別—身份證號)、對應宿舍(樓棟—宿舍)、當前專業(yè)層次、當前專業(yè)所屬學院;若存在,則修改ds_zy.Tables[0]中該專業(yè)記錄,此處算法如下:
Step1:判斷當前學生性別,若為男,則將該記錄“男生人數(shù)”和“總人數(shù)”字段的數(shù)字分別加1,否則將“女生人數(shù)”和“總人數(shù)”字段的數(shù)字分別加1。代碼如下:
Step2:在“學生”字段中的字符串末尾追加當前學生信息,追加的字符串格式為“;姓名—性別—身份證號”。代碼如下:
Step3:在“宿舍”字段中的字符串末尾追加當前學生所在宿舍,追加的字符串格式為“;樓棟—宿舍”。代碼如下:
(3)根據(jù)表2 和系統(tǒng)中已存在的專業(yè)信息(編號、名稱)以及(1)設置,生成按班級統(tǒng)計的數(shù)據(jù)集,其中數(shù)據(jù)表結構如表3 所示。
Table 3 Structure of class statistical data table表3 班級統(tǒng)計數(shù)據(jù)表結構
表3 學生字段的值“學生組合x”表示該班級的學生數(shù)據(jù),其字符串結構為“學生1、學生2、學生3、……、學生n”。為達到此設計目標,可按如下算法進行:
Step1:創(chuàng)建數(shù)據(jù)集DataSet 對象ds_bj,并增加數(shù)據(jù)表和表中字段列,用于存儲按班級進行統(tǒng)計后的數(shù)據(jù),代碼如下:
Step2:遍歷ds_zy.Tables[0]中的所有記錄,根據(jù)(1)中設置的當前專業(yè)班級人數(shù)上限確定該專業(yè)班級數(shù)量以及每個班的男、女生人數(shù)和總人數(shù)。根據(jù)系統(tǒng)中已存在的專業(yè)信息(編號、名稱)和已設置好的年份生成班級編號、名稱和所屬專業(yè)(專業(yè)編號)。
Step3:以表2 中的學生和宿舍字段為基礎,將男、女生分組并進行如下操作:查找當前專業(yè)每個宿舍中的學生,并按學生人數(shù)由多到少對宿舍進行排序。例如:宿舍1(5人),宿舍2(3 人),宿舍3(4 人),宿舍4(3 人),宿舍5(5人),宿舍6(2 人),宿舍7(2 人),宿舍8(1 人)。因此,按順序可生成宿舍序列:
宿舍1;宿舍5;宿舍3;宿舍4;宿舍2;宿舍6;宿舍7;宿舍8
在該序列中,將各宿舍內的本專業(yè)學生之間以“、”作為間隔符,可生成如下結構的字符串(以下稱為“學生&宿舍字符串”):
學生1、學生2、學生3、學 生4、學生5;學生6、學 生7、……;學生n
Step4:在該字符串中,以宿舍為單位按其順序采取首尾結合的方式生成各班學生。當人數(shù)達到當前班級上限時,若當前宿舍的學生未分配完,則將剩下的學生分配到下一個班。例如當前專業(yè)總人數(shù)為25 人,若班級人數(shù)上限為10 人,則分成3 個班,人數(shù)分別為9 人、8 人、8 人。因此,一班學生包括:宿舍1、宿舍8 中的9 人和宿舍5 中的3 人,二班學生包括:宿舍5 中剩下的2 人和宿舍7、宿舍3 中的6人,三班學生包括:宿舍4、宿舍6、宿舍2 中的8 人。按此方法分別生成各班男生組和女生組的數(shù)據(jù),再將各班男、女生組合生成各班所包含的學生。以男生組為例,在確定“學生&宿舍字符串”和當前班級男生人數(shù)的前提下,生成本班男生數(shù)據(jù)的算法代碼如下:
生成該班男生數(shù)據(jù)后,按照“學生&宿舍字符串”的結構將剩余未分配班級的男生數(shù)據(jù)重新組合,以便生成該專業(yè)下一個班的男生數(shù)據(jù)。重復該操作,直到該專業(yè)所有班級都分配完畢。
Step5:完成ds_bj.Tables[0]中所有數(shù)據(jù)生成后,將其中數(shù)據(jù)綁定到視圖層供用戶查看和微調,并將最終確定的班級和該班學生數(shù)據(jù)存儲于數(shù)據(jù)庫中。
通過上述算法,成功實現(xiàn)了教務系統(tǒng)在入住宿舍約束因素下的新生學籍自適應生成。
通過在項目中實施該方案,較好地解決了含約束因素的學籍自適應生成問題,之前依靠人工需要約一周時間完成學籍分配工作,現(xiàn)在只需幾分鐘即可實現(xiàn),極大地提高了工作效率。隨著高校信息化建設推進及招生工作流程變更,各高校教務系統(tǒng)都可能面臨同類問題,本文研究成果具有較好的應用推廣意義。同時,研究成果還可應用于其它具有類似需求的模塊或系統(tǒng),具有較好的通用性,在實施這類項目時可作為參考,并以此為基礎,根據(jù)自身實際情況作進一步擴展。