Foxtable(狐表)用户栏目专家坐堂 → 请老师帮我修改“学生成绩统计”代码


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

主题:请老师帮我修改“学生成绩统计”代码

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


加好友 发短信
等级:幼狐 帖子:100 积分:1120 威望:0 精华:0 注册:2017/5/3 18:40:00
请老师帮我修改“学生成绩统计”代码  发帖心情 Post By:2021/7/19 22:55:00 [只看该作者]

班级

姓名

语文

数学

英语

语数英

物理

化学

生物

物化生

语数英物化生

分数

级名

班名

分数

级名

班名

分数

级名

班名

小计

级名

班名

分数

级名

班名

分数

级名

班名

分数

级名

班名

小计

级名

班名

总分数

级名

班名

1

150

1

1

148

2

2

150

1

 

448

1

1

100

1

1

 

 

 

 

 

 

100

1

1

548

1

1

1

146

2

2

150

1

1

149

3

 

445

2

2

95

2

2

 

 

 

 

 

 

95

2

2

540

3

2

2

145

3

1

148

2

1

148

4

 

441

4

1

100

1

1

 

 

 

 

 

 

100

1

1

541

2

1

2

140

4

2

145

5

2

148

4

 

433

5

2

95

2

2

 

 

 

 

 

 

95

2

2

528

6

2

3

138

5

3

148

2

1

145

5

 

431

6

2

100

1

1

 

 

 

 

 

 

100

1

1

531

5

2

3

145

3

3

147

3

2

149.5

2

 

441.5

3

1

95

2

2

 

 

 

 

 

 

95

2

2

536.5

4

1

3

130

6

2

146

4

3

140

7

 

416

8

3

90

3

3

 

 

 

 

 

 

90

3

3

506

7

3

3

125

7

1

140

6

4

142

6

 

407

9

4

88

4

4

 

 

 

 

 

 

88

4

4

495

8

4

1

146

2

2

135

7

3

145

5

 

426

7

3

 

 

 

 

 

 

 

 

 

 

 

 

426

9

3

 

 

For Each dr As DataRow In DataTables("学生成绩统计表").DataRows

    dr("语数英_小计")=dr("语文_分数")+dr("数学_分数")+dr("英语_分数")

    dr("物化生_小计")=dr("物理_分数")+dr("化学_分数")+dr("生物_分数")

    dr("语数英物化生_总分数")=dr("语文_分数")+dr("数学_分数")+dr("英语_分数")+dr("物理_分数")+dr("化学_分数")+dr("生物_分数")

Next

Dim drs As List(of DataRow) = DataTables("学生成绩统计表").Select("班级 is not null","语数英物化生_总分数")

For i As Integer = 0 To drs.Count  - 1

    drs(i)("语文_级名") = i + 1

Next

For i As Integer = 0 To drs.Count  - 1

    drs(i)("数学_级名") = i + 1

Next

For i As Integer = 0 To drs.Count  - 1

    drs(i)("英语_级名") = i + 1

Next

For i As Integer = 0 To drs.Count - 1

    drs(i)("语数英_级名") = i + 1

Next

For i As Integer = 0 To drs.Count - 1

    drs(i)("物理_级名") = i + 1

Next

For i As Integer = 0 To drs.Count - 1

    drs(i)("化学_级名") = i + 1

Next

For i As Integer = 0 To drs.Count - 1

    drs(i)("生物_级名") = i + 1

Next

For i As Integer = 0 To drs.Count - 1

    drs(i)("物化生_级名") = i + 1

Next

For i As Integer = 0 To drs.Count - 1

    drs(i)("语数英物化生_级名") = i + 1

Next

Dim lst As List(of String ) = DataTables("学生成绩统计表").GetValues("班级","班级 is not null")

For Each s As String In lst

    drs = DataTables("学生成绩统计表").Select("班级='" & s & "'","语文_分数 desc ")

    For i As Integer = 0 To drs.Count - 1

        drs(i)("语文_班名") = i + 1

    Next

Next

For Each s As String In lst

    drs = DataTables("学生成绩统计表").Select("班级='" & s & "'","数学_分数 desc ")

    For i As Integer = 0 To drs.Count - 1

        drs(i)("数学_班名") = i + 1

    Next

Next

For Each s As String In lst

    drs = DataTables("学生成绩统计表").Select("班级='" & s & "'","英语_分数 desc ")

    For i As Integer = 0 To drs.Count - 1

        drs(i)("英语_班名") = + 1

    Next

Next

For Each s As String In lst

    drs = DataTables("学生成绩统计表").Select("班级='" & s & "'","语数英_小计 desc ")

    For i As Integer = 0 To drs.Count - 1

        drs(i)("语数英_班名") = i + 1

    Next

Next

