j1:=j1+1;
a1:=a1+[k];// записываем во множество, чтобы вариант ответа больше не выбирался для данного вопроса
end;
end;
for j1:=0 to n2-1 do // от 0 до 4
begin
baza2[j].otv[j1]:=baza1[j].otv[variant[j1]];// записываем подряд в массив с перемешанными вариантами ответов варианты ответов, номера которых записаны в вспомогательный массив с перемешанными вариантами ответов
if baza2[j].otv[j1]=baza1[j].otv[0] then// если номер варианта ответа из массива с перемешанными ответами совпадает с первым (он считается правильным) вариантом ответа из массива с не перемешанными ответами, то
otvet2[j]:=j1+1; // увеличив вариант записываем в массив с правильными № ответов
end;
end;
FmZAS.Hide;// прячем форму с заставкой
FmREG.Show;// показываем форму с регистрацией
end;
// если выбранно пробное тестирование, то делаем кнопку "РЕЗУЛЬТАТЫ" доступной и видимой
procedure TFmZAS.RBPROBNClick(Sender: TObject);
begin
FmANKETA.BtREZ.Enabled:=true;
FmANKETA.BtREZ.visible:=true;
end;
// если выбранно пробное тестирование, то делаем кнопку "РЕЗУЛЬТАТЫ" недоступной и невидимой
procedure TFmZAS.RBITOGClick(Sender: TObject);
begin
FmANKETA.BtREZ.Enabled:=False;
FmANKETA.BtREZ.visible:=False;
end;
сделаем так, чтобы если студент не ввел свои данные, тест начать было нельзя, выдавалось бы сообщение об ошибке. В ставим это в кнопку НАЧАТЬ на форме регистрации
procedure TFmREG.BtNACHClick(Sender: TObject);
var
j:integer;// вспомогательная переменная
begin
if (EdFAM.Text='') or (EdIM.Text='') or (EdOCH.Text='') or (EdGR.Text='') then // если одно из полей не заполнено, то
begin
MessageDlg('Вы не ввели даннае!'#13#10'Заполните регистрацию! ',mterror, [mbOK],0); exit; // выдаем сообщение и выход
end else // иначе
begin
i:=0;// номеру вопроса присваиваем 0
t1:=0;// включаем таймер
// считываем данные из соответствующих полей
fam:=FmREG.EdFAM.text;
im:=FmREG.EdIM.text;
och:=FmREG.EdOCH.text;
gr:=strtoint(FmREG.EdGR.text);
// очищаем поля
FmREG.EdFAM.Text:='';
FmREG.EdIM.Text:='';
FmREG.EdOCH.Text:='';
FmREG.EdGR.Text:='';
FmZAS.Knopka;// выполняется процедура
FmREG.Close;// закрываем форму регистрации
FmTEST.Show;// показываем форму тестирования
end;
end;
сделаем ограничение на ввод символов в поля
procedure TFmREG.EdGRKeyPress(Sender: TObject; var Key: Char);
begin
// защита от неправильного ввода (можно вводить только цифры )
if ((ord(key) in [ord('А')..ord('Я')]) or (ord(key) in [ord('А')..ord('я')]) or(ord(key) in [ord('A')..ord('Z')]) or (ord(key) in [ord('a')..ord('z')]))then
key:=#0;
end;
аналогично для других полей
запрограммируем процедуру для таймера
procedure TFmTEST.Timer1Timer(Sender: TObject);
var
sec,sec1,min,ch:integer;
begin
sec1:=t;
if t1=0 then
begin
// обратный отсчет времени
sec1:=sec1-1;
sec:=sec1 mod 60;
min:=(((sec1 div 60) mod 3600))mod 60;
ch:=sec1 div 3600;
// вывод времени в соответствующие поля
EdSEC.Text:=IntToStr(sec);
EdMIN.Text:=IntToStr(min);
EdCHAS.Text:=IntToStr(ch);
if sec1=0 then// если время кончилось, то
begin
FmZAS.podschet;// подсчитываем правильные ответа
FmTEST.Close;// прячем окно тестирования
FmANKETA.Show;// показываем анкету
end;
end;
end;
запрограммируем кнопки выбора вопросов
procedure TFmTEST.BtV10Click(Sender: TObject);
begin
i:=9;//текущий номер вопроса
FmZAS.Knopka;// выполняем процедуру"Knopka "
end;
procedure TFmTEST.BtPREDVClick(Sender: TObject);
begin
if i>0 then // если № текущего вопроса больше 0,то
begin
i:=i-1;// уменьшаем его на 1
FmZAS.Knopka;// выполняем процедуру"Knopka "
end;
end;
procedure TFmTEST.BtSLEDVClick(Sender: TObject);
begin
if i<n1-1 then// если № текущего вопроса меньше 29,то
begin
i:=i+1;// увеличиваем его на 1
FmZAS.Knopka;// выполняем процедуру"Knopka "
end;
end;
для остальных кнопок процедуры аналогичны
процедура при выборе переключателя
procedure TFmTEST.RBVAR1Click(Sender: TObject);
begin
otvet[i]:=1; //если переключатель нажат,то записываем № выбранного варианта ответа в массив с ответами студента
end;
для остальных переключателей процедуры аналогичны
при двойном щелчке на переключателе
procedure TFmTEST.RBVAR1DblClick(Sender: TObject);
begin
RBVAR1.Checked:=false;//если переключатель нажат дважды, то снимаем точку
otvet[i]:=0;// сбрасываем ответ
для остальных переключателей процедуры аналогичны
сделаем защиту от случайного завершения теста и вставим ее в процедуру кнопки ЗАВЕРШИТЬ ТЕСТИРОВАНИЕ
procedure TFmTEST.BtKONClick(Sender: TObject);
begin
FmZAS.Podschet;// подсчитываем правильные ответы студента
FmVN.Show;// показываем предупреждение
end;
при выборе варианта ответа происходит следующая процедура
procedure TFmANKETA.RBVAROTV2Click(Sender: TObject);
begin
o:=FmANKETA.RBVAROTV12.Caption;// в переменную записываем ответ на вопрос анкеты
end;
для остальных переключателей процедуры аналогичны
при двойном щелчке
procedure TFmANKETA.RBVAROTV2DblClick(Sender: TObject);
begin
FmANKETA.RBVAROTV2.Checked:=false;// при двойном щелчке убираем точку с переключателя
o:='';// стираем ответ
end;
для остальных переключателей процедуры аналогичны
просмотр результатов осуществляется с помощью кнопки РЕЗУЛЬТАТЫ на форме результаты
procedure TFmREZ.BtREZClick(Sender: TObject);
var
ball1:integer;// количество неправильных ответов
begin
ball1:=30-Ball;
LbPRAVOTV.Caption:=inttostr(ball)+' правильных ответов ';
LbNEPRAVOTV.Caption:=inttostr(ball1)+' неправильных ответов ';
//критерий оценки
if (ball>=0) and (ball<5) then
begin
LbOCENKA.Caption:=' Вы не справились с тестированием!!!';
LbOCENKA.Font.Color:=clred;
LbOCENKA.Font.Size:=18;
end else
if (ball>=5) and (ball<15) then
begin
LbOCENKA.Caption:=' Вы очень плохо справились с тестированием!!!';
LbOCENKA.Font.Color:=clblue;
LbOCENKA.Font.Size:=14;
end else
if (ball>=15) and (ball<20) then
begin
LbOCENKA.Caption:=' Вы удовлетворительно справились с тестированием!!!';
LbOCENKA.Font.Color:=clblack;
LbOCENKA.Font.Size:=14;
end else
if (ball>=20) and (ball<25) then
begin
LbOCENKA.Caption:=' Вы хорошо справились с тестированием!!!';
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.