Esempio n. 1
0
        public void SeedDatabaseTest()
        {
            var manager = new ExamDatabase("127.0.0.1", "Exams");

            manager.Seed();
            var repo = manager.StudentRepository;

            Assert.True(repo.Queryable.Any());
        }
Esempio n. 2
0
        private async void StartTestBtn_Click(object sender, RoutedEventArgs e)
        {
            TestTitleTb.IsEnabled = false;

            using (ExamDatabase db = new ExamDatabase())
            {
                int _userId = db.Users.Where(x => x.Login.Equals(_user)).FirstOrDefault().Id;
                int _testId = db.TestsInfo.Where(x => x.Title.Equals(TestTitleTb.Text)).FirstOrDefault().Id;

                int attemptsLeft;
                try
                {
                    attemptsLeft = (int)db.Results.Where(x => x.UserId == _userId).ToList().Where(x => x.TestId == _testId).First().Attemptsleft;
                }
                catch
                {
                    attemptsLeft = db.TestsInfo.Where(x => x.Id == _testId).FirstOrDefault().Attempts;
                }

                MessageBox.Show($"You have {attemptsLeft} attempts", "Attempts", MessageBoxButton.OK, MessageBoxImage.Information);
                if (attemptsLeft == 0)
                {
                    return;
                }
            }

            string testTitle = TestTitleTb.Text;

            if (String.IsNullOrEmpty(testTitle))
            {
                MessageBox.Show("Choose the test", "Incorrect test name", MessageBoxButton.OK, MessageBoxImage.Warning);
                return;
            }

            TestsTitle.Visibility    = Visibility.Hidden;
            TestTitleTb.IsEnabled    = false;
            StartTestBtn.Visibility  = Visibility.Hidden;
            QuestionTb.Visibility    = Visibility.Visible;
            FinishTestBtn.Visibility = Visibility.Visible;

            _question = new Questions();
            await Task.Run(() => MaxMarkCalculating(testTitle));

            FillCheckBoxByVariants();


            foreach (var cb in StackPanelWithCB.Children.OfType <CheckBox>())
            {
                cb.Checked += CheckAnswerForMultipleVariants;
            }

            if (_questions.Count == 1)
            {
                NextQuestionBtn.Visibility = Visibility.Hidden;
            }
        }
Esempio n. 3
0
        public void CountGradedTest()
        {
            var manager = new ExamDatabase("127.0.0.1", "Exams");

            manager.Seed();
            var examQuery            = manager.ExamRepository.Queryable;
            List <GradedExam> graded = examQuery.OfType <GradedExam>().ToList();

            Assert.True(graded.Count > 0);
        }
Esempio n. 4
0
        private void FillCheckBoxByVariants()
        {
            using (ExamDatabase ed = new ExamDatabase())
            {
                _question       = _questions[_countForQuestion];
                QuestionTb.Text = _questions[_countForQuestion].Question;

                List <AnswerVariants> variants = ed.AnswerVariants.Where(x => x.QuestionId == _question.Id).ToList();

                int i = 0;
                foreach (var checkBox in StackPanelWithCB.Children.OfType <CheckBox>())
                {
                    try
                    {
                        checkBox.Content   = variants[i++].Variant;
                        checkBox.IsEnabled = true;
                    }
                    catch
                    {
                        break;
                    }
                }

                foreach (var variant in variants)
                {
                    if (variant.IsAnswer == true)
                    {
                        _trueVariantsCount++;
                    }
                }
                try
                {
                    QuestionImage.Source     = ConvertByteToPicture(_questions[_countForQuestion++].Image);
                    QuestionImage.Visibility = Visibility.Visible;
                }
                catch
                {
                    QuestionImage.Visibility = Visibility.Hidden;
                }



                QuestiobVariantsInfoTb.Visibility = Visibility.Visible;
                QuestiobVariantsInfoTb.IsEnabled  = false;

                if (_trueVariantsCount > 1)
                {
                    QuestiobVariantsInfoTb.Text = "Multiple answers";
                }
                else
                {
                    QuestiobVariantsInfoTb.Text = "One answer";
                }
            }
        }
