LINUX.ORG.RU

Я простенькие тесты делал на баше (CGI). Для каждого вопроса можно было сделать несколько вариантов (из которых случайно выбирается один). Причем для каждого айпишника еще и писался файл протокола, чтобы можно было посмотреть: не отвечал ли студент на один вопрос несколько раз.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от bk_

Может, поможет?

#!/bin/sh
addr=$REMOTE_ADDR
list=/dev/shm/test-var.$addr
eval `./convert`
echo -e "Content-type: text/html\n"
cat header.txt
if [ "$name" = "" ]; then
    echo "<a href=/Tests/index.html><h1 align=center>Введите ваше имя!</h1></a>"
    exit
fi
if [ "$file" = "" ]; then
    echo "<a href=/Tests/index.html><h1 align=center>Выберите тест!</h1></a>"
    exit
fi
[ "$num" = "" ] && num=1
total=`cat ../Tests/$file/total`
maxvar=`cat ../Tests/$file/maxvar`
if [ $num = 1 ]; then
    echo -e "\n\n\n" >> $list
    date >> $list
    echo -e "\n$name\t---\t$file\n" >> $list
else
    LASST="<font color=red>не"
    echo -e "$[num-1]\t\c" >> $list
fi
[ "$last" != "" ] && last=$[$last % 11]
if [ "$last" = "$a1" -a "$last" != "" ]; then
    echo "+" >> $list
    LASST="<font color=green>"
    right=$[right+1]
else
    [ "$last" != "" ] && echo "-" >> $list
fi
if [ $maxvar -gt 1 ]; then
    rnd_num=-$[`./rand $maxvar` + 1]
else
    rnd_num=""
fi
if [ "$num" -le "$total" ]; then
    echo -e "<FORM NAME=\"Test\" action=\"/cgi-bin/test-var\" method=\"POST\">"
    i=0
    echo -e "<h1 align=center>Вопрос $num из $total</h1>"
    CHKD="checked"
    while read Qwest
    do
	if [ $i = 0 ]; then 
	    echo -e "<h2 align=center>$Qwest</h2>"
        elif [ $i -lt 5 ]; then
	    echo -e "<P><INPUT TYPE=RADIO NAME=\"a1\" $CHKD VALUE=\"$i\">$Qwest</P>"
	    CHKD=""
	fi
    i=$[i+1]
    Answ=$Qwest
    done <../Tests/$file/$num$rnd_num
    num=$[num+1]
    val=$[`./rand` * 11 + $Answ]
    echo -e "<input type=hidden name=\"file\" value=\"$file\"><input type=hidden name=\"num\" value=\"$num\">\
    <input type=hidden name=\"last\" value=\"$val\">\
    <input type=hidden name=\"name\" value=\"$name\">\
    <input type=hidden name=\"right\" value=\"$right\">"
    echo -e "<input type=submit value=\"Ответить\"></FORM>"
#    [ $num -ne 2 ] && echo -e "<h2 align=center>На предыдущий вопрос ответ был" $LASST"верным</font></h2>"
else
    echo -e "<h1 align=center><font color=blue>$name!</font><p><p><p>Вы дали $right правильных ответов</h1>"
    BAL=`echo -e "scale=3\n oz=$right/$total\n if (oz<.5) 2 else if (oz<.7) 3 else if (oz<.9) 4 else 5"|bc`
    echo -e "<h1 align=center>Ваша оценка: <font color=red>$BAL</font></h1><p><p><p>\n"
    echo -e "<h3 align=center><a href=/Tests/index.html>Вернуться</a></h3>\n"
    echo -e "\n\n\t\tИтоговая оценка:\t$BAL\n\n\n\n\n" >> $list
fi
echo "</body></html>"

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Вопросы формируются так: первая строка - вопрос, далее четыре строки - варианты ответов, последняя строка - номер правильного ответа. Имя файла - номер теста (без ведущих нулей, а если на каждый вопрос несколько вариантов, то далее - тире и номер варианта, т.е., например, 2-2), все файлы с вопросами одного теста помещаются в отдельную директорию, там же создаются файлы maxvar (в котором только одно число - кол-во вариантов на каждый вопрос) и total (в нем - число - количество вопросов).

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от bk_

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

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от bibi

достать сорцы не проблема.

Да их тысячи, этих программ-тестировалок. Каждый делает себе что-то свое, с учетом собственных потребностей.

Eddy_Em ☆☆☆☆☆
()

Фиг ли их тестировать. Бажные, глючные, сырые. Просто девелоперу оторвать конечности и оскопить.

Xenesz ★★★★
()

Лол, в моей шараге у одного клоуна такая дипломная работа была.

ZveN
()
Ответ на: комментарий от RR

:)

А я бы, если б сейчас возникла такая необходимость, написал на сях с привлечением sqlite или mysql, через xmlhttprequest...

Eddy_Em ☆☆☆☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.