以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  折后计算问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=162930)

--  作者:lin98
--  发布时间:2021/4/17 15:39:00
--  折后计算问题
根据下面条件(类型,组合,计算公式),如何实现计算出“组合统计表”的组合名称的重量?
一,类型,组合
类型:A, 组合:BC
类型:A,组合:A1BC
类型:BC, 组合:ABCBA1
类型:BBE, 组合:A1B1CB1CB

二,计算公式

1.计算:B,C的重量
计算公式:
B=面积*(类型表).系数*(组合表).克重
C=面积*(组合表).克重


2.计算:A1,B,C的重量

计算公式:

A1=面积*(组合表).克重
B=面积*(类型表).系数*(组合表).克重
C=面积*(组合表).克重


3.计算:A,B,C,B,A1的重量

计算公式:

A=面积*(组合表).克重
B=面积*(类型表).系数*(组合表).克重
C=面积*(组合表).克重
B=面积*(类型表).系数*(组合表).克重
A1=面积*(组合表).克重


4.计算:A1,B1,C,B1,C,B 的重量

计算公式:

A1=面积*(组合表).克重
B1=面积*(类型表).系数*(组合表).克重
C=面积*(组合表).克重
B1=面积*(类型表).系数*(组合表).克重
C=面积*(组合表).克重
B=面积*(类型表).系数*(组合表).克重
C=面积*(组合表).克重

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:计算问题.foxdb




--  作者:有点蓝
--  发布时间:2021/4/17 17:10:00
--  
把组合拆分开来即可,比如

Dim s As String = "A1B1CB1CBC"
Dim lst As new List(of String)
Dim m As String = s(0)
For i As Integer = 1 To s.Length - 1
    If Char.IsDigit(s(i)) Then
        m = m & s(i)
        lst.Add(m)
        m = ""
    ElseIf m > ""
        lst.Add(m)
        m = s(i)
    Else
        m = s(i)
    End If
Next
lst.Add(m)
For Each s1 As String In lst
    Output.Show(s1)
Next

根据拆分结果进行不同的计算即可,比如
For Each s1 As String In lst
    Output.Show(s1)
Next
改为下面代码
Dim 面积 As Integer = 根据组合名称从资料表获取面积,参考下面find的用法
For Each s1 As String In lst
    Dim dr As DataRow = DataTables("组合表").Find("组合=\'" & s1 & "\'")
    Dim 克重 As Integer = 0
    If dr IsNot Nothing Then
        克重 = dr("克重")
    End If
    dr = DataTables("类型表").Find("类型=\'" & s1 & "\'")
    Dim 系数 As Double = 0
    If dr IsNot Nothing Then
        系数 = dr("系数")
    End If
    Select Case s1
        Case "A","C","A1"
            Dim sum As Double = 面积 * 克重
        Case "B"
            Dim sum As Double = 面积 * 系数 * 克重
    End Select
Next

--  作者:lin98
--  发布时间:2021/4/19 9:05:00
--  
Dim 面积 As Integer = DataTables("资料表").Find("面积 =\'" & s1 & "\'")   根据组合名称从资料表获取面积,参考下面find的用法
For Each s1 As String In lst
    Dim dr As DataRow = DataTables("组合表").Find("组合=\'" & s1 & "\'")
    Dim 克重 As Integer = 0
    If dr IsNot Nothing Then
        克重 = dr("克重")
    End If
    dr = DataTables("类型表").Find("类型=\'" & s1 & "\'")
    Dim 系数 As Double = 0
    If dr IsNot Nothing Then
        系数 = dr("系数")
    End If
    Select Case s1
        Case "A","C","A1"
            Dim sum As Double = 面积 * 克重
        Case "B"
            Dim sum As Double = 面积 * 系数 * 克重
    End Select
Next

老师,上面报错,请帮助,谢谢,


--  作者:有点蓝
--  发布时间:2021/4/19 9:12:00
--  
报什么错
--  作者:lin98
--  发布时间:2021/4/19 14:21:00
--  

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

--  作者:有点蓝
--  发布时间:2021/4/19 14:24:00
--  
Dim 面积 As Integer = DataTables("资料表").Find("面积从哪个表取?根据什么条件取?改为正确的条件") 
--  作者:lin98
--  发布时间:2021/4/19 15:00:00
--  
详细错误信息:
调用的目标发生了异常。
无法在 System.Single 和 System.String 上执行“=”操作。

--  作者:lin98
--  发布时间:2021/4/19 15:05:00
--  
For Each s1 As String In lst
    Dim dr As DataRow = DataTables("组合表").Find("组合=\'" & s1 & "\'")
    Dim 克重 As Integer = 0
    If dr IsNot Nothing Then
        克重 = dr("克重")
    End If
    dr = DataTables("类型表").Find("类型=\'" & s1 & "\'")
    Dim 系数 As Double = 0
    If dr IsNot Nothing Then
        系数 = dr("系数")
    End If
    
    dr= DataTables("资料表").Find("面积 =\'" & s1 & "\'")
    Dim 面积 As Double = 0
    If dr IsNot Nothing Then
        面积= dr("面积")
        
        
    End If
    
    Select Case s1
        Case "A","C","A1"
            Dim sum As Double = 面积 * 克重
        Case "B"
            Dim sum As Double = 面积 * 系数 * 克重
    End Select
Next

上面代码报错,请老师在附件改正,谢谢!

--  作者:有点蓝
--  发布时间:2021/4/19 15:12:00
--  
面积从哪个表取?根据什么条件取?不考虑代码,请使用文字回答
--  作者:lin98
--  发布时间:2021/4/19 15:32:00
--  
面积资料表取值,根据“组合”条件取。