public void SaveData(List <QuestionClasses> list, int Total, int NUMQs) { QuestionIO SaveQuestions = new QuestionIO(); SaveQuestions.Write(list); int Percent = ((Total * 100) / NUMQs); ResultsIO SaveResults = new ResultsIO(); SaveResults.Write(Percent); }
// CONSTRUCTS THE GUI FOR THE QUESTIONS public void StartGUI(int NUMQs, List <QuestionClasses> Questions) { // CREATES WINDOW OBJECT QuestionGUI Main = new QuestionGUI(); // INITIAL VARIABLES bool Success = true; int IntQuestionIndex = 0; int Total = 0; // DOES THE FOLLOWING FOR EVERY QUESTION IN THE LIST while (Main.TabQuestions.TabCount < NUMQs) { // CREATES TABS string title = "Q" + (Main.TabQuestions.TabCount + 1).ToString(); TabPage QuestionTab = new TabPage(title); Main.TabQuestions.TabPages.Add(QuestionTab); // CREATES QUESTION LABEL Label Question = new Label(); // addressed font issue (RB13) Question.MaximumSize = new System.Drawing.Size(480, 70); Question.Font = new Font("Microsoft Sans Serif", 13); try { Question.Text = Questions[IntQuestionIndex].OutStrQuestion(); } catch { Success = false; break; } Question.AutoSize = true; // CREATES NEXT BUTTON Button NextTab = new Button(); NextTab.Text = "Next"; NextTab.Location = new System.Drawing.Point(480, 170); NextTab.Click += (sender, args) => { Main.TabQuestions.SelectedIndex = (Main.TabQuestions.SelectedIndex + 1 < Main.TabQuestions.TabCount) ? Main.TabQuestions.SelectedIndex + 1 : Main.TabQuestions.SelectedIndex; }; // CREATES PREVIOUS BUTTON Button PrevTab = new Button(); PrevTab.Text = "Previous"; PrevTab.Location = new System.Drawing.Point(0, 170); PrevTab.Click += (sender, args) => { Main.TabQuestions.SelectedIndex = (Main.TabQuestions.SelectedIndex - 1 > -1) ? Main.TabQuestions.SelectedIndex - 1 : Main.TabQuestions.SelectedIndex; }; // CREATES FINISH BUTTON Button Finish = new Button(); Finish.Text = "End Quiz"; Finish.Location = new System.Drawing.Point(400, 170); // this will have to check that all questions are answered and will update the database Finish.Click += (sender, args) => { Saving Saving = new Saving(); Saving.Show(); SaveData(Questions, Total, NUMQs); Saving.Close(); ResultsIO ReadResults = new ResultsIO(); List <int> ResultsHistory = ReadResults.Read(); Results ResultsWindow = new Results(ResultsHistory, NUMQs); Main.Close(); ResultsWindow.ShowDialog(); }; // ADDS WIDGETS TO THE WINDOW QuestionTab.Controls.Add(Question); QuestionTab.Controls.Add(NextTab); QuestionTab.Controls.Add(PrevTab); QuestionTab.Controls.Add(Finish); // MULTIPLE CHOICE QUESTIONS AND TIMED MULTIPLE CHOICE QUESTIONS DO THIS: if (Questions[IntQuestionIndex].OutStrQuestionType() == "MC" || Questions[IntQuestionIndex].OutStrQuestionType() == "TMC") { // DEFINES A TEMPORARY OBJECT var TempObject = (MultipleChoiceQuestion)Questions[IntQuestionIndex]; // Create all buttons Button AnsA = new Button(); Button AnsB = new Button(); Button AnsC = new Button(); Button AnsD = new Button(); // Add text to buttons AnsA.Text = TempObject.OutAnsA(); AnsB.Text = TempObject.OutAnsB(); AnsC.Text = TempObject.OutAnsC(); AnsD.Text = TempObject.OutAnsD(); // Give Buttons a location AnsA.Location = new System.Drawing.Point(0, 70); AnsB.Location = new System.Drawing.Point(0, 120); AnsC.Location = new System.Drawing.Point(310, 70); AnsD.Location = new System.Drawing.Point(310, 120); // Give Buttons a size AnsA.Size = new System.Drawing.Size(260, 25); AnsB.Size = new System.Drawing.Size(260, 25); AnsC.Size = new System.Drawing.Size(260, 25); AnsD.Size = new System.Drawing.Size(260, 25); // On Click AnsA.Click += (sender, args) => { bool correct = TempObject.IsCorrect("A"); AnsA.Enabled = false; AnsB.Enabled = false; AnsC.Enabled = false; AnsD.Enabled = false; if (correct == true) { Total++; AnsA.BackColor = Color.Green; } else { AnsA.BackColor = Color.Red; string Ans = TempObject.OutStrAnswer(); switch (Ans) { case "A": AnsA.BackColor = Color.Green; break; case "B": AnsB.BackColor = Color.Green; break; case "C": AnsC.BackColor = Color.Green; break; case "D": AnsD.BackColor = Color.Green; break; } } }; AnsB.Click += (sender, args) => { bool correct = TempObject.IsCorrect("B"); AnsA.Enabled = false; AnsB.Enabled = false; AnsC.Enabled = false; AnsD.Enabled = false; if (correct == true) { Total++; AnsB.BackColor = Color.Green; } else { AnsB.BackColor = Color.Red; string Ans = TempObject.OutStrAnswer(); switch (Ans) { case "A": AnsA.BackColor = Color.Green; break; case "B": AnsB.BackColor = Color.Green; break; case "C": AnsC.BackColor = Color.Green; break; case "D": AnsD.BackColor = Color.Green; break; } } }; AnsC.Click += (sender, args) => { bool correct = TempObject.IsCorrect("C"); AnsA.Enabled = false; AnsB.Enabled = false; AnsC.Enabled = false; AnsD.Enabled = false; if (correct == true) { Total++; AnsC.BackColor = Color.Green; } else { AnsC.BackColor = Color.Red; string Ans = TempObject.OutStrAnswer(); switch (Ans) { case "A": AnsA.BackColor = Color.Green; break; case "B": AnsB.BackColor = Color.Green; break; case "C": AnsC.BackColor = Color.Green; break; case "D": AnsD.BackColor = Color.Green; break; } } }; AnsD.Click += (sender, args) => { bool correct = TempObject.IsCorrect("D"); AnsA.Enabled = false; AnsB.Enabled = false; AnsC.Enabled = false; AnsD.Enabled = false; if (correct == true) { Total++; AnsD.BackColor = Color.Green; } else { AnsD.BackColor = Color.Red; string Ans = TempObject.OutStrAnswer(); switch (Ans) { case "A": AnsA.BackColor = Color.Green; break; case "B": AnsB.BackColor = Color.Green; break; case "C": AnsC.BackColor = Color.Green; break; case "D": AnsD.BackColor = Color.Green; break; } } }; if (Questions[IntQuestionIndex].OutStrQuestionType() == "TMC") { var QuestionAsTMC = (TimedMultipleChoiceQuestion)Questions[IntQuestionIndex]; double TimeRemaining = (double)QuestionAsTMC.OutIntTime(); string Ans = QuestionAsTMC.OutStrAnswer(); // add a timer for timed multiple choice questions Label TimerUpdate = new Label(); TimerUpdate.Location = new System.Drawing.Point(480, 20); Timer QuestionTimer = new Timer(); QuestionTimer.Interval = 100; TimerUpdate.Text = IntQuestionIndex.ToString(); if (Main.TabQuestions.SelectedTab == QuestionTab) { QuestionTimer.Start(); } else { QuestionTimer.Stop(); } Main.TabQuestions.Selecting += (sender, args) => { if (Main.TabQuestions.SelectedTab == QuestionTab) { QuestionTimer.Start(); } else { QuestionTimer.Stop(); } }; QuestionTimer.Tick += (sender, args) => { if (TimeRemaining > 0.01) { TimeRemaining -= 0.1; TimerUpdate.Text = TimeRemaining.ToString("N1"); } else { TimerUpdate.Text = "Time's Up!"; AnsA.Enabled = false; AnsB.Enabled = false; AnsC.Enabled = false; AnsD.Enabled = false; switch (Ans) { case "A": AnsA.BackColor = Color.Green; break; case "B": AnsB.BackColor = Color.Green; break; case "C": AnsC.BackColor = Color.Green; break; case "D": AnsD.BackColor = Color.Green; break; } } }; QuestionTab.Controls.Add(TimerUpdate); } // add widgets to win QuestionTab.Controls.Add(AnsA); QuestionTab.Controls.Add(AnsB); QuestionTab.Controls.Add(AnsC); QuestionTab.Controls.Add(AnsD); } if (Questions[IntQuestionIndex].OutStrQuestionType() == "W") { var QuestionAsW = (WrittenQuestion)Questions[IntQuestionIndex]; string TrueAns = QuestionAsW.OutStrAnswer(); TextBox UsrAnsBox = new TextBox(); UsrAnsBox.Location = new System.Drawing.Point(100, 92); UsrAnsBox.Size = new Size(200, 25); // Label Instruct = new Label(); Instruct.Text = "Enter your answer into the white box and click 'Submit Answer'"; Instruct.Location = new Point(100, 70); Instruct.AutoSize = true; Button Submit = new Button(); Submit.Text = "Submit Answer"; Submit.Size = new Size(150, 25); Submit.Location = new System.Drawing.Point(310, 90); Submit.Click += (sender, args) => { string UsrAns = UsrAnsBox.Text; if (QuestionAsW.IsCorrect(UsrAns) == true) { Submit.BackColor = Color.Green; Total++; } else { Submit.BackColor = Color.Red; } Submit.Enabled = false; }; QuestionTab.Controls.Add(Submit); QuestionTab.Controls.Add(UsrAnsBox); QuestionTab.Controls.Add(Instruct); } // Increments the question index IntQuestionIndex++; } // RUNS WINDOW ONLY IF ALL QUESTIONS ARE POPULATED if (Success == true) { Main.ShowDialog(); } else { string StrError = "Some questions were not found. It is likely they do not yet exist. Please make a different selection and report the bug"; Error QuestionErrorWindow = new Error(StrError); QuestionErrorWindow.ShowDialog(); } }