Exemple #1
0
        // GET: Вопросы/Delete/5
        public async Task <ActionResult> Delete(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            Вопросы вопросы = await db.Вопросы.FindAsync(id);

            if (вопросы == null)
            {
                return(HttpNotFound());
            }
            ViewBag.аздел = вопросы.Тесты.Id_Раздела;
            return(View(вопросы));
        }
Exemple #2
0
        public async Task <ActionResult> DeleteConfirmed(int id)
        {
            Вопросы вопросы = await db.Вопросы.FindAsync(id);

            string id_Topic   = вопросы.id_Теста.ToString();
            var    answDelete = await(from answ in db.Ответы where answ.id_Вопроса == вопросы.id_вопроса select answ).ToListAsync(); //ответы к вопросам

            foreach (var aD in answDelete)
            {
                db.Ответы.Remove(aD);   //удаляем ответы к вопросам
            }
            db.Вопросы.Remove(вопросы); //удаляем вопрос
            Тесты тесты = await db.Тесты.FindAsync(вопросы.id_Теста);

            тесты.Количество_вопросов = тесты.Количество_вопросов - 1;
            await db.SaveChangesAsync();

            return(RedirectToAction("Index", new { topic = id_Topic, redactor = "redactor" }));
        }
Exemple #3
0
        public async Task <ActionResult> Index(FormCollection form) //обработка результатов по тесту
        {
            var           k = form.Keys;
            List <string> ResultQuestion        = new List <string>(k.Count);               //для хранения результатов верно/неверно
            List <string> QuestionAnswer        = new List <string>(k.Count);               //для хранения вопросов и ответов
            Dictionary <string, string> resultA = new Dictionary <string, string>(k.Count); //для хранения первичных результатов
            var    temp     = form.ToValueProvider();                                       //получаем все данные
            string kD       = "";                                                           // для ключа словаря
            string valD     = "";                                                           //для значения словаря
            int    id_Test  = 0;                                                            // для id теста
            int    flagS    = 0;                                                            // для количества вопросов в соотношений
            int    tempIdQ  = 0;                                                            //для получения id вопроса типа "соотношение"
            string tempStrQ = "";
            int    id_User  = 0;
            string data     = "";

            foreach (var val in k)
            {
                kD = val.ToString().Replace(" ", "");
                if (resultA.ContainsKey(kD)) //если есть запись в словаре под таким ключом, то удаляем, по идеи ее быть не должно, но мало ли
                {
                    resultA.Remove(kD);
                }
                if (kD == "id_test") //если получили id_теста, сохраняем в отдельной переменной
                {
                    id_Test = Convert.ToInt32(temp.GetValue(kD).AttemptedValue);
                }
                else if (kD == "id_user") //если получили id_пользователя, сохраняем в отдельной переменной
                {
                    id_User         = Convert.ToInt32(temp.GetValue(kD).AttemptedValue);
                    ViewBag.Id_user = id_User;
                }
                else if (kD == "Data") //если получили дату прохождения теста, сохраняем в отдельной переменной
                {
                    data         = temp.GetValue(kD).AttemptedValue;
                    ViewBag.Data = data;
                }

                else
                {
                    valD = temp.GetValue(kD).AttemptedValue.Replace(" ", ""); // если получили ответы пользователя, то сохраняем в словарь
                    string[] mystringSootn = kD.Split('-');

                    if (mystringSootn.Count() == 2)   // пришел ответ типа соотношение
                    {
                        kD = "О " + mystringSootn[0]; // помечаем ответы из соотношения буквой "О" перед ключом
                    }

                    string[]      mystring = valD.Split(','); //обработка результатов из checkbox
                    List <string> ls       = new List <string>(mystring.Count());
                    if (mystring.Count() > 1)                 //значит пришел результат со множетсвенным выбором, обрабатываем его
                    {
                        for (int i = 0; i < mystring.Count(); i++)
                        {
                            ls.Add(mystring[i]);
                            if (mystring[i] == "true")
                            {
                                i++; //если пользователь отметил checkbox, то придет два значения - true и false, false пропускаем
                            }
                        }
                        valD = "";
                        foreach (var l in ls)
                        {
                            valD = valD + l + " ";
                        }
                    }

                    kD = kD.Replace("/", "");
                    resultA.Add(kD, valD);
                }
            }

            string textQ       = "";
            string textA       = "";
            var    AllQuestion = (from question in db.Вопросы where question.id_Теста == id_Test select question).ToList(); //получаем все вопросы из теста

            int nQ     = 1;                                                                                                 // для перечисления вопросов
            int Answ   = 0;                                                                                                 //число правильных ответов
            int QuestC = AllQuestion.Count();                                                                               //число вопросов тесте

            Dictionary <string, string> resultAnswerUser = new Dictionary <string, string>(QuestC);                         //для хранения конечных результатов пользователя
            string tempAnsw = "";

            foreach (var qList in AllQuestion) //получаем вопросы и верные к ним ответы
            {
                textQ = qList.Текст_вопроса.Replace("  ", "");

                if ((qList.Тип_ответа.Replace(" ", "") == "Выбор") || (qList.Тип_ответа.Replace(" ", "") == "Ввод"))
                {
                    textA = "";
                    foreach (var aList in qList.Ответы)
                    {
                        if (aList.Флаг_правильного_ответа == true)
                        {
                            textA = aList.Текст_ответа.Replace("  ", "");
                            QuestionAnswer.Add("Вопрос: " + textQ + "\n" + "Правильный ответ: " + textA + "\n");
                            break;
                        }
                    }
                }
                else if (qList.Тип_ответа.Replace(" ", "") == "Несколько")
                {
                    textA = "";
                    foreach (var aList in qList.Ответы)
                    {
                        if (aList.Флаг_правильного_ответа == true)
                        {
                            textA = textA + aList.Текст_ответа.Replace("  ", "") + " ";
                        }
                    }
                    QuestionAnswer.Add("Вопрос: " + textQ + "\n" + "Правильный ответ: " + textA + "\n");
                }
                else if (qList.Тип_ответа.Replace(" ", "") == "Соотношение")
                {
                    textA = "";
                    var tempSelectA = (from answ in db.Ответы where answ.id_Вопроса == qList.id_вопроса select answ).ToList();
                    foreach (var tempL in tempSelectA)
                    {
                        if (tempL.Флаг_подвопроса == true) //получаем подвопросы и ответы к ним
                        {
                            textA = textA + tempL.Текст_ответа.Replace("  ", "") + "-" + tempL.Правильный_ответ.Replace("  ", "") + ",";
                        }
                    }

                    QuestionAnswer.Add("Вопрос: " + textQ + "\n" + "Правильный ответ: " + textA + "\n");
                }
                else if (qList.Тип_ответа.Replace(" ", "") == "Разрыв")
                {
                    var tempSelectR = (from answ in db.Ответы where answ.id_Вопроса == qList.id_вопроса && answ.Флаг_правильного_ответа == true select answ).ToList();

                    QuestionAnswer.Add("Вопрос: " + textQ + "\n" + "Правильный ответ: " + tempSelectR[0].Текст_ответа.Replace("  ", "") + "\n");
                }
            }
            foreach (var q1 in AllQuestion)                                                                                  //проверка на пустые поля в ответах
            {
                if ((!(resultA.ContainsKey(q1.id_вопроса.ToString()))) && (q1.Тип_ответа.Replace(" ", "") != "Соотношение")) //если нет записи в словаре под таким ключом, то пользователь не ответил на этот вопрос, фиксируем это
                {
                    resultA.Add(q1.id_вопроса.ToString(), "");
                    resultAnswerUser[q1.id_вопроса.ToString()] = resultA[q1.id_вопроса.ToString()];
                }
                else if (q1.Тип_ответа.Replace(" ", "") == "Соотношение") //ищем вопрос на соотношение в словаре
                {
                    tempAnsw = "";
                    foreach (var sootnosh in resultA)
                    {
                        if ((sootnosh.Key)[0] == 'О')
                        {
                            int    id_Ans = Convert.ToInt32(sootnosh.Key.Replace("О ", ""));
                            Ответы ответы = await db.Ответы.FindAsync(id_Ans);

                            if (ответы.id_Вопроса == q1.id_вопроса) //такой вопрос на соотношение в словаре есть
                            {
                                tempAnsw = tempAnsw + sootnosh.Key.Replace("О ", "") + " " + sootnosh.Value + ",";
                            }
                        }
                    }
                    if (resultA.ContainsKey(q1.id_вопроса.ToString())) //если есть запись в словаре под таким ключом, то удаляем, по идеи ее быть не должно, но мало ли
                    {
                        resultA.Remove(q1.id_вопроса.ToString());
                    }
                    resultA.Add(q1.id_вопроса.ToString(), tempAnsw);
                    resultAnswerUser[q1.id_вопроса.ToString()] = resultA[q1.id_вопроса.ToString()];
                }
                else
                {
                    resultAnswerUser[q1.id_вопроса.ToString()] = resultA[q1.id_вопроса.ToString()];
                }
            }

            int key   = 0;
            int iTemp = 0;

            foreach (var id_q in resultAnswerUser) //проверяем правильно ли ответил пользователь
            {
                key = Convert.ToInt32(id_q.Key);
                var tempSelect = (from answ in db.Ответы where answ.id_Вопроса == key select answ).ToList(); //выбор всех ответов текущего вопроса
                foreach (var answR in tempSelect)
                {
                    if (id_q.Value != "") //если ответ заполнен/выбран
                    {
                        Вопросы вопросы = await db.Вопросы.FindAsync(Convert.ToInt32(id_q.Key));

                        if ((вопросы.Тип_ответа.Replace(" ", "") == "Выбор") || (вопросы.Тип_ответа.Replace(" ", "") == "Ввод"))                              //если тип вопроса выбор или ввод
                        {
                            var TextAnsw = (from textAnsw in tempSelect where textAnsw.Текст_ответа.Replace(" ", "") == id_q.Value select textAnsw).ToList(); //получаем текст ответа
                            if (TextAnsw.Count() != 0)                                                                                                        //если нашли текст ответа, то смотрим на его флаг
                            {
                                foreach (var aT in TextAnsw)
                                {
                                    if (aT.Флаг_правильного_ответа)
                                    {
                                        // ResultQuestion.Add(nQ.ToString() + " " + "Верно");
                                        QuestionAnswer[iTemp] = nQ.ToString() + " " + QuestionAnswer[iTemp] + "\nВаш ответ: " + id_q.Value + " - " + "ВЕРНО";
                                        QuestionAnswer[iTemp].Replace("\n", "<br />");
                                        Answ++;
                                        nQ++;
                                        iTemp++;
                                        break;
                                    }
                                    else
                                    {
                                        QuestionAnswer[iTemp] = nQ.ToString() + " " + QuestionAnswer[iTemp] + "\nВаш ответ: " + id_q.Value + " - " + "НЕВЕРНО";
                                        QuestionAnswer[iTemp].Replace("\n", "<br />");
                                        iTemp++;
                                        //  ResultQuestion.Add(nQ.ToString() + " " + "Неверно");
                                        nQ++;
                                        break;
                                    }
                                }
                            }
                            else
                            {
                                QuestionAnswer[iTemp] = nQ.ToString() + " " + QuestionAnswer[iTemp] + "\nВаш ответ: " + id_q.Value + " - " + "НЕВЕРНО";
                                iTemp++;
                                // ResultQuestion.Add(nQ.ToString() + " " + "Неверно");
                                nQ++;
                                break;
                            }
                        }
                        else if (вопросы.Тип_ответа.Replace(" ", "") == "Несколько") //если вопрос имеет несколько правильных ответов
                        {
                            int         CountAns  = 0;
                            int         countChec = 0;
                            int         idA       = Convert.ToInt32(id_q.Key);
                            var         TextAnsw  = (from textAnsw in db.Ответы where textAnsw.id_Вопроса == idA select textAnsw).ToList();//получаем все варианты для данного вопроса
                            int         countAnswerCheckboxList = TextAnsw.Count();
                            string[]    mystringCheck           = id_q.Value.Split(' ');
                            List <bool> checkboxl  = new List <bool>(mystringCheck.Count());
                            string      VariatUser = "";
                            foreach (var str in mystringCheck)
                            {
                                if (str == "true")
                                {
                                    checkboxl.Add(true);
                                }
                                if (str == "false")
                                {
                                    checkboxl.Add(false);
                                }
                            }
                            foreach (var check in TextAnsw)
                            {
                                if (check.Флаг_правильного_ответа == checkboxl[countChec])
                                {
                                    CountAns++;
                                }
                                if (checkboxl[countChec])
                                {
                                    VariatUser = VariatUser + check.Текст_ответа.Replace("  ", "") + " ";
                                }
                                countChec++;
                            }
                            if (CountAns >= countAnswerCheckboxList)
                            {
                                //  ResultQuestion.Add(nQ.ToString() + " " + "Верно");
                                QuestionAnswer[iTemp] = nQ.ToString() + " " + QuestionAnswer[iTemp] + "\nВаш ответ: " + VariatUser + " - " + "ВЕРНО";
                                iTemp++;
                                Answ++;
                                nQ++;
                            }
                            else
                            {
                                //  ResultQuestion.Add(nQ.ToString() + " " + "Неверно");
                                QuestionAnswer[iTemp] = nQ.ToString() + " " + QuestionAnswer[iTemp] + "\nВаш ответ: " + VariatUser + " - " + "НЕВЕРНО";
                                iTemp++;
                                nQ++;
                                break;
                            }
                            break;
                        }

                        else if (вопросы.Тип_ответа.Replace(" ", "") == "Соотношение")
                        {
                            string   VariatUserS        = "";
                            string[] mystringTemp       = id_q.Value.Split(',');
                            var      result             = mystringTemp.Where(x => !string.IsNullOrWhiteSpace(x)).ToArray(); //убираем нулевые и пустые элементы
                            int      flagCorrect        = 0;
                            string[] tempStrForSoothosh = new string[2];                                                    //для хранения id_ответа и выбора пользователя
                            string   AnswUser           = "";
                            string   strResult          = "";
                            int      strC = 1;
                            //  strResult = string.Join(",", result);
                            foreach (var str in result)
                            {
                                tempStrForSoothosh = str.Split(' ');
                                if (tempStrForSoothosh[1] != "")
                                {
                                    foreach (var valueSootnosh in tempSelect) //ищем значение под выбранным вариантом
                                    {
                                        Ответы ответ = await db.Ответы.FindAsync(Convert.ToInt32(tempStrForSoothosh[1]));

                                        if ((valueSootnosh.Флаг_подвопроса == false) && (valueSootnosh.Текст_ответа.Replace(" ", "") == (ответ.Текст_ответа.Replace(" ", ""))))
                                        {
                                            if ((tempStrForSoothosh[0] != "") && ((tempStrForSoothosh[1] != "")))
                                            {
                                                AnswUser = ответ.Текст_ответа.Replace("  ", ""); //записываем вариант ответа
                                                Ответы ответы = await db.Ответы.FindAsync(Convert.ToInt32(tempStrForSoothosh[0]));

                                                if (AnswUser.Replace(" ", "") == ответы.Правильный_ответ.Replace(" ", "")) //сраниваем вариант ответа подвопроса и того значения, что под буквой
                                                {
                                                    flagCorrect++;
                                                }
                                                strResult = strResult + strC.ToString() + "." + ответы.Текст_ответа.Replace("  ", "") + "-" + (ответ.Текст_ответа.Replace(" ", "")) + " ";
                                            }
                                        }
                                    }
                                }
                                else
                                {
                                    Ответы ответы = await db.Ответы.FindAsync(Convert.ToInt32(tempStrForSoothosh[0]));

                                    strResult = strResult + strC.ToString() + ". " + ответы.Текст_ответа.Replace("  ", "") + "-" + "  ";
                                }
                                strC++;
                            }

                            if (flagCorrect == result.Count())
                            {
                                // ResultQuestion.Add(nQ.ToString() + " " + "Верно");
                                QuestionAnswer[iTemp] = nQ.ToString() + " " + QuestionAnswer[iTemp] + "\nВаш ответ: " + strResult + " - " + "ВЕРНО";
                                iTemp++;
                                Answ++;
                                nQ++;
                            }
                            else
                            {
                                // ResultQuestion.Add(nQ.ToString() + " " + "Неверно");
                                QuestionAnswer[iTemp] = nQ.ToString() + " " + QuestionAnswer[iTemp] + "\nВаш ответ: " + strResult + " - " + "НЕВЕРНО";
                                iTemp++;
                                nQ++;
                                break;
                            }
                            break;
                        }
                        else if (вопросы.Тип_ответа.Replace(" ", "") == "Разрыв")
                        {
                            string   VariatUserR   = "";
                            string[] mystringTempR = id_q.Value.Split(' ');                                                                                                                                            // ответы пользователя в виде id ответов
                            var      resultR       = mystringTempR.Where(x => !string.IsNullOrWhiteSpace(x)).ToArray();                                                                                                //убираем нулевые и пустые элементы

                            var           AnswRstring     = (from textAnsw in tempSelect where textAnsw.id_Вопроса == Convert.ToInt32(id_q.Key) && textAnsw.Флаг_правильного_ответа == true select textAnsw).ToList(); //правильные ответы в виде текста
                            string[]      stringAnswTempR = AnswRstring[0].Текст_ответа.Split(',');
                            var           AnswR           = stringAnswTempR.Where(x => !string.IsNullOrWhiteSpace(x)).ToArray();
                            int           flagA           = 0;
                            string        strR            = "";
                            List <string> templsR         = new List <string>(AnswR.Count());
                            var           TextQ           = QuestionAnswer[iTemp].Replace("  ", "").Split(new string[] { "..." }, StringSplitOptions.RemoveEmptyEntries);
                            if (AnswR.Count() == resultR.Count()) // если пользователь вставил ответы во все разрывы
                            {
                                for (int i = 0; i < AnswR.Count(); i++)
                                {
                                    var answ = db.Ответы.Find(Convert.ToInt32(mystringTempR[i])); //получаем по id ответа его текст

                                    strR = strR + " " + answ.Текст_ответа.Replace("  ", "") + ", ";
                                    if (answ.Текст_ответа.Replace(" ", "") == AnswR[i].Replace(" ", ""))
                                    {
                                        flagA++;
                                    }
                                }
                            }

                            if (flagA >= AnswR.Count())
                            {
                                QuestionAnswer[iTemp] = nQ.ToString() + " " + QuestionAnswer[iTemp] + " " + "\nВаш ответ: " + strR + " - " + "ВЕРНО";
                                iTemp++;
                                Answ++;
                                nQ++;
                                break;
                            }
                            else
                            {
                                QuestionAnswer[iTemp] = nQ.ToString() + " " + QuestionAnswer[iTemp] + " " + "\nВаш ответ: " + strR + " - " + "НЕВЕРНО";
                                iTemp++;
                                nQ++;
                                break;
                            }
                        }
                    }
                    else
                    {
                        //  ResultQuestion.Add(nQ.ToString() + " " + "Неверно");
                        QuestionAnswer[iTemp] = nQ.ToString() + " " + QuestionAnswer[iTemp] + "\nВаш ответ: " + " " + " - " + "НЕВЕРНО";
                        iTemp++;
                        nQ++;
                        break;
                    }
                    break;
                }
            }

            double resulProcentTheory = Math.Round((((double)Answ / (double)(QuestC)) * 100.0), 2); //результат теста в процентах

            ViewBag.ResultProcent  = Convert.ToInt32(resulProcentTheory);                           //передаем результат в % в представление
            ViewBag.ResultQuestion = ResultQuestion;                                                // передаем в представление список , где указано , что верно, а что нет
            ViewBag.QuestionAnswer = QuestionAnswer;
            nQ = 0;

            var usTestResult = await(from u in db.езультат_теста where u.id_User == id_User && u.id_Теста == id_Test select u).ToListAsync(); //Проверяем проходил ли пользователь этот тест

            if (usTestResult.Count > 0)                                                                                                       //если проходил, то обновляем инфу
            {
                езультат_теста результат_Теста = db.езультат_теста.Find(usTestResult.First().id_результата_теста);
                результат_Теста.id_User           = id_User;
                результат_Теста.id_Теста          = id_Test;
                результат_Теста.Дата_сдачи_теории = Convert.ToDateTime(data);
                результат_Теста.Оценка_за_теорию  = Convert.ToInt32(resulProcentTheory);
                db.Entry(результат_Теста).State   = EntityState.Modified;
                await db.SaveChangesAsync();
            }
            else //если нет, то добавляем новую запись в бд
            {
                езультат_теста результат_Теста = new  езультат_теста();
                результат_Теста.id_User           = id_User;
                результат_Теста.id_Теста          = id_Test;
                результат_Теста.Дата_сдачи_теории = Convert.ToDateTime(data);
                результат_Теста.Оценка_за_теорию  = Convert.ToInt32(resulProcentTheory);
                db.езультат_теста.Add(результат_Теста);
                await db.SaveChangesAsync();
            }
            var результат_вопроса = db.езультат_теста.Include(р => р.Пользователи);

            return(View(await результат_вопроса.ToListAsync()));
        }