For Each s As String In lst

    drs = DataTables("学生成绩统计表").Select("班级='" & s & "'","物理_分数 desc ")

    For i As Integer = 0 To drs.Count - 1

        drs(i)("物理_班名") = i + 1

    Next

Next

For Each s As String In lst

    drs = DataTables("学生成绩统计表").Select("班级='" & s & "'","化学_分数 desc ")

    For i As Integer = 0 To drs.Count - 1

        drs(i)("化学_班名") = i + 1

    Next

Next

For Each s As String In lst

    drs = DataTables("学生成绩统计表").Select("班级='" & s & "'","生物_分数 desc ")

    For i As Integer = 0 To drs.Count - 1

        drs(i)("生物_班名") = i + 1

    Next

Next

For Each s As String In lst

    drs = DataTables("学生成绩统计表").Select("班级='" & s & "'","物化生_小计 desc ")

    For i As Integer = 0 To drs.Count - 1

        drs(i)("物化生_班名") = i + 1

    Next

Next

For Each s As String In lst

    drs = DataTables("学生成绩统计表").Select("班级='" & s & "'","语数英物化生_总分数 desc ")

    For i As Integer = 0 To drs.Count - 1

        drs(i)("语数英物化生_班名") = i + 1

    Next

Next

上表是共9个同学在不同的3个班的一次考试成绩表。

老师:您好!上述代码不能完全实现以下要求。请老师修改一下。谢谢!!!

用代码来实现每个同学各_分数语数英_小计,语数英物化生_总分数的级不同,如何在“级名”列显示相应的名次“数目” ;班不同,如何在“班名”列显示相应的名次“数目”? 当“级名”、“班名” 并列是,如何在“级名”列、“班名”列显示相同相应的重复名次的“数目”?

1 如表所示的成绩,一班的“宗”同学:“语文”的成绩150级名为第一名,如何在“级名”列显示为“1”? 班名为第一名,如何在“班名”列显示为“1?“数学”成绩与三班“张”同学“数学”成绩均是148级名并列第二名,如何在“级名”列显示为“2“张”同学“数学”成绩 班名排第一名,如何在“班名”列显示为“1

即各_分数语数英_小计、语数英物化生_总分数的级名是随各科分数变化而变化,而不应该是用某一科成绩的名作为所有学科成绩的年级排名?

3三班的“安”同学语文成绩二班的“杨”同学语文成绩145是级名并列第3名,如何在“级名” 列与二班的“杨”同学均显示为“3

一班的“孔”同学与同班的“需”同学语文成绩均146是级名并列第二名,如何在“孔”同学的“级名”列、“孔”同学的“级名”列均显示为“2 “孔”同学与同班的“需”同学语文成绩还是班名并列第二名如何在“孔”同学“班名”列显示为“2”, 在“需”同学“班名”列也显示为“2”,

4当某一科成绩清除时,班名列、级名列如何显示为清空状态?

   我的版本2021.4.5前版本

          谢谢!!!

 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:辉瑞科技公司.foxdb


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


加好友 发短信
等级:超级版主 帖子:110750 积分:563676 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/7/19 23:06:00 [只看该作者]

级名的用法改为和班名一样的逻辑啊!

Dim drs As List(of DataRow) = DataTables("学生成绩统计表").Select("班级 is not null","语文_分数 desc")

For i As Integer = 0 To drs.Count  - 1

    drs(i)("语文_级名") = i + 1

Next

drs = DataTables("学生成绩统计表").Select("班级 is not null","数学_分数 desc")

For i As Integer = 0 To drs.Count  - 1

    drs(i)("数学_级名") = i + 1

Next


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


加好友 发短信
等级:超级版主 帖子:110750 积分:563676 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/7/19 23:10:00 [只看该作者]

如果同分同排名,请认真看看帮助:http://www.foxtable.com/webhelp/topics/2382.htm

Dim drs As List(of DataRow) = DataTables("学生成绩统计表").Select("班级 is not null","语文_分数 desc")

For n As Integer = 0 To drs.Count  - 1
        If n > 0 AndAlso drs(n)("语文_分数") = drs(n-1)("语文_分数") Then '如果总分和上一行相同
            drs(n)("语文_级名") = drs(n-1)("语文_级名") '则排名等于上一行
        Else
            drs(n)("语文_级名") = n + 1 '设置排名
        End If
Next

drs = DataTables("学生成绩统计表").Select("班级 is not null","数学_分数 desc")

For n As Integer = 0 To drs.Count  - 1
        If n > 0 AndAlso drs(n)("数学_分数") = drs(n-1)("数学_分数") Then '如果总分和上一行相同
            drs(n)("数学_级名") = drs(n-1)("数学_级名") '则排名等于上一行
        Else
            drs(n)("数学_级名") = n + 1 '设置排名
        End If

Next

 回到顶部