Foxtable(狐表)用户栏目专家坐堂 → 我想想,你们也帮我想想,复杂的数学逻辑题


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

主题:我想想,你们也帮我想想,复杂的数学逻辑题

美女呀,离线,留言给我吧!
意悠心轻
  31楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:512 积分:3358 威望:0 精华:0 注册:2016/1/31 16:04:00
  发帖心情 Post By:2016/2/26 20:39:00 [只看该作者]

     Dim stime As Double = dt.compute("sum(计件工时)", "日期=#" & ary(0) & "# and 生产形式='" & ary(1) & "' and (规格 <> '机动' or 规格 is null)")
规格不等于机动或规格为空值,把统计计件工时赋值于stime变量,也就是统计打砂员工的计时工时赋值给stime变量,我的题:“规定4个人打砂,配置一名机动人员,机动人员工资占计件工资23%;6人打砂配置2名机动人员,机动人员工资占计件工资26%。 即如果生产形式为安比例计提,当天总人数大于等于8人,打砂人员分配后应得金额等于计件金额乘74%,2名机动人员按当天各自的工作时间长短分配当天26%的计件总金额,如果当天总人数小于8人,打砂员工分配后应得金额等于计件金额乘77%,2名机动人员按当天各自的工作时间长短分配当天23%的计件总金额。如果生产形式为集体直接分配(不同人组成不同组,生产形式以集体直倿分配1、集体直倿分配2、集体直倿分配3等识别),分配后应得金额等于计件金额除于这个组的人数平分,生产形式为个人,分配后应得金额等于数量乘单价,如果备注列显示客户返工,按价目表中该规格对应单价2倍计算,如果备注列显示喷涂返工,按价目表中该规格对应单价3倍计算。”打砂员工是不需要安生产时间比例分配的,安生产时间比例分配的是机动人员。
      Dim dj As Double = smoney * bl / stime
统计同一天,生产形式相同的金额,乘于分配比率,再除于打砂员工计件工时合计,赋值给变量dj,我的表计件工时列不会有打砂员工工时,只有机动员工生产工时,因为只对机动人员有用,打砂员工安比例分配的分配后金额等于计件金额乘分配比率,不用再除计件工时合计。
    从题可知生产形式有3种:一种是金额乘分配比例的安比例分配,另一种是当天金额汇总除于当天不重复人数的集体直接分配(这种方法分配,重名的工资只显示一次。),第三种数量乘单价的个人分配,因此分配后金额列的程序应分别情况计算,你的程序未完成
[此贴子已经被作者于2016/2/26 21:47:12编辑过]

 回到顶部
美女呀,离线,留言给我吧!
意悠心轻
  32楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:512 积分:3358 威望:0 精华:0 注册:2016/1/31 16:04:00
  发帖心情 Post By:2016/2/26 21:30:00 [只看该作者]

   具体数据。


[此贴子已经被作者于2016/6/26 15:35:04编辑过]

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


加好友 发短信
等级:狐神 帖子:5015 积分:25363 威望:0 精华:0 注册:2015/8/18 9:21:00
  发帖心情 Post By:2016/2/27 11:24:00 [只看该作者]

用软件代码处理流程的模式和Execl用函数解决问题的模式还是有很大不同的,如果只是照搬Execl的那一套表格和逻辑思维过来做,会很痛苦的。

至少楼主表格数据和要处理的逻辑在俺看来要做统计比跑马拉松还累,31楼的逻辑看的是稀里糊涂的

建议先学学数据库设计的一些知识,工作表的数据再细分一下,看怎样把工作表再分成几个表,原则是表格的设计应该有利于业务逻辑和代码的处理,而不是业务逻辑和代码跟着表格走



 回到顶部
美女呀,离线,留言给我吧!
意悠心轻
  34楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:512 积分:3358 威望:0 精华:0 注册:2016/1/31 16:04:00
  发帖心情 Post By:2016/2/27 12:01:00 [只看该作者]

    我没有把excel的逻辑套到数据库软件编程中,这是两种截然不同的方法,我们读书时也学过一年编程,只是我们那年代的语句与现在不同,但方法我还是知道的。我指出的问题是顺着你们的编程规则说的。

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


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

1、集体分配、个人分配的情况,以前的代码已经告诉你了啊;

 

2、按比例分配参考下面的代码

 

