Перемешать ответы в тесте - C#
Формулировка задачи:
Суть в чем, есть тест он берет данные из XML. Надо сделать так. Когда человек начинает заново выполнят один и тот же тест ответы должны каждый раз быть на других местах.
Вот код всей формы.
А это конкретно нужно перемешать. Подскажите как это аккуратненько можно провернуть?
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Xml; using System.IO; namespace TestXML { public partial class MainForm : Form { XmlReader xmlReader; string PersonName; //Имя пользователя string Theme; //Тема теста int nv; // общее количество вопросов int RightAnsw; //Количество правильных ответов int position = 0; // оставшееся количество вопросов string qw; //Вопрос string[] answ = new string[4]; //Варианты ответов string right; //Верный ответ bool righting; //Правота пользователя public MainForm(string TestPath, string personName, string theme) { InitializeComponent(); PersonName = personName; //Имя пользователя Theme = theme; //Тема теста MessageBox.Show("Для начала тестирования нажмите "ОК"", "Тестирование"); xmlReader = new XmlTextReader(TestPath); //Создаем xmlReader xmlReader.Read(); ReadNombers(); //Читаем количество вопросов LoadQwest(); ShowQwest(); } #region Чтение количества вопросов public void ReadNombers() { //Ищем узел <qw> do xmlReader.Read(); while (xmlReader.Name != "qw"); nv = Convert.ToInt32(xmlReader.GetAttribute("numbers")); //Читаем атрибут узла <qw> xmlReader.Read(); //Входим в узел <qw> } #endregion #region Загрузка вопроса public void LoadQwest() { position++; if (position > nv) Itog(); else { //Ищем узел вопроса do xmlReader.Read(); while (xmlReader.Name != "q" + position); if (xmlReader.Name == "q" + position) { qw = xmlReader.GetAttribute("text"); //Считываем вопрос right = xmlReader.GetAttribute("right"); //Считываем правильный ответ xmlReader.Read(); //Входим в узел <q> //Ищем узел <answers> do xmlReader.Read(); while (xmlReader.Name != "answers"); xmlReader.Read(); //Входим в узел <answers> answ = xmlReader.Value.Split('|'); //Cохраняем варианты ответов в массив } } } #endregion #region Вывод вопроса public void ShowQwest() { QwLabel.Text = qw; //Выводим вопрос //Выводим варианты ответов radioButton0.Text = answ[0]; radioButton1.Text = answ[1]; radioButton2.Text = answ[2]; radioButton3.Text = answ[3]; NextButton.Enabled = false; //Блокируем кнопку } #endregion #region Проверка public void Checked() { if (righting == true) RightAnsw++; } #endregion public void Itog() { MessageBox.Show("Тестирование окончено!", "Тестирование"); FinalForm FF = new FinalForm(PersonName, Theme, nv, RightAnsw); this.Dispose(); FF.ShowDialog(); } #region Exit private void MainForm_FormClosing(object sender, FormClosingEventArgs e) { Application.Exit(); //Вызываем Closing 1-ой формы } private void exitButton_Click(object sender, EventArgs e) { //Application.Exit(); //Вызываем Closing 1-ой формы Visible = false; LoadForm HF = new LoadForm(); HF.Visible = true; } #endregion private void NextButton_Click(object sender, EventArgs e) { Checked(); LoadQwest(); //Загружаем вопрос ShowQwest(); //Выводим вопрос righting = false; //Сбрасываем "правоту" } #region Проверка правоты при выделении RadioButton'a private void radioButton_CheckedChanged(object sender, EventArgs e) { righting = false; if (radioButton0.Checked) { if (radioButton0.Text == right) righting = true; } if (radioButton1.Checked) { if (radioButton1.Text == right) righting = true; } if (radioButton2.Checked) { if (radioButton2.Text == right) righting = true; } if (radioButton3.Checked) { if (radioButton3.Text == right) righting = true; } NextButton.Enabled = true; } #endregion private void MainForm_Load(object sender, EventArgs e) { } } }
public void ShowQwest() { QwLabel.Text = qw; //Выводим вопрос //Выводим варианты ответов radioButton0.Text = answ[0]; radioButton1.Text = answ[1]; radioButton2.Text = answ[2]; radioButton3.Text = answ[3]; NextButton.Enabled = false; //Блокируем кнопку }
Решение задачи: «Перемешать ответы в тесте»
textual
Листинг программы
class Answer { public string Text; public bool IsCorrect; } class Question { public string Text; public List<Answer> Answers = new List<Answer>(); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д