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

Выявление требований к информационной системе. Диаграмма вариантов использования. Проектирование информационного обеспечения с использованием семантических моделей. Проектирование пользовательского интерфейса. Реализация программы на Visual Studio.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 28.08.2012
Размер файла 590,2 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Введение

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

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

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

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

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

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

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

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

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

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

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

Проблема (описание проблемы)

Результаты стандартизированных тестов фиксированной длины не отражают полную картину знаний конкретного человека

Затрагивает

Испытуемые (студенты), сталкивающиеся с трудностью преодоления стандартизированных тестов;

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

Ее следствием является

Затруднение оценивания знаний студентов

Успешное решение

Применение адаптивного тестирования. Смысл адаптивности в алгоритме тестирования в том, что тест адаптируется, настраивается на доступный испытуемому уровень сложности и тем самым быстрее находит его истинный тестовый балл.

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

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

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

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

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

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

Размещено на http://www.allbest.ru/

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

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

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. Проектирование программного средства

3.1 Проектирование информационного обеспечения с использованием семантических моделей

В ходе работы проводим анализ предметной области с целью выделения основных сущностей, их атрибутов, а также связей между сущностями. Основными компонентами ER-диаграмм являются:

· сущности - важные для предметной области объекты;

· атрибуты - их свойства;

· связи - отношения друг с другом

Сущность (Entity) - реальный либо воображаемый объект, имеющий существенное значение для рассматриваемой предметной области, информация о котором подлежит хранению

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

Связь (Relationship) - поименованная ассоциация между двумя сущностями, значимая для рассматриваемой предметной области. Связь - это ассоциация между сущностями, при которой, как правило, каждый экземпляр одной сущности, называемой родительской сущностью, ассоциирован с произвольным (в том числе нулевым) количеством экземпляров второй сущности, называемой сущностью-потомком, а каждый экземпляр сущности-потомка ассоциирован в точности с одним экземпляром сущности-родителя. Таким образом, экземпляр сущности-потомка может существовать только при существовании сущности родителя.

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

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

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

Размещено на http://www.allbest.ru/

Рисунок 3.1.1. Диаграмма «связь-сущность»

3.2 Проектирование пользовательского интерфейса

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

Чтобы интерфейс программы считался правильным, должны выполняться следующие условия:

· Доступность. Интерфейс программы подготовки адаптивного тестирования можно назвать доступным и интуитивно понятным, так как все поля для заполнения подписаны и расположены в порядке, в котором мы чаще всего задаем вопрос (вопрос, ответ к нему…)

· Эффективность. Наряду с доступностью программа не перегружена дополнительными формами, которые не будут мешать опытному пользователю постоянно использовать программу

· Контекст. Система должна удовлетворяет существующим реалиям и текущей среде эксплуатационного контекста, внутри которого она будет разворачиваться и применяться.

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

Размещено на http://www.allbest.ru/

Рисунок 3.2.1. Диаграмма пользовательского интерфейса

Карта навигации по контекстам отображает общую архитектуру интерфейса, моделируя связи между контекстами взаимодействия.

Размещено на http://www.allbest.ru/

Рисунок 3.2.2. Диаграмма карты навигации

4. Реализация программного средства

4.1 Описание структуры БД

Для создания базы данных (БД) использовалась система управления базами данных Microsoft Office Access.

В данной работе потребовалось составление нескольких таблиц: таблица тестов, вопросов, ответов и результатов.

Для создания таблицы провели следующие действия:

· запускаем Microsoft Office Access,

· в меню файл выбираем вкладку «создать»

· в пункте создание файла выбираем «создание новой базы данных»

· в появившемся окошке вводим название базы данных и сохраняем проект

· создаем таблицы в режиме конструктора

· для колонки id _test выбираем из списка числовые значения, для test - текстовые.

· в меню файл выбираем «сохранить как», вводим название таблицы и жмем сохранить.

Аналогично создаем остальные таблицы.

Таблица тестов (test: таблица) имеет следующий вид:

Рисунок 4.1.1. Таблица тестов

Данная таблица содержит следующие поля:

1. id _test - присваиваемый тесту персональный номер;

2. 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)

{

click = false;

AddValue();

DGVBinding();

}

Данная функция добавляет в базу данных информацию введенную в форму 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. Тестирование программного средства

6.1 Определение сущностной эффективности

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

Шаг - одно дискретное действие пользователя:

· ввод данных в одно поле, оканчивающийся переводом строки, табуляцией или другим разделителем полей;

· пропуск ненужного поля или элемента управления путем нажатия клавиши табуляции или другой клавиши навигации;

· переход от работы с клавиатурой к работе с указательным устройством или обратно;

· выполнение действия посредством щелчка или двойного щелчка указательным устройством на инструменте, командной кнопке или другом визуальном объекте;

· выбор меню или элемента меню с помощью указательного устройства;

· выполнение действия нажатием горячей клавиши или последовательности клавиш, включая активацию меню специальной клавишей;

Все действия пользователя выполняются, значит систему можно назвать эффективной.

6.2 Тестирование программного средства

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

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

Программное средство тестировалось с помощью Rational Suite TestStudio - пакета для комплексного тестирования надежности, функциональности, рабочей нагрузки клиент-серверных, Java-, Web- и ERP-приложений. Использование TestStudio позволяет интегрировать процессы тестирования и разработки, управлять конфигурацией программных средств и процессом тестирования. Результат - более эффективное тестирование приложений и высокое качество готовых программных средств.

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

Сообщения компилятора обычно делятся на несколько групп в зависимости от уровня тяжести нарушения синтаксиса языка программирования:

- информационные сообщения и предупреждения, при обнаружении которых компилятор, как правило, строит корректный объектный код и дальнейшая работа с программой (компоновка, выполнение) возможна (тем не менее сообщения этой группы также должны тщательно анализироваться, так как их появление также может свидетельствовать об ошибке в программе - например, из-за неверного понимания синтаксиса языка);

- сообщения об ошибках, при обнаружении которых компилятор пытается их исправить и строит объектный код, но его корректность маловероятна и дальнейшая работа с ним скорее всего не возможна;

- сообщения о серьезных ошибках, при наличии которых построенный компилятором объектный код заведомо некорректен и его дальнейшее использование невозможно;

- сообщения об ошибках, обнаружение которых привело к прекращению синтаксического контроля и построения объектного кода.

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

Основные неправдоподобные ситуации:

- использование в программе неинициализированных переменных (то есть переменных, не получивших начального значения);

- наличие в программе описаний элементов, переменных, процедур, меток, файлов, в дальнейшем не используемых в ее тексте;

- наличие в тексте программы фрагментов, никогда не выполняющихся;

- наличие в тексте программы переменных, ни разу не используемых для чтения после присваивая им значений;

- наличие в тексте программы заведомо бесконечных циклов;

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

Заключение

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

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

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

Хотелось бы надеяться, что предложенная система подготовки адаптивного тестирования, будет успешно применяться в учебных заведениях.

Приложение А

Листинг программы

namespace WindowsApplication1

{partial class Form1

{ /// <summary>

 /// Required designer variable.

 /// </summary>

private 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>

protected override void Dispose (bool disposing)

{if (disposing && (components!= null))

{components. Dispose();}

base. 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>

private void InitializeComponent()

{this.groupBox1 = new System. Windows. Forms. GroupBox();

this.label5 = new System. Windows. Forms. Label();

this.button1 = new System. Windows. Forms. Button();

this.comboBox2 = new System. Windows. Forms. ComboBox();

this.label4 = new System. Windows. Forms. Label();

this.textBox2 = new System. Windows. Forms. TextBox();

this.label3 = new System. Windows. Forms. Label();

this.label2 = new System. Windows. Forms. Label();

this.dataGridView1 = new System. Windows. Forms. DataGridView();

this.label1 = new System. Windows. Forms. Label();

this.comboBox1 = new System. Windows. Forms. ComboBox();

this.button5 = new System. Windows. Forms. Button();

this.button4 = new System. Windows. Forms. Button();

this.button3 = new System. Windows. Forms. Button();

this.textBox1 = new System. Windows. Forms. TextBox();

this.menuStrip1 = new System. Windows. Forms. MenuStrip();

this.toolStripMenuItem1 = new System. Windows. Forms. ToolStripMenuItem();

this.toolStripMenuItem2 = new System. Windows. Forms. ToolStripMenuItem();

this.groupBox2 = new System. Windows. Forms. GroupBox();

this.textBox6 = new System. Windows. Forms. TextBox();

this.textBox5 = new System. Windows. Forms. TextBox();

this.textBox4 = new System. Windows. Forms. TextBox();

this.label6 = new System. Windows. Forms. Label();

this.button6 = new System. Windows. Forms. Button();

this.button2 = new System. Windows. Forms. Button();

this.textBox3 = new System. Windows. Forms. TextBox();

this.comboBox3 = new System. Windows. Forms. ComboBox();

this.comboBox4 = new System. Windows. Forms. ComboBox();

this.textBox7 = new System. Windows. Forms. TextBox();

this.comboBox5 = new System. Windows. Forms. ComboBox();

this.label7 = new System. Windows. Forms. Label();

this.groupBox1. SuspendLayout(); ((System. ComponentModel.ISupportInitialize) (this.dataGridView1)).BeginInit();

this.menuStrip1. SuspendLayout();

this.groupBox2. SuspendLayout();

this. SuspendLayout();

 //

 // groupBox1

 //

this.groupBox1. Controls. Add (this.label5);

this.groupBox1. Controls. Add (this.button1);

this.groupBox1. Controls. Add (this.comboBox2);

this.groupBox1. Controls. Add (this.label4);

this.groupBox1. Controls. Add (this.textBox2);

this.groupBox1. Controls. Add (this.label3);

this.groupBox1. Controls. Add (this.label2);

this.groupBox1. Controls. Add (this.dataGridView1);

this.groupBox1. Controls. Add (this.label1);

this.groupBox1. Controls. Add (this.comboBox1);

this.groupBox1. Controls. Add (this.button5);

this.groupBox1. Controls. Add (this.button4);

this.groupBox1. Controls. Add (this.button3);

this.groupBox1. Controls. Add (this.textBox1);

this.groupBox1. Location = new System. Drawing. Point (0, 27);

this.groupBox1. Name = «groupBox1»;

this.groupBox1. Size = new System. Drawing. Size (1016, 710);

this.groupBox1. TabIndex = 0;

this.groupBox1. TabStop = false;

this.groupBox1. Enter += new System. EventHandler (this.groupBox1_Enter);

 //

 // label5

 //

this.label5. AutoSize = true;

this.label5. Location = new System. Drawing. Point (543, 194);

this.label5. Name = «label5»;

this.label5. Size = new System. Drawing. Size (34, 13);

this.label5. TabIndex = 18;

this.label5. Text = «Тест:»;

 //

 // button1

 //

this.button1. Location = new System. Drawing. Point (848, 189);

this.button1. Name = «button1»;

this.button1. Size = new System. Drawing. Size (75, 23);

this.button1. TabIndex = 17;

this.button1. Text = «Удалить»;

this.button1. UseVisualStyleBackColor = true;

this.button1. Click += new System. EventHandler (this.button1_Click);

 //

 // comboBox2

 //

this.comboBox2. FormattingEnabled = true;

this.comboBox2. Location = new System. Drawing. Point (583, 191);

this.comboBox2. Name = «comboBox2»;

this.comboBox2. Size = new System. Drawing. Size (250, 21);

this.comboBox2. TabIndex = 16;

this.comboBox2. SelectedIndexChanged += new System. EventHandler (this.comboBox2_SelectedIndexChanged);

 //

 // label4

 //

this.label4. AutoSize = true;

this.label4. Location = new System. Drawing. Point (204, 11);

this.label4. Name = «label4»;

this.label4. Size = new System. Drawing. Size (91, 13);

this.label4. TabIndex = 15;

this.label4. Text = «Название теста:»;

 //

 // textBox2

 //

this.textBox2. Location = new System. Drawing. Point (316, 8);

this.textBox2. Name = «textBox2»;

this.textBox2. Size = new System. Drawing. Size (688, 20);

this.textBox2. TabIndex = 14;

 //

 // label3

 //

this.label3. AutoSize = true;

this.label3. Location = new System. Drawing. Point (90, 194);

this.label3. Name = «label3»;

this.label3. Size = new System. Drawing. Size (205, 13);

this.label3. TabIndex = 13;

this.label3. Text = «Варианты ответа с указанием верного»;

 //

 // label2

 //

this.label2. AutoSize = true;

this.label2. Location = new System. Drawing. Point (12, 16);

this.label2. Name = «label2»;

this.label2. Size = new System. Drawing. Size (47, 13);

this.label2. TabIndex = 12;

this.label2. Text = «Вопрос:»;

 //

 // dataGridView1

 //

this.dataGridView1. AllowUserToAddRows = false;

this.dataGridView1. AutoSizeColumnsMode = System. Windows. Forms. DataGridViewAutoSizeColumnsMode. Fill;

this.dataGridView1. ColumnHeadersHeightSizeMode = System. Windows. Forms. DataGridViewColumnHeadersHeightSizeMode. AutoSize;

this.dataGridView1. Location = new System. Drawing. Point (12, 91);

this.dataGridView1. MultiSelect = false;

this.dataGridView1. Name = «dataGridView1»;

this.dataGridView1. ReadOnly = true;

this.dataGridView1. Size = new System. Drawing. Size (992, 92);

this.dataGridView1. TabIndex = 11;

this.dataGridView1. UserDeletingRow += new System. Windows. Forms. DataGridViewRowCancelEventHandler (this.dataGridView1_UserDeletingRow);

this.dataGridView1. RowEnter += new System. Windows. Forms. DataGridViewCellEventHandler (this.dataGridView1_RowEnter);

this.dataGridView1. ColumnAdded += new System. Windows. Forms. DataGridViewColumnEventHandler (this.dataGridView1_ColumnAdded);

 //

 // label1

 //

this.label1. AutoSize = true;

this.label1. Location = new System. Drawing. Point (313, 194);

this.label1. Name = «label1»;

this.label1. Size = new System. Drawing. Size (0, 13);

this.label1. TabIndex = 10;

 //

 // comboBox1

 //

this.comboBox1. FormattingEnabled = true;

this.comboBox1. Location = new System. Drawing. Point (65, 7);

this.comboBox1. Name = «comboBox1»;

this.comboBox1. Size = new System. Drawing. Size (121, 21);

this.comboBox1. TabIndex = 8;

this.comboBox1. Visible = false;

 //

 // button5

 //

this.button5. Location = new System. Drawing. Point (929, 189);

this.button5. Name = «button5»;

this.button5. Size = new System. Drawing. Size (75, 23);

this.button5. TabIndex = 7;

this.button5. Text = «Добавить»;

this.button5. UseVisualStyleBackColor = true;

this.button5. Click += new System. EventHandler (this.button5_Click);

 //

 // button4

 //

this.button4. Location = new System. Drawing. Point (46, 189);

this.button4. Name = «button4»;

this.button4. Size = new System. Drawing. Size (28, 23);

this.button4. TabIndex = 4;

this.button4. Text = «-»;

this.button4. UseVisualStyleBackColor = true;

this.button4. Click += new System. EventHandler (this.button4_Click);

 //

 // button3

 //

this.button3. Location = new System. Drawing. Point (12, 189);

this.button3. Name = «button3»;

this.button3. Size = new System. Drawing. Size (28, 23);

this.button3. TabIndex = 3;

this.button3. Text = «+»;

this.button3. UseVisualStyleBackColor = true;

this.button3. Click += new System. EventHandler (this.button3_Click);

 //

 // textBox1

 //

this.textBox1. Location = new System. Drawing. Point (12, 35);

this.textBox1. MaxLength = 255;

this.textBox1. Multiline = true;

this.textBox1. Name = «textBox1»;

this.textBox1. Size = new System. Drawing. Size (992, 50);

this.textBox1. TabIndex = 2;

 //

 // menuStrip1

 //

this.menuStrip1. Items. AddRange (new System. Windows. Forms. ToolStripItem[] {

this.toolStripMenuItem1,

this.toolStripMenuItem2});

this.menuStrip1. Location = new System. Drawing. Point (0, 0);

this.menuStrip1. Name = «menuStrip1»;

this.menuStrip1. Size = new System. Drawing. Size (1016, 24);

this.menuStrip1. TabIndex = 2;

this.menuStrip1. Text = «menuStrip1»;

this.menuStrip1. Visible = false;

 //

 // toolStripMenuItem1

 //

this.toolStripMenuItem1. Name = «toolStripMenuItem1»;

this.toolStripMenuItem1. Size = new System. Drawing. Size (106, 20);

this.toolStripMenuItem1. Text = «Редактор тестов»;

this.toolStripMenuItem1. Click += new System. EventHandler (this.toolStripMenuItem1_Click);

 //

 // toolStripMenuItem2

 //

this.toolStripMenuItem2. Name = «toolStripMenuItem2»;

this.toolStripMenuItem2. Size = new System. Drawing. Size (50, 20);

this.toolStripMenuItem2. Text = «Тесты»;

this.toolStripMenuItem2. Click += new System. EventHandler (this.toolStripMenuItem2_Click);

 //

 // groupBox2

 //

this.groupBox2. Controls. Add (this.textBox6);

this.groupBox2. Controls. Add (this.textBox5);

this.groupBox2. Controls. Add (this.textBox4);

this.groupBox2. Controls. Add (this.label6);

this.groupBox2. Controls. Add (this.button6);

this.groupBox2. Controls. Add (this.button2);

this.groupBox2. Controls. Add (this.textBox3);

this.groupBox2. Controls. Add (this.comboBox3);

this.groupBox2. Location = new System. Drawing. Point (1006, 724);

this.groupBox2. Name = «groupBox2»;

this.groupBox2. Size = new System. Drawing. Size (10, 10);

this.groupBox2. TabIndex = 3;

this.groupBox2. TabStop = false;

 //

 // textBox6

 //

this.textBox6. Location = new System. Drawing. Point (583, 32);

this.textBox6. Name = «textBox6»;

this.textBox6. Size = new System. Drawing. Size (129, 20);

this.textBox6. TabIndex = 7;

this.textBox6. Visible = false;

 //

 // textBox5

 //

this.textBox5. Location = new System. Drawing. Point (444, 33);

this.textBox5. Name = «textBox5»;

this.textBox5. Size = new System. Drawing. Size (100, 20);

this.textBox5. TabIndex = 6;

this.textBox5. Visible = false;

 //

 // textBox4

 //

this.textBox4. Location = new System. Drawing. Point (316, 32);

this.textBox4. Name = «textBox4»;

this.textBox4. Size = new System. Drawing. Size (100, 20);

this.textBox4. TabIndex = 5;

this.textBox4. Visible = false;

 //

 // label6

 //

this.label6. AutoSize = true;

this.label6. Location = new System. Drawing. Point (12, 29);

this.label6. Name = «label6»;

this.label6. Size = new System. Drawing. Size (85, 13);

this.label6. TabIndex = 4;

this.label6. Text = «Выберите тест:»;

 //

 // button6

 //

this.button6. Location = new System. Drawing. Point (929, 160);

this.button6. Name = «button6»;

this.button6. Size = new System. Drawing. Size (75, 23);

this.button6. TabIndex = 3;

this.button6. Text = «Далее»;

this.button6. UseVisualStyleBackColor = true;

this.button6. Click += new System. EventHandler (this.button6_Click);

 //

 // button2

 //

this.button2. Location = new System. Drawing. Point (983, 39);

this.button2. Name = «button2»;

this.button2. Size = new System. Drawing. Size (10, 10);

this.button2. TabIndex = 2;

this.button2. Text = «button2»;

this.button2. UseVisualStyleBackColor = true;

this.button2. Visible = false;

this.button2. Click += new System. EventHandler (this.button2_Click);

 //

 // textBox3

 //

this.textBox3. Font = new System. Drawing. Font («Microsoft Sans Serif», 12F, System. Drawing. FontStyle. Regular, System. Drawing. GraphicsUnit. Point, ((byte) (204)));

this.textBox3. Location = new System. Drawing. Point (15, 59);

this.textBox3. Multiline = true;

this.textBox3. Name = «textBox3»;

this.textBox3. ReadOnly = true;

this.textBox3. Size = new System. Drawing. Size (989, 63);

this.textBox3. TabIndex = 1;

 //

 // comboBox3

 //

this.comboBox3. FormattingEnabled = true;

this.comboBox3. Location = new System. Drawing. Point (115, 26);

this.comboBox3. Name = «comboBox3»;

this.comboBox3. Size = new System. Drawing. Size (168, 21);

this.comboBox3. TabIndex = 0;

this.comboBox3. SelectedIndexChanged += new System. EventHandler (this.comboBox3_SelectedIndexChanged);

 //

 // comboBox4

 //

this.comboBox4. FormattingEnabled = true;

this.comboBox4. Location = new System. Drawing. Point (872, 39);

this.comboBox4. Name = «comboBox4»;

this.comboBox4. Size = new System. Drawing. Size (121, 21);

this.comboBox4. TabIndex = 4;

this.comboBox4. Visible = false;

 //

 // textBox7

 //

this.textBox7. Location = new System. Drawing. Point (498, 39);

this.textBox7. Name = «textBox7»;

this.textBox7. Size = new System. Drawing. Size (100, 20);

this.textBox7. TabIndex = 6;

this.textBox7. Visible = false;

 //

 // comboBox5

 //

this.comboBox5. FormattingEnabled = true;

this.comboBox5. Items. AddRange (new object[] {

«1»,

«2»,

«3»,

«4»,

«5»,

«6»,

«7»,

«8»,

«9»,

«10»});

this.comboBox5. Location = new System. Drawing. Point (126, 7);

this.comboBox5. Name = «comboBox5»;

this.comboBox5. Size = new System. Drawing. Size (121, 21);

this.comboBox5. TabIndex = 7;

 //

 // label7

 //

this.label7. AutoSize = true;

this.label7. Location = new System. Drawing. Point (12, 11);

this.label7. Name = «label7»;

this.label7. Size = new System. Drawing. Size (108, 13);

this.label7. TabIndex = 8;

this.label7. Text = «Сложность вопроса»;

 //

 // Form1

 //

this. AutoScaleDimensions = new System. Drawing. SizeF (6F, 13F);

this. AutoScaleMode = System. Windows. Forms. AutoScaleMode. Font;

this. ClientSize = new System. Drawing. Size (1016, 734);

this. Controls. Add (this.label7);

this. Controls. Add (this.comboBox5);

this. Controls. Add (this.textBox7);

this. Controls. Add (this.comboBox4);

this. Controls. Add (this.groupBox2);

this. Controls. Add (this.groupBox1);

this. Controls. Add (this.menuStrip1);

this. MainMenuStrip = this.menuStrip1;

this. MaximumSize = new System. Drawing. Size (1024, 768);

this. MinimumSize = new System. Drawing. Size (1024, 768);

this. Name = «Form1»;

this. Load += new System. EventHandler (this. Form1_Load);

this.groupBox1. ResumeLayout(false);

this.groupBox1. PerformLayout(); ((System. ComponentModel.ISupportInitialize) (this.dataGridView1)).EndInit();

this.menuStrip1. ResumeLayout(false);

this.menuStrip1. PerformLayout();

this.groupBox2. ResumeLayout(false);

this.groupBox2. PerformLayout();

this. ResumeLayout(false);

this. PerformLayout();}

#endregion

private System. Windows. Forms. GroupBox groupBox1;

private System. Windows. Forms. MenuStrip menuStrip1;

private System. Windows. Forms. ToolStripMenuItem toolStripMenuItem1;

private System. Windows. Forms. ToolStripMenuItem toolStripMenuItem2;

private System. Windows. Forms. TextBox textBox1;

private System. Windows. Forms. Button button4;

private System. Windows. Forms. Button button3;

private System. Windows. Forms. Button button5;

private System. Windows. Forms. ComboBox comboBox1;

private System. Windows. Forms. Label label1;

private System. Windows. Forms. DataGridView dataGridView1;

private System. Windows. Forms. Label label3;

private System. Windows. Forms. Label label2;

private System. Windows. Forms. ComboBox comboBox2;

private System. Windows. Forms. Label label4;

private System. Windows. Forms. TextBox textBox2;

private System. Windows. Forms. Button button1;

private System. Windows. Forms. Label label5;

private System. Windows. Forms. GroupBox groupBox2;

private System. Windows. Forms. ComboBox comboBox3;

private System. Windows. Forms. TextBox textBox3;

private System. Windows. Forms. Button button2;

private System. Windows. Forms. Button button6;

private System. Windows. Forms. Label label6;

private System. Windows. Forms. TextBox textBox5;

private System. Windows. Forms. TextBox textBox4;

private System. Windows. Forms. TextBox textBox6;

private System. Windows. Forms. ComboBox comboBox4;

private System. Windows. Forms. TextBox textBox7;

private System. Windows. Forms. ComboBox comboBox5;

private System. Windows. Forms. Label label7;}}

Form1.cs

using System;

using System. Collections. Generic;

using System. ComponentModel;

using System. Data;

using System. Drawing;

using System. Text;

using System. Windows. Forms;

using System. Data. OleDb;

namespace WindowsApplication1

{public partial class Form1: Form

{public Form1 ()

{InitializeComponent();}

bool chkTest = false;

bool click = false;

int index = 0;

int X = 10;

int Y = 225;

int count = 0;

int CntrlsCnt = 0;

int End = 0;

bool check = false;

bool ck = false;

int k = 0;

int kk = 0;

int kkk = 0;

public TextBox tx;

public Label lb;

public CheckBox cb;

public RadioButton rb;

public OleDbDataAdapter adapter;

public DataSet DSet;

public DataSet DSVopros;

public DataRow row;

int Rand = 0;

int schet = 0;

string id_vopr;

string id_test;

int lastindx = 0;

int position = 0;

int MaxPosition = 0;

int[] array;

int[] array3;

int[] array4;

int[] array5;

private void toolStripMenuItem1_Click (object sender, EventArgs e)

{DeletControls();

this.groupBox1. Visible = true;

this.groupBox2. Visible = false;}

private void toolStripMenuItem2_Click (object sender, EventArgs e)

{if (comboBox3. Text!= «») {

 // End = 0;

 // position = 0;

 //StartTest();

textBox3. Text = «»;

DelControlsFromGrupBox2 ();

comboBox3. Text = «»;

comboBox3. SelectedValue = «»;

 //AddControlsForQuestions();

 //BindQuestion();}

this.groupBox2. Visible = true;

this.groupBox1. Visible = false;}

private void DGVBinding()

{try

{if (comboBox2. Items. Count > 0)

{OleDbConnection thisConnection = new OleDbConnection (ConStr. GetConString());

thisConnection. Open();

string query0 = «Select id_test From Test Where (test = @test)»;

OleDbCommand cmd0 = new OleDbCommand (query0, thisConnection);

cmd0. Parameters. AddWithValue («@test», comboBox2. SelectedItem. ToString());

OleDbDataReader thisReader = cmd0. ExecuteReader();

while (thisReader. Read())

{id_test = thisReader. GetValue(0).ToString();}

thisReader. Close();

string 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);

adapter = new OleDbDataAdapter(cmd);

DSet = new DataSet();

adapter. Fill (DSet, «Vopros»);

dataGridView1. DataSource = DSet. Tables [«Vopros»];

thisConnection. Close();

id_test = «»;}

else

{dataGridView1. DataSource = null;

textBox2. Text = «»;}}

catch {

}}

private void AddValue()

{label1. Text = «»;

comboBox1. Items. Clear();

int num = 0;

int cnt = count + 1;

for (int i = 0; i < k; i++)

{if ((groupBox1. Controls [count + num] as TextBox).Text!= «»)

{check = true;}

else

{check = false;

break;}

if ((groupBox1. Controls [cnt + num] as CheckBox).Checked)

{ck = true;}

num += 2;}

num = 0;

if (textBox1. Text!= «» && textBox2. Text!= «» && check == true && ck == true)

{lastindx = 0;

try

{OleDbConnection thisConnection = new OleDbConnection (ConStr. GetConString());

thisConnection. Open();

foreach (string list in comboBox2. Items)

{if (list == textBox2. Text)

{chkTest = true;

break;}

else

{lastindx++;

chkTest = false;}

}

if (chkTest == false)

{string qr = «INSERT INTO Test (test) VALUES (@test)»;

OleDbCommand com = new OleDbCommand (qr, thisConnection);

com. Parameters. AddWithValue («@test», textBox2. Text);

com. ExecuteNonQuery();}

string qr1 = «Select id_test From Test Where (test = @test)»;

OleDbCommand com1 = new OleDbCommand (qr1, thisConnection);

com1. Parameters. AddWithValue («@test», textBox2. Text);

OleDbDataReader thisRed1 = com1. ExecuteReader();

while (thisRed1. Read())

{

id_test = thisRed1. GetValue(0).ToString();} thisRed1. Close();

string query = «INSERT INTO Vopros (Vopr, id_test, lev) VALUES (@Vopr, @id_test, @lev)»;

OleDbCommand cmd = new OleDbCommand (query, thisConnection);

cmd. Parameters. AddWithValue («@Vopr», textBox1. Text);

cmd. Parameters. AddWithValue («@id_test», id_test);

cmd. Parameters. AddWithValue («@lev», comboBox5. SelectedItem. ToString());

cmd. ExecuteNonQuery();

string query1 = «Select id_vopr From Vopros Where (id_test = @id_test)»;

OleDbCommand cmd1 = new OleDbCommand (query1, thisConnection);

cmd1. Parameters. AddWithValue («@id_test», id_test);

OleDbDataReader thisReader1 = cmd1. ExecuteReader();

while (thisReader1. Read())

{id_vopr = thisReader1. GetValue(0).ToString();}

thisReader1. Close();

for (int i = 0; i < k; i++)

{string query2 = «INSERT INTO Otvet (id_vopr, id_test, otv) VALUES (@id_vopr, @id_test, @otv)»;

OleDbCommand cmd2 = new OleDbCommand (query2, thisConnection);

cmd2. Parameters. AddWithValue («@id_vopr», id_vopr);

cmd2. Parameters. AddWithValue («@id_test», id_test);

cmd2. Parameters. AddWithValue («@otv», (groupBox1. Controls [count + num] as TextBox).Text);

num += 2;

cmd2. ExecuteNonQuery();

}

num = 0;

for (int i = 0; i < k; i++)

{

if ((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)»;

OleDbCommand cmd3 = new OleDbCommand (query3, thisConnection);

cmd3. Parameters. AddWithValue («@id_vopr», id_vopr);

cmd3. Parameters. AddWithValue («@id_test», id_test);

cmd3. Parameters. AddWithValue («@otv», groupBox1. Controls [count + num].Text);

OleDbDataReader thisReader3 = cmd3. ExecuteReader();

while (thisReader3. Read())

{comboBox1. Items. Add (thisReader3. GetValue(0).ToString());

}

thisReader3. Close();

}

num += 2;

}

foreach (string LI in comboBox1. Items)

{

string query4 = «INSERT INTO Rez (id_vopr, id_otv, id_test) VALUES (@id_vopr, @id_otv, @id_test)»;

OleDbCommand cmd4 = new OleDbCommand (query4, thisConnection);


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.