Создание тестов

advertisement
Занятие 9.
Создание тестов
Написание программы по обработке теста проходит несколько этапов.
Этап 1. Предварительная подготовка
На данном этапе необходимо проанализировать тест. Определить его тип. Например:
1. Вопросы могут иметь однозначный выбор ответа или множественный.
2. «Цена» ответа может отличаться: например, при составлении теста на проверку
знаний каждый правильный ответ «стоит» 1 балл, при составлении
психологических тестов каждый ответ имеет свое количество баллов.
Далее необходимо определится, в каком виде будут храниться вопросы: в текстовом
файле или в базе данных. Для текстового файла необходимо определить формат строки. Мы
будем создавать тесты с помощью текстового файла.
Пусть для каждого вопроса в текстовом файле отводится одна строка. В эту строку
записывается текст вопроса и варианты ответов через разделитель. Разделитель выбираем сами,
но это должен быть набор символов, который точно не появится в нашем тесте, например,
«***». Дополнительно, в строке могут храниться правильные ответы и указатель на тип вопроса
(однозначный или множественный выбор ответа).
Кроме того, в файле может содержаться название теста и его описание.
Иногда возникает необходимость создания дополнительного текстового файла, в
котором будут храниться правильные ответы, либо «цена» вариантов ответов (например, для
психологических тестов).
Этап 2. Обработка теста
На этом этапе создается скрипт для обработки теста: вывода вопросов на экран и анализа
ответов.
Этап 3. Вывод результатов
После обработки ответов необходимо вывести результат прохождения теста.
Упражнения
Задача 1. Создание психологического теста
1. Подготовка текстовых файлов. Создадим два текстовых файла: файл с вопросами
(test.txt) и файл с ключами ответов (key.txt).
В файле test.txt в первой строке будет храниться название теста, затем после строкиразделителя («***») – описание теста, далее – список вопросов. Каждая строка вопроса будет
содержать через разделитель («***»): номер вопроса, текст вопроса, варианты ответов:
№***Вопрос***Вариант1***…***ВариантN***
В нашем тесте каждый ответ на вопрос будет иметь свою «цену», поэтому в файле key.txt
будет храниться информация в таком виде:
балл1***балл2***…***баллN***
2. Вывод теста на экран.
1) Считываем содержимое файла test.txt в массив:
$fp = file (“text.txt”,”r”); // открываем файл в режиме чтения
2) Выделяем название теста ($title). Названием теста является та часть файла, которая
расположена перед первым вхождением строки «***».
Таким образом, переменная $title будет формироваться в следующем цикле (так как в
общем случае название теста может состоять и не из одной строки):
$title = ”“;
// сначала объявляем пустую переменную
for ($i=0; strncmp($fp[$i],"***",3) != 0; $i++)
{
$title = $title.$fp[$i]; // присоединяем к текущему значению следующую строку
}
$i++; // перескакиваем строчку «***»
Цикл пробегает строки файлы, начиная с 0. Условием цикла является проверка равенства
текущей строки строке «***».
strncmp(string str1, string str2, int len) сравнивает начала строк, а точнее первые len
байтов. Возвращает: 0 - если строки полностью совпадают; 1 - если, строка str1
лексикографически больше str2; 1 – если, наоборот, строка str1 лексикографически меньше str2.
3) Выделяем описание теста ($def). Описание теста в файле размещено между первой и
второй строчками «***».
$def = ”“;
for ($i; strncmp($fp[$i],"***",3) != 0; $i++)
{
$def = $def.nl2br($fp[$i]);
}
$i++; // перескакиваем строчку «***»
4) Оставшаяся часть файла – это перечень вопросов и варианты ответов. Поэтому здесь
формируем форму с радиокнопками (в нашем случае вопросы имеют однозначные ответы).
<FORM METHOD=POST ACTION="index.php">
<?
for ($i; $i<count($fp); $i++)
{
// В переменной $fp[$i] хранится текущая строка файла в формате
// «№***вопрос***варианты_ответов***»
$str = explode("***",$fp[$i]); // разбиваем строку на массив элементов
//
//
//
//
сейчас в массиве $str хранятся такие элементы :
$str[0] – номер вопроса
$str[1] – текст вопроса
$str[2]…$str[n-1] – варианты ответов
echo "<p>$str[0]. $str[1]</p>"; // выводим номер и текст вопроса
for ($j=2; $j<(count($str)-1);$j++)
{
echo "<INPUT TYPE=radio NAME=q".$str[0]." value=".($j-1).">$str[$j]<br>";
/* варианты ответов оформляем в виде радиокнопок. Каждой группе
присваиваем имя q1, q2, … Т.е. «q + номер_вопроса», а каждому варианту –
текущее значение в группе. Например, если первый вопрос имеет 4 варианта
ответа, то формируется группа радиокнопок с именем (name) q1, а значения
(value) от 1 до 4. */
}
}
?>
<INPUT TYPE=submit name=send value="Проверить">
</FORM>
5) Анализ результата.
Для анализа результата открываем файл key.txt и сопоставляем значения.
$fp = file ("key.txt","r");
$result = 0;
for ($i=0; $i<count($fp); $i++)
{
$str = explode ("***",$fp[$i]); // Разбиваем строку
$num_q = "q".($i+1);
if (isset($$num_q)) $result = $result + $str[$$num_q-1];
}
Выводим результат согласно ключу теста.
Download