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

支撑篇,标准支撑的识别2020-11-10

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

识别支撑的算法,仅支持不带后缀的编码,后面会更新非标支撑算法

public static string[] 标准支撑核心算法(string Z_编码, string Z_数量)
        {
            //200Z200(普通支撑) Z220(梁底支撑150*220) Z(流星锤100*200)(忠旺体系的编码)
            //定义型材信息(由于支撑没有加筋,所以型材可以减少一部分)
            string Z_主型材 = "";
            string Z_主型材长度 = "";
            string Z_主型材数量 = "";
            string Z_封板 = "";
            string Z_封板数量 = "";
            string Z_圆管数量 = "";//圆管每个公司长度不同,所以只计算数量,不算长度
            string Z_信息 = "";

            string[] 结果 = null;//结果
            String[] Z_无字母参数 = null; 
            String[] Z_无数字参数 = null; 
            //支撑算法稍微要比平板算法要复杂好几倍,要计算用什么型材来开料,比如125Z200,此时就不能用125的型材要用200的型材切125,然后焊接封板
            //其中参数又分好几种情况,比如单独一个Z,此时就不能再计算他的参数了,因为是固定死的100*200,再比如Z220他第一个参数是固定的150,所以只有1个参数,要分开三次进行计算
            //去除编码中的符号和字母,方便下一次计算
            Z_无字母参数 = Z_编码.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);
            //去除编码中的数字,方便下一次计算
            Z_无数字参数 = Z_编码.Split(new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.' }, StringSplitOptions.RemoveEmptyEntries);
            //去除编码中的空格,然后转化为string类型,方便下一次计算
            String Z_字符串 = String.Join("", Z_无数字参数.Select(y => y.ToString()).ToArray());
            char[] Z_字符数组 = Z_字符串.ToCharArray();

            //判断获取到的编码是不是支撑类型,并保证编码中只有一个Z字符
            if (Z_字符数组.Length > 0 && Z_字符数组[0] == 'Z' && Z_字符数组.Length == 1)
            {
                //Z楼面支撑处理(无字母参数为0)
                if (Z_无字母参数.Length == 0 )
                {
                    Z_主型材 = "100";
                    Z_主型材长度 = "200";
                    Z_主型材数量 = Z_数量;
                    Z_封板 = "无";
                    Z_封板数量 = "无";
                    Z_圆管数量 = "150mm*" + Z_数量;//圆管每个公司长度不同,所以自行修改长度
                    Z_信息 = "楼面支撑Z";
                }
                //Z220梁底支撑处理(参数只有一个,并保证参数是220)
                else if (Z_无字母参数.Length == 1 && Z_无字母参数[0] == "220")
                {
                    Z_主型材 = "150";
                    Z_主型材长度 = Z_无字母参数[0];
                    Z_主型材数量 = Z_数量;
                    Z_封板 = "无";
                    Z_封板数量 = "无";
                    Z_圆管数量 = "100mm*" + Z_数量;//圆管每个公司长度不同,所以自行修改长度
                    Z_信息 = "梁底支撑Z220";
                }
                //200Z200多参数型支撑处理(2个以上的参数)
                else if (Z_无字母参数.Length == 2)
                {
                    Z_主型材数量 = Z_数量;

                    Z_圆管数量 = "100*" + Z_数量;//不出意外基本就=支撑数量

                    Z_封板数量 = (2 * int.Parse(Z_数量)).ToString(); ;

                    Z_主型材 = Z_无字母参数[0];

                    //计算型材(取消一堆花里胡哨的算法,实际没卵用)
                    if (float.Parse(Z_无字母参数[0]) % 50 != 0&& float.Parse(Z_无字母参数[1]) % 50 == 0)
                    {//宽度非标,长度整数
                        Z_主型材 = Z_无字母参数[1];
                        Z_主型材长度 = Z_无字母参数[0];
                        Z_封板 = "60.5内封-长度:" + (float.Parse(Z_无字母参数[1]) - 16).ToString();
                        Z_信息 = "非50倍数宽度支撑";
                    }
                    else if (float.Parse(Z_无字母参数[1]) % 50 != 0&&float.Parse(Z_无字母参数[0]) % 50 == 0)
                    {//长度非标,宽度整数
                        Z_主型材 = Z_无字母参数[0];
                        Z_主型材长度 = Z_无字母参数[1];
                        Z_封板 = "60.5内封-长度:" + (float.Parse(Z_无字母参数[0]) - 16).ToString();
                        Z_信息 = "非50倍数长度支撑";
                    }
                    else if (float.Parse(Z_无字母参数[0]) % 50 != 0 && float.Parse(Z_无字母参数[1]) % 50 != 0)
                    {//长宽都非标,以数小的当型材
                        if (float.Parse(Z_无字母参数[0]) < float.Parse(Z_无字母参数[1]))
                        {
                            Z_主型材 = Z_无字母参数[0];
                            Z_主型材长度 = Z_无字母参数[1];
                            Z_封板 = "60.5内封-长度:" + (float.Parse(Z_无字母参数[0]) - 16).ToString();
                        }
                        else {
                            Z_主型材 = Z_无字母参数[1];
                            Z_主型材长度 = Z_无字母参数[0];
                            Z_封板 = "60.5内封-长度:" + (float.Parse(Z_无字母参数[1]) - 16).ToString();
                        }
                        Z_信息 = "非标支撑";
                    }
                    else
                    {
                        //正常支撑
                        Z_主型材 = Z_无字母参数[0];
                        Z_主型材长度 = Z_无字母参数[1];
                        Z_封板 = "60.5内封-长度:" + (float.Parse(Z_无字母参数[0]) - 16).ToString();
                        Z_信息 = "正常支撑";
                    }
                }
                else
                {//参数大于2个以上,暂时不支持,所以说明一下
                    Z_信息 = "编码没有此型号支撑,请检查";
                    结果 = new string[7] { Z_主型材, Z_主型材长度, Z_主型材数量, Z_封板, Z_封板数量, Z_圆管数量, Z_信息 };
                    return 结果;
                }
                结果 = new string[7] { Z_主型材, Z_主型材长度, Z_主型材数量, Z_封板, Z_封板数量, Z_圆管数量, Z_信息 };
                return 结果;

            }
            else
            {//不是支撑的编码
                Z_信息 = "编码错误,请检查";
                结果 = new string[7] { Z_主型材, Z_主型材长度, Z_主型材数量, Z_封板, Z_封板数量, Z_圆管数量, Z_信息 };
                return 结果;
            }
        }

调用方法:

ruslt = MBCore.标准支撑核心算法("200Z200", "10");
            if (ruslt != null)
            {
                foreach(string str in ruslt)
                {
                    Console.Write(str);
                }
            }

结果如下:


image.png

完事,下一篇标准C槽的算法,未完待续..........

上一篇下一篇

猜你喜欢

热点阅读