C#写一个铝模板清单转生产材料程序

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

2020-11-09  本文已影响0人  new_blash

创建一个静态识别类

//为减少阅读障碍,大部分参数和变量采用中文命名
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

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

上一篇下一篇

猜你喜欢

热点阅读