예제 #1
0
파일: Form2.cs 프로젝트: Radhold/MathLogic
 private void addNewList(Symptoms Obj)
 {
     if ((Obj.ill.Contains("гигантизм") || Obj.ill.Contains("АКР")) && Obj.ill.Count == 1)
     {
         foreach (AgeH ahObj in ah)
         {
             if (int.Parse(comboBox1.Text) == ahObj.Age || ahObj.Age == 20 && int.Parse(comboBox1.Text) > 20)
             {
                 if (double.Parse(maskedTextBox1.Text) >= ahObj.Height)
                 {
                     symp.Add(Obj);
                 }
             }
         }
     }
     else
     {
         symp.Add(Obj);
     }
 }
예제 #2
0
파일: Form2.cs 프로젝트: Radhold/MathLogic
        HashSet <string> illSet = new HashSet <string>(); // множество для того, чтобы проверять, какие заболевания могут быть.
        // Это нужно, чтобы выводить корректно симптомы (если есть такие, которые у нскольких заболеваний)
        void SelecteSymptom(object sender, EventArgs e)
        {
            foreach (Control x in sympPanel.Controls) // заполнение множества с заболеваниями. проход по всем комбобоксам, чтобы выявить, какие симптомы могут быть
            {
                if (x is ComboBox)
                {
                    for (int elem = 1; elem < symp.Count; elem++)
                    {
                        if (((ComboBox)sender).SelectedValue.Equals(symp[elem].Num))
                        {
                            if (!illSet.Any())
                            {
                                illSet = symp[elem].ill;
                            }
                            else
                            {
                                illSet.IntersectWith(symp[elem].ill); // самая главная штука из-за которой я использую HashSet (т.к LINQ, как бы сказал З.М, некорректно)
                            }
                        }
                    }
                }
            }
            List <Symptoms> newSympList = new List <Symptoms>();
            Symptoms nullObj            = new Symptoms(); //костыль, чтобы показывался пустой 1й элемент
            newSympList.Add(nullObj);
            for (int elem = 1; elem < symp.Count; elem++) //добавление симптомов
            {
                if (((ComboBox)sender).SelectedValue.Equals(symp[elem].Num))
                {
                    /*ищем элемент с данным номером в листе.
                     * Вся реализация программы заключается в том, что к comboBox привязываются данные из листа.
                     * Это позволяет использовать в качестве индексов элемента Бокса номера, которые записаны в файле.
                     * Этот подход облегчает поиск. Т.к по тексту искать не получается (тупо пустая строка)
                     */
                    foreach (string newSymp in symp[elem].connect)
                    {
                        if (male.Checked && symp[elem].Gender != "Ж")
                        {
                            addNewList(newSympList, newSymp);
                        }
                        else if (fem.Checked && symp[elem].Gender != "М")
                        {
                            addNewList(newSympList, newSymp);
                        }
                    }
                }
            }

            if (newSympList.Count > 1 && illSet.Count() > 1) //проверка на то, нужно ли добавлять ComboBox
            {                                                //Добавление ComboBox
                top += comboBox2.Top;
                ComboBox comboBox = new ComboBox();
                number++;
                comboBox.Name          = "comboBox" + number;
                comboBox.ForeColor     = comboBox2.ForeColor;
                comboBox.Size          = comboBox2.Size;
                comboBox.Location      = comboBox2.Location;
                comboBox.Top          += top;
                comboBox.DataSource    = newSympList;
                comboBox.DisplayMember = "Text";
                comboBox.ValueMember   = "Num";
                sympPanel.Controls.Add(comboBox);
                comboBox.SelectedValueChanged += comboBox2_SelectedValueChanged; // вещаем делегатик
            }
            else if (illSet.Count == 1)                                          //если уже есть только 1 возможное заболевание, то он его выводит сразу и закрывает форму
            {
                MessageBox.Show($"На основании Ваших симптомов и данных у Вас: {illSet.First()}. Необходима консультация специалиста!",
                                "Диагноз",
                                MessageBoxButtons.OK,
                                MessageBoxIcon.Information);
                Dispose();
            }
            else //случай, возникающий если не выбраны никакие симптомы (Ничего из перечисленного)
            {
                MessageBox.Show("Скорее всего, Вы здоровы. Необходима консультация специалиста!",
                                "Диагноз",
                                MessageBoxButtons.OK,
                                MessageBoxIcon.Information);
            }
            Dispose();
        }
예제 #3
0
파일: Form2.cs 프로젝트: Radhold/MathLogic
        private void button1_Click(object sender, EventArgs e) //первичное заполнение списка симптомами
        {
            try
            {
                if (maskedTextBox1.Text == "")
                {
                    throw new Exception(message: "Введите рост");
                }
                string filename = null;
                if (male.Checked)
                {
                    filename = "РостМ.txt";
                }
                else
                {
                    filename = "РостЖ.txt";
                }
                string[] text1 = File.ReadAllLines(@filename);
                var words1     = text1.Select(line => line.Split(';')); //читаем файл, заполняем лист
                foreach (string[] elem in words1)                       //Заполнение списка параметрами возраста и роста
                {
                    AgeH obj = new AgeH();
                    obj.Age    = int.Parse(elem[0]);
                    obj.Height = double.Parse(elem[1]);
                    ah.Add(obj);
                }
                string[] text2   = File.ReadAllLines(@"Логика — копия.txt");
                var words2       = text2.Select(line => line.Split(';')); //читаем файл, заполняем лист
                Symptoms nullObj = new Symptoms();
                symp.Add(nullObj);                                        // опять костыль
                int resultofParse;
                bool success = false;
                foreach (string[] elem in words2) //заполнение списка симптомов
                {
                    Symptoms obj = new Symptoms();
                    obj.Num    = elem[0];
                    obj.Text   = elem[1];
                    obj.Gender = elem[2];
                    for (int i = 3; i < elem.Length; i++)
                    {
                        success = int.TryParse(elem[i], out resultofParse);
                        if (success)
                        {
                            obj.connect.Add(elem[i]);
                        }
                        else
                        {
                            obj.ill.Add(elem[i]);
                        }
                    }
                    if (male.Checked && obj.Gender != "Ж")
                    {
                        addNewList(obj);
                    }

                    else if (fem.Checked && obj.Gender != "М")
                    {
                        addNewList(obj);
                    }
                }
                foreach (Control x in this.Controls)
                {
                    if (x is Panel && x.Name != "sympPanel")
                    {
                        x.Enabled = false;
                    }
                }
                sympPanel.Visible       = true;
                comboBox2.DataSource    = symp;
                comboBox2.DisplayMember = "Text";
                comboBox2.ValueMember   = "Num";
            }
            catch (Exception exc)
            {
                MessageBox.Show(exc.Message,
                                "Исключение",
                                MessageBoxButtons.OK,
                                MessageBoxIcon.Warning);
            }
        }