C槽篇,标准C槽的识别2020-11-11
2020-11-11 本文已影响0人
new_blash
识别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
下一篇:龙骨识别,未完待续.......