Exemple #4
0
        // метод добавления ответов к вопросу
        public void ProcessingTypeAnswer(Вопросы вопросы, string func, string variant = "", string def = "", string correct = "")
        {
            try
            {
                if (вопросы.Тип_ответа.Replace(" ", "") == "Выбор")
                {
                    string[] stringTempList = (variant.Replace("  ", "")).Split(';');
                    var      resulttemp     = stringTempList.Where(x => !string.IsNullOrWhiteSpace(x)).ToArray();
                    stringTempList = resulttemp;
                    foreach (var t in stringTempList)
                    {
                        Ответы ответы = new Ответы();
                        ответы.Текст_ответа = t;
                        if (t.Replace(" ", "").ToLower() == correct.Replace(" ", "").ToLower())
                        {
                            ответы.Флаг_правильного_ответа = true;
                        }
                        else
                        {
                            ответы.Флаг_правильного_ответа = false;
                        }
                        if (func == "create")
                        {
                            ответы.id_Вопроса = вопросы.id_вопроса;
                            db.Ответы.Add(ответы);
                            db.SaveChanges();
                        }
                        else
                        {
                            вопросы.Ответы.Add(ответы);
                            //  db.SaveChanges();
                        }
                    }
                }
                else if (вопросы.Тип_ответа.Replace(" ", "") == "Несколько")
                {
                    string[] stringTempListVar = (variant.Replace("  ", "")).Split(';'); //разделяем варианты ответов
                    var      resulttemp        = stringTempListVar.Where(x => !string.IsNullOrWhiteSpace(x)).ToArray();
                    stringTempListVar = resulttemp;

                    string[] stringTempListCor = (correct.Replace("  ", "")).Split(';');
                    resulttemp        = stringTempListCor.Where(x => !string.IsNullOrWhiteSpace(x)).ToArray();
                    stringTempListCor = resulttemp;
                    int flag = 0;
                    foreach (var t in stringTempListVar)
                    {
                        flag = 0;
                        Ответы ответы = new Ответы();
                        ответы.Текст_ответа = t;
                        foreach (var t2 in stringTempListCor)
                        {
                            if (t.Replace(" ", "").ToLower() == t2.Replace(" ", "").ToLower())
                            {
                                flag = 1;
                                break;
                            }
                        }
                        if (flag == 1)
                        {
                            ответы.Флаг_правильного_ответа = true;
                        }
                        else
                        {
                            ответы.Флаг_правильного_ответа = false;
                        }
                        if (func == "create")
                        {
                            ответы.id_Вопроса = вопросы.id_вопроса;
                            db.Ответы.Add(ответы);
                            db.SaveChanges();
                        }
                        else
                        {
                            вопросы.Ответы.Add(ответы);
                            db.SaveChanges();
                        }
                    }
                }
                else if (вопросы.Тип_ответа.Replace(" ", "") == "Ввод")
                {
                    Ответы ответы = new Ответы();
                    ответы.Текст_ответа            = correct.Replace("  ", "");
                    ответы.Флаг_правильного_ответа = true;
                    if (func == "create")
                    {
                        ответы.id_Вопроса = вопросы.id_вопроса;
                        db.Ответы.Add(ответы);
                        db.SaveChanges();
                    }
                    else
                    {
                        вопросы.Ответы.Add(ответы);
                        db.SaveChanges();
                    }
                }
                else if (вопросы.Тип_ответа.Replace(" ", "") == "Соотношение")
                {
                    string[] stringTempListCor = (correct.Replace("  ", "")).Split(';');//разделяем корректные варианты ответов
                    var      resulttemp        = stringTempListCor.Where(x => !string.IsNullOrWhiteSpace(x)).ToArray();
                    stringTempListCor = resulttemp;

                    string[] stringTempListDef = (def.Replace("  ", "")).Split(';');//разделяем понятия
                    resulttemp        = stringTempListDef.Where(x => !string.IsNullOrWhiteSpace(x)).ToArray();
                    stringTempListDef = resulttemp;

                    int countCor = 0;

                    foreach (var deftemp in stringTempListDef) //вносим понятия в бд
                    {
                        Ответы ответы = new Ответы();
                        ответы.Текст_ответа            = deftemp.Replace("  ", "");
                        ответы.Флаг_правильного_ответа = true;
                        ответы.Флаг_подвопроса         = true;
                        ответы.Правильный_ответ        = stringTempListCor[countCor];
                        countCor++;

                        if (func == "create")
                        {
                            ответы.id_Вопроса = вопросы.id_вопроса;
                            db.Ответы.Add(ответы);
                            db.SaveChanges();
                        }
                        else
                        {
                            вопросы.Ответы.Add(ответы);
                            db.SaveChanges();
                        }
                    }

                    string[] stringTempListVar = stringTempListCor; //для вариантов ответов

                    Random rand = new Random();
                    for (int i = stringTempListVar.Length - 1; i >= 1; i--) //генерируем варианты ответов в случайном порядке
                    {
                        int    j   = rand.Next(i + 1);
                        string tmp = stringTempListVar[j];
                        stringTempListVar[j] = stringTempListVar[i];
                        stringTempListVar[i] = tmp;
                    }

                    foreach (var vartemp in stringTempListVar) //вносим варианты ответов в бд
                    {
                        Ответы ответы = new Ответы();
                        ответы.Текст_ответа            = vartemp.Replace("  ", "");
                        ответы.Флаг_правильного_ответа = true;
                        ответы.Флаг_подвопроса         = false;
                        ответы.Правильный_ответ        = null;

                        if (func == "create")
                        {
                            ответы.id_Вопроса = вопросы.id_вопроса;
                            db.Ответы.Add(ответы);
                            db.SaveChanges();
                        }
                        else
                        {
                            вопросы.Ответы.Add(ответы);
                            db.SaveChanges();
                        }
                    }
                }
                else if (вопросы.Тип_ответа.Replace(" ", "") == "Разрыв")
                {
                    Ответы ответы = new Ответы();
                    ответы.Текст_ответа            = correct.Replace("  ", "");
                    ответы.Флаг_правильного_ответа = true;
                    if (func == "create")
                    {
                        ответы.id_Вопроса = вопросы.id_вопроса;
                        db.Ответы.Add(ответы);
                        db.SaveChanges();
                    }
                    else
                    {
                        вопросы.Ответы.Add(ответы);
                        db.SaveChanges();
                    }

                    string[] stringTempListVar = (correct.Replace("  ", "")).Split(';');//подготавливаем для составления списка с вариантами ответов
                    var      resulttemp        = stringTempListVar.Where(x => !string.IsNullOrWhiteSpace(x)).ToArray();
                    stringTempListVar = resulttemp;
                    Random rand = new Random();
                    for (int i = stringTempListVar.Length - 1; i >= 1; i--) //генерируем варианты ответов в случайном порядке
                    {
                        int    j   = rand.Next(i + 1);
                        string tmp = stringTempListVar[j];
                        stringTempListVar[j] = stringTempListVar[i];
                        stringTempListVar[i] = tmp;
                    }

                    foreach (var vartemp in stringTempListVar) //вносим варианты ответов в БД
                    {
                        Ответы ответы1 = new Ответы();
                        ответы1.Текст_ответа            = vartemp.Replace("  ", "");
                        ответы1.Флаг_правильного_ответа = false;

                        if (func == "create")
                        {
                            ответы1.id_Вопроса = вопросы.id_вопроса;
                            db.Ответы.Add(ответы1);
                            db.SaveChanges();
                        }
                        else
                        {
                            вопросы.Ответы.Add(ответы1);
                            db.SaveChanges();
                        }
                    }
                }
            }
            catch (DbEntityValidationException ex)
            {
                foreach (DbEntityValidationResult validationError in ex.EntityValidationErrors)
                {
                    Response.Write("Object: " + validationError.Entry.Entity.ToString());
                    Response.Write(" ");
                    foreach (DbValidationError err in validationError.ValidationErrors)
                    {
                        Response.Write(err.ErrorMessage + " ");
                    }
                }
            }
        }
