void generateToolStripMenuItem_Click(object sender, EventArgs e) { try { GenForm gf = new GenForm(); if (gf.ShowDialog() != DialogResult.OK) { return; } int smpCount = int.Parse(gf.tbSmpCount.Text); double mN = double.Parse(gf.tbMN.Text), sN = double.Parse(gf.tbSN.Text); double mQ = double.Parse(gf.tbMQ.Text), sQ = double.Parse(gf.tbSQ.Text); double AQL = double.Parse(gf.tbAQL.Text); int[] arrQ; string[] arrCT; Result[] arrRes; arrStr = StatInspection.Inspect(smpCount, mN, sN, mQ, sQ, AQL, gf.cbCT.Text, gf.cbCL.Text, out arrN, out arrAc, out arrQ, out arrCT, out arrRes); lv.Items.Clear(); for (int i = 0; i < arrN.Length; i++) { lv.Items.Add(new ListViewItem(new string[] { string.Format("{0}", i + 1), arrN[i].ToString(), arrAc[i].ToString(), arrQ[i].ToString(), arrRes[i].ToString(), arrCT[i] })); } } catch { MessageBox.Show("Ошибочные исходные данные"); } }
void lv_SelectedIndexChanged(object sender, EventArgs e) { try { int i = lv.SelectedIndices[0]; wb.DocumentText = arrStr[i]; ps.Clear(); double[] arrP, arrL; arrL = StatInspection.GetL(arrN[i], arrAc[i], out arrP); LinePlot lp = new LinePlot(arrL, arrP); lp.Color = Color.Red; ps.Add(lp); ps.Title = "Оперативная характеристика (по закону Пуассона)"; ps.XAxis1.Label = "Уровень качества, q"; ps.YAxis1.Label = "Оперативная характеристика, L"; ps.Refresh(); } catch { } }
static public string[] Inspect(int smpCount, double mN, double sN, double mQ, double sQ, double AQL, string controlType, string controlLevel, out int[] arrN, out int[] arrAc, out int[] arrQ, out string[] arrControlType, out Result[] arrResult) { List <string> listStr = new List <string>(); List <int> listN = new List <int>(); List <int> listAc = new List <int>(); List <int> listQ = new List <int>(); List <string> listCT = new List <string>(); List <Result> listRes = new List <Result>(); for (int i = 0; i < smpCount; i++) { int nLot = Generator.NextN(mN, sN); string nCode = StatInspection.GetNCode(controlLevel, nLot); int n = StatInspection.GetN(nCode, controlType); int Re, Ac = StatInspection.GetAcRe(nCode, controlType, AQL, out Re); int q = Generator.NextQ(nLot, mQ, sQ); Result res = Result.Не_определено; if (q <= Ac) { res = Result.Принята; } else if (q >= Re) { res = Result.Забракована; } string s = string.Format("Объем партии: {0}<br>Вид контроля: {1}<br>" + "Код объема выборки: {2}<br>Объем выборки: {3}<br>Ac = {4}<br>Re = {5}<br>" + "q = {6}<br>Результат: {7}<br>", nLot, controlType, nCode, n, Ac, Re, q, res); listN.Add(n); listAc.Add(Ac); listQ.Add(q); listCT.Add(controlType); listRes.Add(res); if (controlType == "Нормальный") { int j, k = 0; for (j = 0; j < 5; j++) { int index = listCT.Count - 1 - j; if (index < 0 || listCT[index] != "Нормальный") { break; } if (listRes[index] == Result.Забракована) { k++; } } if (j == 5 && k >= 2) { controlType = "Усиленный"; s += " (переход на усиленный контроль: из пяти партий две или более забракованы)"; listStr.Add(s); continue; } k = 0; for (j = 0; j < 10; j++) { int index = listCT.Count - 1 - j; if (index < 0 || listCT[index] != "Нормальный" || listRes[index] == Result.Забракована) { break; } k += listQ[index]; } int lim = StatInspection.GetLim(n, AQL); if (j == 10 && k <= lim) { controlType = "Ослабленный"; s += " (переход на ослабленный контроль: десять партий приняты, " + "суммарное количество дефектов не превышает предельное приемочное число " + lim.ToString() + ")"; listStr.Add(s); continue; } } if (controlType == "Усиленный") { int j, k = 0; for (j = 0; j < 5; j++) { int index = listCT.Count - 1 - j; if (index < 0 || listCT[index] != "Усиленный") { break; } if (listRes[index] == Result.Забракована) { k++; } } if (j == 5 && k == 0) { controlType = "Нормальный"; s += " (переход на нормальный контроль: пять партий приняты)"; listStr.Add(s); continue; } } if (controlType == "Ослабленный") { if (res == Result.Забракована || res == Result.Не_определено) { controlType = "Нормальный"; s += " (переход на нормальный контроль: партия не принята)"; listStr.Add(s); continue; } } listStr.Add(s); } arrN = listN.ToArray(); arrAc = listAc.ToArray(); arrQ = listQ.ToArray(); arrControlType = listCT.ToArray(); arrResult = listRes.ToArray(); return(listStr.ToArray()); }