Esempio n. 5
0
        public void GradesTest()
        {
            var db = new ExamDatabase("127.0.0.1", "Exams")
            {
                EnableLogging = true
            };
            StudentRepository repo = db.StudentRepository;
            var students           = repo.Queryable.ToList();

            Assert.Contains(students, s => s.NegativeGrades.Any());
        }
Esempio n. 6
0
        private void MaxMarkCalculating(string testTitle)
        {
            using (ExamDatabase ed = new ExamDatabase())
            {
                TestsInfo test = ed.TestsInfo.Where(x => x.Title.Equals(testTitle)).FirstOrDefault();

                _questions = ed.Questions.Where(x => x.TestId == test.Id).ToList().OrderBy(x => Guid.NewGuid()).ToList();

                foreach (var question in _questions)
                {
                    _maxMark += question.Weight;
                }
            }
        }
Esempio n. 7
0
        public PassTestView()
        {
            InitializeComponent();

            using (ExamDatabase ed = new ExamDatabase())
            {
                foreach (var test in ed.TestsInfo)
                {
                    TestsTitle.Items.Add(test.Title.ToString());
                }
            }

            foreach (var cb in StackPanelWithCB.Children.OfType <CheckBox>())
            {
                cb.IsEnabled = false;
            }
        }
Esempio n. 8
0
        private void Button_Click(object sender, RoutedEventArgs e)//new test
        {
            using (ExamDatabase ed = new ExamDatabase())
            {
                if (ed.TestsInfo.Where(x => x.Title == TestNameTb.Text).FirstOrDefault() != null)
                {
                    MessageBox.Show("Test's title have to be unique", "Incorrect test's title", MessageBoxButton.OK, MessageBoxImage.Warning);
                    return;
                }
                if (String.IsNullOrEmpty(TestNameTb.Text))
                {
                    MessageBox.Show("Test's title must not be empty", "Incorrect test's title", MessageBoxButton.OK, MessageBoxImage.Warning);
                    return;
                }


                if (!Int32.TryParse(TestAttempts.Text, out _attempts) || _attempts <= 0 || _attempts > 100)
                {
                    MessageBox.Show("Incorrect attempts");
                    return;
                }

                string _testTitle = TestNameTb.Text;

                NewTestBtn.Visibility   = Visibility.Hidden;
                TestAttempts.Visibility = Visibility.Hidden;
                TestNameTb.Visibility   = Visibility.Hidden;


                OneQOneAns.Visibility            = Visibility.Visible;
                OneQRb.Visibility                = Visibility.Visible;
                FinishCreatingTestBtn.Visibility = Visibility.Visible;

                TestsInfo ti = new TestsInfo()
                {
                    Title = _testTitle, Attempts = _attempts
                };
                ed.TestsInfo.Add(ti);
                ed.SaveChanges();

                _newTestId = ed.TestsInfo.FirstOrDefault(x => x.Title == _testTitle).Id;
            }

            AddQuestionBtn.IsEnabled = true;
        }
Esempio n. 9
0
        public void InsertStudentTest()
        {
            var s1 = new Student(
                id: 4,
                firstname: "FN1",
                lastname: "LN1",
                schoolClass: "5AHIF",
                dateOfBirth: new DateTime(2002, 12, 31));
            var db = new ExamDatabase("127.0.0.1", "Exams")
            {
                EnableLogging = true
            };
            StudentRepository repo = db.StudentRepository;

            repo.DeleteAll();
            repo.InsertOne(s1);
            var s2 = repo.Queryable
                     .FirstOrDefault(s => s.Id == s1.Id);

            Assert.True(s1.Id == s2 !.Id);
            Assert.True(s1.Guid == s2.Guid);
        }
