①根据考生的考试总分从高到低依次对考生的填报志愿进行投档;
②每位考生可填三个志愿学校,轮到该考生投档时依次对其三个志愿进行投档,若第一志愿学校还有剩余招生名额,就被第一志愿学校录取,结束该考生的投档,否则需对其后续志愿学校进行同样的投档操作,若该考生所填的所有志愿学校都没有剩余招生名额,则该考生无法被任何学校录取,该考生的投档结束。
③当所有学校都已完成计划招生数时,停止投档,录取结束。
编写 VB 程序,实现上述“平行志愿”投档录取的功能,单击“读取考生数据”按钮 Command1, 则从数据库中获取所有考生的成绩、志愿信息以及每个学校的计划招生数,单击“投档录取”按钮 Command2,开始进行投档录取, 并在列表框 List1 中输出每个学校的计划招生数、实际招生数、录取分数线和最低录取名次信息,程序运行界面如图所示。请回答下列问题:
Const schCnt = 5 '学校数量
Const stuMaxCnt = 10000 '最多考生人数
Dim zsCnt(1 To schCnt) As Integer '存储每个学校的计划招生人数
Dim zsCnt2(1 To schCnt) As Integer '存储每个学校的实际招生人数
Dim a(1 To stuMaxCnt) As Single '存储考生总分成绩
Dim b(1 To stuMaxCnt * 3) As Integer '存储考试志愿,每个考生有3个志愿,每个志愿为学校编号
Dim stuCnt As Integer '实际考生总人数
Private Sub Command1_Click()
'从数据库中读取所有考生的总分和志愿信息存储到数组a和数组b中(第1个考生总分存储到a(1),第1个考生的3个志愿分别存储到b(1)、b(2)、b(3)中, …),然后按总分对数组a和数组b进行降序排序,总分相同时,需根据各科成绩决定排序先后,但名次相同,考生总人数存储到stuCnt变量中;
'读取每个学校的计划招生数,存储到数组zsCnt中;
'以上功能代码略
End Sub
Private Sub Command2_Click()
Dim sch As Integer '学校代码,用1~5中的一个数字表示某学校代码
Dim i As Integer, j As Integer, finished As Integer, prevScore As Single
Dim stuMc(1 To stuMaxCnt) As Integer
Dim MinScore(1 To schCnt) As Single
Dim MinMc(1 To schCnt) As Integer
finished = 0: i = 1
prevScore = -1
Do While
If a(i) = prevScore Then
stuMc(i) = stuMc(i - 1)
Else
End If
prevScore = a(i)
For j = 1 To 3
If zsCnt2(sch) < zsCnt(sch) Then
zsCnt2(sch) = zsCnt2(sch) + 1
MinScore(sch) = a(i)
MinMc(sch) = stuMc(i)
Exit For
End If
Next j
finished = 0
For j = 1 To schCnt
If zsCnt2(j) = zsCnt(j) Then
finished = finished + 1
End If
Next j
i = i + 1
Loop
'在List1中输出每所学校的代码、计划招生数、实际招生数、录取分数线、最低录取名次,代码略
End Sub