private async void mainLayoutStart_Click(object sender, RoutedEventArgs e) { if (isCurrentData) { if (WpfApp1.View.choiceBlock.currentButton != null) { WpfApp1.View.choiceBlock.currentButton.Foreground = SpecialColor.mainBlue(); WpfApp1.View.choiceBlock.currentButton.Background = SpecialColor.mainBack(); WpfApp1.View.choiceBlock.currentButton = null; } lastName_data = lastName.Text; firstName_data = firstName.Text; secondName_data = secondName.Text; group_data = group.Text; contentControl.Content = cBlock; } else { if (!DataPopup.IsOpen) { DataPopupText.Content = "ВВЕДИТЕ ДАННЫЕ"; DataPopupText.Background = SpecialColor.red(); DataPopup.IsOpen = true; await Task.Delay(2000); DataPopup.IsOpen = false; } } }
//подтверждение ответа private async void confirmAnswer_Click(object sender, RoutedEventArgs e) { if (test1) { return; } test1 = true; TestControl test_one = new TestControl(); // Создаем словарь исходных данных if (checkAnswer.Variables == null) { checkAnswer.Variables = questions.getQuestionParams(choiceBlock.theme, choiceBlock.blockID, choiceNextPage.loadID, choiceNextPage.variantID); } // Создаем счетчик попыток для каждой неизвестной переменной, которую необходимо найти. if (numTry == null) { numTry = new List <int>(); foreach (var item in questions.getQuestionFinds(choiceBlock.theme, choiceBlock.blockID, choiceNextPage.loadID, choiceNextPage.variantID, stageNum)) { numTry.Add(0); } } if (mainPict == null) { mainPict = new List <string>(); foreach (var i in questions.getQuestionFinds(choiceBlock.theme, choiceBlock.blockID, choiceNextPage.loadID, choiceNextPage.variantID, 2)) { mainPict.Add(questions.getVariantsImgPath(choiceBlock.theme, choiceBlock.blockID, choiceNextPage.loadID)[choiceNextPage.loadID][1].ToString()); } } // Создаем список неизвестных переменных if (questionFindList == null) { questionFindList = questions.getQuestionFinds(choiceBlock.theme, choiceBlock.blockID, choiceNextPage.loadID, choiceNextPage.variantID, stageNum); } if (questionFormulasDict == null) { questionFormulasDict = questions.getQuestionFormuls(choiceBlock.theme, choiceBlock.blockID, choiceNextPage.loadID, choiceNextPage.variantID, stageNum); } if (graphicHintList == null) { graphicHintList = questions.getTipsPath(choiceBlock.theme, choiceBlock.blockID, choiceNextPage.loadID, choiceNextPage.variantID); } // Рассчитывем введенную формулу checkAnswer.Formula = answer.Text; string formualaInput = checkAnswer.Check(); if (questionFormulasDict.Count > 0) { // Строка правильной формулы checkAnswer.Formula = questionFormulasDict[test_one.SelectedIndex()]["0"]; string formulaCorrectExport = checkAnswer.Formula; string formulaCorrect = checkAnswer.Check(); // Проверяем на ошибку "NullOrEmpty Error!" - если была передана пустая строка if (formualaInput == "NullOrEmpty Error!") { AnswerPopupContent.Background = SpecialColor.orange(); AnswerPopupContent.Content = "ОШИБКА"; test_one.AnswerTipsClear(); test_one.AnswerTip($"Ошибка! Введена пустая строка", "orange"); } // Проверяем на ошибку "Syntax Error!" - если была выявлена синтаксическая ошибка else if (formualaInput == "Syntax Error!") { AnswerPopupContent.Background = SpecialColor.orange(); AnswerPopupContent.Content = "ОШИБКА"; test_one.AnswerTipsClear(); test_one.AnswerTip($"Была выявлена синтаксическая ошибка!", "orange"); } // Проверяем на ошибку "Bracket Error!" - если была выявлена ошибка правильности написания скобок else if (formualaInput == "Bracket Error!") { AnswerPopupContent.Background = SpecialColor.orange(); AnswerPopupContent.Content = "ОШИБКА"; test_one.AnswerTipsClear(); test_one.AnswerTip($"Ошибка! Неправильно расставлены скобки!", "orange"); } // Проверяем на ошибку "UnknownData Error!" - если были переданы неизвестные данные else if (formualaInput == "UnknownData Error!") { AnswerPopupContent.Background = SpecialColor.orange(); AnswerPopupContent.Content = "ОШИБКА"; test_one.AnswerTipsClear(); test_one.AnswerTip($"Ошибка! Введены неизвестные данные!", "orange"); } // Если ошибок нет, то проводим рассчет введенной формулы и сравниваем её с правильной формулой // Если ответ совпал, то выводим информацию о "правильности" ответа и засчитываем правильный ответ. else if (Convert.ToDouble(formulaCorrect) == Convert.ToDouble(formualaInput)) { AnswerPopupContent.Background = SpecialColor.green(); AnswerPopupContent.Content = "ПРАВИЛЬНО"; // +1 к счетчику правильных ответов correctAnswersCount++; // За правильный ответ дается 5 баллов test_one.Score(5); // На вопрос был дан ответ, следовательно попытки больше не нужны numTry[test_one.SelectedIndex()] = 3; test_one.AnswerTipsClear(); test_one.AnswerTip($"Правильно! Ответ: {formulaCorrectExport}", "green"); } else { AnswerPopupContent.Background = SpecialColor.red(); AnswerPopupContent.Content = "НЕПРАВИЛЬНО"; // За не правильный ответ балл на 1 test_one.Score(-1); // +1 к кол-ву попыток numTry[test_one.SelectedIndex()]++; // Очищаем другие уведомления test_one.AnswerTipsClear(); if (stageNum == 2) { if (numTry[test_one.SelectedIndex()] == graphicHintNum) { mainPict[test_one.SelectedIndex()] = graphicHintList[test_one.SelectedIndex()]; test_one.GraphContent(System.IO.Path.GetFullPath(mainPict[test_one.SelectedIndex()])); } } if (numTry[test_one.SelectedIndex()] < 3) { test_one.AnswerTip($"Дан неправильный ответ. У вас осталось еще {3 - numTry[test_one.SelectedIndex()]} попытки(-а)", "red"); } else { test_one.AnswerTip($"Попыток больше нет!", "red"); test_one.AnswerTip($"Правильная формула: {formulaCorrectExport}", "red"); foreach (var item in questionFormulasDict[test_one.SelectedIndex()]) { if (checkAnswer.Variables.ContainsKey(item.Key)) { test_one.AnswerTip($"Правильная формула: {item.Value}", "red"); } } } } if (numTry[test_one.SelectedIndex()] >= 3) { // Если эта переменная еще не найдена, то добавляем ее в словарь переменных checkAnswer.Variables.Add(questionFindList[test_one.SelectedIndex()].ToLower(), Convert.ToDouble(formulaCorrect)); // Обновляем в графическом интерфейсе граф "задача" test_one.QuestionVal(test_one.SelectedValue(), formulaCorrect); // Удаляем найденную переменную из списка неизвестных переменных и выпадающего списка questionFindList.Remove(test_one.SelectedValue()); // Удаляем счетчик кол-ва попыток ответа для найденой переменной numTry.RemoveAt(test_one.SelectedIndex()); // Удаляем формулу для найденной переменной questionFormulasDict.RemoveAt(test_one.SelectedIndex()); if (stageNum == 2) { graphicHintList.RemoveAt(test_one.SelectedIndex()); mainPict.RemoveAt(test_one.SelectedIndex()); } // Очищаем вводное поле answer.Clear(); // Обновляем выпадающий список test_one.QuestionValsСВ(questionFindList); } AnswerPopup.IsOpen = true; await Task.Delay(1000); AnswerPopup.IsOpen = false; // Если закончился 1-ый этап ответов на вопрос, то переходим к следующему, иначе завершаем тест try { if (questionFindList.Count <= 0) { stageNum += 1; if (stageNum >= maxStageNum + 1) { test1 = true; _timer.Stop(); test_one.AnswerTip($"Тестирование завершено! Пожалуйста, нажмите на кнопку 'Завершить тестирование'!", "orange"); } else { // Обновляем исходные данные string testtext = ""; int proba = 0; bool proba1 = false; foreach (var massiv in checkAnswer.Variables) { if (massiv.Key != "Hb" && massiv.Key != "Va" && massiv.Key != "Vb") { if (massiv.Key == "h" || massiv.Key == "d") { testtext += $"{massiv.Key} = {massiv.Value} м; "; } else { testtext += $"{massiv.Key} = {massiv.Value} кН; "; } proba++; if (proba >= 3) { testtext += "\n"; proba = 0; } } else { if (proba1 == false) { testtext += "\nЗначения опор Кн:\n"; proba = 0; proba1 = true; } proba++; testtext += $"{massiv.Key} = {massiv.Value}; "; if (proba >= 3) { testtext += "\n"; proba = 0; } } } test_one.DataExtraInfo(testtext); test_one.DataMainInfo(questions.getQuestionText(choiceBlock.theme, choiceBlock.blockID, choiceNextPage.loadID, choiceNextPage.variantID, stageNum)); test_one.QuestionVals(questions.getQuestionFinds(choiceBlock.theme, choiceBlock.blockID, choiceNextPage.loadID, choiceNextPage.variantID, stageNum)); numTry = null; questionFindList = null; questionFormulasDict = null; questionFindList = questions.getQuestionFinds(choiceBlock.theme, choiceBlock.blockID, choiceNextPage.loadID, choiceNextPage.variantID, stageNum); if (graphicHintNum == 0) { int numvalue = 0; foreach (var value in graphicHintList) { mainPict[numvalue] = value; numvalue++; } //mainPict = graphicHintList; test_one.GraphContent(System.IO.Path.GetFullPath(mainPict[0])); } if (stageNum == 2) { test_one.VisualTip(System.IO.Path.GetFullPath("Img/block1/przn.png")); } test1 = false; } } else { test1 = false; } } finally { // Создаем список неизвестных переменных if (questionFindList == null) { questionFindList = questions.getQuestionFinds(choiceBlock.theme, choiceBlock.blockID, choiceNextPage.loadID, choiceNextPage.variantID, stageNum); } if (questionFormulasDict == null) { questionFormulasDict = questions.getQuestionFormuls(choiceBlock.theme, choiceBlock.blockID, choiceNextPage.loadID, choiceNextPage.variantID, stageNum); } } } }
//ПРОВЕРКА ВВЕДЕННОСТИ ДАННЫХ private async void saveData_Click(object sender, RoutedEventArgs e) { if (saveDataFlag == true) { saveDataFlag = false; isCurrentData = false; if (lastName.Text != "" && lastName.Text != "Фамилия" && firstName.Text != "" && firstName.Text != "Имя" && secondName.Text != "" && secondName.Text != "Отчество" && group.Text != "" && group.Text != "Группа") { Regex regFIO = new Regex("^([А-Я]|[A-Z])([а-я]|[a-z])+$"); Regex regGroup = new Regex("^[А-ЯA-Z 0-9\\-]*$");//"^([А-Я]|[A-Z]){2,}(\\-| )?\\d{1,2}\\-\\d{2}$" if (regFIO.IsMatch(lastName.Text) && regFIO.IsMatch(firstName.Text) && regFIO.IsMatch(secondName.Text) && regGroup.IsMatch(group.Text)) { curRec.Content = lastName.Text + " " + firstName.Text + " " + secondName.Text + " " + group.Text; isCurrentData = true; } } if (isCurrentData == true) { DataPopupText.Content = "ДАННЫЕ СОХРАНЕНЫ"; } else { DataPopupText.Content = "ДАННЫЕ НЕ СОХРАНЕННЫ"; curRec.Content = "*Учетная запись"; } DataPopupText.Background = isCurrentData == true?SpecialColor.green() : SpecialColor.red(); DataPopup.IsOpen = true; await Task.Delay(2000); DataPopup.IsOpen = false; saveDataFlag = true; } }