以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  编考号  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=89350)

--  作者:刘林
--  发布时间:2016/8/19 16:06:00
--  编考号
Dim dt As DataTable = DataTables("成绩")
If dt.Type = 1 OrElse dt.Type = 3 Then
    If dt.HasChanges Then
        Dim Arys As List(Of String())  = DataTables("成绩").GetValues("学校代码|年级代码")
        For Each Ary As String() In Arys
            Dim filter As String = CExp("学校代码=\'{0}\' and 年级代码=\'{1}\'",Ary(0),Ary(1))
            Dim bhstr As String = Ary(0) & Ary(1)
            Dim bj As List(Of String) = DataTables("成绩").GetValues("班级",filter,"班级")
            Dim bjlist As new List(Of List(of DataRow))(bj.Count)
            Dim max As Integer = 0
            For Each s As String In bj
                Dim lst As List(of DataRow) = DataTables("成绩").Select(filter & " and 班级 =\'" & s & "\'","姓名")
                If max < lst.Count Then max = lst.Count
                bjlist.add(lst)
            Next
            Dim idx As Integer = 1
            Dim dr As DataRow
            For i As Integer = 0 To max - 1
                For j As Integer = 0 To bjlist.Count - 1
                    Dim lst As List(of DataRow) = bjlist(j)
                    If i < lst.Count Then
                        dr = lst(i)
                        dr("考号") = bhstr & Format(idx,"0000")
                        idx += 1
                    End If
                Next
            Next
        Next
        Tables("成绩").Sort = "考号"       
           End If
End If

经学习请教,以上代码实现了同校,同年级隔班排考号,但发现有个问题:因为一个学校一个年级一学期可能存在多次考试,如半期,月考,期末,因此另加了字段"考试名称"来区分每次考试,如何能实现每次不一样的考试的考号编排.(一个两次考号可以一样,比一学期同年级如人没变化),请老师明示,谢谢!!!

--  作者:大红袍
--  发布时间:2016/8/19 16:29:00
--  

 有必要这样做吗?直接把表数据打乱,然后从1开始编号就行啊

 

http://www.foxtable.com/webhelp/scr/2963.htm

 

 

http://foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=86672&skin=0

 


--  作者:刘林
--  发布时间:2016/8/19 16:42:00
--  
有哟,因为同年级同校一次考试按姓名排序分班隔开,有考试公平,同时方便学生找出自己的位置,现在考虑到同校同学期同年级有多次考试,现增加了考试名称来区分,红色为改的,但不对,请老师帮忙指导,谢谢
Dim dt As DataTable = DataTables("成绩")
If dt.Type = 1 OrElse dt.Type = 3 Then
    If dt.HasChanges Then
        Dim Arys As List(Of String())  = DataTables("成绩").GetValues("学校代码|年级代码|考试名称")
        For Each Ary As String() In Arys
            Dim filter As String = CExp("学校代码=\'{0}\' and 年级代码=\'{1}\' and 考试名称=\'{2}\'",Ary(0),Ary(1),ary(2))
            Dim bhstr As String = Ary(0) & Ary(1)
            Dim bj As List(Of String) = DataTables("成绩").GetValues("班级",filter,"班级")
            Dim bjlist As new List(Of List(of DataRow))(bj.Count)
            Dim max As Integer = 0
            For Each s As String In bj
                Dim lst As List(of DataRow) = DataTables("成绩").Select(filter & " and 班级 =\'" & s & "\'","姓名")
                If max < lst.Count Then max = lst.Count
                bjlist.add(lst)
            Next
            Dim idx As Integer = 1
            Dim dr As DataRow
            For i As Integer = 0 To max - 1
                For j As Integer = 0 To bjlist.Count - 1
                    Dim lst As List(of DataRow) = bjlist(j)
                    If i < lst.Count Then
                        dr = lst(i)
                        dr("考号") = bhstr & Format(idx,"0000")
                        idx += 1
                    End If
                Next
            Next
        Next
        Tables("成绩").Sort = "考号"       
           End If
End If

--  作者:刘林
--  发布时间:2016/8/19 16:46:00
--  
哦,对了,谢谢!!
--  作者:大红袍
--  发布时间:2016/8/19 16:50:00
--  
 你这样写代码,得到的班号是固定的啊。不可能不同啊