Exemple #5
0
        public async Task <ActionResult> Edit(ВопросОтветРедактор вопросОтветРедактор, string Тип_ответа, int id_Теста)
        {
            string variant = "", def = "", correct = "";

            if (вопросОтветРедактор.Варианты_ответов != null)
            {
                variant = вопросОтветРедактор.Варианты_ответов.Replace("\r\n", " ");
                variant = вопросОтветРедактор.Варианты_ответов.Replace("  ", "");
                variant = вопросОтветРедактор.Варианты_ответов.TrimEnd(' ');
            }


            correct = вопросОтветРедактор.Правильный_ответ.Replace("\r\n", " ");
            correct = вопросОтветРедактор.Правильный_ответ.Replace("  ", "");
            correct = вопросОтветРедактор.Правильный_ответ.TrimEnd(' ');

            if (вопросОтветРедактор.Понятия != null)
            {
                def = вопросОтветРедактор.Понятия.Replace("\r\n", " ");
                def = вопросОтветРедактор.Понятия.Replace("  ", "");
                def = вопросОтветРедактор.Понятия.TrimEnd(' ');
            }
            if (Тип_ответа != null)
            {
                вопросОтветРедактор.вопросыРедактор.Тип_ответа = Тип_ответа.Replace(" ", "");
            }
            if ((вопросОтветРедактор.Правильный_ответ != null) && (вопросОтветРедактор.вопросыРедактор.Текст_вопроса != null) && (вопросОтветРедактор.вопросыРедактор.Тип_ответа != null))
            {
                try
                {
                    Вопросы editВопрос = await(db.Вопросы.FindAsync(вопросОтветРедактор.вопросыРедактор.id_вопроса));
                    editВопрос.Текст_вопроса = вопросОтветРедактор.вопросыРедактор.Текст_вопроса.Replace("\r\n", " ");
                    editВопрос.Текст_вопроса = вопросОтветРедактор.вопросыРедактор.Текст_вопроса.Replace("  ", "");
                    editВопрос.Текст_вопроса = вопросОтветРедактор.вопросыРедактор.Текст_вопроса.Trim(' ');
                    editВопрос.Тип_ответа    = вопросОтветРедактор.вопросыРедактор.Тип_ответа;
                    editВопрос.id_Теста      = id_Теста;
                    var answerDelete = from a in db.Ответы where a.id_Вопроса == editВопрос.id_вопроса select a;
                    foreach (var aDelete in answerDelete)
                    {
                        db.Ответы.Remove(aDelete);
                    }
                    //     editВопрос.Ответы.Clear();

                    ProcessingTypeAnswer(editВопрос, "edit", variant, def, correct); //добавляем новые ответы

                    db.Entry(editВопрос).State = EntityState.Modified;

                    await db.SaveChangesAsync();

                    return(RedirectToAction("Index", new { topic = editВопрос.id_Теста.ToString(), redactor = "redactor" }));
                }
                catch (DbEntityValidationException ex)

                {
                    foreach (DbEntityValidationResult validationError in ex.EntityValidationErrors)
                    {
                        Response.Write("Object: " + validationError.Entry.Entity.ToString());
                        Response.Write(" ");
                        foreach (DbValidationError err in validationError.ValidationErrors)
                        {
                            Response.Write(err.ErrorMessage + " ");
                        }
                    }
                }
            }
            ViewBag.id_Теста = new SelectList(db.Тесты, "id_теста", "Название_темы_теста", вопросОтветРедактор.вопросыРедактор.id_Теста);
            return(View(вопросОтветРедактор.вопросыРедактор));
        }
