C槽篇,标准C槽的识别2020-11-11

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

经过前面2篇文章的学习,你们已经不是小白了,后面注释会慢慢变少

public static string[] 标准C槽核心算法(string C_编码, string C_数量)
        {
            //5C300 C300 3DC300 DC300(忠旺体系的编码)
            //定义型材信息
            string C_主型材 = "";
            string C_主型材长度 = "";
            string C_主型材数量 = "";
            string C_封板 = "";
            string C_封板数量 = "";
            string C_加筋型号 = "";
            string C_加筋数量 = "";
            string C_信息 = "";

            string[] 结果 = null;//结果
            String[] C_无字母参数 = null;
            String[] C_无数字参数 = null;
            //C槽算法比较复杂,类型较多,而且没有太多好方法,只能case多个值

            //去除编码中的符号和字母,方便下一次计算
            C_无字母参数 = C_编码.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);
            //去除编码中的数字,方便下一次计算
            C_无数字参数 = C_编码.Split(new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.' }, StringSplitOptions.RemoveEmptyEntries);
            //去除编码中的空格,然后转化为string类型,方便下一次计算
            String C_字符串 = String.Join("", C_无数字参数.Select(y => y.ToString()).ToArray());
            char[] C_字符数组 = C_字符串.ToCharArray();

            //判断获取到的编码是不是C类型,并保证编码中只有一个C或者DC字符
            switch (C_字符串)
            {//这次升级一下判断方法,不用if else了,用switch 看起来比较简洁,其实效率差不多
                case "C":
                    switch (C_无字母参数.Length)
                    {
                        //一个参数的算法
                        case 1:
                            C_主型材 = "100*150";//固定参数
                            C_主型材长度 = C_无字母参数[0];
                            C_主型材数量 = C_数量;
                            C_封板 = "93.5*143.5";//封板型号=主型材每边-6.5的边框和焊缝
                            C_封板数量 = (2 * int.Parse(C_数量)).ToString();

                            //计算加筋和最短长度
                            if (float.Parse(C_无字母参数[0]) < 50) {
                                C_信息 = "C槽长度过小";
                                C_加筋型号 = "无";
                                C_加筋数量 = "无";
                            }
                            else if (float.Parse(C_无字母参数[0]) > 500)
                            {
                                C_加筋型号 = "93.5*143.5";//=主型材每边-6.5的边框和焊缝
                                if (float.Parse(C_无字母参数[0]) < 600)
                                {
                                    C_加筋数量 = ((int)四舍五入(float.Parse(C_无字母参数[0]) / 300, 0) * int.Parse(C_数量)).ToString();
                                }
                                else
                                {
                                    C_加筋数量 = (((int)四舍五入((float.Parse(C_无字母参数[0]) / 300) - 1, 0)) * int.Parse(C_数量)).ToString();
                                }
                                C_信息 = "100*150标准C槽";
                            }
                            else
                            {
                                C_加筋型号 = "无";
                                C_加筋数量 = "无";
                                C_信息 = "100*150标准C槽";
                            }
                            //放入结果数组
                            结果 = new string[8] { C_主型材, C_主型材长度, C_主型材数量, C_封板, C_封板数量, C_加筋型号, C_加筋数量, C_信息 };
                            return 结果;
                            //两个参数的算法
                        case 2:
                            switch (C_无字母参数[0])
                            {
                                case "1"://1C300(举例)
                                    C_加筋型号 = "103.5*143.5";//=主型材每边-6.5的边框和焊缝
                                    C_主型材 = "110*150";
                                    C_封板 = "103.5*143.5";//=主型材每边-6.5的边框和焊缝
                                    C_信息 = "1C型材C槽";
                                    break;
                                case "2"://2C300,往下以此类推
                                    C_加筋型号 = "113.5*143.5";//=主型材每边-6.5的边框和焊缝
                                    C_主型材 = "120*150";
                                    C_封板 = "113.5*143.5";//=主型材每边-6.5的边框和焊缝
                                    C_信息 = "2C型材C槽";
                                    break;
                                case "3":
                                    C_加筋型号 = "123.5*143.5";//=主型材每边-6.5的边框和焊缝
                                    C_主型材 = "130*150";
                                    C_封板 = "123.5*143.5";//=主型材每边-6.5的边框和焊缝
                                    C_信息 = "3C型材C槽";
                                    break;
                                case "4":
                                    C_加筋型号 = "133.5*143.5";//=主型材每边-6.5的边框和焊缝
                                    C_主型材 = "140*150";
                                    C_封板 = "133.5*143.5";//=主型材每边-6.5的边框和焊缝
                                    C_信息 = "4C型材C槽";
                                    break;
                                case "5":
                                    C_加筋型号 = "143.5*143.5";//=主型材每边-6.5的边框和焊缝
                                    C_主型材 = "150*150";
                                    C_封板 = "143.5*143.5";//=主型材每边-6.5的边框和焊缝
                                    C_信息 = "5C型材C槽";
                                    break;
                                case "6":
                                    C_加筋型号 = "153.5*143.5";//=主型材每边-6.5的边框和焊缝
                                    C_主型材 = "160*150";
                                    C_封板 = "153.5*143.5";//=主型材每边-6.5的边框和焊缝
                                    C_信息 = "6C型材C槽";
                                    break;
                                case "7":
                                    C_加筋型号 = "163.5*143.5";//=主型材每边-6.5的边框和焊缝
                                    C_主型材 = "170*150";
                                    C_封板 = "163.5*143.5";//=主型材每边-6.5的边框和焊缝
                                    C_信息 = "7C型材C槽";
                                    break;
                                case "8":
                                    C_加筋型号 = "173.5*143.5";//=主型材每边-6.5的边框和焊缝
                                    C_主型材 = "180*150";
                                    C_封板 = "173.5*143.5";//=主型材每边-6.5的边框和焊缝
                                    C_信息 = "8C型材C槽";
                                    break;
                                case "9":
                                    C_加筋型号 = "183.5*143.5";//=主型材每边-6.5的边框和焊缝
                                    C_主型材 = "190*150";
                                    C_封板 = "183.5*143.5";//=主型材每边-6.5的边框和焊缝
                                    C_信息 = "9C型材C槽";
                                    break;
                                case "20":
                                    C_加筋型号 = "193.5*143.5";//=主型材每边-6.5的边框和焊缝
                                    C_主型材 = "200*150";
                                    C_封板 = "193.5*143.5";//=主型材每边-6.5的边框和焊缝
                                    C_信息 = "20C型材C槽";
                                    break;
                                default://除以上类型之外的型号,这里不支持
                                    C_加筋型号 = "";
                                    C_主型材 = "";
                                    C_封板 = "";
                                    C_信息 = "不支持的型号,请检查";
                                    break;
                            }
                            //计算加筋
                            if (float.Parse(C_无字母参数[1]) < 50)
                            {
                                C_信息 = "C槽长度过小";
                                C_加筋型号 = "无";
                                C_加筋数量 = "无";
                            }
                            else if (float.Parse(C_无字母参数[1]) > 500)
                            {
                                if (float.Parse(C_无字母参数[1]) < 600)
                                {
                                    C_加筋数量 = ((int)四舍五入(float.Parse(C_无字母参数[1]) / 300, 0) * int.Parse(C_数量)).ToString();
                                }
                                else
                                {
                                    C_加筋数量 = (((int)四舍五入((float.Parse(C_无字母参数[1]) / 300) - 1, 0)) * int.Parse(C_数量)).ToString();
                                }
                            }
                            else
                            {
                                C_加筋型号 = "无";
                                C_加筋数量 = "无";
                            }

                            C_主型材长度 = C_无字母参数[1];
                            C_主型材数量 = C_数量;
                            C_封板数量 = (2 * int.Parse(C_数量)).ToString();
                            //放入结果
                            结果 = new string[8] { C_主型材, C_主型材长度, C_主型材数量, C_封板, C_封板数量, C_加筋型号, C_加筋数量, C_信息 };
                            return 结果;

                        default://编码不对,不支持
                            C_信息 = "不支持的编码,请检查";
                            结果 = new string[8] { C_主型材, C_主型材长度, C_主型材数量, C_封板, C_封板数量, C_加筋型号, C_加筋数量, C_信息 };
                            return 结果;
                    }
                case "DC"://DC型号的C槽计算
                    switch (C_无字母参数.Length)
                    {
                        //一个参数的DC
                        case 1:
                            C_主型材 = "100*100";//固定型号
                            C_主型材长度 = C_无字母参数[0];
                            C_主型材数量 = C_数量;
                            C_封板 = "93.5*93.5";//=主型材每边-6.5的边框和焊缝
                            C_封板数量 = C_数量;
                            
                            //计算加筋
                            if (float.Parse(C_无字母参数[0]) < 50)
                            {
                                C_信息 = "C槽长度过小";
                                C_加筋型号 = "无";
                                C_加筋数量 = "无";
                            }
                            else if (float.Parse(C_无字母参数[0]) > 500)
                            {
                                C_加筋型号 = "93.5*93.5";//=主型材每边-6.5的边框和焊缝
                                if (float.Parse(C_无字母参数[1]) < 600)
                                {
                                    C_加筋数量 = ((int)四舍五入(float.Parse(C_无字母参数[0]) / 300, 0) * int.Parse(C_数量)).ToString();
                                }
                                else
                                {
                                    C_加筋数量 = (((int)四舍五入((float.Parse(C_无字母参数[0]) / 300) - 1, 0)) * int.Parse(C_数量)).ToString();
                                }
                                C_信息 = "100*100型号C槽";
                            }
                            else
                            {
                                C_加筋型号 = "无";
                                C_加筋数量 = "无";
                                C_信息 = "100*100型号C槽";
                            }
                            //结果
                            结果 = new string[8] { C_主型材, C_主型材长度, C_主型材数量, C_封板, C_封板数量, C_加筋型号, C_加筋数量, C_信息 };
                            return 结果;
                        case 2://2个参数的DC
                            switch (C_无字母参数[0])
                            {
                                case "1"://1DC300(举例)
                                    C_加筋型号 = "103.5*93.5";//=主型材每边-6.5的边框和焊缝
                                    C_主型材 = "110*100";
                                    C_封板 = "103.5*93.5";
                                    C_信息 = "1DC型材C槽";
                                    break;
                                case "2"://2DC300(后面以此类推)
                                    C_加筋型号 = "113.5*93.5";
                                    C_主型材 = "120*100";
                                    C_封板 = "113.5*93.5";
                                    C_信息 = "2DC型材C槽";
                                    break;
                                case "3":
                                    C_加筋型号 = "123.5*93.5";
                                    C_主型材 = "130*100";
                                    C_封板 = "123.5*93.5";
                                    C_信息 = "3DC型材C槽";
                                    break;
                                case "4":
                                    C_加筋型号 = "133.5*93.5";
                                    C_主型材 = "140*100";
                                    C_封板 = "133.5*93.5";
                                    C_信息 = "4DC型材C槽";
                                    break;
                                case "5":
                                    C_加筋型号 = "143.5*93.5";
                                    C_主型材 = "150*100";
                                    C_封板 = "143.5*93.5";
                                    C_信息 = "5DC型材C槽";
                                    break;
                                case "6":
                                    C_加筋型号 = "153.5*93.5";
                                    C_主型材 = "160*100";
                                    C_封板 = "153.5*93.5";
                                    C_信息 = "6DC型材C槽";
                                    break;
                                case "7":
                                    C_加筋型号 = "163.5*93.5";
                                    C_主型材 = "170*150";
                                    C_封板 = "163.5*93.5";
                                    C_信息 = "7DC型材C槽";
                                    break;
                                case "8":
                                    C_加筋型号 = "173.5*93.5";
                                    C_主型材 = "180*100";
                                    C_封板 = "173.5*93.5";
                                    C_信息 = "8DC型材C槽";
                                    break;
                                case "9":
                                    C_加筋型号 = "183.5*93.5";
                                    C_主型材 = "190*100";
                                    C_封板 = "183.5*93.5";
                                    C_信息 = "9DC型材C槽";
                                    break;
                                case "20":
                                    C_加筋型号 = "193.5*93.5";
                                    C_主型材 = "200*100";
                                    C_封板 = "193.5*93.5";
                                    C_信息 = "20DC型材C槽";
                                    break;
                                default:
                                    C_加筋型号 = "";
                                    C_主型材 = "";
                                    C_封板 = "";
                                    C_信息 = "不支持的型号,请检查";
                                    break;
                            }
                            //计算加筋
                            if (float.Parse(C_无字母参数[1]) < 50)
                            {
                                C_信息 = "C槽长度过小";
                                C_加筋型号 = "无";
                                C_加筋数量 = "无";
                            }
                            else if (float.Parse(C_无字母参数[1]) > 500)
                            {
                                if (float.Parse(C_无字母参数[1]) < 600)
                                {
                                    C_加筋数量 = ((int)四舍五入(float.Parse(C_无字母参数[1]) / 300, 0) * int.Parse(C_数量)).ToString();
                                }
                                else
                                {
                                    C_加筋数量 = (((int)四舍五入((float.Parse(C_无字母参数[1]) / 300) - 1, 0)) * int.Parse(C_数量)).ToString();
                                }
                            }
                            else
                            {
                                C_加筋型号 = "无";
                                C_加筋数量 = "无";
                            }

                            C_主型材长度 = C_无字母参数[1];
                            C_主型材数量 = C_数量;
                            C_封板数量 = (2 * int.Parse(C_数量)).ToString();

                            结果 = new string[8] { C_主型材, C_主型材长度, C_主型材数量, C_封板, C_封板数量, C_加筋型号, C_加筋数量, C_信息 };
                            return 结果;

                        default:
                            //不支持的编码
                            C_信息 = "不支持的编码,请检查";
                            结果 = new string[8] { C_主型材, C_主型材长度, C_主型材数量, C_封板, C_封板数量, C_加筋型号, C_加筋数量, C_信息 };
                            return 结果;
                    }
                default:
                    //不是C槽的编码,不支持
                    C_信息 = "编码不是C槽,请检查";
                    结果 = new string[8] { C_主型材, C_主型材长度, C_主型材数量, C_封板, C_封板数量, C_加筋型号, C_加筋数量, C_信息 };
                    return 结果;
                    //break;
            }
        }

调用方法:

ruslt1 = MBCore.标准C槽核心算法(textBox9.Text, textBox10.Text);
            if (ruslt1 != null)
            {
                foreach (string str in ruslt1)
                {
                     Console.Write(str);
                }
            }

结果:


image.png

image.png

下一篇:龙骨识别,未完待续.......

你可能感兴趣的:(C槽篇,标准C槽的识别2020-11-11)