Dim dt As DataTable = DataTables("打砂车间工资表")
For Each ary() As String In dt.GetValues("日期|生产形式", "日期 is not null and 生产形式 = '安比例分配'")
    Dim count_rs As Integer = dt.GetValues("姓名", "日期=#" & ary(0) & "# and 生产形式='" & ary(1) & "'").count
    Dim drs_ds As List(Of DataRow) = dt.Select("日期=#" & ary(0) & "# and 生产形式='" & ary(1) & "' and (备注 <> '机动' or 备注 is null)")
    Dim drs_jd As List(Of DataRow) = dt.Select("日期=#" & ary(0) & "# and 生产形式='" & ary(1) & "' and 备注 = '机动'")
    Dim smoney As Double = dt.compute("sum(金额)", "日期=#" & ary(0) & "# and 生产形式='" & ary(1) & "'")
    Dim bl As Double = 0
    If count_rs < 8 Then
        bl = 0.77
    Else
        bl = 0.74
    End If
    Dim stime As Double = dt.compute("sum(计件工时)", "日期=#" & ary(0) & "# and 生产形式='" & ary(1) & "'and ( 备注 <> '机动' or 规格 is null)")
   
    For Each dr As DataRow In drs_ds
        dr("分配后金额") = dr("金额") * bl
    Next
   
    stime = dt.compute("sum(计件工时)", "日期=#" & ary(0) & "# and 生产形式='" & ary(1) & "' and 备注 = '机动'")
    dim dj = smoney * (1-bl) / stime
    For Each dr As DataRow In drs_jd
        dr("分配后金额") = dj * dr("计件工时")
    Next
Next


 回到顶部
美女呀,离线,留言给我吧!
意悠心轻
  36楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:512 积分:3358 威望:0 精华:0 注册:2016/1/31 16:04:00
  发帖心情 Post By:2016/2/28 16:02:00 [只看该作者]

    我今天弄了很久,把安比例分配、直接分配、个人直接计算合并到一起,编成这样,但执行时报错说溢出数组界限,我不知怎么修改,麻烦帮我看看,谢谢。
[此贴子已经被作者于2016/2/28 16:09:42编辑过]

 回到顶部
美女呀,离线,留言给我吧!
意悠心轻
  37楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:512 积分:3358 威望:0 精华:0 注册:2016/1/31 16:04:00
  发帖心情 Post By:2016/2/28 16:03:00 [只看该作者]

Dim dt As DataTable = DataTables("打砂车间工资表")

For Each ary() As String In dt.GetValues("日期|生产形式", "日期 is not null and 生产形式 = '安比例分配'")

    Dim drs_ds As List(Of DataRow) = dt.Select("日期=#" & ary(0) & "# and 生产形式='" & ary(1) & "' and (备注 <> '机动' or 规格 is null)")

    Dim drs_jd As List(Of DataRow) = dt.Select("日期=#" & ary(0) & "# and 生产形式='" & ary(1) & "' and 备注 = '机动'")

    Dim bl As Double = 0

    If drs_ds.count + drs_jd.count < 8 Then

        bl = 0.77

    Else

        bl = 0.74

    End If

    Dim smoney As Double = dt.compute("sum(金额)", "日期=#" & ary(0) & "# and 生产形式='" & ary(1) & "'")

    Dim stime As Double = dt.compute("sum(计件工时)", "日期=#" & ary(0) & "# and 生产形式='" & ary(1) & "' and (备注 <> '机动' or 规格 is null)")

    Dim dj As Double = smoney * bl

    For Each dr As DataRow In drs_ds

        dr("分配后金额") = format(dj,"0.00")

    Next

    stime = dt.compute("sum(计件工时)", "日期=#" & ary(0) & "# and 生产形式='" & ary(1) & "' and 备注 = '机动'")

    dj = smoney * (1-bl) / stime

    For Each dr As DataRow In drs_jd

        dr("分配后金额") = format(dj * dr("计件工时"),"0.00")

    Next

Next


For Each ary() As String In dt.GetValues("日期|生产形式", "日期 is not null and 生产形式 = '集体直接分配*'")

    Dim drs As List(Of DataRow) = DataTables("打砂车间工资表").Select("日期=#" & ary(0)& "' and 生产形式='" & ary(1) & "'" & "# and 姓名='" & ary(2))

    Dim stime As Double = dt.compute("sum(计件工时)", "日期=#" & ary(0) & "# And 生产形式='" & ary(1))

    Dim ls As new List(Of String)

    Dim smoney As Double = dt.compute("sum(金额)", "日期=#" & ary(0) & "# and 生产形式='" & ary(1) & "'")

    Dim count As Integer = 0

    For Each dr As DataRow In drs

        Dim str As String = dr("姓名")

        If ls.Contains(str) = False Then

            count += 1

            ls.add(str)

            dr("备注") = dr("备注").replace("重复", Nothing)

        Else

            dr("备注") = "重复" & dr("备注").replace("重复", Nothing)

        End If

    Next

    For Each dr As DataRow In drs

        If dr("备注") Like "*重复*" Then

            dr("分配后金额") = Nothing

        Else

            dr("分配后金额") = format(smoney/count, "0.00")

        End If

    Next

