Dim cls As List(Of DataRow) = DataTables("可供安排的教室").Select("", "优先使用顺序")
Dim dt As DataTable = DataTables("国开秩序安排")
dt.ResumeRedraw
dt.StopRedraw
'尽量不要一次性计算全部,因为运算是很慢的
Dim rqsjs As List(Of String()) = dt.GetValues("考试地址|日期|时间")
For Each rqsj() As String In rqsjs
vars("cidx") = 0
Dim filter As String = "考试地址 = '" & rqsj(0) & "' and 日期 = '" & rqsj(1) & "' and 时间 = '" & rqsj(2) & "'"
Dim drs As List(Of DataRow) = dt.Select(filter, "人数 desc")
Dim Ispick As new List(of Integer)
Dim b(drs.Count-1) As Integer
For i As Integer = 1 To drs.Count
If i <= drs.Count - IsPick.Count Then
e.Form.Controls("显示").Text = rqsj(0) & " " & rqsj(1) & " " & rqsj(2) & "(" & i & " " & drs.Count & " " & IsPick.count & ")"
application.DoEvents
Functions.Execute("组合排列", drs, b.length, i, b, i, cls, IsPick)
End If
Next
Dim left As Integer = cls(vars("cidx"))("最大安排人数")
For i As Integer = drs.count - 1 To 0 Step -1
If Ispick.Contains(i) = False Then
If left >= drs(i)("人数") Then
drs(i)("教室") = cls(vars("cidx"))("教室名称")
left -= drs(i)("人数")
Else
vars("cidx") += 1
If cls.Count > vars("cidx") Then
left = cls(vars("cidx"))("最大安排人数")
drs(i)("教室") = cls(vars("cidx"))("教室名称")
left -= drs(i)("人数")
Else
drs(i)("教室") = "教室不够"
End If
End If
End If
Next
Next
dt.ResumeRedraw
Tables("国开秩序安排").Sort = "考试地址,短日期,起始时间,人数"
Dim Book2 As New XLS.Book(ProjectPath & "Attachments\国考秩序安排教室.xls ")
Dim fl1 As String = ProjectPath & "Reports\国考秩序安排供安排之用(有建议教室安排).xls"
Book2.Build() '生成细节区
Book2.Save(fl1) '保存工作簿
msgbox("祝贺您!国考教室安排建议计算完毕,实际安排以您的最终安排为准!")