Delphi: Тест для Большого Дяди на все 100!

Лозовский Александр

Xakep, номер #055, стр. 055-066-4


Если ты умеешь работать с TTable или TADOTable, то легко сможешь превратить этот пример в образец античного искусства :).

Обязательно возьми на диске или скачай исходник. Там я еще добавил кнопку "пронумеровать" - она автоматически добавит порядковые номера к вариантам ответов. Тогда тебе не придется делать это самому.

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

ХХХ ЗАГОЛОВОК ХХХ

Часть 2 - Тест

Я думаю, не стоит лишний раз напрягаться и делать его с нуля, потому что намного проще слегка модернизировать уже сделанное. Для этого надо заменить DBEdit2 обычным Edit1 - в него наш любимый юзер будет набивать ответы. Кнопка на форме будет только одна (но, как водится, БОЛЬШАЯ) - она будет иметь caption "Следующий вопрос >". Интерфейс должен выглядеть примерно так:

По скрину видно, что на нем присутствуют еще 3 Label, объясняющие юзеру что к чему. Они не должны вызвать у тебя никаких затруднений, поэтому я перейду к собственно кодингу - заметь, за все это время мы почти ничего и не написали. Так что объявляй глобальные переменные:

balls, totalballs, totvarans, lim, totcorrcount: integer;

Здесь balls - количество баллов, которые юзер получить за ОДИН ВОПРОС. Напомню, что правильных ответов может быть несколько, и каждый из них оценивается отдельно.

totalballs - количество баллов за весь тест. То есть, сумма всех balls.

totvarans - количество вариантов ответов для данного вопроса.

totcorrcount - количество правильных ответов к данному вопросу.

И одну константу: CONST limit=2;. Она будет определять количество вопросов, которое необходимо задать юзеру. У меня в базе на данный момент только 2 вопроса, поэтому она мне не очень нужна, но порядок есть порядок.

С переменными покончено - самое время глянуть на OnClick нашей единственной и неповторимой кнопки:

Вот такой простой, но малопонятный с виду код :). На самом деле здесь я посимвольно сравниваю юзерский вариант ответа с правильным, присваивая за каждый верный ответ по 100/totcorrcount баллов. То есть, всего за один вопрос можно получить 100 баллов. А если учесть, что за неправильные ответы просто не начисляются баллы (а надо бы обнулять balls), то меня можно назвать очень щедрым экзаменатором.

Переменная lim фигурирует как счетчик отвеченных вопросов, она сравнивается с константой limit, и если они равны, значит, юзер ответил на положенное ему количество вопросов и может получить заключение патологоанатома. Выдается оно в виде "n баллов из 100", как я и говорил вначале.

Кстати, n - порядковый номер символа из строки правильных ответов, i – то же самое, но для ответов по версии пользователя. Теперь добавь в OnCreate формы инициализацию переменных:

totalballs:=0;

lim:=0;

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

Назад на стр. 055-066-3  Содержание  Вперед на стр. 055-066-5