識(shí)別C槽的算法,僅支持不帶后綴的編碼,后面會(huì)更新非標(biāo)C槽算法
經(jīng)過(guò)前面2篇文章的學(xué)習(xí),你們已經(jīng)不是小白了,后面注釋會(huì)慢慢變少
public static string[] 標(biāo)準(zhǔn)C槽核心算法(string C_編碼, string C_數(shù)量)
{
//5C300 C300 3DC300 DC300(忠旺體系的編碼)
//定義型材信息
string C_主型材 = "";
string C_主型材長(zhǎng)度 = "";
string C_主型材數(shù)量 = "";
string C_封板 = "";
string C_封板數(shù)量 = "";
string C_加筋型號(hào) = "";
string C_加筋數(shù)量 = "";
string C_信息 = "";
string[] 結(jié)果 = null;//結(jié)果
String[] C_無(wú)字母參數(shù) = null;
String[] C_無(wú)數(shù)字參數(shù) = null;
//C槽算法比較復(fù)雜,類型較多,而且沒(méi)有太多好方法,只能case多個(gè)值
//去除編碼中的符號(hào)和字母,方便下一次計(jì)算
C_無(wú)字母參數(shù) = 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);
//去除編碼中的數(shù)字,方便下一次計(jì)算
C_無(wú)數(shù)字參數(shù) = C_編碼.Split(new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.' }, StringSplitOptions.RemoveEmptyEntries);
//去除編碼中的空格,然后轉(zhuǎn)化為string類型,方便下一次計(jì)算
String C_字符串 = String.Join("", C_無(wú)數(shù)字參數(shù).Select(y => y.ToString()).ToArray());
char[] C_字符數(shù)組 = C_字符串.ToCharArray();
//判斷獲取到的編碼是不是C類型,并保證編碼中只有一個(gè)C或者DC字符
switch (C_字符串)
{//這次升級(jí)一下判斷方法,不用if else了,用switch 看起來(lái)比較簡(jiǎn)潔,其實(shí)效率差不多
case "C":
switch (C_無(wú)字母參數(shù).Length)
{
//一個(gè)參數(shù)的算法
case 1:
C_主型材 = "100*150";//固定參數(shù)
C_主型材長(zhǎng)度 = C_無(wú)字母參數(shù)[0];
C_主型材數(shù)量 = C_數(shù)量;
C_封板 = "93.5*143.5";//封板型號(hào)=主型材每邊-6.5的邊框和焊縫
C_封板數(shù)量 = (2 * int.Parse(C_數(shù)量)).ToString();
//計(jì)算加筋和最短長(zhǎng)度
if (float.Parse(C_無(wú)字母參數(shù)[0]) < 50) {
C_信息 = "C槽長(zhǎng)度過(guò)小";
C_加筋型號(hào) = "無(wú)";
C_加筋數(shù)量 = "無(wú)";
}
else if (float.Parse(C_無(wú)字母參數(shù)[0]) > 500)
{
C_加筋型號(hào) = "93.5*143.5";//=主型材每邊-6.5的邊框和焊縫
if (float.Parse(C_無(wú)字母參數(shù)[0]) < 600)
{
C_加筋數(shù)量 = ((int)四舍五入(float.Parse(C_無(wú)字母參數(shù)[0]) / 300, 0) * int.Parse(C_數(shù)量)).ToString();
}
else
{
C_加筋數(shù)量 = (((int)四舍五入((float.Parse(C_無(wú)字母參數(shù)[0]) / 300) - 1, 0)) * int.Parse(C_數(shù)量)).ToString();
}
C_信息 = "100*150標(biāo)準(zhǔn)C槽";
}
else
{
C_加筋型號(hào) = "無(wú)";
C_加筋數(shù)量 = "無(wú)";
C_信息 = "100*150標(biāo)準(zhǔn)C槽";
}
//放入結(jié)果數(shù)組
結(jié)果 = new string[8] { C_主型材, C_主型材長(zhǎng)度, C_主型材數(shù)量, C_封板, C_封板數(shù)量, C_加筋型號(hào), C_加筋數(shù)量, C_信息 };
return 結(jié)果;
//兩個(gè)參數(shù)的算法
case 2:
switch (C_無(wú)字母參數(shù)[0])
{
case "1"://1C300(舉例)
C_加筋型號(hào) = "103.5*143.5";//=主型材每邊-6.5的邊框和焊縫
C_主型材 = "110*150";
C_封板 = "103.5*143.5";//=主型材每邊-6.5的邊框和焊縫
C_信息 = "1C型材C槽";
break;
case "2"://2C300,往下以此類推
C_加筋型號(hào) = "113.5*143.5";//=主型材每邊-6.5的邊框和焊縫
C_主型材 = "120*150";
C_封板 = "113.5*143.5";//=主型材每邊-6.5的邊框和焊縫
C_信息 = "2C型材C槽";
break;
case "3":
C_加筋型號(hào) = "123.5*143.5";//=主型材每邊-6.5的邊框和焊縫
C_主型材 = "130*150";
C_封板 = "123.5*143.5";//=主型材每邊-6.5的邊框和焊縫
C_信息 = "3C型材C槽";
break;
case "4":
C_加筋型號(hào) = "133.5*143.5";//=主型材每邊-6.5的邊框和焊縫
C_主型材 = "140*150";
C_封板 = "133.5*143.5";//=主型材每邊-6.5的邊框和焊縫
C_信息 = "4C型材C槽";
break;
case "5":
C_加筋型號(hào) = "143.5*143.5";//=主型材每邊-6.5的邊框和焊縫
C_主型材 = "150*150";
C_封板 = "143.5*143.5";//=主型材每邊-6.5的邊框和焊縫
C_信息 = "5C型材C槽";
break;
case "6":
C_加筋型號(hào) = "153.5*143.5";//=主型材每邊-6.5的邊框和焊縫
C_主型材 = "160*150";
C_封板 = "153.5*143.5";//=主型材每邊-6.5的邊框和焊縫
C_信息 = "6C型材C槽";
break;
case "7":
C_加筋型號(hào) = "163.5*143.5";//=主型材每邊-6.5的邊框和焊縫
C_主型材 = "170*150";
C_封板 = "163.5*143.5";//=主型材每邊-6.5的邊框和焊縫
C_信息 = "7C型材C槽";
break;
case "8":
C_加筋型號(hào) = "173.5*143.5";//=主型材每邊-6.5的邊框和焊縫
C_主型材 = "180*150";
C_封板 = "173.5*143.5";//=主型材每邊-6.5的邊框和焊縫
C_信息 = "8C型材C槽";
break;
case "9":
C_加筋型號(hào) = "183.5*143.5";//=主型材每邊-6.5的邊框和焊縫
C_主型材 = "190*150";
C_封板 = "183.5*143.5";//=主型材每邊-6.5的邊框和焊縫
C_信息 = "9C型材C槽";
break;
case "20":
C_加筋型號(hào) = "193.5*143.5";//=主型材每邊-6.5的邊框和焊縫
C_主型材 = "200*150";
C_封板 = "193.5*143.5";//=主型材每邊-6.5的邊框和焊縫
C_信息 = "20C型材C槽";
break;
default://除以上類型之外的型號(hào),這里不支持
C_加筋型號(hào) = "";
C_主型材 = "";
C_封板 = "";
C_信息 = "不支持的型號(hào),請(qǐng)檢查";
break;
}
//計(jì)算加筋
if (float.Parse(C_無(wú)字母參數(shù)[1]) < 50)
{
C_信息 = "C槽長(zhǎng)度過(guò)小";
C_加筋型號(hào) = "無(wú)";
C_加筋數(shù)量 = "無(wú)";
}
else if (float.Parse(C_無(wú)字母參數(shù)[1]) > 500)
{
if (float.Parse(C_無(wú)字母參數(shù)[1]) < 600)
{
C_加筋數(shù)量 = ((int)四舍五入(float.Parse(C_無(wú)字母參數(shù)[1]) / 300, 0) * int.Parse(C_數(shù)量)).ToString();
}
else
{
C_加筋數(shù)量 = (((int)四舍五入((float.Parse(C_無(wú)字母參數(shù)[1]) / 300) - 1, 0)) * int.Parse(C_數(shù)量)).ToString();
}
}
else
{
C_加筋型號(hào) = "無(wú)";
C_加筋數(shù)量 = "無(wú)";
}
C_主型材長(zhǎng)度 = C_無(wú)字母參數(shù)[1];
C_主型材數(shù)量 = C_數(shù)量;
C_封板數(shù)量 = (2 * int.Parse(C_數(shù)量)).ToString();
//放入結(jié)果
結(jié)果 = new string[8] { C_主型材, C_主型材長(zhǎng)度, C_主型材數(shù)量, C_封板, C_封板數(shù)量, C_加筋型號(hào), C_加筋數(shù)量, C_信息 };
return 結(jié)果;
default://編碼不對(duì),不支持
C_信息 = "不支持的編碼,請(qǐng)檢查";
結(jié)果 = new string[8] { C_主型材, C_主型材長(zhǎng)度, C_主型材數(shù)量, C_封板, C_封板數(shù)量, C_加筋型號(hào), C_加筋數(shù)量, C_信息 };
return 結(jié)果;
}
case "DC"://DC型號(hào)的C槽計(jì)算
switch (C_無(wú)字母參數(shù).Length)
{
//一個(gè)參數(shù)的DC
case 1:
C_主型材 = "100*100";//固定型號(hào)
C_主型材長(zhǎng)度 = C_無(wú)字母參數(shù)[0];
C_主型材數(shù)量 = C_數(shù)量;
C_封板 = "93.5*93.5";//=主型材每邊-6.5的邊框和焊縫
C_封板數(shù)量 = C_數(shù)量;
//計(jì)算加筋
if (float.Parse(C_無(wú)字母參數(shù)[0]) < 50)
{
C_信息 = "C槽長(zhǎng)度過(guò)小";
C_加筋型號(hào) = "無(wú)";
C_加筋數(shù)量 = "無(wú)";
}
else if (float.Parse(C_無(wú)字母參數(shù)[0]) > 500)
{
C_加筋型號(hào) = "93.5*93.5";//=主型材每邊-6.5的邊框和焊縫
if (float.Parse(C_無(wú)字母參數(shù)[1]) < 600)
{
C_加筋數(shù)量 = ((int)四舍五入(float.Parse(C_無(wú)字母參數(shù)[0]) / 300, 0) * int.Parse(C_數(shù)量)).ToString();
}
else
{
C_加筋數(shù)量 = (((int)四舍五入((float.Parse(C_無(wú)字母參數(shù)[0]) / 300) - 1, 0)) * int.Parse(C_數(shù)量)).ToString();
}
C_信息 = "100*100型號(hào)C槽";
}
else
{
C_加筋型號(hào) = "無(wú)";
C_加筋數(shù)量 = "無(wú)";
C_信息 = "100*100型號(hào)C槽";
}
//結(jié)果
結(jié)果 = new string[8] { C_主型材, C_主型材長(zhǎng)度, C_主型材數(shù)量, C_封板, C_封板數(shù)量, C_加筋型號(hào), C_加筋數(shù)量, C_信息 };
return 結(jié)果;
case 2://2個(gè)參數(shù)的DC
switch (C_無(wú)字母參數(shù)[0])
{
case "1"://1DC300(舉例)
C_加筋型號(hào) = "103.5*93.5";//=主型材每邊-6.5的邊框和焊縫
C_主型材 = "110*100";
C_封板 = "103.5*93.5";
C_信息 = "1DC型材C槽";
break;
case "2"://2DC300(后面以此類推)
C_加筋型號(hào) = "113.5*93.5";
C_主型材 = "120*100";
C_封板 = "113.5*93.5";
C_信息 = "2DC型材C槽";
break;
case "3":
C_加筋型號(hào) = "123.5*93.5";
C_主型材 = "130*100";
C_封板 = "123.5*93.5";
C_信息 = "3DC型材C槽";
break;
case "4":
C_加筋型號(hào) = "133.5*93.5";
C_主型材 = "140*100";
C_封板 = "133.5*93.5";
C_信息 = "4DC型材C槽";
break;
case "5":
C_加筋型號(hào) = "143.5*93.5";
C_主型材 = "150*100";
C_封板 = "143.5*93.5";
C_信息 = "5DC型材C槽";
break;
case "6":
C_加筋型號(hào) = "153.5*93.5";
C_主型材 = "160*100";
C_封板 = "153.5*93.5";
C_信息 = "6DC型材C槽";
break;
case "7":
C_加筋型號(hào) = "163.5*93.5";
C_主型材 = "170*150";
C_封板 = "163.5*93.5";
C_信息 = "7DC型材C槽";
break;
case "8":
C_加筋型號(hào) = "173.5*93.5";
C_主型材 = "180*100";
C_封板 = "173.5*93.5";
C_信息 = "8DC型材C槽";
break;
case "9":
C_加筋型號(hào) = "183.5*93.5";
C_主型材 = "190*100";
C_封板 = "183.5*93.5";
C_信息 = "9DC型材C槽";
break;
case "20":
C_加筋型號(hào) = "193.5*93.5";
C_主型材 = "200*100";
C_封板 = "193.5*93.5";
C_信息 = "20DC型材C槽";
break;
default:
C_加筋型號(hào) = "";
C_主型材 = "";
C_封板 = "";
C_信息 = "不支持的型號(hào),請(qǐng)檢查";
break;
}
//計(jì)算加筋
if (float.Parse(C_無(wú)字母參數(shù)[1]) < 50)
{
C_信息 = "C槽長(zhǎng)度過(guò)小";
C_加筋型號(hào) = "無(wú)";
C_加筋數(shù)量 = "無(wú)";
}
else if (float.Parse(C_無(wú)字母參數(shù)[1]) > 500)
{
if (float.Parse(C_無(wú)字母參數(shù)[1]) < 600)
{
C_加筋數(shù)量 = ((int)四舍五入(float.Parse(C_無(wú)字母參數(shù)[1]) / 300, 0) * int.Parse(C_數(shù)量)).ToString();
}
else
{
C_加筋數(shù)量 = (((int)四舍五入((float.Parse(C_無(wú)字母參數(shù)[1]) / 300) - 1, 0)) * int.Parse(C_數(shù)量)).ToString();
}
}
else
{
C_加筋型號(hào) = "無(wú)";
C_加筋數(shù)量 = "無(wú)";
}
C_主型材長(zhǎng)度 = C_無(wú)字母參數(shù)[1];
C_主型材數(shù)量 = C_數(shù)量;
C_封板數(shù)量 = (2 * int.Parse(C_數(shù)量)).ToString();
結(jié)果 = new string[8] { C_主型材, C_主型材長(zhǎng)度, C_主型材數(shù)量, C_封板, C_封板數(shù)量, C_加筋型號(hào), C_加筋數(shù)量, C_信息 };
return 結(jié)果;
default:
//不支持的編碼
C_信息 = "不支持的編碼,請(qǐng)檢查";
結(jié)果 = new string[8] { C_主型材, C_主型材長(zhǎng)度, C_主型材數(shù)量, C_封板, C_封板數(shù)量, C_加筋型號(hào), C_加筋數(shù)量, C_信息 };
return 結(jié)果;
}
default:
//不是C槽的編碼,不支持
C_信息 = "編碼不是C槽,請(qǐng)檢查";
結(jié)果 = new string[8] { C_主型材, C_主型材長(zhǎng)度, C_主型材數(shù)量, C_封板, C_封板數(shù)量, C_加筋型號(hào), C_加筋數(shù)量, C_信息 };
return 結(jié)果;
//break;
}
}
調(diào)用方法:
ruslt1 = MBCore.標(biāo)準(zhǔn)C槽核心算法(textBox9.Text, textBox10.Text);
if (ruslt1 != null)
{
foreach (string str in ruslt1)
{
Console.Write(str);
}
}
結(jié)果:
image.png
image.png
下一篇:龍骨識(shí)別,未完待續(xù).......