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

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


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

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

8   голосов , оценка 4.125 из 5
Похожие ответы