Exemple #6
0
        // GET: Вопросы/Edit/5
        public async Task <ActionResult> Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            Вопросы вопросы = await db.Вопросы.FindAsync(id);

            if (вопросы == null)
            {
                return(HttpNotFound());
            }
            ВопросОтветРедактор вопросОтветРедактор = new ВопросОтветРедактор();

            ViewBag.аздел = вопросы.Тесты.Id_Раздела;
            ViewBag.Тема  = вопросы.id_Теста;
            int selected = вопросы.id_Теста;

            ViewBag.id_Теста  = new SelectList(db.Тесты.Where(a => a.id_теста == вопросы.id_Теста), "id_теста", "Название_темы_теста", selected);
            ViewBag.ТипОтвета = вопросы.Тип_ответа.Replace(" ", "");
            if ((вопросы.Тип_ответа.Replace(" ", "") == "Ввод") || (вопросы.Тип_ответа.Replace(" ", "") == "Разрыв"))
            {
                var answerCorrect = from v in db.Ответы where v.id_Вопроса == вопросы.id_вопроса select v;
                foreach (var t in answerCorrect)
                {
                    if (t.Флаг_правильного_ответа)
                    {
                        вопросОтветРедактор.Правильный_ответ = t.Текст_ответа.Replace("  ", "").TrimStart(' ').TrimEnd(' ');
                        ViewBag.ВерныйОтвет = вопросОтветРедактор.Правильный_ответ;
                        break;
                    }
                }
            }
            else if ((вопросы.Тип_ответа.Replace(" ", "") == "Выбор") || (вопросы.Тип_ответа.Replace(" ", "") == "Несколько"))
            {
                string variantStr = "";
                string correctStr = "";
                var    answer     = from v in db.Ответы where v.id_Вопроса == вопросы.id_вопроса select v;
                foreach (var variant in answer)
                {
                    variantStr = variantStr + variant.Текст_ответа.Replace("  ", "").TrimStart(' ').TrimEnd(' ') + ", ";

                    if (variant.Флаг_правильного_ответа)
                    {
                        correctStr = correctStr + variant.Текст_ответа.Replace("  ", "").TrimStart(' ').TrimEnd(' ') + ", ";
                    }
                }

                variantStr = variantStr.Substring(0, variantStr.Length - 2);
                correctStr = correctStr.Substring(0, correctStr.Length - 2);  //убираем лишнюю запятую

                ViewBag.Варианты = variantStr;
                вопросОтветРедактор.Варианты_ответов = variantStr;

                вопросОтветРедактор.Правильный_ответ = correctStr;
                ViewBag.ВерныйОтвет = correctStr;
            }
            else if (вопросы.Тип_ответа.Replace(" ", "") == "Соотношение")
            {
                string Def         = "";
                string CorrectAnsw = "";
                var    answerS     = from v in db.Ответы where (v.id_Вопроса == вопросы.id_вопроса && v.Флаг_подвопроса == true) select v;
                foreach (var variant in answerS)
                {
                    Def = Def + variant.Текст_ответа.Replace("  ", "").TrimStart(' ').TrimEnd(' ') + ", ";

                    CorrectAnsw = CorrectAnsw + variant.Правильный_ответ.Replace("  ", "").TrimStart(' ').TrimEnd(' ') + ", ";
                }

                Def         = Def.Substring(0, Def.Length - 2);
                CorrectAnsw = CorrectAnsw.Substring(0, CorrectAnsw.Length - 2); //убираем лишнюю запятую

                вопросОтветРедактор.Понятия = Def;
                ViewBag.Понятия             = Def;

                вопросОтветРедактор.Правильный_ответ = CorrectAnsw;
                ViewBag.ВерныйОтвет = CorrectAnsw;
            }

            вопросОтветРедактор.вопросыРедактор = вопросы;

            return(View(вопросОтветРедактор));
        }
