Перемешать ответы в тесте - 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>();
}