以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]如何修改加权计算代码?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=80520)

--  作者:hrw68529
--  发布时间:2016/1/25 13:47:00
--  [求助]如何修改加权计算代码?
问题
在加权计算中的“加权计算”代码中,需要按以下方法进行加权计算。
1、按“专业组名称”,如果专业组名称分布在2个以上面试室,就需要加权计算,如果专业组名称在一个面试室,不加权,
2、加权的计算方法:如果专业组名称分布在2个以上面试室,就按照“专业组名称”和“面试室”和“单位类型”进行加权计算。即先算出专业组名称所在每个面试室,按照单位类型(即01城市、02农村)算出每个面试室的平均成绩,然后将“专业组名称”分布的几个面试室平均成绩相加除权这几个面试室个数,得出这几个面试室平均成绩的平均成绩(即加权平均成绩),然后用加权平均成绩除以每个面试室的平均成绩,得出每个面试室的加权系数,然后用加权系数乘权每个人的原始成绩,得出最终成绩。
3、下面是按照“专业组名称”和“面试室”进行的加权计算 ,现在我想加上按“专业组名称”、面试室后,再按照单位类型(01城市和02农村)进行加权计算,如何修改代码,请老师指点。后附:加权计算代码和软件

Dim dt As DataTable = DataTables("职称评审成绩")
Dim dt_d As DataTable = DataTables("加权计算")
dt_d.DataRows.Clear
For Each zy As String In dt.GetValues("专业组名称")
    Dim ls As List(Of String) = dt.GetValues("面试室", "专业组名称 = \'" & zy & "\'")
    Dim zy_sum As Double = 0
    For Each s As String In ls
        Dim dr As DataRow = dt_d.AddNew
        dr("专业组名称") = zy
        dr("面试室") = s
        Dim sum As Double = dt.Compute("sum(原始成绩)", "专业组名称 = \'" & zy & "\' and 面试室 = \'" & s & "\'")
        Dim count As Double = dt.Compute("count(原始成绩)", "专业组名称 = \'" & zy & "\' and 面试室 = \'" & s & "\'")
        dr("面试室平均值") = sum / count
        zy_sum += dr("面试室平均值")
    Next
    If ls.Count > 1 Then
        dt_d.ReplaceFor("加权平均值", zy_sum / ls.Count, "专业组名称 = \'" & zy & "\'")
    End If
Next
For Each dr As DataRow In dt_d.DataRows
    If dr("加权平均值") <> 0 AndAlso dr("面试室平均值") <> 0 Then
        dr("加权系数") = dr("加权平均值") / dr("面试室平均值")
    End If
Next

--  作者:hrw68529
--  发布时间:2016/1/25 13:52:00
--  
附软件
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:职称评审成绩汇总系统.foxdb



--  作者:hrw68529
--  发布时间:2016/1/25 13:53:00
--  
文件
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:attachments.zip


--  作者:hrw68529
--  发布时间:2016/1/25 16:02:00
--  
求大神


--  作者:hrw68529
--  发布时间:2016/1/25 17:19:00
--  
进行加权计算,下述代码是按:如果一个专业分布在2个以上面试室的,对面试室进行加权计算,现在要在上述代码基础上,按照单位类型(01城市和02农村)再进行加权计算,不知道怎么弄了,求大神。
代码如下:
Dim dt As DataTable = DataTables("职称评审成绩")
Dim dt_d As DataTable = DataTables("加权计算")
dt_d.DataRows.Clear
For Each zy As String In dt.GetValues("专业组名称")
    Dim ls As List(Of String) = dt.GetValues("面试室", "专业组名称 = \'" & zy & "\'")
    Dim zy_sum As Double = 0
    For Each s As String In ls
        Dim dr As DataRow = dt_d.AddNew
        dr("专业组名称") = zy
        dr("面试室") = s
        Dim sum As Double = dt.Compute("sum(原始成绩)", "专业组名称 = \'" & zy & "\' and 面试室 = \'" & s & "\'")
        Dim count As Double = dt.Compute("count(原始成绩)", "专业组名称 = \'" & zy & "\' and 面试室 = \'" & s & "\'")
        dr("面试室平均值") = sum / count
        zy_sum += dr("面试室平均值")
    Next
    If ls.Count > 1 Then
        dt_d.ReplaceFor("加权平均值", zy_sum / ls.Count, "专业组名称 = \'" & zy & "\'")
    End If
Next
For Each dr As DataRow In dt_d.DataRows
    If dr("加权平均值") <> 0 AndAlso dr("面试室平均值") <> 0 Then
        dr("加权系数") = dr("加权平均值") / dr("面试室平均值")
    End If
Next

--  作者:Hyphen
--  发布时间:2016/1/25 17:48:00
--  
“按照单位类型(即01城市、02农村)算出每个面试室的平均成绩”,是指一个 面试室有城市和农村2种人员,分别计算这个面试室城市人员的平均成绩和农村人员的平均成绩的意思么?

这样的话“然后将“专业组名称”分布的几个面试室平均成绩相加”,是怎样相加呢,是几个面试室的城市人员的平均成绩和农村人员的平均成绩相加?

