Разработка подсистемы подготовки адаптивного тестирования в открытой системе дистанционного образования

 

Введение


В наши дни наблюдается повышенный интерес к проблеме компьютерного тестирования как нового вида объективного контроля знаний, умений и навыков обучаемых и одного из способов повышения качества образования. Среди различных подходов к тестированию наибольшее распространение получило адаптивное тестирование.

Адаптивное тестирование - это широкий класс методик тестирования, предусматривающих изменение последовательности, содержания и сложности предлагаемых заданий в самом процессе тестирования с учетом ответов испытуемого. К адаптивному тестированию обычно относят алгоритмы постановки заданий, построенные для пунктов теста, предварительно выбранных с помощью различных моделей и методов анализа пунктов. При таком обучении в процессе прохождения теста строится модель обучаемого, которая используется для генерации последующих заданий тестирования в зависимости от уровня обучаемого.

Ограниченность по времени и большие объемы информации затрудняют освоение учебного материала, регламентируемого программами и образовательными стандартами подготовки специалистов различных отраслей. Такая технология поддержки учебного процесса, как дистанционное обучение позволяет студентам изучать материал, строя процесс обучения и задавая темп получения знаний самостоятельно. Она дает возможность формировать обучающую среду исходя из различий в уровне подготовке и способностей к обучению.

Важной составляющей дистанционного обучения является контроль знаний. Несмотря на то, что к настоящему времени разработано достаточно большое количество методов и алгоритмов компьютерного тестирования, многие из них строятся на субъективных оценках тестовых заданий. Наиболее адекватными являются методы адаптивного тестирования, при использовании которых, оценка сложности каждого задания получается путем обработки статистической информации, что исключает субъективность конечной оценки знаний испытуемых.

Целью данной работы является создание программы подготовки адаптивного тестирования для эффективного контроля знаний при дистанционном обучении, которая должна состоять из самого программного средства и базы данных, в которую заносятся набранные вопросы и ответы к ним.

Данное программное средство будет использоваться преподавателями для составления проверочной базы для контроля знаний студентов.

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



1. Формирование требований к программному средству


.1 Выявление требований к информационной системе


В последние годы в практике образования складывается ситуация, под влиянием которой традиционное тестирование, осуществляемое с помощью стандартизированных тестов фиксированной длины, становится недостаточно эффективным. Результаты данных тестов не отражают полную картину знаний конкретного человека. Данную проблему можно описать в виде таблицы


Таблица 1.1.1. Описание проблемы

Проблема (описание проблемы)Результаты стандартизированных тестов фиксированной длины не отражают полную картину знаний конкретного человекаЗатрагиваетИспытуемые (студенты), сталкивающиеся с трудностью преодоления стандартизированных тестов; проверяющие (преподаватели), которым трудно находить индивидуальный подход к испытуемымЕе следствием являетсяЗатруднение оценивания знаний студентовУспешное решениеПрименение адаптивного тестирования. Смысл адаптивности в алгоритме тестирования в том, что тест адаптируется, настраивается на доступный испытуемому уровень сложности и тем самым быстрее находит его истинный тестовый балл.

Решить проблему контроля знаний поможет адаптивное тестирование - программа, которая изменяет порядок предъявления тестовых заданий в зависимости от результатов выполнения испытуемым уже предъявленных заданий. Когда опытный экзаменатор проводит устный экзамен, он фактически всегда применяет некий упрощенный интуитивный вариант адаптивного тестирования. После первых удачных ответов экзаменующегося экзаменатор старается задать вопрос посложнее, и если учащийся справляется и с этим сложным вопросом, то экзаменатор, вполне справедливо экономя свое собственное время, ставит учащемуся оценку «5». После первых же ошибочных ответов экзаменатор, наоборот, «снижает планку» - задает самый простой вопрос, и если учащийся не справляется и с этим простейшим вопросом, то экзаменатор ставит учащемуся оценку «2». Таким образом, для выявления крайних случаев требуется гораздо меньше тестовых заданий при обеспечении практически того же уровня надежности. Дольше времени надо потратить и большее количество вопросов задать в случае «середнячков», которые с одними заданиями справляются, а с другими нет, так как освоили учебную программу не полностью. Смысл адаптивности в алгоритме тестирования в том, что тест адаптируется, настраивается на доступный испытуемому уровень сложности и тем самым быстрее локализует его истинный тестовый балл на шкале измеряемого свойства.

Программа подготовки адаптивного тестирования предназначена для облегчения труда проверяющих (преподавателей), с помощью которой они смогут структурировать, сохранять и дополнять вопросы для последующего тестирования.


1.2 Диаграмма вариантов использования


Для повышения информативности требований следует оформить их в виде вариантов использования (use case).

Актер - это некто или нечто, обладающее активностью по отношению к программной системе. В нашем случае в роли актеров выступают преподаватель, инициирующий процесс подготовки адаптивных тестов и оператор программы, осуществляющий работу с программой.

Вариант использования в первом приближении можно рассматривать, просто, как функцию, реализуемую системой. В нашем случае - составление, редактирование, дополнение, удаление базы данных. Актер обозначается значком человечка, а вариант использования - овалом.

Рисунок 1.2.1. Диаграмма вариантов использования


2. Анализ предметной области


.1 Построение диаграммы потоков данных


Анализ входной и выходной информации является важным этапом проектирования программной системы. На данном этапе описываются исходные данные, основные источники исходных данных, а также источники данных, используемые для корректировки. Входные и выходные данные можно описать с использованием таблиц 2.1.1, 2.1.2.


Таблица 2.1.1. Входные данные

Источник данныхВходной параметрТип данныхОграниченияКафедра КИТП, преподаватели кафедрывопросытекстВопросы должны быть краткими, лаконичными, понятнымиответытекстОтветы должны содержать верные и неверные варианты, с обязательным указанием верногоуровень сложностичисловойУровень сложности варьируется от 1 до 3

Таблица 2.1.2. Выходные данные

Источник данныхВыходной параметрТип данныхОграниченияБаза данныхвопросытекстВопросы должны быть краткими, лаконичными, понятнымиответытекстОтветы должны содержать верные и неверные варианты, с обязательным указанием верногоуровень сложностичисловойУровень сложности варьируется от 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

// . AutoScaleDimensions = new System. Drawing. SizeF (6F, 13F);. AutoScaleMode = System. Windows. Forms. AutoScaleMode. Font;. ClientSize = new System. Drawing. Size (1016, 734);. Controls. Add (this.label7);. Controls. Add (this.comboBox5);. Controls. Add (this.textBox7);. Controls. Add (this.comboBox4);. Controls. Add (this.groupBox2);. Controls. Add (this.groupBox1);. Controls. Add (this.menuStrip1);. MainMenuStrip = this.menuStrip1;. MaximumSize = new System. Drawing. Size (1024, 768);. MinimumSize = new System. Drawing. Size (1024, 768);. Name = «Form1»;. Load += new System. EventHandler (this. Form1_Load);.groupBox1. ResumeLayout(false);.groupBox1. PerformLayout(); ((System. ComponentModel.ISupportInitialize) (this.dataGridView1)).EndInit();.menuStrip1. ResumeLayout(false);.menuStrip1. PerformLayout();.groupBox2. ResumeLayout(false);.groupBox2. PerformLayout();. ResumeLayout(false);. PerformLayout();}

#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 тестирование


Введение В наши дни наблюдается повышенный интерес к проблеме компьютерного тестирования как нового вида объективного контроля знаний, умений и навыков о

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