Источник данных
|
Выходной
параметр
|
Тип данных
|
Ограничения
|
База данных
|
вопросы
|
текст
|
Вопросы должны
быть краткими, лаконичными, понятными
|
|
ответы
|
текст
|
Ответы должны
содержать верные и неверные варианты, с обязательным указанием верного
|
|
уровень
сложности
|
числовой
|
Уровень
сложности варьируется от 1 до 3
|
|
Удобство БД
|
|
БД не должна
быть перегруженной доп. функциями, должна быть удобной и интуитивно понятной
|
2.2 Диаграмма потоков данных
Главная цель построения иерархического множества DFD
заключается в том, чтобы сделать требования ясными и понятными на каждом уровне
детализации, а также разбить эти требования на части с точно определенными
отношениями между ними.
Диаграммы DFD позволяют описать процесс обмена информацией
между элементами изучаемой системы. DFD отображает источники и
адресаты данных, идентифицирует процессы и группы данных, связывающие в потоки
одну функцию с другой, а также, что важно, определяет накопители (хранилища)
данных, которые используются в исследуемом процессе.
Модель системы определяется как иерархия диаграмм потоков
данных (ДПД или DFD), описывающих асинхронный процесс
преобразования информации от ее ввода в систему до выдачи пользователю.
Диаграммы верхних уровней иерархии определяют основные
процессы или подсистемы с внешними входами и выходами. Они детализируются с
помощью диаграмм нижнего уровня. Такая детализация продолжается, создавая
многоуровневую иерархию диаграмм до тех пор, пока не будет достигнут уровень
декомпозиции, на котором процессы становятся элементами и детализировать их не
имеет смысла.
Источники информации (внешние сущности) порождают
информационные потоки (потоки данных), переносящие информацию к подсистемам
или процессам. Те в свою очередь преобразуют информацию и порождают новые
потоки, которые переносят информацию к другим процессам или подсистемам,
накопителям данных или внешним сущностям - потребителям информации. Таким
образом, основными компонентами диаграмм потоков данных являются:
ü внешние сущности (внешние ссылки) external references;
ü системы / подсистемы (функции обработки
информации, работы);
ü процессы;
ü накопители данных, хранилища data store (таблицы для хранения
информации);
ü потоки данных (стрелки) arrows - документы, объекты,
сотрудники или отделы, которые участвуют в обработке информации
Внешняя сущность представляет собой
материальный предмет или физическое лицо, представляющее собой источник или
приемник информации, в нашем случае - это преподаватель, оператор, которые
инициируют процесс создания тестовых заданий.
Процесс представляет собой преобразование входных
потоков данных в выходные в соответствии с определенным алгоритмом. В нашем
случае процессами являются: подготовка материалов, разбиение материалов на
вопросы, ответы и уровни сложности, а так же работа с программой.
Накопитель данных представляет собой базу
данных, где хранятся созданные вопросы, ответы к ним и уровень сложности,
выставляемый к ответам.
Рассмотрим работу программы подготовки адаптивных тестов:
· преподаватель собирает и подготавливает
материалы, инициирует процесс создания тестов
· оператор с помощью программы формирует
базу данных
· в зависимости от требований, предъявляемых
преподавателем, редактирование тестов либо требуется либо нет.
Данную модель будем рассматривать с точки пользователя.
Целевой аудиторией являются пользователи программы, которых
не интересует углубленные знания процесса деятельности программы, а только
основные моменты работы программы.
Рисунок 2.2.1. Диаграмма потоков данных
Из диаграммы потоков данных видно, что преподаватели
подготавливают материалов и проверяют правильность их создания. Оператор
разбивает полученный от преподавателя материал на компоненты, которые будут
заноситься в формы программы и, работая с программой, заносит полученные данные
в базу данных.
3. Проектирование программного средства
.1 Проектирование информационного обеспечения с
использованием семантических моделей
В ходе работы проводим анализ предметной области с целью
выделения основных сущностей, их атрибутов, а также связей между сущностями.
Основными компонентами ER-диаграмм являются:
· сущности - важные для предметной области
объекты;
· атрибуты - их свойства;
· связи - отношения друг с другом
Сущность (Entity) - реальный либо воображаемый объект,
имеющий существенное значение для рассматриваемой предметной области,
информация о котором подлежит хранению
Атрибут - любая характеристика сущности, значимая для
рассматриваемой предметной области и предназначенная для квалификации,
идентификации, классификации, количественной характеристики или выражения
состояния сущности. Атрибут представляет тип характеристик или свойств,
ассоциированных с множеством реальных или абстрактных объектов (людей, мест,
событий, состояний, идей, и т.д.).
Связь (Relationship) - поименованная ассоциация между
двумя сущностями, значимая для рассматриваемой предметной области. Связь - это
ассоциация между сущностями, при которой, как правило, каждый экземпляр одной
сущности, называемой родительской сущностью, ассоциирован с произвольным (в том
числе нулевым) количеством экземпляров второй сущности, называемой
сущностью-потомком, а каждый экземпляр сущности-потомка ассоциирован в точности
с одним экземпляром сущности-родителя. Таким образом, экземпляр
сущности-потомка может существовать только при существовании сущности родителя.
В нашем случае сущностью являются: принципы построения
вопросов, ответов, определения уровня сложности, сами вопросы, ответы, уровень
сложности, форма и удобство заполнения базы данных, сохранение полученной
информации и присоединение базы данных к программе тестирования.
Атрибуты: для теста атрибутами являются дисциплина, форма
обучения. Для вопросов и ответов - текстовые значения, для уровня сложности -
текст или число.
Все сущности, кроме удобства формы и присоединения базы
данных к программе тестировании, имеют обязательную степень связи.
Рисунок 3.1.1. Диаграмма «связь-сущность»
3.2 Проектирование пользовательского интерфейса
Вопрос пользовательских интерфейсов стал играть важную роль
при разработке программного обеспечения только тогда, когда прямой доступ к
компьютерам получил кто-то еще, помимо программистов и операторов. Современная
концепция пользовательских интерфейсов появилась только тогда, когда появились
терминалы, напрямую или косвенно соединенные с компьютерами. По мере роста
числа людей, которые могли напрямую взаимодействовать с компьютерами,
человеко-машинный интерфейс становился все более значимой задачей для
разработчиков и проектировщиков программных средств. Если вначале решались в
основном проблемы технологий (пользовательские интерфейсы), то потом стали
решаться проблемы людей (пользователей).
Чтобы интерфейс программы считался правильным, должны
выполняться следующие условия:
· Доступность. Интерфейс программы
подготовки адаптивного тестирования можно назвать доступным и интуитивно
понятным, так как все поля для заполнения подписаны и расположены в порядке, в
котором мы чаще всего задаем вопрос (вопрос, ответ к нему…)
· Эффективность. Наряду с доступностью
программа не перегружена дополнительными формами, которые не будут мешать
опытному пользователю постоянно использовать программу
· Контекст. Система должна удовлетворяет
существующим реалиям и текущей среде эксплуатационного контекста, внутри
которого она будет разворачиваться и применяться.
Основными пространствами взаимодействия проектируемой системы
являются распознаваемым набором, представляющим собой часть пользовательского
интерфейса.
Рисунок 3.2.1. Диаграмма пользовательского интерфейса
Карта навигации по контекстам отображает общую архитектуру
интерфейса, моделируя связи между контекстами взаимодействия.
Рисунок 3.2.2. Диаграмма карты навигации
4.
Реализация программного средства
.1
Описание структуры БД
Для создания базы данных (БД) использовалась система
управления базами данных Microsoft Office Access.
В данной работе потребовалось составление нескольких таблиц:
таблица тестов, вопросов, ответов и результатов.
Для создания таблицы провели следующие действия:
· запускаем Microsoft Office Access,
· в меню файл выбираем вкладку «создать»
· в пункте создание файла выбираем «создание
новой базы данных»
· в появившемся окошке вводим название базы
данных и сохраняем проект
· создаем таблицы в режиме конструктора
· для колонки id _test выбираем из списка
числовые значения, для test - текстовые.
· в меню файл выбираем «сохранить как»,
вводим название таблицы и жмем сохранить.
Аналогично создаем остальные таблицы.
Таблица тестов (test: таблица) имеет следующий вид:
Рисунок 4.1.1. Таблица тестов
Данная таблица содержит следующие поля:
. id _test - присваиваемый тесту персональный номер;
. test - имя теста. Вновь создаваемый тест так же заносится в данную
таблицу.
Таблица вопросов (vopros:таблица) имеет следующий вид (представим лишь
часть):
Рисунок 4.1.2. Таблица вопросов
Где: id _vopros - соответственно персональный номер вопроса;
id _test - персональный номер теста, в котором этот
вопрос содержится;
vopr - поле ввода вопроса
lev - кровень сложности
Таблица ответов (otvet:таблица) имеет следующий вид:
Рисунок 4.1.3. Таблица ответов
Где: id_otv - персональный номер ответа;
id_vopr - персональный номер вопроса;
otv - поле для ввода ответа.
Связь данной БД с программой тестирования позволяет при
внесении изменений в содержание теста (добавление вопросов, добавление или
удаление теста) отражать все эти изменения в соответствующей БД. Например, при
добавления в тест нового вопроса с вариантами ответа, в таблицу вопросов и
ответов добавляются соответствующие поля.
4.2
Реализация программного средства
Для реализации программного средства использовали Microsoft Visual Studio. Net 2005, в котором создали
проект.
Для создания главной формы провели следующие действия:
· открыли Microsoft Visual Studio. Net 2005
· создали Windows приложение, в котором
автоматически генерируется Windows form
· открыли панель инструментов Toolbox
· выбираем необходимый элемент button, который размещаем на
форме
· двойным щелчком мыши по созданному
элементу button, после чего автоматически генерируется событийная процедура on_mouse_click
· появившемся окне событийной процедуры
описываем код, который будет выполнятся по наступлению данного события, а
именно функцию add_value()
private void button5_Click (object sender, EventArgs e)
{= false;();();
}
Данная функция добавляет в базу данных информацию введенную в
форму AddValue() и функцию DGVBinding(), которая пополняет данными окно
отображения введенных ранее вопросов.
Аналогично разместили основные элементы управления на Windows form, к которым относятся
поля ввода вопросов, ответов, кнопки добавления полей, ниспадающий список
уровней сложности, элементы отображения информации о базах данных и
вспомогательные элементы, при помощи которых проектируется схема ответов с
выбором верных.
4.3
Описание программного средства
Программное средство создано в Microsoft Visual Studio. Net 2005.
Система состоит из редактора тестов, который представляет
собой следующее окно:
Рисунок 4.2.1. Редактор тестов
Дизайнер тестов представляет собой средство создания и
редактирования тестов. Данную подсистему тестирования может использовать только
преподаватель и при необходимости можно поставить защитный пароль на доступ к
данной подсистеме. В целях ознакомления в данной лабораторной работе доступ к
дизайну тестов паролем не защищен.
В дизайнере тестов можно добавлять новые вопросы в тест, а
так же создавать новый тест и наполнять его соответствующими вопросами.
Программа и база данных находятся на сервере. Пользователь на
клиентской машине с помощью браузера наблюдает интерфейс разработанного
программного средства. С помощью интерфейса клиент посылает запросы серверу
через локальную сеть. Программа по средствам уровня бизнес-логики получает и
обрабатывает данные и при помощи уровня доступа данных получает запроса из базы
данных и возвращает ответы клиенту.
4.3 Реализация функциональности главной формы
Выбор конкретного способа реализации системы защиты зависит
от первоначально предъявляемых к этой системе требований:
Главная форма должна быть доступной и удобной даже для
неопытного пользователя - программа создавалась из расчета максимального
упрощения, чтобы даже самый неопытный пользователь смог ее использовать.
Главная форма должна иметь поле ввода вопросов - данное
требование реализовано, программа имеет поле ввода вопросов.
Главная форма должна иметь поле ввода ответов - требование
реализовано, в программе есть поле ввода ответов.
Главная форма должна иметь возможность добавлять количество
вариантов ответов - с помощью кнопок +/ - можно добавлять или удалять поля
ввода ответов.
Главная форма должна реализовывать выбор правильного ответа -
выбор правильного ответа реализуется с помощью постановки галочки напротив
правильного варианта ответа.
Главная форма должна сохранять изменения в базе данных -
нажав кнопке «добавить», вы сохраняете все изменения в базе данных.
Главная форма должна реализовывать возможность удаления базы
данных - нажав кнопку «удалить», вы удаляете базу данных, что бы предотвратить
случайное удаление базы данных, система выдает сообщение «при повторном нажатии
кнопки «удалить», база данных будет удалена безвозвратно». Если вы все-таки,
хотите удалить базу данных, следует повторно нажать кнопку.
Главная форма должна реализовывать возможность присвоения
вопросу уровня сложности - ниспадающий список реализует данную функцию.
Все требования, предъявляемые к главной форме, реализованы,
следовательно, ее можно назвать функциональной.
5. Руководство пользователя
Данная программа предполагает заполнение вопросами адаптивного
тестирования базы данных.
Программа работает в операционной системе Windows, не требует установки.
Запустив программу, пользователь увидит окошко,
представленное на рисунке 4.2.1. Для работы с программой следует произвести
следующие действия:
· В поле «название теста» отображается тест,
в котором вводятся вопросы.
· В поле «вопрос» вводится текст вопроса.
· В поле «ввода ответов» вводятся варианты
ответов, с правой стороны в специальном поле отмечается галочкой правильный
вариант.
· Если требуется добавить или удалить
варианты ответов, то, используя кнопочки +/-, реализуем задуманное.
· В поле «сложность вопроса» выбираем из
ниспадающего списка уровень сложности, которым обладает, по вашему мнению,
вопрос.
· После заполнения всех полей, нажимаем
кнопку «добавить».
· Добавленные вопросы отображаются в форме.
· Добавленные вопросы сохраняются в базе
данных.
После этой процедуры будет создан новый тест с одним
вопросом. Аналогичные действия проводятся для заполнения данного теста большим
количеством вопросов.
Если требуется удалить тест, то, выбрав нужный тест, следует
нажать кнопку «удалить». После таких действий тест со всеми своими вопросами
будет удален.
Так же руководство пользователя отображено в файле Readme.
Рисунок 5.1. Схема работы с программой
6. Тестирование программного средства
.1 Определение сущностной эффективности
Сущностная эффективность - показатель того, насколько данный
интерфейс близок к идеалу, выраженному сущностной моделью use case. Сущностная эффективность измеряется отношением длины
сущностного описания к длине воплощенного сценария, т.е. отношением количества
шагов по описанию к количеству шагов, которые пользователю реально необходимо
будет сделать для решения задачи:
Шаг - одно дискретное действие пользователя:
· ввод данных в одно поле, оканчивающийся переводом
строки, табуляцией или другим разделителем полей;
· пропуск ненужного поля или элемента
управления путем нажатия клавиши табуляции или другой клавиши навигации;
· переход от работы с клавиатурой к работе с
указательным устройством или обратно;
· выполнение действия посредством щелчка или
двойного щелчка указательным устройством на инструменте, командной кнопке или
другом визуальном объекте;
· выбор меню или элемента меню с помощью
указательного устройства;
· выполнение действия нажатием горячей
клавиши или последовательности клавиш, включая активацию меню специальной
клавишей;
Все действия пользователя выполняются, значит систему можно
назвать эффективной.
6.2 Тестирование программного средства
Для проверки работоспособности программного средства и
наличия в нем ошибок и неточностей следует провести тестирование.
Определение тестирования - это процесс выполнения программы с
целью обнаружения в ней ошибок. Такое определение цели стимулирует поиск ошибок
в программах. Отсюда также ясно, что «удачным» тестом является такой, на
котором выполнение программы завершилось с ошибкой. Напротив, «неудачным можно
назвать тест, не позволивший выявить ошибку в программе.
Программное средство тестировалось с помощью Rational Suite
TestStudio - пакета для комплексного тестирования надежности, функциональности,
рабочей нагрузки клиент-серверных, Java-, Web- и ERP-приложений. Использование
TestStudio позволяет интегрировать процессы тестирования и разработки,
управлять конфигурацией программных средств и процессом тестирования. Результат
- более эффективное тестирование приложений и высокое качество готовых
программных средств.
Для тестирования программы был выбран семантический контроль
- это проверка программы по ее тексту (без выполнения) с помощью
инструментальных средств. Наиболее известной формой статического контроля
является синтаксический контроль программы с помощью компилятора, при котором
проверяется соответствие текста программы синтаксическим правилам языка
программирования.
Сообщения компилятора обычно делятся на несколько групп в
зависимости от уровня тяжести нарушения синтаксиса языка программирования:
информационные сообщения и предупреждения, при обнаружении
которых компилятор, как правило, строит корректный объектный код и дальнейшая
работа с программой (компоновка, выполнение) возможна (тем не менее сообщения
этой группы также должны тщательно анализироваться, так как их появление также
может свидетельствовать об ошибке в программе - например, из-за неверного
понимания синтаксиса языка);
сообщения об ошибках, при обнаружении которых компилятор
пытается их исправить и строит объектный код, но его корректность маловероятна
и дальнейшая работа с ним скорее всего не возможна;
сообщения о серьезных ошибках, при наличии которых
построенный компилятором объектный код заведомо некорректен и его дальнейшее
использование невозможно;
сообщения об ошибках, обнаружение которых привело к
прекращению синтаксического контроля и построения объектного кода.
Еще одной формой семантического контроля является контроль
правдоподобия программы, то есть выявление в ее тексте конструкций, которые
хотя и синтаксически корректны, но скорее всего содержат ошибку или
свидетельствуют о ней.
Основные неправдоподобные ситуации:
использование в программе неинициализированных переменных (то
есть переменных, не получивших начального значения);
наличие в программе описаний элементов, переменных, процедур,
меток, файлов, в дальнейшем не используемых в ее тексте;
наличие в тексте программы фрагментов, никогда не
выполняющихся;
наличие в тексте программы переменных, ни разу не
используемых для чтения после присваивая им значений;
наличие в тексте программы заведомо бесконечных циклов;
На первом этапе семантического контроля ошибки кода не были
обнаружены. На втором этапе обнаружилось присутствие в тексте программы
неправдоподобных конструкций, которые не приводят к ее неправильной работе,
исправление этого фрагмента повысило ясность и эффективность программы, т.е.
благотворно сказалось на ее качестве.
Заключение
В заключение хотелось бы отметить, что адаптивное
тестирование - такой подход к компьютерному тестированию, который фактически
позволяет привнести в стандартные групповые тесты элементы индивидуализации,
учета индивидуальных особенностей данного испытуемого в процессе тестирования.
Границы применения адаптивного тестирования не замыкаются на проверке знаний
или способностей. В принципе, подобный подход с определенными модификациями
вполне применим и для тестирования сферы интересов, установок и черт личности.
В результате проведенной работы были рассмотрены актуальность
и основные принципы подсистемы адаптивных тестов в открытой системе
дистанционного образования. Спроектирована и смоделирована система, позволяющая
создавать базу данных адаптивных тестов, позволяющую в дальнейшим использовать
при тестировании.
Программа была протестирована и отлажена, ошибки были
исправлены, можно сделать вывод, что программа готова к использованию.
Хотелось бы надеяться, что предложенная система подготовки
адаптивного тестирования, будет успешно применяться в учебных заведениях.
Приложение А
Листинг программы
namespace WindowsApplication1
{partial class Form1
{ /// <summary>
/// Required designer variable.
/// </summary>System.
ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name= «disposing»>true if
managed resources should be disposed; otherwise, false.</param>override
void Dispose (bool disposing)
{if (disposing && (components!= null))
{components. Dispose();}. Dispose(disposing);}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not
modify
/// the contents of this method with the code
editor.
/// </summary>void InitializeComponent()
{this.groupBox1 = new System. Windows. Forms.
GroupBox();.label5 = new System. Windows. Forms. Label();.button1 = new System.
Windows. Forms. Button();.comboBox2 = new System. Windows. Forms.
ComboBox();.label4 = new System. Windows. Forms. Label();.textBox2 = new
System. Windows. Forms. TextBox();.label3 = new System. Windows. Forms. Label();.label2
= new System. Windows. Forms. Label();.dataGridView1 = new System. Windows.
Forms. DataGridView();.label1 = new System. Windows. Forms. Label();.comboBox1
= new System. Windows. Forms. ComboBox();.button5 = new System. Windows. Forms.
Button();.button4 = new System. Windows. Forms. Button();.button3 = new System.
Windows. Forms. Button();.textBox1 = new System. Windows. Forms.
TextBox();.menuStrip1 = new System. Windows. Forms.
MenuStrip();.toolStripMenuItem1 = new System. Windows. Forms. ToolStripMenuItem();.toolStripMenuItem2
= new System. Windows. Forms. ToolStripMenuItem();.groupBox2 = new System.
Windows. Forms. GroupBox();.textBox6 = new System. Windows. Forms.
TextBox();.textBox5 = new System. Windows. Forms. TextBox();.textBox4 = new
System. Windows. Forms. TextBox();.label6 = new System. Windows. Forms.
Label();.button6 = new System. Windows. Forms. Button();.button2 = new System.
Windows. Forms. Button();.textBox3 = new System. Windows. Forms.
TextBox();.comboBox3 = new System. Windows. Forms. ComboBox();.comboBox4 = new
System. Windows. Forms. ComboBox();.textBox7 = new System. Windows. Forms.
TextBox();.comboBox5 = new System. Windows. Forms. ComboBox();.label7 = new
System. Windows. Forms. Label();.groupBox1. SuspendLayout(); ((System. ComponentModel.ISupportInitialize)
(this.dataGridView1)).BeginInit();.menuStrip1. SuspendLayout();.groupBox2.
SuspendLayout();. SuspendLayout();
//
// groupBox1
// .groupBox1. Controls. Add
(this.label5);.groupBox1. Controls. Add (this.button1);.groupBox1. Controls.
Add (this.comboBox2);.groupBox1. Controls. Add (this.label4);.groupBox1.
Controls. Add (this.textBox2);.groupBox1. Controls. Add
(this.label3);.groupBox1. Controls. Add (this.label2);.groupBox1. Controls. Add
(this.dataGridView1);.groupBox1. Controls. Add (this.label1);.groupBox1.
Controls. Add (this.comboBox1);.groupBox1. Controls. Add
(this.button5);.groupBox1. Controls. Add (this.button4);.groupBox1. Controls.
Add (this.button3);.groupBox1. Controls. Add (this.textBox1);.groupBox1. Location
= new System. Drawing. Point (0, 27);.groupBox1. Name = «groupBox1»;.groupBox1.
Size = new System. Drawing. Size (1016, 710);.groupBox1. TabIndex =
0;.groupBox1. TabStop = false;.groupBox1. Enter += new System. EventHandler
(this.groupBox1_Enter);
//
// label5
// .label5. AutoSize = true;.label5. Location =
new System. Drawing. Point (543, 194);.label5. Name = «label5»;.label5. Size =
new System. Drawing. Size (34, 13);.label5. TabIndex = 18;.label5. Text =
«Тест:»;
//
// button1
// .button1. Location = new System. Drawing.
Point (848, 189);.button1. Name = «button1»;.button1. Size = new System.
Drawing. Size (75, 23);.button1. TabIndex = 17;.button1. Text =
«Удалить»;.button1. UseVisualStyleBackColor = true;.button1. Click += new
System. EventHandler (this.button1_Click);
//
// comboBox2
// .comboBox2. FormattingEnabled =
true;.comboBox2. Location = new System. Drawing. Point (583, 191);.comboBox2.
Name = «comboBox2»;.comboBox2. Size = new System. Drawing. Size (250,
21);.comboBox2. TabIndex = 16;.comboBox2. SelectedIndexChanged += new System.
EventHandler (this.comboBox2_SelectedIndexChanged);
//
// label4
// .label4. AutoSize = true;.label4. Location =
new System. Drawing. Point (204, 11);.label4. Name = «label4»;.label4. Size =
new System. Drawing. Size (91, 13);.label4. TabIndex = 15;.label4. Text =
«Название теста:»;
//
// textBox2
// .textBox2. Location = new System. Drawing.
Point (316, 8);.textBox2. Name = «textBox2»;.textBox2. Size = new System.
Drawing. Size (688, 20);.textBox2. TabIndex = 14;
//
// label3
// .label3. AutoSize = true;.label3. Location =
new System. Drawing. Point (90, 194);.label3. Name = «label3»;.label3. Size =
new System. Drawing. Size (205, 13);.label3. TabIndex = 13;.label3. Text =
«Варианты ответа с указанием верного»;
//
// label2
// .label2. AutoSize = true;.label2. Location =
new System. Drawing. Point (12, 16);.label2. Name = «label2»;.label2. Size =
new System. Drawing. Size (47, 13);.label2. TabIndex = 12;.label2. Text =
«Вопрос:»;
//
// dataGridView1
// .dataGridView1. AllowUserToAddRows =
false;.dataGridView1. AutoSizeColumnsMode = System. Windows. Forms.
DataGridViewAutoSizeColumnsMode. Fill;.dataGridView1.
ColumnHeadersHeightSizeMode = System. Windows. Forms.
DataGridViewColumnHeadersHeightSizeMode. AutoSize;.dataGridView1. Location =
new System. Drawing. Point (12, 91);.dataGridView1. MultiSelect =
false;.dataGridView1. Name = «dataGridView1»;.dataGridView1. ReadOnly =
true;.dataGridView1. Size = new System. Drawing. Size (992, 92);.dataGridView1.
TabIndex = 11;.dataGridView1. UserDeletingRow += new System. Windows. Forms.
DataGridViewRowCancelEventHandler
(this.dataGridView1_UserDeletingRow);.dataGridView1. RowEnter += new System.
Windows. Forms. DataGridViewCellEventHandler (this.dataGridView1_RowEnter);.dataGridView1.
ColumnAdded += new System. Windows. Forms. DataGridViewColumnEventHandler
(this.dataGridView1_ColumnAdded);
//
// label1
// .label1. AutoSize = true;.label1. Location =
new System. Drawing. Point (313, 194);.label1. Name = «label1»;.label1. Size =
new System. Drawing. Size (0, 13);.label1. TabIndex = 10;
//
// comboBox1
// .comboBox1. FormattingEnabled =
true;.comboBox1. Location = new System. Drawing. Point (65, 7);.comboBox1. Name
= «comboBox1»;.comboBox1. Size = new System. Drawing. Size (121,
21);.comboBox1. TabIndex = 8;.comboBox1. Visible = false;
//
// button5
// .button5. Location = new System. Drawing.
Point (929, 189);.button5. Name = «button5»;.button5. Size = new System.
Drawing. Size (75, 23);.button5. TabIndex = 7;.button5. Text =
«Добавить»;.button5. UseVisualStyleBackColor = true;.button5. Click += new
System. EventHandler (this.button5_Click);
//
// button4
// .button4. Location = new System. Drawing.
Point (46, 189);.button4. Name = «button4»;.button4. Size = new System.
Drawing. Size (28, 23);.button4. TabIndex = 4;.button4. Text = «-»;.button4.
UseVisualStyleBackColor = true;.button4. Click += new System. EventHandler
(this.button4_Click);
//
// button3
// .button3. Location = new System. Drawing.
Point (12, 189);.button3. Name = «button3»;.button3. Size = new System.
Drawing. Size (28, 23);.button3. TabIndex = 3;.button3. Text = «+»;.button3.
UseVisualStyleBackColor = true;.button3. Click += new System. EventHandler
(this.button3_Click);
//
// textBox1
// .textBox1. Location = new System. Drawing.
Point (12, 35);.textBox1. MaxLength = 255;.textBox1. Multiline =
true;.textBox1. Name = «textBox1»;.textBox1. Size = new System. Drawing. Size
(992, 50);.textBox1. TabIndex = 2;
//
// menuStrip1
// .menuStrip1. Items. AddRange (new System.
Windows. Forms. ToolStripItem[]
{.toolStripMenuItem1,.toolStripMenuItem2});.menuStrip1. Location = new System.
Drawing. Point (0, 0);.menuStrip1. Name = «menuStrip1»;.menuStrip1. Size = new
System. Drawing. Size (1016, 24);.menuStrip1. TabIndex = 2;.menuStrip1. Text =
«menuStrip1»;.menuStrip1. Visible = false;
//
// toolStripMenuItem1
// .toolStripMenuItem1. Name =
«toolStripMenuItem1»;.toolStripMenuItem1. Size = new System. Drawing. Size
(106, 20);.toolStripMenuItem1. Text = «Редактор тестов»;.toolStripMenuItem1.
Click += new System. EventHandler (this.toolStripMenuItem1_Click);
//
// toolStripMenuItem2
// .toolStripMenuItem2. Name =
«toolStripMenuItem2»;.toolStripMenuItem2. Size = new System. Drawing. Size (50,
20);.toolStripMenuItem2. Text = «Тесты»;.toolStripMenuItem2. Click += new
System. EventHandler (this.toolStripMenuItem2_Click);
//
// groupBox2
// .groupBox2. Controls. Add
(this.textBox6);.groupBox2. Controls. Add (this.textBox5);.groupBox2. Controls.
Add (this.textBox4);.groupBox2. Controls. Add (this.label6);.groupBox2.
Controls. Add (this.button6);.groupBox2. Controls. Add
(this.button2);.groupBox2. Controls. Add (this.textBox3);.groupBox2. Controls.
Add (this.comboBox3);.groupBox2. Location = new System. Drawing. Point (1006,
724);.groupBox2. Name = «groupBox2»;.groupBox2. Size = new System. Drawing.
Size (10, 10);.groupBox2. TabIndex = 3;.groupBox2. TabStop = false;
//
// textBox6
// .textBox6. Location = new System. Drawing.
Point (583, 32);.textBox6. Name = «textBox6»;.textBox6. Size = new System.
Drawing. Size (129, 20);.textBox6. TabIndex = 7;.textBox6. Visible = false;
//
// textBox5
// .textBox5. Location = new System. Drawing. Point
(444, 33);.textBox5. Name = «textBox5»;.textBox5. Size = new System. Drawing.
Size (100, 20);.textBox5. TabIndex = 6;.textBox5. Visible = false;
//
// textBox4
// .textBox4. Location = new System. Drawing.
Point (316, 32);.textBox4. Name = «textBox4»;.textBox4. Size = new System.
Drawing. Size (100, 20);.textBox4. TabIndex = 5;.textBox4. Visible = false;
//
// label6
// .label6. AutoSize = true;.label6. Location =
new System. Drawing. Point (12, 29);.label6. Name = «label6»;.label6. Size =
new System. Drawing. Size (85, 13);.label6. TabIndex = 4;.label6. Text =
«Выберите тест:»;
//
// button6
// .button6. Location = new System. Drawing.
Point (929, 160);.button6. Name = «button6»;.button6. Size = new System.
Drawing. Size (75, 23);.button6. TabIndex = 3;.button6. Text =
«Далее»;.button6. UseVisualStyleBackColor = true;.button6. Click += new System.
EventHandler (this.button6_Click);
//
// button2
// .button2. Location = new System. Drawing.
Point (983, 39);.button2. Name = «button2»;.button2. Size = new System.
Drawing. Size (10, 10);.button2. TabIndex = 2;.button2. Text =
«button2»;.button2. UseVisualStyleBackColor = true;.button2. Visible =
false;.button2. Click += new System. EventHandler (this.button2_Click);
//
// textBox3
// .textBox3. Font = new System. Drawing. Font
(«Microsoft Sans Serif», 12F, System. Drawing. FontStyle. Regular, System.
Drawing. GraphicsUnit. Point, ((byte) (204)));.textBox3. Location = new System.
Drawing. Point (15, 59);.textBox3. Multiline = true;.textBox3. Name = «textBox3»;.textBox3.
ReadOnly = true;.textBox3. Size = new System. Drawing. Size (989,
63);.textBox3. TabIndex = 1;
//
// comboBox3
// .comboBox3. FormattingEnabled =
true;.comboBox3. Location = new System. Drawing. Point (115, 26);.comboBox3.
Name = «comboBox3»;.comboBox3. Size = new System. Drawing. Size (168,
21);.comboBox3. TabIndex = 0;.comboBox3. SelectedIndexChanged += new System.
EventHandler (this.comboBox3_SelectedIndexChanged);
//
// comboBox4
// .comboBox4. FormattingEnabled =
true;.comboBox4. Location = new System. Drawing. Point (872, 39);.comboBox4.
Name = «comboBox4»;.comboBox4. Size = new System. Drawing. Size (121,
21);.comboBox4. TabIndex = 4;.comboBox4. Visible = false;
//
// textBox7
// .textBox7. Location = new System. Drawing.
Point (498, 39);.textBox7. Name = «textBox7»;.textBox7. Size = new System.
Drawing. Size (100, 20);.textBox7. TabIndex = 6;.textBox7. Visible = false;
//
// comboBox5
// .comboBox5. FormattingEnabled = true;.comboBox5.
Items. AddRange (new object[] {
«1»,
«2»,
«3»,
«4»,
«5»,
«6»,
«7»,
«8»,
«9»,
«10»});.comboBox5. Location = new System.
Drawing. Point (126, 7);.comboBox5. Name = «comboBox5»;.comboBox5. Size = new
System. Drawing. Size (121, 21);.comboBox5. TabIndex = 7;
//
// label7
// .label7. AutoSize = true;.label7. Location =
new System. Drawing. Point (12, 11);.label7. Name = «label7»;.label7. Size =
new System. Drawing. Size (108, 13);.label7. TabIndex = 8;.label7. Text =
«Сложность вопроса»;
//
// Form1
#endregionSystem. Windows. Forms. GroupBox
groupBox1;System. Windows. Forms. MenuStrip menuStrip1;System. Windows. Forms.
ToolStripMenuItem toolStripMenuItem1;System. Windows. Forms. ToolStripMenuItem
toolStripMenuItem2;System. Windows. Forms. TextBox textBox1;System. Windows.
Forms. Button button4;System. Windows. Forms. Button button3;System. Windows.
Forms. Button button5;System. Windows. Forms. ComboBox comboBox1;System.
Windows. Forms. Label label1;System. Windows. Forms. DataGridView
dataGridView1;System. Windows. Forms. Label label3;System. Windows. Forms.
Label label2;System. Windows. Forms. ComboBox comboBox2;System. Windows. Forms.
Label label4;System. Windows. Forms. TextBox textBox2;System. Windows. Forms.
Button button1;System. Windows. Forms. Label label5;System. Windows. Forms.
GroupBox groupBox2;System. Windows. Forms. ComboBox comboBox3;System. Windows.
Forms. TextBox textBox3;System. Windows. Forms. Button button2;System. Windows.
Forms. Button button6;System. Windows. Forms. Label label6;System. Windows.
Forms. TextBox textBox5;System. Windows. Forms. TextBox textBox4;System.
Windows. Forms. TextBox textBox6;System. Windows. Forms. ComboBox
comboBox4;System. Windows. Forms. TextBox textBox7;System. Windows. Forms.
ComboBox comboBox5;System. Windows. Forms. Label label7;}}.csSystem;System.
Collections. Generic;System. ComponentModel;System. Data;System.
Drawing;System. Text;System. Windows. Forms;System. Data.
OleDb;WindowsApplication1
{public partial class Form1: Form
{public Form1 ()
{InitializeComponent();}chkTest = false;click =
false;index = 0;X = 10;Y = 225;count = 0;CntrlsCnt = 0;End = 0;check = false;ck
= false;k = 0;kk = 0;kkk = 0;TextBox tx;Label lb;CheckBox cb;RadioButton
rb;OleDbDataAdapter adapter;DataSet DSet;DataSet DSVopros;DataRow row;Rand =
0;schet = 0;id_vopr;id_test;lastindx = 0;position = 0;MaxPosition = 0;[]
array;[] array3;[] array4;[] array5;void toolStripMenuItem1_Click (object
sender, EventArgs e)
{DeletControls();
.groupBox1. Visible = true;.groupBox2. Visible =
false;}void toolStripMenuItem2_Click (object sender, EventArgs e)
{if (comboBox3. Text!= «») {
// End = 0;
// position = 0;
//StartTest();. Text = «»;
();. Text = «»;. SelectedValue = «»;
//AddControlsForQuestions();
//BindQuestion();}.groupBox2. Visible =
true;.groupBox1. Visible = false;}void DGVBinding()
{try
{if (comboBox2. Items. Count > 0)
{OleDbConnection thisConnection = new
OleDbConnection (ConStr. GetConString());. Open();query0 = «Select id_test From
Test Where (test = @test)»;cmd0 = new OleDbCommand (query0, thisConnection);.
Parameters. AddWithValue («@test», comboBox2. SelectedItem. ToString());thisReader
= cmd0. ExecuteReader();(thisReader. Read())
{id_test = thisReader. GetValue(0).ToString();}.
Close();query = «Select id_vopr, vopr, lev From Vopros Where (id_test =
@id_test)»;
OleDbCommand cmd = new OleDbCommand (query,
thisConnection);
cmd. Parameters. AddWithValue («@id_test»,
id_test);= new OleDbDataAdapter(cmd);= new DataSet();. Fill (DSet, «Vopros»);.
DataSource = DSet. Tables [«Vopros»];. Close();_test = «»;}
{dataGridView1. DataSource = null;. Text = «»;}}{
}}void AddValue()
{label1. Text = «»;. Items. Clear();num = 0;cnt =
count + 1;(int i = 0; i < k; i++)
{if ((groupBox1. Controls [count + num] as
TextBox).Text!= «»)
{check = true;}
{check = false;;}((groupBox1. Controls [cnt +
num] as CheckBox).Checked)
{ck = true;}+= 2;}= 0;(textBox1. Text!= «»
&& textBox2. Text!= «» && check == true && ck == true)
{lastindx = 0;
{OleDbConnection thisConnection = new
OleDbConnection (ConStr. GetConString());. Open();
(string list in comboBox2. Items)
{if (list == textBox2. Text)
{chkTest = true;;}
{lastindx++;= false;}
}(chkTest == false)
{string qr = «INSERT INTO Test (test) VALUES
(@test)»;com = new OleDbCommand (qr, thisConnection);. Parameters. AddWithValue
(«@test», textBox2. Text);. ExecuteNonQuery();}qr1 = «Select id_test From Test
Where (test = @test)»;com1 = new OleDbCommand (qr1, thisConnection);.
Parameters. AddWithValue («@test», textBox2. Text);thisRed1 = com1.
ExecuteReader();(thisRed1. Read())
{_test = thisRed1. GetValue(0).ToString();}
thisRed1. Close();
query = «INSERT INTO Vopros (Vopr, id_test, lev)
VALUES (@Vopr, @id_test, @lev)»;cmd = new OleDbCommand (query,
thisConnection);. Parameters. AddWithValue («@Vopr», textBox1. Text);.
Parameters. AddWithValue («@id_test», id_test);. Parameters. AddWithValue
(«@lev», comboBox5. SelectedItem. ToString());. ExecuteNonQuery();query1 =
«Select id_vopr From Vopros Where (id_test = @id_test)»;cmd1 = new OleDbCommand
(query1, thisConnection);. Parameters. AddWithValue («@id_test»,
id_test);thisReader1 = cmd1. ExecuteReader();(thisReader1. Read())
{id_vopr = thisReader1. GetValue(0).ToString();}.
Close();(int i = 0; i < k; i++)
{string query2 = «INSERT INTO Otvet (id_vopr,
id_test, otv) VALUES (@id_vopr, @id_test, @otv)»;cmd2 = new OleDbCommand
(query2, thisConnection);. Parameters. AddWithValue («@id_vopr», id_vopr);.
Parameters. AddWithValue («@id_test», id_test);. Parameters. AddWithValue
(«@otv», (groupBox1. Controls [count + num] as TextBox).Text);+= 2;.
ExecuteNonQuery();
}= 0;(int i = 0; i < k; i++)
{((groupBox1. Controls [cnt + num] as CheckBox).Checked
== true)
{string query3 = «SELECT id_otv FROM Otvet WHERE
(id_vopr = @id_vopr AND id_test = @id_test AND otv = @otv)»;
cmd3 = new OleDbCommand (query3,
thisConnection);. Parameters. AddWithValue («@id_vopr», id_vopr);. Parameters.
AddWithValue («@id_test», id_test);. Parameters. AddWithValue («@otv»,
groupBox1. Controls [count + num].Text);thisReader3 = cmd3.
ExecuteReader();(thisReader3. Read())
{comboBox1. Items. Add (thisReader3.
GetValue(0).ToString());
}. Close();
}+= 2;
}(string LI in comboBox1. Items)
{query4 = «INSERT INTO Rez (id_vopr, id_otv,
id_test) VALUES (@id_vopr, @id_otv, @id_test)»;cmd4 = new OleDbCommand (query4,
thisConnection);. Parameters. AddWithValue («@id_vopr», id_vopr);. Parameters.
AddWithValue («id_otv», LI. ToString());. Parameters. AddWithValue («@id_test»,
id_test);. ExecuteNonQuery();
}. Close();= 0;();
}
{
}= false;= false;
}
{. Text = «Вы заполнили не все поля!!!»;
}
}void DeletControls()
{. Text = «»;kv = groupBox1. Controls. Count -
1;(groupBox1. Controls. Count > count)
{groupBox1. Controls. RemoveAt(kv);-;
}= 0;= 10;= 225;(int i = 0; i < 2; i++)
{AddControls();}}void AddControls()
{if (Y + 100 <= this. Size. Height)
{tx = new TextBox();. Width = 930;. Multiline =
true;. Height = 50;. Location = new Point (X, Y);. Name = «tx» +
this.groupBox1. Controls. Count. ToString();. MaxLength = 255;
= new CheckBox();. Location = new Point (X + 960,
Y + 10);. Name = «cb» + this.groupBox1. Controls. Count. ToString();.groupBox1.
Controls. Add(tx);.groupBox1. Controls. Add(cb);+= 60;++;}}void button3_Click
(object sender, EventArgs e)
{AddControls();}void button4_Click (object
sender, EventArgs e)
{if (count + 4 <= this.groupBox1. Controls.
Count - 1)
{this.groupBox1. Controls. RemoveAt (this.groupBox1.
Controls. Count - 1);.groupBox1. Controls. RemoveAt (this.groupBox1. Controls.
Count - 1);-= 60;;}}void Form1_Load (object sender, EventArgs e)
{. SelectedIndex = 0;= this.groupBox1. Controls.
Count;();(comboBox2. Items. Count > 0)
{textBox2. Text = comboBox2. SelectedItem.
ToString();}(int i = 0; i < 2; i++)
{AddControls();}();}void BindTests()
{comboBox2. Items. Clear();. Items. Clear();.
Text = «»;thisConnection = new OleDbConnection (ConStr. GetConString());.
Open();query = «Select test From Test»;cmd = new OleDbCommand (query,
thisConnection);thisReader = cmd. ExecuteReader();(thisReader. Read())
{comboBox2. Items. Add (thisReader.
GetValue(0).ToString());. Items. Add (thisReader. GetValue(0).ToString());}.
Close();. Close();(comboBox2. Items. Count > 0)
{try
{comboBox2. SelectedIndex = lastindx;}
{
}
}
}void groupBox1_Enter (object sender, EventArgs
e)
{
}void button5_Click (object sender, EventArgs e)
{= false;();();();
}void dataGridView1_UserDeletingRow (object
sender, DataGridViewRowCancelEventArgs e)
{try
{thisConnection = new OleDbConnection (ConStr.
GetConString());. Open();query = «Delete From Vopros Where (id_vopr =
@id_vopr)»;cmd = new OleDbCommand (query, thisConnection);. Parameters.
AddWithValue («@id_vopr», dataGridView1. Rows[index].Cells[0].Value.
ToString());. ExecuteNonQuery();. Close();
}
{
}
}void dataGridView1_RowEnter (object sender,
DataGridViewCellEventArgs e)
{index = e. RowIndex;}void
dataGridView1_ColumnAdded (object sender, DataGridViewColumnEventArgs e)
{if (e. Column. Name == «id_vopr»)
{e. Column. Visible = false;}(e. Column. Name ==
«vopr»)
{e. Column. HeaderText = «ВОПРОСЫ:»;. Column.
MinimumWidth = 850;}(e. Column. Name == «lev»)
{e. Column. HeaderText = «СЛОЖНОСТЬ:»;}}void
comboBox2_SelectedIndexChanged (object sender, EventArgs e)
{textBox2. Text = comboBox2. SelectedItem.
ToString();= comboBox2. SelectedIndex;();}void button1_Click (object sender,
EventArgs e)
{try
{(click == false && comboBox2. Text!= «»)
{MessageBox. Show («Повторное нажатие клавиши
приведет к удалению выбранного вами теста!!!»);= true;
}
{(click == true)
{OleDbConnection thisConnection = new
OleDbConnection (ConStr. GetConString());. Open();query = «Delete From Test
Where (test = @test)»;cmd = new OleDbCommand (query, thisConnection);.
Parameters. AddWithValue («@test», comboBox2. SelectedItem. ToString());.
ExecuteNonQuery();. Close();. Text = «»;();();= false;
}
}
}
{
}
}
void StartTest()
{
{thisConnection = new OleDbConnection (ConStr.
GetConString());. Open();qr1 = «Select id_test From Test Where (test =
@test)»;com1 = new OleDbCommand (qr1, thisConnection);. Parameters.
AddWithValue («@test», comboBox3. SelectedItem. ToString());thisRed1 = com1.
ExecuteReader();(thisRed1. Read())
{id_test = thisRed1. GetValue(0).ToString();}. Close();query
= «Select id_vopr, vopr From Vopros Where (id_test = @id_test)»;cmd = new
OleDbCommand (query, thisConnection);. Parameters. AddWithValue («@id_test»,
id_test);AdapterForVopros = new OleDbDataAdapter(cmd);= new DataSet();. Fill
(DSVopros, «Vopros»);. Close();= 0;(DataRow rw in DSVopros. Tables
[«Vopros»].Rows)
{MaxPosition++;}= new
Random().Next(MaxPosition);rn = new Random();= new int[MaxPosition];(int i = 0;
i < MaxPosition; i++)
{Rand = rn. Next(MaxPosition);[i] = Rand;(i >=
1)
{for (int j = 0; j < i; j++)
{if (Rand == array[j])
{i - ;}
}
}
}(int i = 0; i < MaxPosition; i++)
{textBox3. Text += array[i].ToString() +
«»;}(MaxPosition > 0)
{row = DSVopros. Tables [«Vopros»].Rows
[array[position]];_vopr = row[0].ToString();. Text = row[1].ToString();}
}
{
}
}void AddControlsForQuestions()
{try
{X = 10;= 225;= 0;= 0;= groupBox2. Controls.
Count;thisConnection = new OleDbConnection (ConStr. GetConString());.
Open();query = «Select id_rez From Rez Where (id_test = @id_test AND id_vopr =
@id_vopr)»;cmd = new OleDbCommand (query, thisConnection);
. Parameters. AddWithValue («@id_test»,
id_test);. Parameters. AddWithValue («@id_vopr», id_vopr);thisReader = cmd.
ExecuteReader();
while (thisReader. Read())
{kk++;
}= new int[kk];. Close();query1 = «Select id_otv
From Otvet Where (id_test = @id_test AND id_vopr = @id_vopr)»;cmd1 = new
OleDbCommand (query1, thisConnection);. Parameters. AddWithValue («@id_test»,
id_test);. Parameters. AddWithValue («@id_vopr», id_vopr);thisReader1 = cmd1.
ExecuteReader();(thisReader1. Read())
{++;
}. Close();. Close();(kk > 1)
{(int i = 0; i < kkk; i++)
{= new Label();. Width = 930;. Height = 50;. Font
= new Font («Microsoft Sans Serif», 12);. Location = new Point (X, Y);. Name =
«lb» + this.groupBox2. Controls. Count. ToString();= new CheckBox();. Location
= new Point (X + 960, Y + 10);. Name = «cb» + this.groupBox2. Controls. Count.
ToString();.groupBox2. Controls. Add(lb);. Text = groupBox2. Controls. Count.
ToString();.groupBox2. Controls. Add(cb);. Text = groupBox2. Controls. Count.
ToString();+= 60;
}
}
{(int i = 0; i < kkk; i++)
{= new Label();. Width = 930;. Height = 50;. Font
= new Font («Microsoft Sans Serif», 12);. Location = new Point (X, Y);. Name =
«lb» + this.groupBox2. Controls. Count. ToString();= new RadioButton();.
Location = new Point (X + 960, Y + 10);. Name = «rb» + this.groupBox2.
Controls. Count. ToString();.groupBox2. Controls. Add(lb);. Text = groupBox2.
Controls. Count. ToString();.groupBox2. Controls. Add(rb);. Text = groupBox2. Controls.
Count. ToString();+= 60;
}
}}
{}
}void BindQuestion()
{try
{rn = new Random();[] array1 = new int
[groupBox2. Controls. Count - CntrlsCnt];[] array2 = new int[(groupBox2.
Controls. Count - CntrlsCnt) / 2];= new int[(groupBox2. Controls. Count -
CntrlsCnt) / 2];g = 1;(int z = 0; z < (groupBox2. Controls. Count -
CntrlsCnt) / 2; z++)
{array3 [z] = groupBox2. Controls [CntrlsCnt +
g].TabIndex;+= 2;
}(int j = 0; j < groupBox2. Controls. Count -
CntrlsCnt; j++)
{= rn. Next (CntrlsCnt, groupBox2. Controls.
Count);[j] = groupBox2. Controls[Rand].TabIndex;(j >= 1)
{for (int p = 0; p < j; p++)
{if (Rand == array1 [p])
{-;
}
}
}
}f = 0;(int r = 0; r < array1. Length; r++)
{(array1 [r]% 2 == 0)
{[f] = array1 [r];++;
}
}thisConnection = new OleDbConnection (ConStr.
GetConString());. Open();query1 = «Select id_otv, otv From Otvet Where (id_test
= @id_test AND id_vopr = @id_vopr)»;cmd = new OleDbCommand (query1,
thisConnection);. Parameters. AddWithValue («@id_test», id_test);. Parameters.
AddWithValue («@id_vopr», id_vopr);thisReader = cmd. ExecuteReader();i =
0;(thisReader. Read())
{
(groupBox2. Controls [array2 [i]] as Label).Text
= thisReader. GetValue(1).ToString();++;
}. Close();. Close();
}
{
}
}void DelControlsFromGrupBox2 ()
{
(groupBox2. Controls. Count > CntrlsCnt
&& CntrlsCnt!= 0)
{(int i = groupBox2. Controls. Count; i >
CntrlsCnt; i-)
{. Controls. RemoveAt (i - 1);
}
}
}void comboBox3_SelectedIndexChanged (object
sender, EventArgs e)
{. Enabled = false;. Enabled = false;= 0;= 0;.
Text = «»;();();();();
}void button6_Click (object sender, EventArgs e)
{();(position < MaxPosition - 1)
{++;= DSVopros. Tables [«Vopros»].Rows
[array[position]];. Text = row[1].ToString();_vopr =
row[0].ToString();();();();
}
}
void button2_Click (object sender, EventArgs e)
void RightAnsw()
{try
{(End!= MaxPosition)
{. Enabled = false;thisConnection = new
OleDbConnection (ConStr. GetConString());. Open();. Items. Clear();length =
0;(kk > 1)
{foreach (int t in array3)
{. Items. Add((groupBox2. Controls [t - 1] as
Label).Text);++;
}
}
}
{(int t in array3)
{((groupBox2. Controls[t] as
RadioButton).Checked)
{. Items. Add((groupBox2. Controls [t - 1] as
Label).Text);++;;
}
}
}= new int[length];l = 0;(string str in
comboBox4. Items)
{query = «Select id_otv From Otvet Where (id_test
= @id_test AND id_vopr = @id_vopr AND otv = @otv)»;cmd = new OleDbCommand
(query, thisConnection);. Parameters. AddWithValue («@id_test», id_test);.
Parameters. AddWithValue («@id_vopr», id_vopr);. Parameters. AddWithValue
(«@otv», str);thisReader = cmd. ExecuteReader();(thisReader. Read())
{[l] = thisReader. GetInt32 (0);++;
}. Close();
}query1 = «Select id_otv From Rez Where (id_test
= @id_test AND id_vopr = @id_vopr)»;cmd1 = new OleDbCommand (query1,
thisConnection);. Parameters. AddWithValue («@id_test», id_test);. Parameters.
AddWithValue («@id_vopr», id_vopr);thisReader1 = cmd1. ExecuteReader();u =
0;(thisReader1. Read())
{[u] = thisReader1. GetInt32 (0);++;
}. Close();right = 0;(array4. Length == array5.
Length)
{(int x in array4)
{(int y in array5)
{(x == y)
{++;
}
}
}
}(right == array5. Length)
{++;
}(End + 1 == MaxPosition)
{. Show («Тест: «+» «+comboBox3. SelectedItem.
ToString()+»\n\n»+«Количество вопросов в тесте: «+» «+MaxPosition.
ToString()+»\n\n»+«Вы ответили верно на: «+» «+schet. ToString());
. Enabled = true;. Enabled = true;. Enabled =
true;. Text = «»;();. Text = «»;. SelectedValue = «»;= 0;
}++;
}
}
{
}
}
}
}
программа семантический visual тестирование