--  作者:hrw68529
--  发布时间:2016/1/25 18:15:00
--  
举例:1、中学语文,有三个面试室,分别是第01面试室、第02面试室、第03面试室,这三个面试室都有城市和农村的,每个面试室的农村分数相加除以本面试室农村人数、城市分数相加除以本面试室城市人数,得出每个面试室的农村、城市的平均值(面试室平均值),然后,三个面试室的农村平均值除以3(3个面试室,其他学科也有可能是2个面试室),得出三个面试室农村平均值的平均值(加权平均值),每个面试室的城市平均值除以3,得出三个面试室城市平均值的平均值(加权平均值),然后分别农村、城市的加权平均值除以每个面试室平均值,得出加权系数,加权系数乘以每个人的原始成绩,得到最终成绩。
2、当一个专业只有一个面试室时,不进行加权。只有一个专业出现2个以上面试室时,才加权计算。

谢谢

--  作者:大红袍
--  发布时间:2016/1/26 0:24:00
--  
Dim dt As DataTable = DataTables("职称评审成绩")
Dim dt_d As DataTable = DataTables("加权计算")
dt_d.DataRows.Clear
For Each zy As String In dt.GetValues("专业组名称")
    Dim ls As List(Of String) = dt.GetValues("面试室", "专业组名称 = \'" & zy & "\'")
    Dim zy_sum As Double = 0
    Dim lxs As List(Of String) = dt.GetValues("单位类型", "专业组名称 = \'" & zy & "\'")
   
    For Each s As String In ls
        Dim dr As DataRow = dt_d.AddNew
        dr("专业组名称") = zy
        dr("面试室") = s
        Dim ss_sum As Double = 0
        For Each lx As String In lxs
           
            Dim sum As Double = dt.Compute("sum(原始成绩)", "专业组名称 = \'" & zy & "\' and 面试室 = \'" & s & "\' and 单位类型 = \'" & lx & "\'")
            Dim count As Double = dt.Compute("count(原始成绩)", "专业组名称 = \'" & zy & "\' and 面试室 = \'" & s & "\' and 单位类型 = \'" & lx & "\'")
            ss_sum += sum / count
        Next
        dr("面试室平均值") = ss_sum / lxs.count
        zy_sum += dr("面试室平均值")
    Next
    If ls.Count > 1 Then
        dt_d.ReplaceFor("加权平均值", zy_sum / ls.Count, "专业组名称 = \'" & zy & "\'")
    End If
Next
For Each dr As DataRow In dt_d.DataRows
    If dr("加权平均值") <> 0 AndAlso dr("面试室平均值") <> 0 Then
        dr("加权系数") = dr("加权平均值") / dr("面试室平均值")
    End If
Next

--  作者:hrw68529
--  发布时间:2016/1/26 8:01:00
--  
谢谢,但是没有按每个面试室的分城市和农村的进行加权,怎么加呢。计算方法为:在上述基础上每个面试室的单位类型(01城市、02农村)分别进行平均值、加权平均值、加权系数计算
--  作者:hrw68529
--  发布时间:2016/1/26 13:20:00
--  
大红袍,怎么我修改后不行啊,请看代码和图片
代码:Dim dt As DataTable = DataTables("职称评审成绩")
Dim dt_d As DataTable = DataTables("加权计算")
dt_d.DataRows.Clear
For Each zy() As String In dt.GetValues("专业组名称|面试室")
    Dim ls As List(Of String) = dt.GetValues("面试室", "专业组名称 = \'" & zy(0) & "\'")
    Dim lxs As List(Of String) = dt.GetValues("单位类型", "专业组名称 = \'" & zy(0) & "\'and 面试室 = \'" & zy(1) & "\'")
    Dim zy_sum As Double = 0
    
    For Each s As String In ls
        Dim dr As DataRow = dt_d.AddNew
        dr("专业组名称") = zy(0)
        dr("面试室") = s
        Dim ss_sum As Double = 0
        For Each lx As String In lxs
       dr("单位类型") = lx

            Dim sum As Double = dt.Compute("sum(原始成绩)", "专业组名称 = \'" & zy(0) & "\' and 面试室 = \'" & s & "\' and 单位类型 = \'" & lx & "\'")
            Dim count As Double = dt.Compute("count(原始成绩)", "专业组名称 = \'" & zy(0) & "\' and 面试室 = \'" & s & "\' and 单位类型 = \'" & lx & "\'")
            ss_sum += sum / count
        Next
        dr("面试室平均值") = ss_sum / lxs.count
        zy_sum += dr("面试室平均值")
    Next
    If ls.Count > 1 Then
        dt_d.ReplaceFor("加权平均值", zy_sum / ls.Count, "专业组名称 = \'" & zy(0) & "\'")
    End If
Next
For Each dr As DataRow In dt_d.DataRows
    If dr("加权平均值") <> 0 AndAlso dr("面试室平均值") <> 0 Then
        dr("加权系数") = dr("加权平均值") / dr("面试室平均值")
    End If
Next
图片:
图片点击可在新窗口打开查看此主题相关图片如下:截图00.png
图片点击可在新窗口打开查看