Сейчас подготовил серию уроков по созданию тестов на 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;
Как видите мы просто записываем в цикле наши оветы с вопросами, с количеством, то есть в одной строке все. В следующей статья я расскажу как считать из файла все эти вопросы, а затем поговорим как определить правильный ли вопрос выбрал пользователь или нет. Проект пока что не прилаживаю, так как выложу его в конечном итоге.