Перемешать ответы в тесте - 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>();
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д