Разработка программы «Тест по теоретической механике», страница 3

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:=' Вы хорошо справились с тестированием!!!';