Итак продолжу серию статей по созданию тестов на Delphi с помощью файлов. В первой части мы узнали как можно записать наш тест в типизированный файл, напомню, что запись происходит по определенной структуре, то есть «записи«, которую мы описали и Вы сможете увидеть в первой части нашей статьи. Далее во второй части мы узнали как можно считать все вопросы из типизированного файла и отобразить их в

  • TCheckListBox
  • TEdit

Теперь мы обсудим как определить выбрал ли пользователь правильные ответы. Для этого, если вспомните, я в нашей структуре описал поле pr_ot:string[255], и определяю, если стоял указатель на выбранном ответе, то я в эту переменную записывал номер выбранного правильного ответа пользователя, если ничего не выбрано, то присваивал пустое значение. Далее при считывании из файла, я получал для каждого вопроса номер правильного ответа и если он там был, то формировал переменную с этими всеми правильными ответами вот так

  • pr_ot=1 2

То есть получая такую переменную, в которой есть 1 пробел 2, я знаю, что правильные ответы это под номером 1 и под номером 2.

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

  • pr_user_ot=2 3

То есть здесь я уже знаю, что пользователь выбрал 2 и 3 вариант ответа и потом я просто сравнивал эти переменные, если равны, то правильный вопрос (ему засчитывается), если нету, то неправильные. Вот код, что я написал на кнопку «Открыть» (имеется ввиду открыть тест) на событие OnClick

procedure TForm1.Button5Click(Sender: TObject);
var
 i,j:integer;
begin
   try
   if OpenDialog1.Execute then
    begin
     pr_ot:='';
     k:=1;
     CheckListBox1.Clear;
     AssignFile(F,OpenDialog1.FileName);
     Reset(F);
     Seek(F,count);
     if Eof(F)=True then
      begin
       Edit1.Clear;
       CheckListBox1.Clear;
       ShowMessage('All test loaded');
       CloseFile(F);
       exit;
      end;
     Read(F,Test);
     j:=Test.count_otv;
     for i:=0 to j-1 do
      begin
       Seek(F,count);
       if Eof(F)=True then
        begin
         Edit1.Clear;
         CheckListBox1.Clear;
         ShowMessage('All test loaded');
         CLoseFile(F);
         exit;
        end;
       Read(F,Test);
       if Test.pr_ot<>'' then
        pr_ot:=pr_ot+' '+Test.pr_ot;
       CheckListBox1.Items.Add(Test.otv);
       Edit1.Text:=Test.Name_v;
       inc(count);
      end;
     end;
   except
    on e:Exception do
     CloseFile(F);
   end;
end;

Этот код я уже формировал и показывал Вам. И выше уже все пояснено, что и как я организовывал, далее я написал на кнопку «Далее» (имеется ввиду открыть следующий вопрос) на событие OnClick следующий код

procedure TForm1.Button3Click(Sender: TObject);
var
 i,j:integer;
begin
   try
    for i:=0 to CheckListBox1.Items.Count-1 do
     begin
      if CheckListBox1.Checked[i] then
       pr_ch_ot:=pr_ch_ot+' '+IntToStr(i);
     end;
     if pr_ot[Length(pr_ot)]=' ' then
      pr_ch_ot:=pr_ch_ot+' ';
     if pr_ch_ot=pr_ot then
      begin
       Application.MessageBox('Yes','Test',MB_OK);
      end
     else
      begin
       Application.MessageBox('No','Test',MB_OK);
      end;
    pr_ch_ot:='';
    CheckListBox1.Items.Clear;
    Edit1.Clear;
    Seek(F,count);
    if EOF(F)=True then
     begin
      Application.MessageBox('All Test Loaded','Test',MB_OK);
      exit;
     end;
    Read(F,Test);
    j:=Test.count_otv;
    pr_ot:='';
    for i:=1 to j do
     begin
      Seek(F,count);
      if EOF(F)=True then
       begin
        Application.MessageBox('All Test Loaded','Test',MB_OK);
        exit;
       end;
      Read(F,Test);
      CheckListBox1.Items.Add(Test.otv);
      if Test.pr_ot<>'' then
       pr_ot:=pr_ot+' '+Test.pr_ot;
      Edit1.Text:=Test.Name_v;
      inc(count);
     end;
   except
    on e:Exception do
   end;
end;

Как видите то, что я Вам и говорил считываю значение, что выбрал юзер и потом сравниваю. Если Вы хотите организовать так, чтобы например если пользователь выбрал не все правильные ответы, а только часть, то можете организовать количество входимости выбранных пользователем в правильные, и в зависимости от количество выводить результат и ставить оценку, засчитывать нужный Вам балл. А организовать это, Вам надо тогда формировать не переменную с выбранными ответами юзера, а сразу с помощью pos искать в правильных ответах и увеличивать переменную, а потом анализировать количество вошедших ответов в правильные. В следующей статье про тесты поговорим, как можно организовать тесты на файлах, использую и картинки и другие типы файлов.

Хочу заметить, что сейчас почти каждый пользователь компьютера имеет у себя в наличии текстовые, табличные редакторы. Лучшим пакетом данного программного обеспечения являются Microsoft Office. Вы можете microsoft office скачать русская версия и убедиться в этом, так как там действительно очень много нововведений по сравнение с прошлыми версиями. Так что данная версия удалась

Исходники статьи качаем тут

Автор статьи - Andrey53

Метки: , ,

Оставить комментарий

Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*