Сейчас подготовил серию уроков по созданию тестов на Delphi. Эта тема сейчас очень распространненая, так как много кто пишет курсовые по этим темам, дипломные и многое другое. Тех же самых сотрудников можно протестировать, так что эта тема очень распространненая. Предлагаю серию тестов с использованием файлов. Да с использованием БД — это хорошо, но если БД локальная, то дела все теже, что и с файлами. С БД я даже рассказывать не буду как делать, там вообще все просто, тем более я рассказал курс по работе с БД в Delphi. Так вот рассмотрим создание тестов используя два варианта. С использованием обычных файлов — dat, db или любой другой свой формат, а также с использованием ini-файлов. Скажу одно, что с использованием ini-файлов необходимо шифрование данных, я про него еще не рассказывал, но все как-нибудь доберусь. Шифрование нужно хотя бы для, того, чтобы пользователь, открыв файл не узнал правильный ответ, в dat-файле например, это можно кое-как скрыть и без шифрование, так что давайте попробуем для начала добавить данные в файл. То есть добавить (создать) наш тест. Для начала нам необходимо описать структуру, где будет храниться наш тест, а затем создать файл данной структуры.
Моя структура выглядит так

Type
TTest=record
Name_v:String[255];
otv:string[255];
count_v:integer;
count_otv:integer;
pr_ot:string[255];
end;

Здесь у меня

  • Name_v — вопрос
  • otv — ответ
  • count_v — количество вопросов
  • count_otv — количество ответов
  • pr_ot — правильные ответы

Далее мы описываем файл данной стуктуры, затем саму стуктуру и начинаем запись. Я про файлы не рассказывал (а надо было, займусь этим попозже), тут есть набор функций и процедур по работе с файлами. На событие формы — OnCreate мы создаем наш файл тестов

procedure TForm1.FormCreate(Sender: TObject);
var
F:File of TTest;
begin
try
count:=0;
AssignFile(F,'test.dat');
Rewrite(F);
except
on e:Exception do
end;
end;

Функции и процедуры по работе с файлами я расскажу потом, а сейчас менее подробно. Например AssignFile - связывает файловую переменную с именем файла. Rewrite - создает новый файл, Reset - открывае уже существующий файл, Seek - устанавливает указатель в файле на нужную компоненты (она нам очень пригодится). Также на форму я установил следующие компоненты

  • TButton — 2 шт
  • TEdit — 2 шт
  • TCheckListBox
  • TGroupBox

То есть у нас будут сколько угодно вариантов ответа и сколько угодно правильных ответов. Далее на кнопку добавления ответов в TChecklistBox я написал следующий код.

procedure TForm1.Button4Click(Sender: TObject);
begin
try
CheckListBox1.Items.Add(Edit2.Text);
Edit2.Clear;
except
on e:Exception do
end;
end;

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

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
F:File of TTest;
Test:TTest;
count,k:integer;
arr_pr_ot:array[1..255] of string;
begin
try
if (Trim(Edit1.Text)='') or (CheckListBox1.Count=0) then
begin
exit;
end;
inc(count);
Test.count_v:=3;
Test.count_otv:=CheckListBox1.Items.Count;
for i:=0 to CheckListBox1.Count-1 do
begin
Test.Name_v:=Edit1.Text;
if CheckListBox1.Checked[i] then
Test.pr_ot:=IntToStr(CheckListBox1.ItemIndex);
Test.otv:=CheckListBox1.Items[i];
Write(F,Test);
end;
if count=Test.count_v then
begin
ShowMessage('Test create compleate');
CloseFile(F);
count:=0;
end;
CheckListBox1.Clear;
Edit1.Clear;
except
on e:Exception do
end;
end;

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

Хочу заметить, что в настоящее время стали очень популярны торренты. Для тех кто не знает, торрент — это файлообменная сеть, с которой скачиваются файлы с помощью специального программного обеспечения, одним из таких является utorrent. Торренты очень популярны, так как скорость скачивание зависит от количества раздающих человек. Качайте на здоровье
Автор статьи - Andrey53

Метки: , ,




К записи “Создание тестов на Delphi. Часть 1” оставлено комментариев: 4.

  1. Прохожий:

    Никак на тест не похож Радиобаттоны используй и меньше пасаля в Форму суй это делпхи а не набор текстов

  2. Санёк:

    При записи в файл, компилятор ругался на count, я объявил его как integer, ошибка исчезла. Появилась другая, не получается теперь в файл записать. Остановка происходит здесь: Write(F,Test); пишет: Project Project1.exe raised exception class EInOutError with message ‘File access denied’. Process stopped. Use Step or Run to continue. Выручайте Андрей, хочется разобраться с этими тестами. А то по ним несколько статей, а я застрял уже на первой(

  3. Санёк:

    ‘File access denied’ я так понял — отсутствие доступа к файлу, возможно закрыт или ХЗ…
    Заработало только после того, как в коде для записи данных в файл, перед строчкой записи Write(F,Test);
    я по новой вписал AssignFile(F,’test.dat’); и Rewrite(F);
    Что скажете Андрей, на сколько правильно?

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

Вы можете использовать следующие теги:

*