public void SeedDatabaseTest() { var manager = new ExamDatabase("127.0.0.1", "Exams"); manager.Seed(); var repo = manager.StudentRepository; Assert.True(repo.Queryable.Any()); }
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; } }
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); }
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"; } } }
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()); }
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; } } }
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; } }
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; }
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); }
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; }
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(); } }
public LoginService(ExamDatabase database) { _database = database; }
public AddCandidate(ExamDatabase database) { InitializeComponent(); _database = database; }
public TestEvaluationService(ExamDatabase database) { _database = database; }
public QuestionService(ExamDatabase database) { _database = database; }
public StudentController(ExamDatabase db) { _db = db; }
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; } }
public TestService(ExamDatabase database) { _database = database; }
public AddQuestions(ExamDatabase database, TestService testService) { InitializeComponent(); _database = database; _testService = testService; }