Foxtable(狐表)用户栏目专家坐堂 → 编考号


  共有1991人关注过本帖树形打印复制链接

主题:编考号

帅哥哟,离线,有人找我吗?
刘林
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1953 积分:15015 威望:0 精华:0 注册:2016/4/28 9:58:00
编考号  发帖心情 Post By: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

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

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By: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

 


 回到顶部
帅哥哟,离线,有人找我吗?
刘林
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1953 积分:15015 威望:0 精华:0 注册:2016/4/28 9:58:00
  发帖心情 Post By: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

 回到顶部
帅哥哟,离线,有人找我吗?
刘林
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1953 积分:15015 威望:0 精华:0 注册:2016/4/28 9:58:00
  发帖心情 Post By:2016/8/19 16:46:00 [只看该作者]

哦,对了,谢谢!!

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/8/19 16:50:00 [只看该作者]

 你这样写代码,得到的班号是固定的啊。不可能不同啊

 回到顶部