Консультация № 185719
30.03.2012, 22:59
85.60 руб.
0 2 0
Уважаемые эксперты!
Здравствуйте! У меня возникли сложности с таким вопросом:

У меня имеется разработанная на delphi http://files.mail.ru/7VG5GUсистема тестирования.
Мне нужно реализовать её на С#. Программа должна выполнять следующее: случайный выбор вариантов вопросов из файла xml; выбор вариантов ответов на поставленный вопрос: «Один из Многих», «Многие из Многих»; вывод результатов тестирования в файл.
Файл xml хранится в каталоге с программой. Случайный выбор, сохранение в файл результатов тестирования и выбор одного варианта ответа (radiobutton) я реализовал. Не знаю как реализовать выбор «Многие из Многих» (checkbox). Прошу помочь с написанием кода для данной задачи.

Обсуждение

Неизвестный
30.03.2012, 23:04
общий
Это часть проекта, в котором реализованна только система тестирования с одним вариантом ответа.
Прикрепленные файлы:
2e2ac7a9c4bd0cc825909297574a68d9.rar
Неизвестный
02.04.2012, 23:17
общий
Здравствуйте, Александр!

К сожалению, времени писать код у меня нет, поэтому ограничусь советами.
  • Применительно к Вашей программе визуальная работа с чекбоксами вообще не отличается от радиокнопок. У них есть точно такой же набор свойств, и Вы можете просто в тексте заменить RadioButton на CheckBox.
    По логической части Вам придется хранить список правильных индексов и сравнивать значение каждого чекбокса с тем, которое должно быть. В xml нужно 2 разных тега для вопросов, чтобы различать единичный и множественный выбор. Для множественного выбора можно хранить булевый массив с правильным ответом и сравнивать его элементы с соответствующими чекбоксами.
  • Вам будет гораздо проще работать с вопросами, если создать для них специальные классы. Тогда работа с xml ограчится одним методом, который должен прочитать документ и создать список классов.
  • Вместо массивов проще использовать класс List<>. Он сам изменяет свои размеры по мере надобности - избавитесь от множества проверок размера в коде.
  • Чекбоксы и радиокнопки имеют свойство текст. Создавать лейблы для текста не нужно. И явно указывать все мыслимые параметры текста обычно тоже не нужно.
  • Пользуйтесь контейнером TableLayoutPanel! Он сам расположит чекбоксы как надо. Вычисление координат тяжело и ненадежно: если в вопросах и вариантах ответов будет слишком много текста, текст станет налазить на следующий или обрезаться. Также, жестко ограничено количество ответов. Лучше для них завести специальную таблицу и для каждого вопроса очищать ее и заново создавать нужное количество вариантов.
  • Создайте UserControlы для логина, приветствия, вопросов и результата. Это позволит раскидать код по разным классам. Когда все в кучу, с программой очень тяжело управляться. Главная форма должна только хранить общие данные и передавать их контролам, а также переключать активные контролы.
  • Все контролы имеют свойство Tag, куда можно записать любой объект. Например, индекс этого контрола radiobutton
  • [i].Tag=i. А потом, вместо простыни проверок, достаточно написать одну строку: otv = (int)(sender as RadioButton).Tag
Форма ответа