Next

For Each dr As DataRow In DataTables("打砂车间工资表").Select("生产形式 = '个人'")

    dr("分配后金额") = format(dr("数量") * dr("单价"),"0.00")

Next


[此贴子已经被作者于2016/4/12 8:13:09编辑过]

 回到顶部
美女呀,离线,留言给我吧!
意悠心轻
  38楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:512 积分:3358 威望:0 精华:0 注册:2016/1/31 16:04:00
  发帖心情 Post By:2016/2/28 16:08:00 [只看该作者]

    统计不重复姓名个数有没有简化方法?我看使用指南有distinct函数可以把不重复名字列出,但我不知列出后再统计个数程序怎么编写。

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


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

Dim dt As DataTable = DataTables("打砂车间工资表")
For Each ary() As String In dt.GetValues("日期|生产形式", "日期 is not null and 生产形式 = '安比例分配'")
    Dim drs_ds As List(Of DataRow) = dt.Select("日期=#" & ary(0) & "# and 生产形式='" & ary(1) & "' and (备注 <> '机动' or 规格 is null)")
    Dim drs_jd As List(Of DataRow) = dt.Select("日期=#" & ary(0) & "# and 生产形式='" & ary(1) & "' and 备注 = '机动'")
    Dim bl As Double = 0
    If drs_ds.count + drs_jd.count < 8 Then
        bl = 0.77
    Else
        bl = 0.74
    End If
    Dim smoney As Double = dt.compute("sum(金额)", "日期=#" & ary(0) & "# and 生产形式='" & ary(1) & "'")
    Dim stime As Double = dt.compute("sum(计件工时)", "日期=#" & ary(0) & "# and 生产形式='" & ary(1) & "' and (备注 <> '机动' or 规格 is null)")
    Dim dj As Double = smoney * bl
    For Each dr As DataRow In drs_ds
        dr("分配后金额") = format(dj,"0.00")
    Next
    stime = dt.compute("sum(计件工时)", "日期=#" & ary(0) & "# and 生产形式='" & ary(1) & "' and 备注 = '机动'")
    dj = iif(stime=0, 0, smoney * (1-bl) / stime)
    For Each dr As DataRow In drs_jd
        dr("分配后金额") = format(dj * dr("计件工时"),"0.00")
    Next
Next
For Each ary() As String In dt.GetValues("日期|生产形式", "日期 is not null and 生产形式 like '*直接分配*'")
    Dim drs As List(Of DataRow) = DataTables("打砂车间工资表").Select("日期=#" & ary(0)& "# and 生产形式='" & ary(1) & "'")
    Dim stime As Double = dt.compute("sum(计件工时)", "日期=#" & ary(0) & "# And 生产形式='" & ary(1) & "'")
    Dim ls As new List(Of String)
    Dim smoney As Double = dt.compute("sum(金额)", "日期=#" & ary(0) & "# and 生产形式='" & ary(1) & "'")
    Dim count As Integer = 0
    For Each dr As DataRow In drs
        Dim str As String = dr("姓名")
        If ls.Contains(str) = False Then
            count += 1
            ls.add(str)
            dr("备注") = dr("备注").replace("重复", Nothing)
        Else
            dr("备注") = "重复" & dr("备注").replace("重复", Nothing)
        End If
    Next
    For Each dr As DataRow In drs
        If dr("备注") Like "*重复*" Then
            dr("分配后金额") = Nothing
        Else
            dr("分配后金额") = format(smoney/count, "0.00")
        End If
    Next
Next
For Each dr As DataRow In DataTables("打砂车间工资表").Select("生产形式 = '个人'")
    dr("分配金额") = format(dr("数量") * dr("单价"),"0.00")
Next
[此贴子已经被作者于2016/2/28 17:14:41编辑过]

 回到顶部
美女呀,离线,留言给我吧!
意悠心轻
  40楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:512 积分:3358 威望:0 精华:0 注册:2016/1/31 16:04:00
  发帖心情 Post By:2016/2/28 16:13:00 [只看该作者]

    哈,我修改的安比例分配程序跟你的一样了,我的程序只是多了四舍五入函数,说明我还是理解你的程序没乱来了。

 回到顶部
总数 97 上一页 1 2 3 4 5 6 7 8 9 10 下一页