以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  求代码  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=134240)

--  作者:nxdx112
--  发布时间:2019/4/30 16:39:00
--  求代码
均分代码  发帖心情 Post By:2019/4/30 16:16:00 [只看该作者

          dr("平均分") = dt.Compute("Avg("  & dr("科目") & ")", filter)
            dr("及格人数") = dt.Compute("Count(姓名)", dr("科目") & " >= 60 and " & filter)
            dr("不及格人数") = dt.Compute("Count(姓名)", dr("科目") & " < 60 and " & filter)
            dr("考试人数") = dt.Compute("Count(姓名)", dr("科目") & " >= 0 and " & filter)
            dr("优秀率") = dt.Compute("Count(姓名)", dr("科目") & " >= 85") / dt.Compute("Count(姓名)")
            dr("及格率") = dt.Compute("Count(姓名)", dr("科目") & " >= 60") / dt.Compute("Count(姓名)")

问题:如何根据上面的写均分值的代码?
均分值=均分乘以70%+及格率乘以20+优秀率乘以10

--  作者:有点甜
--  发布时间:2019/4/30 16:49:00
--  

 

dr("均分值") = dr("平均分") * 0.7 + dr("及格率") * 20 + dr("优秀率") *10

 

 

 

 


--  作者:nxdx112
--  发布时间:2019/4/30 17:29:00
--  
不同班级的不同科目也是这样的吗?
--  作者:有点甜
--  发布时间:2019/4/30 17:40:00
--  
以下是引用nxdx112在2019/4/30 17:29:00的发言:
不同班级的不同科目也是这样的吗?

 

不同班级的条件,你在filter那里设置了啊

 

Dim filter = "班级=\'aabbcc\'"


--  作者:nxdx112
--  发布时间:2019/5/5 14:24:00
--  按班计算及格率与优秀率

DataColChanged   代码


Dim dr As DataRow = e.DataRow
Dim dt As DataTable =DataTables("学生成绩")
Select Case e.DataCol.name
    Case "名称", "年级", "班级", "科目"   
        If dr.IsNull("名称") = False AndAlso dr.IsNull("年级") = False AndAlso dr.IsNull("班级") = False AndAlso dr.IsNull("科目") = False Then
            Dim filter As String = "名称= \'" & dr("名称") & "\' and 年级 = \'" & dr("年级") & "\' and 班级 = \'" & dr("班级") & "\'"
            dr("最高分") = dt.Compute("Max("  & dr("科目") & ")", filter)
            dr("最低分") = dt.Compute("Min("  & dr("科目") & ")", filter)
            dr("平均分") = dt.Compute("Avg("  & dr("科目") & ")", filter)
            dr("成绩分布_0分") = dt.Compute("Count(姓名)", dr("科目") & " = 0 and  " & filter)
            dr("成绩分布_0至9分") = dt.Compute("Count(姓名)", dr("科目") & " > 0 And " & dr("科目") & " < 10 and " & filter)
            dr("成绩分布_10至19分") = dt.Compute("Count(姓名)", dr("科目") & " >= 10 And " & dr("科目") & " < 20 and " & filter)
            dr("成绩分布_20至29分") = dt.Compute("Count(姓名)", dr("科目") & " >= 20 And " & dr("科目") & " < 30 and " & filter)
            dr("成绩分布_30至39分") = dt.Compute("Count(姓名)", dr("科目") & " >= 30 And " & dr("科目") & " < 40 and " & filter)
            dr("成绩分布_40至49分") = dt.Compute("Count(姓名)", dr("科目") & " >= 40 And " & dr("科目") & " < 50 and " & filter)
            dr("成绩分布_50至59分") = dt.Compute("Count(姓名)", dr("科目") & " >= 50 And " & dr("科目") & " < 60 and " & filter)            
            dr("成绩分布_60至69分") = dt.Compute("Count(姓名)", dr("科目") & " >= 60 And " & dr("科目") & " < 70 and " & filter)
            dr("成绩分布_70至79分") = dt.Compute("Count(姓名)", dr("科目") & " >= 70 And " & dr("科目") & " < 80 and " & filter)
            dr("成绩分布_80至89分") = dt.Compute("Count(姓名)", dr("科目") & " >= 80 And " & dr("科目") & " < 90 and " & filter)           
            dr("成绩分布_90至99分") = dt.Compute("Count(姓名)", dr("科目") & " >= 90 And " & dr("科目") & " < 100 and " & filter)
            dr("成绩分布_100分") = dt.Compute("Count(姓名)", dr("科目") & " = 100 and " & filter)
            dr("成绩分布_100至119分") = dt.Compute("Count(姓名)", dr("科目") & " > 100 And " & dr("科目") & " < 120 and " & filter)
            dr("成绩分布_120分") = dt.Compute("Count(姓名)", dr("科目") & " = 120 and " & filter)
            dr("及格人数") = dt.Compute("Count(姓名)", dr("科目") & " >= 60 and " & filter)
            dr("不及格人数") = dt.Compute("Count(姓名)", dr("科目") & " < 60 and " & filter)
            dr("考试人数") = dt.Compute("Count(姓名)", dr("科目") & " >= 0 and " & filter)
            dr("均分值") = dr("平均分") * 0.7 + dr("及格率") * 20 + dr("优秀率") *10
           dr("优秀率") = dt.Compute("Count(姓名)", dr("科目") & " >= 85") / dt.Compute("Count(姓名)")
           dr("及格率") = dt.Compute("Count(姓名)", dr("科目") & " >= 60") / dt.Compute("Count(姓名)")
  End If
End Select
计算出来有问题题具体在标色的,不能每个班不同的的及格率与优秀率。如下图这两列的数据一样,不能每个班不同的的及格率与优秀率


图片点击可在新窗口打开查看此主题相关图片如下:newscreen25494619.jpg
图片点击可在新窗口打开查看

按钮代码
Dim dt2 As DataTable = DataTables("成绩分布")
dt2.DataRows.Clear() \'清除原有数据
Dim dt As DataTable = DataTables("学生成绩")
Dim kms() As String = {"语文","数学","英语","物理","化学","政治","历史","地理","生物"}
For Each ary() As String In dt.GetValues("名称|年级|班级")
    For Each km As String In kms
        Dim ndr As DataRow = dt2.AddNew
       ndr("名称") = ary(0)
        ndr("年级") = ary(1)
        ndr("班级") = ary(2)
        ndr("科目") = km
    Next
Next
Messagebox.Show("统计完毕!")
[此贴子已经被作者于2019/5/5 14:30:37编辑过]

--  作者:有点甜
--  发布时间:2019/5/5 14:44:00
--  

比如

 

dr("优秀率") = dt.Compute("Count(姓名)", dr("科目") & " >= 85 and " & filter) / dt.Compute("Count(姓名)", filter)


--  作者:nxdx112
--  发布时间:2019/5/5 14:51:00
--  
     换了个思路可以了     
          dr("及格率") = dr("及格人数")/dr("考试人数") * 100
           dr("优秀率") = dr("优秀人数")/dr("考试人数") * 100