美文网首页C#写一个铝模板清单转生产材料程序
平板篇1,标准平板的识别2020-11-09

平板篇1,标准平板的识别2020-11-09

作者: new_blash | 来源:发表于2020-11-09 16:41 被阅读0次

    创建一个静态识别类

    //为减少阅读障碍,大部分参数和变量采用中文命名
    static class MBCore
    {
          //四舍五入算法 私有(指只能在这个类里面使用,其他类不能调用此方法)静态返回一个double值的方法
          private static double 四舍五入(double value, int decimals)
          {
                //前面参数填要四舍五入的数,第二个参数是保留几位小数
               return Math.Round(value, decimals, MidpointRounding.AwayFromZero);
          }
    
             /// <summary>
            /// 填入模板编码和数量 PCore("200P2600","10")
            /// </summary>
            /// <param 编码="P_编码"></param>
            /// <param 数量="P_数量"></param>
            /// <returns>返回型材型号,型材长度,型材数量,加筋型号,加筋数量,封板型号长度,封板数量</returns>
            public static string[] 平面板核心算法(string P_编码, string P_数量)
            {
                //定义我们需要得到的结果
                string P_主型材 = "";
                string P_主型材长度 = "";
                string P_主型材数量 = "";
                string P_加筋型号 = "";
                string P_加筋数量 = "";
                string P_封板 = "";
                string P_封板数量 = "";
                string P_Info = "";
    
                string[] reslt = null;//创建结果数组,并赋值为null
                //去除编码中的符号和字母
                String[] P_param = P_编码.Split(new char[] { '-', 'P', 'J', 'Q', 'C', 'D', 'K', 'L', '/', '(', ')', 'A', 'B', 'E', 'F',
     'G', 'H', 'I', 'J', 'M', 'N', 'O', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' }, StringSplitOptions.RemoveEmptyEntries);
                //去除编码中的数字
                String[] sArray1 = P_编码.Split(new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.' });
                //去除编码中的空格,然后转化为string类型
                String b = String.Join("", sArray1.Select(y => y.ToString()).ToArray());
                //把字符串转换成字符数组,这样可以让程序知道编码中每一个字符是什么
                char[] c = b.ToCharArray();
                //判断平板参数中有几个参数,类似200P500中有2个参数,所以这里判断P_param.Length要大于等于2,并且字符数组中的第一个字符要是P
                if (P_param.Length >= 2 && c[0] == 'P')
                {
                    //开始计算主型材数量,如果没特殊情况就是模板的数量,所以这里直接=方法中的P_数量
                    P_主型材数量 = P_数量;
    
                    //计算加筋(加筋中分好多种情况,第一种模板宽度大于100和长度大于500时才需要加筋,否则不需要)
                    if (float.Parse(P_param[0]) >= 100 && float.Parse(P_param[1]) > 500)
                    {
                         //加筋型号=模板宽度参数-两边边框厚度(根据型材来定,一般为16mm)
                        P_加筋型号 = (float.Parse(P_param[0]) - 16).ToString();
                        //如果型材长度小于600,基本上只需要一条加强筋,下面是具体算法
                        if (float.Parse(P_param[1]) < 600)
                        {//加筋数量= 四舍五入算法(不保留小数) 模板长度/300*模板数量  基本就是1
                            P_加筋数量 = ((int)四舍五入(float.Parse(P_param[1]) / 300, 0) * int.Parse(P_数量)).ToString();
                        }
                        else
                        {
                            //加筋数量= 四舍五入算法(不保留小数)( (模板长度/300)-1) *模板数量     (看不懂可以照抄)
                            P_加筋数量 = (((int)四舍五入((float.Parse(P_param[1]) / 300) - 1, 0)) * int.Parse(P_数量)).ToString();
                        }
                    }
                    else
                    {//此处就是模板宽度小于100,长度小于500时的状况,不加筋
                        P_加筋型号 = "不需要";
                        P_加筋数量 = "不需要";
                    }
    
                    //计算封板
                    if (float.Parse(P_param[0]) <= 350)
                    {
                        //型材长度在内封时,模板长度是多少就是多少
                        P_主型材长度 = P_param[1] ;
                        //封板在宽度小于350时采取内封,所以型材是60.5或61,然后长度由于是内封所以要减边框厚度16(根据型材来定)
                        P_封板 = "60.5内封-长度:" + (float.Parse(P_param[0]) - 16).ToString();
                    }
                    else
                    {
                        //型材长度在外封时需要减封板厚度16(封板厚度根据型材来定)
                        P_主型材长度 =  (float.Parse(P_param[1]) - 16).ToString();
                        //封板在宽度大于350时采取外封,所以型材是60.5或61,然后长度是模板的宽度
                        P_封板 = "65外封-长度:" + P_param[0];
                    }
                    //封板一块正常模板只需要2块封板,所以直接模板数量*2就行了
                    P_封板数量 = (2 * int.Parse(P_数量)).ToString(); ;
    
    
                    //计算主型材(可根据自己家公司的型材来修改)
                    //P_param[0]是模板的宽度
                    //P_param[1]是模板的长度
                    //下面一大段都是计算模板数字异常的方法,一起有很多种状态
                    if (float.Parse(P_param[0]) > 500)
                    {
                        P_Info = "模板宽度超标,请检查编码";
                        if (float.Parse(P_param[1]) > 3200)
                        {
                            P_Info = "模板宽度超标,长度超标,请检查编码";
                        }
                        if (float.Parse(P_param[1]) < 100)
                        {
                            P_Info = "模板宽度超标,长度过小,请检查编码";
                        }
                    }
                    else if (float.Parse(P_param[0]) < 50)
                    {
                        P_Info = "模板宽度过小,请检查编码";
                        if (float.Parse(P_param[1]) < 100)
                        {
                            P_Info = "模板宽度过小,长度过小,请检查编码";
                        }
                        if (float.Parse(P_param[1]) > 3200)
                        {
                            P_Info = "模板宽度过小,长度超标,请检查编码";
                        }
                    }
                    else if (float.Parse(P_param[1]) > 3200)
                    {
                        P_Info = "模板长度超标,请检查编码";
                        if (float.Parse(P_param[0]) < 50)
                        {
                            P_Info = "模板宽度过小,长度超标,请检查编码";
                        }
                        if (float.Parse(P_param[0]) > 500)
                        {
                            P_Info = "模板宽度超标,长度超标,请检查编码";
                        }
                    }
                    else if (float.Parse(P_param[1]) < 100)
                    {
                        P_Info = "模板长度过小,请检查编码";
                        if (float.Parse(P_param[0]) > 500)
                        {
                            P_Info = "模板宽度超标,长度过小,请检查编码";
                        }
                        if (float.Parse(P_param[0]) < 50)
                        {
                            P_Info = "模板宽度过小,长度过小,请检查编码";
                        }
                    }
                    else
                    {
                        //如果都没有上面的情况出现,从此处开始计算主型材的宽度
                        //计算宽度余50,如果不等于0,那么说明模板不是50倍数的型材,110,120,180,190都有可能
                        if (float.Parse(P_param[0]) % 50 != 0)
                        {//型材=模板宽度
                            P_主型材 = P_param[0];
                            P_Info = "非50倍数宽度平板";
                            //计算长度度余50,如果不等于0,那么说明模板的长度宽度都不是50倍数的型材
                            if (float.Parse(P_param[1]) % 50 != 0)
                            {
                                P_Info = "非50倍数长宽平板";
                            }
                        }
                        //同上,只是计算方式反过来了,先计算长度,再计算宽度
                        else if (float.Parse(P_param[1]) % 50 != 0)
                        {
                            P_Info = "非50倍数长度平板";
                            if (float.Parse(P_param[0]) % 50 != 0)
                            {
                                P_Info = "非50倍数长宽平板";
                            }
                        }
                        else
                        {
                            //如果长宽都是整数,那么直接使用模板宽度的型材
                            P_主型材 = P_param[0];
                            P_Info = "正常平板";
                        }
                    }
                    //将上述计算得到的结果方进结果数组里面
                    reslt = new string[8] { P_主型材, P_主型材长度, P_主型材数量, P_加筋型号, P_加筋数量, P_封板, P_封板数量, P_Info };
                    //返回结果数组
                    return reslt;
                }
                else
                {
                    //如果上述条件都得不到满足,那么返回一个只有信息的数组
                    P_Info = "不是平板或者编码错误,请检查";
                    reslt = new string[8] { P_主型材, P_主型材长度, P_主型材数量, P_加筋型号, P_加筋数量, P_封板, P_封板数量, P_Info };
                    return reslt;
                }
    
            }
    }
    

    到此一个简单的平面板识别就好了
    使用方法:

    ruslt = MBCore.平面板核心算法("200P2600", "10");
                if (ruslt != null)
                {
                    foreach(string str in ruslt)
                    {
                        Console.Write(str);
                    }
                }
    
    

    结果如下


    image.png

    到此结束,下一篇为支撑体系种的支撑头(顶托/流星锤)一大堆名字,未完待续.....

    相关文章

      网友评论

        本文标题:平板篇1,标准平板的识别2020-11-09

        本文链接:https://www.haomeiwen.com/subject/frnlbktx.html