Пример #1
0
 //заполнение таблица UserTest на основе отвеченных вопросов
 void Result(bool flag1)
 {
     if (flag1)
     {
         foreach (var item in ListAnswer)
         {
             if (item.IsAnswer == 1)
             {
                 res += 1;
             }
         }
     }
     //результат прохождения
     userTest.Result  = $"{res}/{countQuestion}";
     userTest.EndDate = DateTime.Now;
     using (Tests_DBContainer db = new Tests_DBContainer())
     {
         //в переменную получаем данных о сохраненых даных в таблицу UserTest
         var userTestNeedId = db.UserTest.Add(userTest);
         //сохраняем изменения
         db.SaveChanges();
         //получаем ID  сохраненной записи и передеме её в метод для заполнения таблицы UserTestAnswer
         AddUserTestAnswer(userTestNeedId.Id);
     }
 }
Пример #2
0
        public Edit_Test(int testId, int questionId, Select_Question_To_Edit parent)
        {
            InitializeComponent();

            this.testId     = testId;
            this.questionId = questionId;
            this.parent     = parent;

            //наследуемый метод
            base.Top_Button(bunifuImageButton1_Min, bunifuImageButton1_Max, bunifuImageButton2_Norm);
            this.bunifuImageButton1_Close.Click += BunifuImageButton1_Close_Click;

            using (Tests_DBContainer tests = new Tests_DBContainer())
            {
                if (questionId == 0)
                {
                    var question = new TestQuestion()
                    {
                        Question = "Новый вопрос", TestId = this.testId, IsActual = 1,
                    };
                    tests.TestQuestion.Add(question);
                    tests.SaveChanges();
                    this.questionId = question.Id;
                    this.parent.renderQuestionList();
                }

                var rowQuestion = tests.TestQuestion.FirstOrDefault(t => t.Id == this.questionId);
                if (rowQuestion != null)
                {
                    textBox_AddQuestion.Text = rowQuestion.Question;
                }

                renderAnswerList();
            }
        }
Пример #3
0
        /// <summary>
        /// Обработка нажатия кнопи"Отмена"
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Btn_cancel_Click(object sender, EventArgs e)
        {
            //Вывод сообщения для пользователя
            DialogResult res = MessageBox.Show("Вы действительно хотите отменить создание теста?", this.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question);

            //Если пользователь подвердил отмену создания теста
            if (res == DialogResult.Yes)
            {
                using (Tests_DBContainer tests = new Tests_DBContainer())
                {
                    using (var transaction = tests.Database.BeginTransaction())
                    {
                        try
                        {
                            Test test = tests.Test.FirstOrDefault(t => t.Id == this.testId);
                            if (test != null)
                            {
                                tests.Test.Remove(test);             //Удаляем тест
                                tests.SaveChanges();                 //Сохраняем вопросы
                                transaction.Commit();                //подтверждаем транзакцию
                                this.DialogResult = DialogResult.OK; //закрываем окно
                            }
                        }
                        catch (Exception ex)
                        {
                            transaction.Rollback();                                                             //отменяем все изменения в БД
                            MessageBox.Show(ex.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error); //выводим сообщение об ошибке
                        }
                    }
                }
            }
        }