Exemple #7
0
        public async Task <ActionResult> Create(string[] InputVariant, string RadioB, string [] Checkbox, int id_Теста, ВопросОтветРедактор вопросОтветРедактор, string Тип_ответа)
        {
            if (Тип_ответа != null)
            {
                вопросОтветРедактор.вопросыРедактор.Тип_ответа = Тип_ответа.Replace(" ", "");
            }
            Вопросы вопросы = вопросОтветРедактор.вопросыРедактор;

            string variant = "", def = "", correct = "";

            if (Тип_ответа.Replace(" ", "") != "Несколько" && Тип_ответа.Replace(" ", "") != "Выбор")
            {
                correct = вопросОтветРедактор.Правильный_ответ.Replace("\r\n", " ");
                correct = вопросОтветРедактор.Правильный_ответ.Replace("  ", "");
                correct = вопросОтветРедактор.Правильный_ответ.TrimEnd(' ');
            }
            else if (Тип_ответа.Replace(" ", "") == "Выбор")
            {
                correct = InputVariant[Convert.ToInt32(RadioB)].Replace("\r\n", " ").Replace("  ", "").TrimEnd(' ');
                foreach (var variantInput in InputVariant)
                {
                    variant += variantInput + ";";
                }
            }

            else if (Тип_ответа.Replace(" ", "") == "Несколько")
            {
                List <string> VariantMin = new List <string>();
                foreach (var variantInput in InputVariant)
                {
                    variant += variantInput + ";";
                }

                for (int i = 0; i < Checkbox.Count(); i++)
                {
                    VariantMin.Add(Checkbox[i]);
                    if (Checkbox[i] == "true")
                    {
                        i++;                        //убрали лишние false
                    }
                }

                for (int i = 0; i < VariantMin.Count(); i++)
                {
                    if (VariantMin[i] == "true")
                    {
                        correct += InputVariant[i] + ";";
                    }
                }

                correct = correct.Replace("\r\n", " ").Replace("  ", "").TrimEnd(' ');
            }


            if (вопросОтветРедактор.Понятия != null)
            {
                def = вопросОтветРедактор.Понятия.Replace("\r\n", " ");
                def = вопросОтветРедактор.Понятия.Replace("  ", "");
                def = вопросОтветРедактор.Понятия.TrimEnd(' ');
            }


            if (вопросОтветРедактор.вопросыРедактор.Текст_вопроса != null && вопросОтветРедактор.вопросыРедактор.Тип_ответа != null)
            {
                try
                {
                    вопросы.id_Теста = id_Теста;
                    Ответы ответы = new Ответы();
                    вопросы.Тип_ответа    = вопросы.Тип_ответа.Replace(" ", "");
                    вопросы.Текст_вопроса = вопросы.Текст_вопроса.Replace("\r\n", " ");
                    вопросы.Текст_вопроса = вопросы.Текст_вопроса.Replace("  ", "");
                    вопросы.Текст_вопроса = вопросы.Текст_вопроса.TrimEnd(' ');
                    db.Вопросы.Add(вопросы);
                    Тесты тесты = await db.Тесты.FindAsync(вопросы.id_Теста);

                    тесты.Количество_вопросов = тесты.Количество_вопросов + 1;
                    await db.SaveChangesAsync();

                    ProcessingTypeAnswer(вопросы, "create", variant, def, correct);

                    return(RedirectToAction("Index", new { topic = вопросы.id_Теста.ToString(), redactor = "redactor" }));
                }
                catch (DbEntityValidationException ex)

                {
                    foreach (DbEntityValidationResult validationError in ex.EntityValidationErrors)
                    {
                        Response.Write("Object: " + validationError.Entry.Entity.ToString());
                        Response.Write(" ");
                        foreach (DbValidationError err in validationError.ValidationErrors)
                        {
                            Response.Write(err.ErrorMessage + " ");
                        }
                    }
                }
            }
            ViewBag.id_Теста = new SelectList(db.Тесты, "id_теста", "Название_темы_теста", вопросы.id_Теста);
            return(View(вопросы));
        }