//Thread for saving the graded test (and sometimes the practice test void backgroundWorkerSaveTest_DoWork(object sender, DoWorkEventArgs e) { switch (this.Tag.ToString()) { case "placement": //just insert the graded test MathWizDB.InsertGradedTest(gradedPlacementTest, student.Id, gradedPlacementTest.PlacementTest.Id, "Placement Test", gradedPlacementTest.RecommendedLevel); //update student's mastery level MathWizDB.UpdateMasteryLevel(student.Username, gradedPlacementTest.RecommendedLevel); break; case "practice": //first insert the test since the teacher did not make it, but the student just generated it gradedPracticeTest.PracticeTest.Id = MathWizDB.InsertTest(klass.Id, gradedPracticeTest.PracticeTest, "Practice Test", 0, gradedPracticeTest.PracticeTest.MinLevel, gradedPracticeTest.PracticeTest.MaxLevel); //then insert the graded test. The insertGradedTest method also inserts the graded Questions gradedPracticeTest.Id = MathWizDB.InsertGradedTest(gradedPracticeTest, student.Id, gradedPracticeTest.PracticeTest.Id, "Practice Test"); break; case "mastery": //just insert the graded test MathWizDB.InsertGradedTest(gradedMasteryTest, student.Id, gradedMasteryTest.MasteryTest.Id, "Mastery Test", 0, 1, gradedMasteryTest.Passed); break; } }
private void btnChange_Click(object sender, EventArgs e) { if (Validation.IsInteger(txtNewMasteryLevel) && Validation.IsWithinRangeInclusive(txtNewMasteryLevel, 12, 0)) { int newML = Convert.ToInt32(txtNewMasteryLevel.Text); MathWizDB.UpdateMasteryLevel(username, newML); this.Close(); } }
//MARK Button Handlers private void btnStartFinish_Click(object sender, EventArgs e) { if (btnStartFinish.Text == "Start Test") //start test, show the first question { testFinished = false; btnStartFinish.Text = "Finish Test"; btnStartFinish.Hide(); gbxQuestion.Show(); currentQuestionNum = 0; //array starts at 0 timerTest.Start(); switch (this.Tag.ToString()) { case "placement": ShowQuestion(gradedPlacementTest.PlacementTest.Questions[currentQuestionNum]); break; case "practice": ShowQuestion(gradedPracticeTest.PracticeTest.Questions[currentQuestionNum]); break; case "mastery": ShowQuestion(gradedMasteryTest.MasteryTest.Questions[currentQuestionNum]); break; } } else if (btnStartFinish.Text == "Finish Test") //finish test, record score, write score to db { switch (this.Tag.ToString()) //record information for the completed test { case "placement": gradedPlacementTest.Score = (decimal)gradedPlacementTest.CorrectlyAnsweredQuestions.Count / (decimal)(gradedPlacementTest.CorrectlyAnsweredQuestions.Count + (decimal)gradedPlacementTest.WronglyAnsweredQuestions.Count) * 100; gradedPlacementTest.TimeTakenToComplete = gradedPlacementTest.PlacementTest.TimeLimit - TimeSpan.ParseExact(lblTimerTest.Text, "mm\\:ss", CultureInfo.InvariantCulture); gradedPlacementTest.DateTaken = DateTime.Now; gradedPlacementTest.Feedback = gradedPlacementTest.Score.ToString(); int minLevelWrong = 12; for (int i = 0; i < gradedPlacementTest.WronglyAnsweredQuestions.Count; i++) { if (gradedPlacementTest.WronglyAnsweredQuestions[i].Question.MasteryLevel < minLevelWrong) { minLevelWrong = gradedPlacementTest.WronglyAnsweredQuestions[i].Question.MasteryLevel; } } gradedPlacementTest.RecommendedLevel = minLevelWrong; MessageBox.Show("You have been placed at Mastery Level: " + gradedPlacementTest.RecommendedLevel.ToString() + "\nYour Score was: " + gradedPlacementTest.Score.ToString("###.##")); break; case "practice": gradedPracticeTest.Score = (decimal)gradedPracticeTest.CorrectlyAnsweredQuestions.Count / (decimal)(gradedPracticeTest.CorrectlyAnsweredQuestions.Count + (decimal)gradedPracticeTest.WronglyAnsweredQuestions.Count) * 100; gradedPracticeTest.TimeTakenToComplete = gradedPracticeTest.PracticeTest.TimeLimit - TimeSpan.ParseExact(lblTimerTest.Text, "mm\\:ss", CultureInfo.InvariantCulture); gradedPracticeTest.DateTaken = DateTime.Now; gradedPracticeTest.Feedback = gradedPracticeTest.Score.ToString(); MessageBox.Show("Your Score was: " + gradedPracticeTest.Score.ToString()); break; case "mastery": gradedMasteryTest.Score = (decimal)gradedMasteryTest.CorrectlyAnsweredQuestions.Count / (decimal)(gradedMasteryTest.CorrectlyAnsweredQuestions.Count + (decimal)gradedMasteryTest.WronglyAnsweredQuestions.Count) * 100; gradedMasteryTest.TimeTakenToComplete = gradedMasteryTest.MasteryTest.TimeLimit - TimeSpan.ParseExact(lblTimerTest.Text, "mm\\:ss", CultureInfo.InvariantCulture); gradedMasteryTest.DateTaken = DateTime.Now; gradedMasteryTest.Feedback = gradedMasteryTest.Score.ToString(); if (gradedMasteryTest.Score > gradedMasteryTest.MasteryTest.PassThreshhold) //determine whether they passed or not. { gradedMasteryTest.Passed = true; MathWizDB.UpdateMasteryLevel(student.Username, ++student.MasteryLevel); //bump the master level up MessageBox.Show("You scored " + gradedMasteryTest.Score.ToString("###.##") + " and have now passed to level " + student.MasteryLevel); } else { gradedMasteryTest.Passed = false; MessageBox.Show("You scored " + gradedMasteryTest.Score.ToString("###.##") + " and will need to take this test again"); } break; } //write test to database in another thread backgroundWorkerSaveTest.RunWorkerAsync(); } }