Перемешать ответы в тесте - C#

Узнай цену своей работы

Формулировка задачи:

Суть в чем, есть тест он берет данные из XML. Надо сделать так. Когда человек начинает заново выполнят один и тот же тест ответы должны каждый раз быть на других местах.
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10. using System.Xml;
  11. using System.IO;
  12. namespace TestXML
  13. {
  14. public partial class MainForm : Form
  15. {
  16. XmlReader xmlReader;
  17. string PersonName; //Имя пользователя
  18. string Theme; //Тема теста
  19. int nv; // общее количество вопросов
  20. int RightAnsw; //Количество правильных ответов
  21. int position = 0; // оставшееся количество вопросов
  22. string qw; //Вопрос
  23. string[] answ = new string[4]; //Варианты ответов
  24. string right; //Верный ответ
  25. bool righting; //Правота пользователя
  26. public MainForm(string TestPath, string personName, string theme)
  27. {
  28. InitializeComponent();
  29. PersonName = personName; //Имя пользователя
  30. Theme = theme; //Тема теста
  31. MessageBox.Show("Для начала тестирования нажмите "ОК"", "Тестирование");
  32. xmlReader = new XmlTextReader(TestPath); //Создаем xmlReader
  33. xmlReader.Read();
  34. ReadNombers(); //Читаем количество вопросов
  35. LoadQwest();
  36. ShowQwest();
  37. }
  38. #region Чтение количества вопросов
  39. public void ReadNombers()
  40. {
  41. //Ищем узел <qw>
  42. do xmlReader.Read();
  43. while (xmlReader.Name != "qw");
  44. nv = Convert.ToInt32(xmlReader.GetAttribute("numbers")); //Читаем атрибут узла <qw>
  45. xmlReader.Read(); //Входим в узел <qw>
  46. }
  47. #endregion
  48. #region Загрузка вопроса
  49. public void LoadQwest()
  50. {
  51. position++;
  52. if (position > nv)
  53. Itog();
  54. else
  55. {
  56. //Ищем узел вопроса
  57. do xmlReader.Read();
  58. while (xmlReader.Name != "q" + position);
  59. if (xmlReader.Name == "q" + position)
  60. {
  61. qw = xmlReader.GetAttribute("text"); //Считываем вопрос
  62. right = xmlReader.GetAttribute("right"); //Считываем правильный ответ
  63. xmlReader.Read(); //Входим в узел <q>
  64. //Ищем узел <answers>
  65. do xmlReader.Read();
  66. while (xmlReader.Name != "answers");
  67. xmlReader.Read(); //Входим в узел <answers>
  68. answ = xmlReader.Value.Split('|'); //Cохраняем варианты ответов в массив
  69. }
  70. }
  71. }
  72. #endregion
  73. #region Вывод вопроса
  74. public void ShowQwest()
  75. {
  76. QwLabel.Text = qw; //Выводим вопрос
  77. //Выводим варианты ответов
  78. radioButton0.Text = answ[0];
  79. radioButton1.Text = answ[1];
  80. radioButton2.Text = answ[2];
  81. radioButton3.Text = answ[3];
  82. NextButton.Enabled = false; //Блокируем кнопку
  83. }
  84. #endregion
  85. #region Проверка
  86. public void Checked()
  87. {
  88. if (righting == true)
  89. RightAnsw++;
  90. }
  91. #endregion
  92. public void Itog()
  93. {
  94. MessageBox.Show("Тестирование окончено!", "Тестирование");
  95. FinalForm FF = new FinalForm(PersonName, Theme, nv, RightAnsw);
  96. this.Dispose();
  97. FF.ShowDialog();
  98. }
  99. #region Exit
  100. private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
  101. {
  102. Application.Exit(); //Вызываем Closing 1-ой формы
  103. }
  104. private void exitButton_Click(object sender, EventArgs e)
  105. {
  106. //Application.Exit(); //Вызываем Closing 1-ой формы
  107. Visible = false;
  108. LoadForm HF = new LoadForm();
  109. HF.Visible = true;
  110. }
  111. #endregion
  112. private void NextButton_Click(object sender, EventArgs e)
  113. {
  114. Checked();
  115. LoadQwest(); //Загружаем вопрос
  116. ShowQwest(); //Выводим вопрос
  117. righting = false; //Сбрасываем "правоту"
  118. }
  119. #region Проверка правоты при выделении RadioButton'a
  120. private void radioButton_CheckedChanged(object sender, EventArgs e)
  121. {
  122. righting = false;
  123. if (radioButton0.Checked)
  124. {
  125. if (radioButton0.Text == right)
  126. righting = true;
  127. }
  128. if (radioButton1.Checked)
  129. {
  130. if (radioButton1.Text == right)
  131. righting = true;
  132. }
  133. if (radioButton2.Checked)
  134. {
  135. if (radioButton2.Text == right)
  136. righting = true;
  137. }
  138. if (radioButton3.Checked)
  139. {
  140. if (radioButton3.Text == right)
  141. righting = true;
  142. }
  143. NextButton.Enabled = true;
  144. }
  145. #endregion
  146.  
  147. private void MainForm_Load(object sender, EventArgs e)
  148. {
  149. }
  150. }
  151. }
Вот код всей формы.
Листинг программы
  1. public void ShowQwest()
  2. {
  3. QwLabel.Text = qw; //Выводим вопрос
  4. //Выводим варианты ответов
  5. radioButton0.Text = answ[0];
  6. radioButton1.Text = answ[1];
  7. radioButton2.Text = answ[2];
  8. radioButton3.Text = answ[3];
  9. NextButton.Enabled = false; //Блокируем кнопку
  10. }
А это конкретно нужно перемешать. Подскажите как это аккуратненько можно провернуть?

Решение задачи: «Перемешать ответы в тесте»

textual
Листинг программы
  1. class Answer
  2. {
  3.     public string Text;
  4.     public bool IsCorrect;
  5. }
  6.  
  7. class Question
  8. {
  9.     public string Text;
  10.     public List<Answer> Answers = new List<Answer>();
  11. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.125 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы