86388

РАЗРАБОТКА АДАПТИВНОЙ СИСТЕМЫ ТЕСТИРОВАНИЯ

Курсовая

Информатика, кибернетика и программирование

Программа реализуется на системе визуального программирования Visual Basic. Прилагается тестовый файл, который содержит не менее 10 вопросов и соответствующих ответов. Файл нужен для демонстрации работы системы и как пример для преподавателя, показывающий, как надо составлять вопросы и ответы.

Русский

2015-04-07

166 KB

2 чел.

ПРАВИТЕЛЬСТВО РФ

НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ

"ВЫСШАЯ ШКОЛА ЭКОНОМИКИ"

МОСКОВСКИЙ ИНСТИТУТ ЭЛЕКТРОНИКИ И МАТЕМАТИКИ

_____________________________________________________________________________

Кафедра "Информационные технологии и автоматизированные системы"

КУРСОВАЯ РАБОТА

по дисциплине

"Человеко-машинное взаимодействие"

на тему:

"РАЗРАБОТКА АДАПТИВНОЙ СИСТЕМЫ ТЕСТИРОВАНИЯ"

Выполнила:

студент 5 курса ФИТиВТ

Пудовкин Ю.Ю.  группа АП-92

     Проверил:

                                                                              доцент кафедры ИТАС Иванов С.Ю.

 

        

Москва 2014


Оглавление

[0.1]
Постановка задачи

[0.2] Описание структуры программы

[0.3] Входные и выходные данные

[0.4] Пример работы программы


Постановка задачи

Цель: разработать адаптивную систему тестирования. Система предназначена для тестирования 1 уровня (выбор 1 варианта из нескольких) и ориентирована на проверку знаний по различным предметам.

 

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

Программа реализуется на системе визуального программирования Visual Basic. Прилагается тестовый файл, который содержит не менее 10 вопросов и соответствующих ответов. Файл нужен для демонстрации работы системы и как пример для преподавателя, показывающий, как надо составлять вопросы и ответы.

Описание структуры программы

Система должна состоять из следующих компонент:

- модуль считывания теста;

- модуль вывода вопроса и выбора варианта;

- модуль хронометрирования;

- модуль оценивания.

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

Модуль вывода вопроса и выбора варианта. Модуль вывода предназначен для отображения вопросов и возможных ответов. Форма отображения может быть различной. Должен быть считан вопрос из файла и возможные ответы. Например, на форме с помощью элемента  TextBox на форме отображается вопрос и возможные ответы.  Ответы пронумерованы. По номеру определяется, какой ответ выбран. Управление передается вначале модулю хронометрирования, который делает отметку времени, а затем модулю оценивания, который сохраняет оценку за введенный ответ на текущий вопрос. Процесс повторяется циклически, пока не будет обработан последний ответ. Считывание вопросов и соответствующих ответом производится до конца файла. Количество вопросов не ограничивается системой тестирования.

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

Модуль оценивания. Модуль предназначен для оценки результатов тестирования. В ходе  тестирования он накапливает статистику о правильных и неправильных ответах. В файле тестов преподаватель оценивает каждый ответ в соответствии с определенной системой оценки. Например, пятибалльная, правильный ответ – 5 баллов, неправильный – 2. Важно, что оценки ставит сам преподаватель без участия программиста. Так как он считает нужным для конкретного вопроса и предмета. Модуль накапливает сумму баллов, а итоговая оценка получается как (сумма баллов)/(количество вопросов). Добавочной  функцией может быть сбор результатов тестирования в файле с фамилиями опрашиваемых, названием теста, оценкой и временем выполнения.

Входные и выходные данные

  1.  Входные данные.
    1.  Файл формата txt, подготовленный преподавателем.
    2.  Ответы, введенные тестируемым.
  2.  Выходные данные.
    1.  Сообщение о прохождении тестирования и оценка.
    2.  Время, затраченное на тестирование.

Пример работы программы

1. Пользователь запускает программу, выводятся: поле, для ввода фамилии пользователя, правила тестирования и кнопка «Тест».

  1.  Пользователь вводит свою фамилию и начинает тест.

4. После начала теста появляются непосредственно сами вопросы и варианты ответов для них. Так же в верхнем правом углу появляется таймер. Далее имеется кнопка «начать заново» и смена студента.

4.1. После прохождения теста выводятся результаты в процентах и баллах. Таймер останавливается (если время не истекло).

4.2. Если время на выполнение теста истекло до его завершения пользователем, то тест заканчивается.

5. При нажатии кнопки «Неправильные ответы» выводятся номера всех вопросов, на которых был дан неверный ответ.

5.1 . Пользователь вводит номер одного из вопросов и нажимает кнопку «Ответы». Выводится сам вопрос, варианты ответов и правильный ответ выделяется зеленым цветом.


Текст программы

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Pudoffkin.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

int mas[100],g=0,p=0,l,n=0,i=0,j=1,k=2,z=3,h=4,y=5,rez=0,vopr=0,t=13,t1=0,kol=0,rez1=0,bal=0;

TStringList *u = new TStringList();

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

       : TForm(Owner)

{

u->LoadFromFile("spisok.txt");

kol=((u->Count)-1)/6;

ListBox2->Items->Strings[0]="Тест на знания правил дорожного движения.";

ListBox2->Items->Strings[1]="13 вопросов.";

ListBox2->Items->Strings[2]="3 варианта ответа на каждый. Только один правильный.";

ListBox2->Items->Strings[3]="Время 13 минут.";

ListBox2->Items->Strings[4]="Вернуться к предыдущему вопросу нельзя.";

ListBox2->Items->Strings[5]="После выбора ответа нажмите на ПОДТВЕРДИТЬ.";

ListBox2->Items->Strings[6]="После этого ответ изменить нельзя.";

ListBox2->Items->Strings[7]="Затем нажмите ДАЛЬШЕ.";

ListBox2->Items->Strings[8]="После последнего вопроса тест остановится сам, нажмите кнопку КОНЕЦ.";

ListBox2->Items->Strings[9]="Выведутся результат и неправильные ответы.";

ListBox2->Items->Strings[10]="Будет возможность посмотреть правильные.";

ListBox2->Items->Strings[11]="Удачи!";

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

t=13;

t1=0;

Button7->Visible=true;

Edit9->Visible=false;

Label3->Visible=false;

Label4->Visible=true;

Timer1->Enabled=true;

Edit1->Visible=true;

Edit7->Visible=true;

Button3->Visible=false;

ListBox2->Visible=false;

Edit3->Visible=true;

Button2->Visible=false;

Button5->Visible=false;

RadioButton1->Visible=true;

RadioButton2->Visible=true;

RadioButton3->Visible=true;

RadioButton1->Checked=false;

RadioButton2->Checked=false;

RadioButton3->Checked=false;

RadioButton1->Font->Color=clBlack;

RadioButton2->Font->Color=clBlack;

RadioButton3->Font->Color=clBlack;

Button4->Visible=true;

Label2->Visible=false;

Edit4->Visible=false;

Label1->Visible=false;

Edit2->Visible=false;

Button6->Visible=false;

Edit6->Visible=false;

p=0;

n=0;

i=0;

randomize();

j=i+random(4)+1;

//j=i+1;

do

k=i+random (4)+1;

while(k==j);

//k=i+2;

do

z=i+random(4)+1;

while ((z==j)||(z==k));

//z=i+3;

h=i+4;

y=i+5;

rez=0;

rez1=0;

vopr=0;

ListBox1->Items->LoadFromFile("spisok.txt");

for (g=5;g<(u->Count);g=g+6)

bal=bal+StrToInt(ListBox1->Items->Strings[g]);

Edit3->Text=ListBox1->Items->Strings[i];

RadioButton1->Caption=ListBox1->Items->Strings[j];

RadioButton2->Caption=ListBox1->Items->Strings[k];

RadioButton3->Caption=ListBox1->Items->Strings[z];

Button1->Caption="Начать заново";

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)

{

Label1->Visible=true;

Edit2->Visible=true;

Edit2->Text=IntToStr(rez)+" вопрос(ов) из "+IntToStr(kol)+" ("+IntToStr(100*rez/kol)+"%)";

Edit8->Visible=true;

Edit8->Text=IntToStr(rez1)+ " балл(ов) из "+IntToStr(bal)+" ("+IntToStr(100*rez1/bal)+"%)";

if (rez!=kol)

Button5->Visible=true;

else

Button5->Visible=false;

Button6->Visible=false;

Edit6->Visible=false;

Button2->Visible=false;

Timer1->Enabled=false;

Label3->Caption="Фамилия";

Label3->Visible=true;

Label4->Visible=true;

Label4->Caption=Edit9->Text;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)

{

Button4->Visible=true;

if(strcmp(ListBox1->Items->Strings[i].c_str(),Edit5->Text.c_str())==0)

{

Edit3->Text="Конец";

RadioButton1->Caption=" ";

RadioButton2->Caption=" ";

RadioButton3->Caption=" ";

}

else

{

RadioButton1->Visible=true;

RadioButton2->Visible=true;

RadioButton3->Visible=true;

RadioButton1->Checked=false;

RadioButton2->Checked=false;

RadioButton3->Checked=false;

Edit3->Visible=true;

Edit3->Text=ListBox1->Items->Strings[i];

RadioButton1->Caption=ListBox1->Items->Strings[j];

RadioButton2->Caption=ListBox1->Items->Strings[k];

RadioButton3->Caption=ListBox1->Items->Strings[z];

}

//vopr++;

Button3->Visible=false;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button4Click(TObject *Sender)

{

vopr++;

if (RadioButton1->Checked)

 if (strcmp(RadioButton1->Caption.c_str(),ListBox1->Items->Strings[h].c_str())==0)

   {

    rez++;

    rez1=rez1+StrToInt(ListBox1->Items->Strings[y]);

   }

 else

 {

 mas[n]=vopr;

 n++;

 }

else

if (RadioButton2->Checked)

 if (strcmp(RadioButton2->Caption.c_str(),ListBox1->Items->Strings[h].c_str())==0)

 {

   rez++;

   rez1=rez1+StrToInt(ListBox1->Items->Strings[y]);

 }

 else

 {

   mas[n]=vopr;

   n++;

 }

if (RadioButton3->Checked)

 if (strcmp(RadioButton3->Caption.c_str(),ListBox1->Items->Strings[h].c_str())==0)

 {

   rez++;

   rez1=rez1+StrToInt(ListBox1->Items->Strings[y]);

 }

 else

 {

 mas[n]=vopr;

 n++;

 }

Edit3->Visible=false;

RadioButton1->Visible=false;

RadioButton2->Visible=false;

RadioButton3->Visible=false;

i=i+6;

j=i+random(3)+1;

do

k=i+random (3)+1;

while(k==j);

do

z=i+random(3)+1;

while ((z==j)||(z==k));

//j=j+6;

//k=k+6;

//z=z+6;

//s=s+6;

h=h+6;

y=y+6;

Button3->Visible=true;

Button4->Visible=false;

Button5->Visible=false;

if(strcmp(ListBox1->Items->Strings[i].c_str(),Edit5->Text.c_str())==0)

{

Button3->Visible=false;

Edit3->Text="Конец";

RadioButton1->Visible=false;

RadioButton2->Visible=false;

RadioButton3->Visible=false;

Button4->Visible=false;

Button2->Visible=true;

Button1->Caption="Начать заново";

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button5Click(TObject *Sender)

{

Label2->Visible=true;

Edit4->Visible=true;

Button6->Visible=true;

Edit6->Visible=true;

for (p=0;p<n;p++)

Edit4->Text=Edit4->Text+StrToInt(mas[p])+" ";

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button6Click(TObject *Sender)

{

Button2->Visible=false;

RadioButton1->Checked=false;

RadioButton2->Checked=false;

RadioButton3->Checked=false;

RadioButton1->Font->Color=clBlack;

RadioButton2->Font->Color=clBlack;

RadioButton3->Font->Color=clBlack;

i=(StrToInt(Edit6->Text)-1)*6;

j=i+random(3)+1;

do

k=i+random (3)+1;

while(k==j);

do

z=i+random(3)+1;

while ((z==j)||(z==k));

h=i+4;

y=i+5;

Edit3->Visible=true;

RadioButton1->Visible=true;

RadioButton2->Visible=true;

RadioButton3->Visible=true;

Edit3->Text=ListBox1->Items->Strings[i];

RadioButton1->Caption=ListBox1->Items->Strings[j];

RadioButton2->Caption=ListBox1->Items->Strings[k];

RadioButton3->Caption=ListBox1->Items->Strings[z];

if(strcmp(RadioButton1->Caption.c_str(),ListBox1->Items->Strings[h].c_str())==0)

{

RadioButton1->Checked=true;

RadioButton1->Font->Color=clGreen;

}

else

if(strcmp(RadioButton2->Caption.c_str(),ListBox1->Items->Strings[h].c_str())==0)

{

RadioButton2->Checked=true;

RadioButton2->Font->Color=clGreen;

}

else

if(strcmp(RadioButton3->Caption.c_str(),ListBox1->Items->Strings[h].c_str())==0)

{

RadioButton3->Checked=true;

RadioButton3->Font->Color=clGreen;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Timer1Timer(TObject *Sender)

{

if (t1==0)

{

 t--;

 t1=59;

}

else

t1--;

if ((t1==0)&&(t==0))

{

Timer1->Enabled=false;

Button2->Visible=true;

Button3->Visible=false;

Edit3->Text="Конец";

RadioButton1->Visible=false;

RadioButton2->Visible=false;

RadioButton3->Visible=false;

Button4->Visible=false;

// Button5->Visible=true;

Button2->Visible=true;

Button1->Caption="Начать заново";

}

Edit1->Text=t;

Edit7->Text=t1;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button7Click(TObject *Sender)

{

Button7->Visible=false;

Button1->Caption="Тест";

Edit9->Visible=true;

Edit9->Text=" ";

Label3->Visible=true;

Timer1->Enabled=false;

RadioButton1->Visible=false;

RadioButton2->Visible=false;

RadioButton3->Visible=false;

Edit3->Visible=false;

Edit1->Visible=false;

Edit7->Visible=false;

Button4->Visible=false;

Label1->Visible=false;

Label4->Visible=false;

Edit2->Visible=false;

Edit8->Visible=false;

Button6->Visible=false;

Edit6->Visible=false;

Button5->Visible=false;

Label2->Visible=false;

Edit4->Visible=false;

}

//---------------------------------------------------------------------------


 

А также другие работы, которые могут Вас заинтересовать

50286. Запуск и остановка Apache 246 KB
  Вы должны запустить аpаche как суперпользователь. pche после запуска будет порождать дочерние процессы использующие UID и GID указанные в директивах User и Group. Для перезапуска pche выполните команду service httpd restrt или etc rc.
50287. Средства и способы радиационной и химической разведки в очагах массового поражения (ОМП) и чрезвычайных ситуаций (ЧС) 54.5 KB
  При 5060 качаниях насоса через индикаторную трубку проходит 182 л воздуха. В качестве примера можно имитировать определение в воздухе ОВ с любой из трубок например с тремя зелеными кольцами: специальным ножом имеющимся в торце насоса надрезать трубку с обеих сторон и обломить концы; найти в торце насоса углубление со штырем в центре и насадив трубку на штырь вскрыть ампулу внутри нее; вставить трубку в насос и сделать 10 15 качаний; вынуть трубку и сравнить окраску наполнителя с эталоном имеющимся на кассете. В качестве...
50288. Заповнення багатокутників 69 KB
  Однією із унікальних характеристик растрового пристрою є можливість представлення суцільних областей. Генерацію суцільних областей із простих описів ребер або вершин називають растровою розгорткою суцільних областей, заповненням багатокутників або заповненням контурів. Для цього використовують кілька методів, які можна поділити на дві категорії: растрова розгортка та заповнення із затравкою.
50289. Изучение построения и функционирования схем асинхронных и синхронных счетчиков. Сравнительный анализ асинхронных и синхронных счетчиков 90.5 KB
  Цель работы: изучение построения и функционирования схем асинхронных и синхронных счетчиков. По диаграммам работы сравниваются задержки установки состояния счетчиков. Реверсивный счетчик проектируется для работы в кристалле Cyclone EP1C6T144C8. Порядок выполнения работы.
50290. Условная энтропия и взаимная информация 185.5 KB
  По формуле полной вероятности имеем: Следовательно По теореме умножения Следовательно Аналогично Количество информации и избыточность Количество информации при наблюдении случайной величины с распределением вероятностей задается формулой Шеннона: Единицей измерения количества информации является бит который представляет собой количество информации получаемое при наблюдении случайной величины имеющей два равновероятных значения. При равномерном распределении количество информации задается формулой Хартли:...
50291. Получение основных навыков проектирования схем в редакторе пакета Quartus. Изучение функционирования простейшего КЦУ 81.5 KB
  Сохранить и откомпилировать полученный файл. Путь к компилятору: Processing – Start Compilation, или соответствующий значок верхнего меню редактора. Если компилятор указывает на ошибки, обратиться к преподавателю или лаборанту.
50292. Исследование работы демультиплексора 85.5 KB
  Открыть редактор временных диаграмм. Построить диаграммы работы устройства, следуя записанным рекомендациям. Выводы записывать в файл временных диаграмм списком. Для получения списка выводов шины кликнуть на знак + возле ее обозначения. Продемонстрировать временные диаграммы преподавателю.
50293. Технические средства автоматики и управления. Методические указания 3.41 MB
  Цель работы: изучение назначения устройства характеристик микропроцессорного прибора ДИСК 250М получение основных навыков работы с прибором. ДИСК 250М объединяет в одном исполнении всё функциональное разнообразие многочисленных исполнений прибора ДИСК 250.