Пример #4
0
        private void button_AddNewQuestion_Click(object sender, EventArgs e)
        {
            if (!this.saveAnswers(true))
            {
                return;
            }

            if (textBox_AddQuestion.Text == "")
            {
                MessageBox.Show("Вопрос не может быть пустым", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            using (Tests_DBContainer tests = new Tests_DBContainer())
            {
                var question = tests.TestQuestion.FirstOrDefault(t => t.Id == questionId);
                if (question != null)
                {
                    question.Question = textBox_AddQuestion.Text;
                    tests.SaveChanges();
                    this.parent.renderQuestionList();
                }
            }

            MessageBox.Show("Изменения сохранены", "Изменения", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
Пример #5
0
        private void button_Delete_Question_Click(object sender, EventArgs e)
        {
            using (Tests_DBContainer tests = new Tests_DBContainer())
            {
                var row = tests.TestQuestion.FirstOrDefault(t => t.Id == currentQuestion);
                if (row != null)
                {
                    tests.TestQuestion.Remove(row);
                    tests.SaveChanges();
                }
            }

            this.renderQuestionList();
        }
Пример #6
0
        private void button_TurnOn_OffQuestion_Click(object sender, EventArgs e)
        {
            using (Tests_DBContainer tests = new Tests_DBContainer())
            {
                var row = tests.TestQuestion.FirstOrDefault(t => t.Id == currentQuestion);
                if (row != null)
                {
                    byte reverse = questionIsActual != (byte)0 ? (byte)0 : (byte)1;
                    row.IsActual = reverse;
                    tests.SaveChanges();
                }
            }

            this.renderQuestionList();
        }
Пример #7
0
        private void button1_Categiri_Click(object sender, EventArgs e)
        {
            if (textBox_AddNewCategory.Text != "")
            {
                using (Tests_DBContainer tests = new Tests_DBContainer())
                {
                    Category category = new Category();
                    category.Title = textBox_AddNewCategory.Text;
                    tests.Category.Add(category);
                    tests.SaveChanges();


                    this.renderCategoryList();
                }
            }
        }
Пример #8
0
        private bool saveAnswers(bool checkAnswersCount = false)
        {
            int isAnswerCnt = 0;

            using (Tests_DBContainer tests = new Tests_DBContainer())
            {
                foreach (DataGridViewRow row in dataGridView1.Rows)
                {
                    if (row.Cells["Answer"].Value.ToString() == "")
                    {
                        MessageBox.Show("Ответ не может быть пустым", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return(false);
                    }

                    if (Convert.ToByte(row.Cells["IsAnswer"].Value) == 1)
                    {
                        isAnswerCnt++;
                    }

                    if (isAnswerCnt > 1)
                    {
                        MessageBox.Show("Нельзя указывать больше одного правильного ответа", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return(false);
                    }

                    int aId;
                    int.TryParse(row.Cells["Id"].Value.ToString(), out aId);

                    var answer = tests.TestQuestionAnswer.FirstOrDefault(t => t.Id == aId);

                    if (answer != null)
                    {
                        answer.Answer   = row.Cells["Answer"].Value.ToString();
                        answer.IsAnswer = Convert.ToByte(row.Cells["IsAnswer"].Value);
                        tests.SaveChanges();
                    }
                }
            }

            if (checkAnswersCount && isAnswerCnt == 0)
            {
                MessageBox.Show("Укажите один правильный ответ", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return(false);
            }

            return(true);
        }
Пример #9
0
        private void button__Add_Click(object sender, EventArgs e)
        {
            if (!this.saveAnswers(false))
            {
                return;
            }

            using (Tests_DBContainer tests = new Tests_DBContainer())
            {
                var answer = new TestQuestionAnswer()
                {
                    Answer = "", TestQuestionId = questionId, IsAnswer = 0
                };
                tests.TestQuestionAnswer.Add(answer);
                tests.SaveChanges();
                renderAnswerList();
            }
        }
Пример #10
0
        private void button1_Categiri_Click(object sender, EventArgs e)
        {
            if (textBox_AddNewCategory.Text != "")
            {
                using (Tests_DBContainer tests = new Tests_DBContainer())
                {
                    Category category = new Category();
                    category.Title = textBox_AddNewCategory.Text;
                    tests.Category.Add(category);
                    tests.SaveChanges();

                    this.bunifuTransition2.HideSync(this.panel_AddNewCategory);

                    this.renderCategoryList();
                    comboBox_SelectCategory.SelectedIndex = comboBox_SelectCategory.Items.Count - 1;
                }
            }
        }
Пример #11
0
        private void button_AddNewQuestion_Click(object sender, EventArgs e)
        {
            if (textBox_AddTestTitle.Text == "")
            {
                label_ErrorAddTest.Text = "Введите название";
            }
            else if (textBox_AddTestTitle.Text.Length > 255)
            {
                label_ErrorAddTest.Text = "Название не должно превышать 255 символов";
            }
            else
            {
                using (Tests_DBContainer tests = new Tests_DBContainer())
                {
                    Test test = new Test();
                    test.Title    = textBox_AddTestTitle.Text;
                    test.IsActual = 0;
                    int idCat = Convert.ToInt32(comboBox_SelectCategory.SelectedValue.ToString());
                    test.Category = tests.Category.FirstOrDefault(cat => cat.Id == idCat);

                    tests.Test.Add(test);

                    TestCreator testcreator = new TestCreator();
                    testcreator.TestId = test.Id;
                    testcreator.UserId = user.Id;

                    tests.TestCreator.Add(testcreator);

                    tests.SaveChanges();

                    textBox_AddTestTitle.Text = "";

                    Add_Test2 add_test2 = new Add_Test2(test.Id);
                    Opacity            = 0;
                    this.ShowInTaskbar = false;
                    if (add_test2.ShowDialog() == DialogResult.OK)
                    {
                        Close();
                    }
                }
            }
        }
Пример #12
0
        private void button_DeleteAnswer_Click(object sender, EventArgs e)
        {
            int rowindex = dataGridView1.CurrentRow.Index;
            var row      = dataGridView1.Rows[rowindex];

            int aId;

            int.TryParse(row.Cells["Id"].Value.ToString(), out aId);

            using (Tests_DBContainer tests = new Tests_DBContainer())
            {
                var rowDb = tests.TestQuestionAnswer.FirstOrDefault(t => t.Id == aId);
                if (rowDb != null)
                {
                    tests.TestQuestionAnswer.Remove(rowDb);
                    tests.SaveChanges();
                    renderAnswerList();
                }
            }
        }
Пример #13
0
        private void button_SaveChangeTitleQuestion_Click(object sender, EventArgs e)
        {
            if (textBox_AddEditTestTitle.Text == "")
            {
                MessageBox.Show("Название теста не может быть пустым", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            using (Tests_DBContainer tests = new Tests_DBContainer())
            {
                var row = tests.Test.FirstOrDefault(t => t.Id == testId);
                if (row != null)
                {
                    row.Title = textBox_AddEditTestTitle.Text;
                    tests.SaveChanges();
                    MessageBox.Show("Название было изменено", "Изменения", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }

                this.parent.renderTestList();
            }
        }
Пример #14
0
 //заполнение таблица UserTestAnswer на основе отвеченных вопросов
 void AddUserTestAnswer(int id)
 {
     using (Tests_DBContainer db = new Tests_DBContainer())
     {
         foreach (var item in ListAnswer)
         {
             //проверка не остался ли вопрос без ответа, если вопрос без ответа == 0 то пропускаем его
             if (item.IdAnswer != 0)
             {
                 UserTestAnswer uta = new UserTestAnswer
                 {
                     UserTestId               = id,
                     TestQuestionId           = item.Id,
                     UserTestQuestionAnswerId = item.IdAnswer,
                     AnswerDate               = item.date
                 };
                 db.UserTestAnswer.Add(uta);
             }
         }
         //сохраняем изменения
         db.SaveChanges();
     }
 }
Пример #15
0
 private void button_FinishAddTest_Click(object sender, EventArgs e)
 {
     using (Tests_DBContainer tests = new Tests_DBContainer())
     {
         if (tests.TestQuestion.Where(t => t.TestId == this.testId).Count() == 0)
         {
             MessageBox.Show("Добавьте вопрос");
         }
         else if (tests.TestQuestionAnswer.Where(t => t.TestQuestion.TestId == this.testId).Count() == 0)
         {
             MessageBox.Show("Добавьте ответы");
         }
         else
         {
             Test test = tests.Test.FirstOrDefault(t => t.Id == this.testId);
             if (test != null)
             {
                 test.IsActual = 1;
                 tests.SaveChanges();
                 this.DialogResult = DialogResult.OK;
             }
         }
     }
 }
Пример #16
0
        private void button_AddNewQuestion_Click(object sender, EventArgs e)
        {
            bool error = false;

            using (Tests_DBContainer tests = new Tests_DBContainer())
            {
                if (textBox_AddQuestion.Text == "")
                {
                    MessageBox.Show("Введите вопрос");
                    error = true;
                }
                if (checkedListBox_QuestionVariants.Items.Count == 0)
                {
                    MessageBox.Show("Добавьте ответы");
                    error = true;
                }
                if (checkedListBox_QuestionVariants.SelectedItem == null || checkedListBox_QuestionVariants.CheckedItems.Count == 0)
                {
                    MessageBox.Show("Выберите верный ответ");
                    error = true;
                }

                if (tests.TestQuestion.Where(t => t.TestId == this.testId && t.Question == textBox_AddQuestion.Text).ToList().Count > 0)
                {
                    MessageBox.Show("Есть такой вопрос");
                    error = true;
                }
                if (!error)
                {
                    TestQuestion testquestion = new TestQuestion();
                    testquestion.Question = textBox_AddQuestion.Text;

                    testquestion.IsActual = 0;
                    if (checkBox_QuestionTrue.Checked)
                    {
                        testquestion.IsActual = 1;
                    }

                    testquestion.TestId = this.testId;
                    tests.TestQuestion.Add(testquestion);

                    int i;
                    for (i = 0; i <= (checkedListBox_QuestionVariants.Items.Count - 1); i++)
                    {
                        TestQuestionAnswer answer = new TestQuestionAnswer();
                        answer.Answer = checkedListBox_QuestionVariants.Items[i].ToString();
                        if (checkedListBox_QuestionVariants.GetItemChecked(i))
                        {
                            answer.IsAnswer = Convert.ToByte(true);
                        }
                        answer.TestQuestion = testquestion;
                        tests.TestQuestionAnswer.Add(answer);
                    }

                    tests.SaveChanges();

                    checkedListBox_QuestionVariants.Items.Clear();
                    textBox_AddQuestion.Text      = "";
                    checkBox_QuestionTrue.Checked = true;
                    renderListQuestions((comboBox_SelectQuestion.Items.Count));
                }
            }
        }
Пример #17
0
        private void Button1_Registration_DB_Click(object sender, EventArgs e)
        {
            if (textBox1_Adres.Text == "" || textBox1_LastName.Text == "" || textBox1_Phone.Text == "" ||
                textBox1_Login_Registr.Text == "" ||
                textBox1_Middle_name.Text == "" || textBox1_Password_Registr.Text == "" || textBox1_Name.Text == "" || textBox1_Povtor_password.Text == "")
            {
                label14_Null.Text    = "Заполните все поля!";
                label14_Null.Visible = true;
                return;
            }

            string rLog = @"(?m)^.[a-zA-Z\d\s-_]{2,30}(?=\r?$)";

            if (!Regex.IsMatch(textBox1_Login_Registr.Text, rLog))//проверка по регулярному выражению Логина
            {
                label14_Null.Text    = "Логин - только латинские символы!";
                label14_Null.Visible = true;
                return;
            }

            //Проверка регулярным выражением имени
            string rFIO = @"^[а-яА-ЯіІїЇ-]{2,30}$";

            if (!Regex.IsMatch(textBox1_Name.Text, rFIO))
            {
                label14_Null.Text    = "Имя - недопустисые символы!";
                label14_Null.Visible = true;
                return;
            }

            //Проверка регулярным выражением фамилии
            if (!Regex.IsMatch(textBox1_LastName.Text, rFIO))
            {
                label14_Null.Text    = "Фамилия - недопустисые символы!";
                label14_Null.Visible = true;
                return;
            }

            //Проверка регулярным выражением отчества
            if (!Regex.IsMatch(textBox1_Middle_name.Text, rFIO))
            {
                label14_Null.Text    = "Отчество - недопустисые символы!";
                label14_Null.Visible = true;
                return;
            }

            string phoneNumber = @"^380\d{9}$";

            if (!Regex.IsMatch(textBox1_Phone.Text, phoneNumber, RegexOptions.IgnoreCase))//проверка на правильность написания телефона
            {
                label14_Null.Text    = "Телефон не соответствует формату 380000000000";
                label14_Null.Visible = true;
                return;
            }

            string rPas = @"(?=.*\d).{6,}";

            if (!Regex.IsMatch(textBox1_Password_Registr.Text, rPas, RegexOptions.IgnoreCase)) //проверка на пароль
            {
                label14_Null.Text    = "Пароль не менише 6 символов и одна цифра!";
                label14_Null.Visible = true;
                return;
            }

            string rAddress = @"^[а-яА-Я\d\s\/-]{2,}$";

            if (!Regex.IsMatch(textBox1_Adres.Text, rAddress, RegexOptions.IgnoreCase))//проверка адреса
            {
                label14_Null.Text    = "Не верный формат адреса!";
                label14_Null.Visible = true;
                return;
            }

            //Проверка введенных паролей
            if (textBox1_Password_Registr.Text != textBox1_Povtor_password.Text)
            {
                label14_Null.Text             = "Введеные пароли не совпадают!";
                label14_Null.Visible          = true;
                textBox1_Povtor_password.Text = null;
                return;
            }

            try //Отлавливание ошибок при подключении БД
            {
                using (Tests_DBContainer tests = new Tests_DBContainer())
                {
                    string login = textBox1_Login_Registr.Text;
                    var    log   = tests.User.FirstOrDefault(z => z.Login == login);
                    if (log != null)//проверка на логин есть или нет его в БД
                    {
                        label14_Null.Text    = "Такой логин уже занят другим пользователем!";
                        label14_Null.Visible = true;
                        return;
                    }

                    string ph    = textBox1_Phone.Text;
                    var    phone = tests.User.FirstOrDefault(z => z.Phone == ph);
                    if (phone != null)//проверка на телефона есть или нет его в БД
                    {
                        label14_Null.Text    = "Такой телефон уже занят другим пользователем!";
                        label14_Null.Visible = true;
                        return;
                    }

                    var id = tests.Role.FirstOrDefault(z => z.Title == "Студент"); //роль
                    if (id == null)                                                //проверка роли есть она в БД
                    {
                        return;
                    }
                    //Создаем пользователя
                    User rUser = new User
                    {
                        Address    = textBox1_Adres.Text,
                        FirstName  = textBox1_Name.Text,
                        Login      = textBox1_Login_Registr.Text,
                        LastName   = textBox1_LastName.Text,
                        MiddleName = textBox1_Middle_name.Text,
                        Password   = textBox1_Password_Registr.Text.GetHashCode().ToString(), //хеширование пароля
                        Phone      = textBox1_Phone.Text,
                        RoleId     = id.Id
                    };
                    tests.User.Add(rUser);
                    tests.SaveChanges();
                }
                //все происходят манипуляции
                this.label16_Log_Opov.Text = textBox1_Login_Registr.Text;
                bunifuTransition3.ShowSync(this.panel12_Opovesh);
                timer1.Start();
                this.textBox1_Adres.Text            = null;
                this.textBox1_LastName.Text         = null;
                this.textBox1_Login_Registr.Text    = null;
                this.textBox1_Middle_name.Text      = null;
                this.textBox1_Password_Registr.Text = null;
                this.textBox1_Name.Text             = null;
                this.textBox1_Phone.Text            = null;
                this.textBox1_Povtor_password.Text  = null;
            }
            catch (Exception)
            {
                MessageBox.Show("Возникла не предвиденная ошибка с подключением к базе даных!\n Проверте подключение!",
                                "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }