// Обработка ответа пользователя private void AnswerTheQuestion() { // Получение строки с ответом из поля на форме string answerValue = UserAnswerTB.Text; // Перебор все возможных ответов для факта foreach (string variant in validAnswersList) { // Если нашлось совпадение с одним из ответов, // то записывается ответ в память и очищается поле на форме поле для ввода if (variant == answerValue) { SystemOutputTB.AppendText(" " + answerValue); workMemory.ResponseProcessing(currentFactName, answerValue); YesRB.Checked = NoRB.Checked = false; SystemOutputTB.AppendText("\r\n\r\n"); UserAnswerTB.Focus(); UserAnswerTB.Clear(); return; } } // Если введеный ответ не является одним из возможных ответов, // то выбрасывается исключение и очищается поле для ответа UserAnswerTB.Clear(); throw new Exception("Введите один из предложенных вариантов ответа."); }
private void GetQuestion() // получение нового вопроса { // структура кортежа: 1 - текст вопроса, 2 - имя факта, которому соответствует текущий вопрос, 3 - список допустимых вариантов ответа Tuple <string, string, List <string> > result = workMemory.GetQuestionAndCurrentDefruleName(); SystemOutputTB.AppendText(result.Item1); currentFactName = result.Item2; validAnswersList = result.Item3; }
// Получение нового вопроса private void GetQuestion() { // Структура кортежа: // 1 - текст вопроса, // 2 - имя факта, которому соответствует текущий вопрос, // 3 - список допустимых вариантов ответа Tuple <string, string, List <string> > result = workMemory.GetQuestionAndCurrentDefruleName(); // Запись название факта и возможных ответов для него SystemOutputTB.AppendText(result.Item1); currentFactName = result.Item2; validAnswersList = result.Item3; }
private void UserAnswerBTN_Click(object sender, EventArgs e) { try { if (++clicksCount == 1) { UserAnswerBTN.Text = "Ответить"; UserAnswerTB.Enabled = true; } else { if (UserAnswerTB.Text == string.Empty) { throw new Exception("Поле ввода не должно быть пустым."); } AnswerTheQuestion(); ++askedQuestionCount; // количество заданных вопросов для обработки случаев, когда система не может вывести ответ #region Проверка условия прекращения работы системы Tuple <string, bool> corteg = workMemory.DefrulesEnumeration(); bool isFinal = corteg.Item2; // булевая переменная, возвращающая содержание факта типа "университет" в РП if (isFinal) { SystemOutputTB.AppendText("Система советует поступать в " + corteg.Item1); UserAnswerBTN.Enabled = false; ExplanationComponentCallBtn.Enabled = true; return; } if (askedQuestionCount == workMemory.QuestionsCount) { SystemOutputTB.AppendText("Система не смогла выбрать ВУЗ, попробуйте еще раз."); UserAnswerBTN.Enabled = false; ExplanationComponentCallBtn.Enabled = true; return; } #endregion } GetQuestion(); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
private void AnswerTheQuestion() // отправка ответа пользователя { string answerValue = UserAnswerTB.Text; foreach (string variant in validAnswersList) { if (variant == answerValue) { SystemOutputTB.AppendText(" " + answerValue); workMemory.ResponseProcessing(currentFactName, answerValue); YesRB.Checked = NoRB.Checked = false; SystemOutputTB.AppendText("\r\n\r\n"); UserAnswerTB.Focus(); UserAnswerTB.Clear(); return; } } UserAnswerTB.Clear(); throw new Exception("Введите один из предложенных вариантов ответа."); }
// Обработка нажатия кнопки ответа private void UserAnswerBTN_Click(object sender, EventArgs e) { try { // Если это было первое нажате кнопки "Ответить" (в начале работы программы // она называется "Начать"), то идет переименовывание кнопки и активация кнопки // для отправки ответа if (++clicksCount == 1) { UserAnswerBTN.Text = "Ответить"; UserAnswerTB.Enabled = true; } else { // Если поле для ответа на форме пустая, то выбрасывается исключение if (UserAnswerTB.Text == string.Empty) { throw new Exception("Поле ввода не должно быть пустым."); } // Вызов функции для обработки ответа AnswerTheQuestion(); // Увеличение счетчика отвеченых вопросов ++askedQuestionCount; // === // Проверка условия прекращения работы системы Tuple <string, bool> corteg = workMemory.DefrulesEnumeration(); // Флаг того, что очередной факт из рабочей памяти является логическим выводом с ответом bool isFinal = corteg.Item2; // Вывод логического ответа if (isFinal) { SystemOutputTB.AppendText("Система советует поступать в " + corteg.Item1); UserAnswerBTN.Enabled = false; ExplanationComponentCallBtn.Enabled = true; return; } // Если исчерпан лимит на ответы, то if (askedQuestionCount == workMemory.QuestionsCount) { SystemOutputTB.AppendText("Система не смогла выбрать ВУЗ, попробуйте еще раз."); UserAnswerBTN.Enabled = false; ExplanationComponentCallBtn.Enabled = true; return; } } // Вызов функции для получение нового вопроса // для определения следующего факта GetQuestion(); } catch (Exception ex) { // В случае ошибки обработки ответа выводится соответствующий ответ MessageBox.Show(ex.Message); } }