Esempio n. 10
0
        private void CalculateCurrentMark()
        {
            using (ExamDatabase ed = new ExamDatabase())
            {
                int answerCount = ed.AnswerVariants.Where(x => x.IsAnswer == true).ToList().Where(x => x.QuestionId == _question.Id).ToList().Count;

                double oneRightAnswerWeight = (double)_question.Weight / answerCount;
                bool   answerIsTrue;
                foreach (var cb in StackPanelWithCB.Children.OfType <CheckBox>())
                {
                    try
                    {
                        answerIsTrue = ed.AnswerVariants.Where(x => x.Variant.Equals(cb.Content.ToString())).ToList().Where(x => x.QuestionId == _question.Id).First().IsAnswer;
                    }
                    catch { return; }

                    if (cb.IsChecked == true &&
                        (answerIsTrue == true))
                    {
                        _currentMark += oneRightAnswerWeight;
                    }
                }
            }
        }
 public UserInformationService(ExamDatabase database)
 {
     _database = database;
 }
Esempio n. 12
0
        private void NewQuestionBtn(object sender, RoutedEventArgs e)
        {
            if (String.IsNullOrEmpty(QuestionTb.Text))
            {
                MessageBox.Show("Enter question", "Question", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }

            _question = new Questions();

            using (ExamDatabase ed = new ExamDatabase())
            {
                int weight = 0;

                if (!Int32.TryParse(QuestionWeightTb.Text, out weight))
                {
                    MessageBox.Show("Enter question's weight", "Incorrect question's weight", MessageBoxButton.OK, MessageBoxImage.Warning);
                    return;
                }

                //REGION
                #region Question field check

                if (String.IsNullOrEmpty(QuestionTb.Text))
                {
                    MessageBox.Show("Question's field must not be empty", "Incorrect question's field", MessageBoxButton.OK, MessageBoxImage.Warning);
                    return;
                }
                #endregion

                _question.Weight   = weight;
                _question.Question = QuestionTb.Text;
                _question.TestId   = _newTestId;

                if (!(imageForQuestion.Source is null))
                {
                    _question.Image = ConvertPicToByte(imageForQuestion.Source as BitmapImage); //load image to database
                }
                ed.Questions.Add(_question);

                List <AnswerVariants> avList = new List <AnswerVariants>();

                int answersCount = 0;
                foreach (var tb in StackPanelWithCB.Children.OfType <CheckBox>().Where(x => !String.IsNullOrEmpty(x.Content.ToString())))
                {
                    if (tb.IsChecked == true)
                    {
                        answersCount++;
                    }

                    avList.Add(new AnswerVariants()
                    {
                        Variant    = tb.Content.ToString(),
                        IsAnswer   = (bool)tb.IsChecked,
                        QuestionId = _question.Id
                    });
                }

                //REGION
                #region Variants check
                if (answersCount == 0)
                {
                    MessageBox.Show("Enter at least 1 answer", "", MessageBoxButton.OK, MessageBoxImage.Warning);
                    return;
                }
                if (OneQOneAns.IsChecked == true && !OnlyOneCheckedInCheckBox())
                {
                    MessageBox.Show("2 answers have chosen as right. If you think its OK - chose \"One question → many answers\" mode", "too many answers", MessageBoxButton.OK, MessageBoxImage.Warning);
                    return;
                }
                for (int i = 0; i < avList.Count - 1; i++)
                {
                    for (int j = i + 1; j < avList.Count; j++)
                    {
                        if (avList[i].Variant.Equals(avList[j].Variant))
                        {
                            MessageBox.Show($"U can't have two similar answers ({avList[i].Variant}", "Two similar answers", MessageBoxButton.OK, MessageBoxImage.Error);
                        }
                    }
                }
                #endregion

                foreach (var answers in avList)
                {
                    ed.AnswerVariants.Add(answers);
                }
                ed.SaveChanges();


                MessageBox.Show("Question has been added", "Question", MessageBoxButton.OK, MessageBoxImage.Information, MessageBoxResult.OK);

                MakeAllFieldsEmpty();
            }
        }
Esempio n. 13
0
 public LoginService(ExamDatabase database)
 {
     _database = database;
 }
Esempio n. 14
0
 public AddCandidate(ExamDatabase database)
 {
     InitializeComponent();
     _database = database;
 }
Esempio n. 15
0
 public TestEvaluationService(ExamDatabase database)
 {
     _database = database;
 }
Esempio n. 16
0
 public QuestionService(ExamDatabase database)
 {
     _database = database;
 }
Esempio n. 17
0
 public StudentController(ExamDatabase db)
 {
     _db = db;
 }
Esempio n. 18
0
        private void FinishTestBtn_Click(object sender, RoutedEventArgs e)
        {
            CalculateCurrentMark();
            using (ExamDatabase db = new ExamDatabase())
            {
                int mark = (int)_currentMark;


                //both of these variables are 0 when this method perform, conundrum for me
                _testId = db.TestsInfo.Where(x => x.Title.Equals(TestTitleTb.Text)).FirstOrDefault().Id;
                _userId = db.Users.Where(x => x.Login.Equals(_user)).FirstOrDefault().Id;

                //if this user hasn't already passed this test
                int lastMark = -1;

                if (db.Results.Where(x => x.UserId == _userId).FirstOrDefault() != null)
                {
                    if (db.Results.Where(x => x.UserId == _userId).ToList().Where(x => x.TestId == _testId).FirstOrDefault() != null)
                    {
                        lastMark = db.Results.Where(x => x.UserId == _userId).ToList().Where(x => x.TestId == _testId).FirstOrDefault().Mark;
                    }
                }

                if (lastMark == -1)
                {
                    int attemptsLeft = db.TestsInfo.Where(x => x.Id == _testId).FirstOrDefault().Attempts;

                    Results result = new Results()
                    {
                        UserId = _userId, TestId = _testId, Mark = mark, Attemptsleft = attemptsLeft
                    };
                    db.Results.Add(result);
                    db.SaveChanges();
                }

                else
                {
                    int attemptsLeft = (int)db.Results.Where(x => x.UserId == _userId).ToList().Where(x => x.TestId == _testId).First().Attemptsleft;
                    db.Results.Where(x => x.UserId == _userId).ToList().Where(x => x.TestId == _testId).First().Attemptsleft = --attemptsLeft;

                    if (mark > lastMark)
                    {
                        db.Results.Where(x => x.UserId == _userId).ToList().Where(x => x.TestId == _testId).FirstOrDefault().Mark = mark;
                    }
                    db.SaveChanges();
                }

                MessageBox.Show($"U have passed test with mark = {mark}  ({String.Format("{0:0.0}", (double)mark / _maxMark * 100)} %)", "Result", MessageBoxButton.OK, MessageBoxImage.Information);

                TestsTitle.Visibility    = Visibility.Visible;
                FinishTestBtn.Visibility = Visibility.Hidden;

                foreach (var checkBox in StackPanelWithCB.Children.OfType <CheckBox>())
                {
                    checkBox.Content   = String.Empty;
                    checkBox.IsEnabled = false;
                    checkBox.IsChecked = false;
                }
                QuestionTb.Visibility             = Visibility.Hidden;
                StartTestBtn.Visibility           = Visibility.Visible;
                QuestiobVariantsInfoTb.Visibility = Visibility.Hidden;
                QuestionImage.Visibility          = Visibility.Hidden;
                _countForQuestion = 0;
            }
        }
Esempio n. 19
0
 public TestService(ExamDatabase database)
 {
     _database = database;
 }
Esempio n. 20
0
 public AddQuestions(ExamDatabase database, TestService testService)
 {
     InitializeComponent();
     _database    = database;
     _testService = testService;
 }