ВСЕРОССИЙСКАЯ ДЕТСКО-ЮНОШЕСКАЯ НАУЧНО-ПРАКТИЧЕСКАЯ КОНФЕРЕНЦИЯ
В ОБЛАСТИ ПОЖАРНОЙ БЕЗОПАСНОСТИ
«МИР В НАШИХ РУКАХ!»
Секция «Информационные технологии и программирование»
Тест по пожарной безопасности
на языке программирования Borland Delphi 7
Герасин Олег,
МОУ гимназия № 3,
г. Аксай, 10 класс
Научный руководитель:
,
учитель информатики
первой категории
г. Аксай
2011 год
Содержание
Введение. 3
Программа «Тест 01». 4
Алгоритм работы программы.. 4
Системные требования. 5
Апробация теста с учащимися гимназии. 5
Заключение. 6
Литература. 7
Приложения. 8
Интерфейс программы.. 8
Образец документа database. txt с результатами тестирования. 10
Программный код на языке Borland Delphi 7. 11
Введение
Знание правил пожарной безопасности играет очень важную роль в обеспечении безопасности жизни и здоровья всего населения. Грамотное ознакомление подрастающего поколения с этими правилами – одна из задач организаций ВДПО, членов ДЮП и преподавателей в учебных заведениях. Не менее важно не только давать необходимые знания по пожарной тематике, но и осуществлять контроль над их усвоением.
В данный момент существует большое количество презентаций по теме «Пожарная безопасность». Однако, просмотрев сайты в Интернете, мы не встретили компьютерных программ, которые позволяют преподавателям ОБЖ и руководителям ДЮП осуществлять контроль знаний учащихся. Тесты по пожарной безопасности встречаются в литературе и Интернете в основном в виде текстовых документов, что подразумевает их ручную проверку, или в виде презентаций, что позволяет при тестировании учащимся увидеть правильные ответы, осуществив обычную навигацию по слайдам.
Цель данной работы: написать тестовую программу, проверяющую знания учащихся по пожарной безопасности.
Задачи:
Ø разработать удобный интерфейс программы;
Ø обеспечить в ходе тестирования пошаговую проверку правильности ответов;
Ø в результате работы программы определить уровень подготовленности тестируемого;
Ø составить динамичную программу, позволяющую преподавателю изменять вопросы к тесту;
Ø произвести апробацию теста с членами ДЮП и учащимися гимназии.
Тесты в современном учебном процессе широко внедряются в практику изучения многих предметов, в том числе и в преподавание дисциплины «Основы безопасности жизнедеятельности». К основным достоинствам метода тестового контроля следует отнести простоту и демократичность самой процедуры, возможность ее осуществления на компьютере и независимость от индивидуальных требований преподавателя.
Высокая эффективность контролирующих программ определяется тем, что они укрепляют обратную связь в системе учитель – ученик. Тестовые программы позволяют оценивать результаты работы, определить темы, в которых имеются пробелы в знаниях.
Программа «Тест 01»
Программа «Тест 01» написана для создания лучших условий проверки знаний по пожарной безопасности у учащихся. Программа располагает приятным интерфейсом, состоит из 2вариантов по 10 вопросов каждый. В программе предложены задания следующего вида: необходимо выбрать правильный ответ из числа предложенных. Данный вид теста предусматривает применение учебного материала для решения практических задач. Проходя тестирование учащиеся повторяют материал и учатся вести себя в экстремальной ситуации, связанной с пожаром.
Алгоритм работы программы
После запуска программы (файл Test01.exe) нужно выбрать один из вариантов теста. Затем в открывшемся окне нажать на кнопку «Начать тест» или выбрать команду Файл -->Начать тест.
Ввести свои имя, фамилию, номер класса или группы в соответствующие поля и нажать на кнопку «начать».
Вы увидите первый вопрос. Принятый вариант ответа (1, 2 или 3) следует записать в текстовое поле и нажать кнопку «принять ответ» или клавишу Enter. Программа сразу выдаёт сообщение, правильный это ответ или нет, переходит к следующему вопросу.
После окончания тестирования программа выдает на экран результаты в баллах (максимальный балл – 10). Такая шкала особенно актуальна в нашей гимназии, так как у нас принята 10-бальная система оценивания. Вместе с тем программа выдает и уровень подготовленности тестируемого в соответствии с количеством набранных баллов (отличный, хороший, средний, ниже среднего, низкий)
После окончания тестирования программа записывает данные о результатах каждого тестируемого с учетом времени прохождения в файл database. txt. Педагог может посмотреть результаты тестирования всех участников группы или класса в любое время и распечатать их. После этого результаты тестирования можно удалить обычным способом в текстовом редакторе и предоставить чистый файл для тестирования другой группы детей.
Особенность данной программы заключается в том, что она является динамичной, так как вопросы теста может изменять сам педагог, открыв текстовым редактором Блокнот файл voprosy1.db. Понять принцип построения вопросов очень легко, изменять вопросы и ответы на них не составит труда.
Системные требования
Для корректной работы программы рекомендуется установить на компьютере разрешение не менее 1024х768 (оптимально 1152 х 864, 1280 х 960 или 1280 х 1024).
Программа написана на языке программирования Borland Delphi 7 и сохранена как исполняемый файл с расширением «exe», поэтому не требует установки дополнительного программного обеспечения для IBM/PC совместимых компьютеров. Программа успешно работает в операционных системах Windows и Linux.
Апробация теста с учащимися гимназии
Данная программа «Тест 01» прошла апробацию с членами ДЮП и учащимися гимназии. Ребятам тест очень понравился и они с удовольствием отвечали на вопросы и с нетерпением ждали оценку, которую им выдаст компьютер. Использование данного теста повысило мотивацию и интерес учащихся к изучению правил пожарной безопасности. Данный тест используется членами ДЮП нашей гимназии для эффективной работы с детьми.
Одними из тестируемых были члены Детского объединения «Радуга» нашей гимназии (16 человек). Результаты тестирования можно видеть на диаграмме.

Заключение
Созданная программа «Тест 01» имеет важное значение в деле пропаганды пожарной безопасности подрастающего поколения и позволяет оперативно осуществлять контроль знаний по данной тематике. Данная программа позволяет дифференцировать уровень подготовленности учащихся в зависимости от количества набранных баллов. Преподаватели ОБЖ, руководители ДЮП и учителя могут сами создать базу со своими вопросами, что позволяет расширить диапазон применения «Теста 01». Данная программа с успехом прощла апробацию в гимназии с учащимися разных классов.
Цели, поставленные в начале работы, достигнуты. Создан новый программный продукт, решающий все поставленные выше задачи.
Литература
1. , Иванников не было беды. М.: Стройиздат, 1992.
2. Попова разработки по основам безопасности жизнедеятельности: 5 класс. – М.: ВАКО, 2008.
3. http://rost. *****
4. http://www. fire. *****/
5. http://*****
6. http://www. *****/exams/index. php? ei:e=1
7. http://*****/kbzhd/detail. php? ID=1573
Приложения
Интерфейс программы




Образец документа database. txt с результатами тестирования

Программный код на языке Borland Delphi 7
Выбор теста:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
btn1: TButton;
btn2: TButton;
btn4: TButton;
v1: TLabel;
procedure btn4Click(Sender: TObject);
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
s:string;
implementation
{$R *.dfm}
procedure TForm1.btn4Click(Sender: TObject);
begin
close;
end;
procedure TForm1.btn1Click(Sender: TObject);
begin
s:='Вариант №1/TestOs. exe /minimize';
WinExec (PChar(s),SW_SHOWDEFAULT);
Close;
end;
procedure TForm1.btn2Click(Sender: TObject);
begin
s:='Вариант №2/TestOs. exe /minimize';
WinExec (PChar(s),SW_SHOWDEFAULT);
Close;
end;
end.
Вариант №1
unit MainForm;
interface
uses about,
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus, NameEntr, jpeg, ExtCtrls;
const put_k_voprosam1='Вариант №1/Voprosy1.db';
put_k_voprosam2='';
put_k_data_base='Вариант №1/database';
rasshirenie_file_data_base='.txt';
voprosov_v_teste=10;
max_variantov=4;
max_otvetov=50;
kluch='314159';
max_voprosov=100;
put_k_parolu='c:\windows\system32\OSPassword. db';
strok_v_voprose=10;
bukv_stroke_voprosa:integer=63;
type
tstudents=record
name, familiya, group, resultat:string;
end;
tvse_voprosy=record
vopros:array[1..10] of string;
otvety:array[1..max_otvetov] of string;
end;
TForm1 = class(TForm)
nachalo: TButton;
Cancel: TButton;
otvet: TEdit;
Labelotvet: TLabel;
Otvetgotov: TButton;
MainMenu1: TMainMenu;
Labelvopros: TLabel;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
vopros: TLabel;
Image1: TImage;
img1: TImage;
procedure chtenie_voprosov;
procedure CancelClick(Sender: TObject);
procedure nachaloClick(Sender: TObject);
procedure vivod_voprosa;
procedure vivod_poley_voprosa;
procedure OtvetgotovClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
function resultat:integer;
procedure zapis_v_data_base;
function proverka:boolean;
procedure n7click(sender:tobject);
procedure otvetkeypress(sender:tobject;var key:char);
private
{ Private declarations }
vse_voprosy:array[1..max_voprosov]of tvse_voprosy;
ispol_voprosy:array[1..voprosov_v_teste] of integer;
schitano_voprosov:integer;
tek_vopros, nomer:integer;
file_s_voprosami:text;
otvety_na_voprosy:array[1..voprosov_v_teste] of boolean;
public
student:tstudents;
students:array[1..200] of tstudents;
end;
var
Form1: TForm1;
s:tstrings;
implementation
{$R *.dfm}
function tform1.proverka:boolean;
var file_db:textfile;
n, vsego_proshli:integer;
str:string;
uroven:string;
begin
if not fileexists(put_k_data_base+rasshirenie_file_data_base)then
begin
proverka:=false;
exit;
end;
assignfile(file_db, put_k_data_base+rasshirenie_file_data_base);
reset(file_db);
if ioresult=0 then
begin {n 103}
n:=0;
while not(eof(file_db))do
begin {n 101}
n:=n+1;
readln(file_db, students[n].name);
delete(students[n].name,1,4);
readln(file_db, students[n].familiya);
delete(students[n].familiya,1,8);
readln(file_db, str);
readln(file_db, str);
readln(file_db, str);
readln(file_db, str);
end; {k 101}
vsego_proshli:=n;
for n:=1 to vsego_proshli do
begin {n 102}
if (students[n].name=student. name) and
(students[n].familiya=student. familiya) then
begin
messagedlg('Извините, вы уже проходили этот тест отойдите от пожалуйста от компьютера',mtinformation,[mbok],0);
proverka:=true;
exit;
end;
end; {k 102}
end {k 103}
else proverka:=false;
closefile(file_db);
end;
procedure tform1.otvetkeypress(sender:tobject;var key:char);
begin
if key=#13 then
otvetgotov. Click;
end;
procedure tform1.zapis_v_data_base;
var file_db:textfile;
begin
if fileexists(put_k_data_base+rasshirenie_file_data_base) then
begin
assignfile(file_db, put_k_data_base+rasshirenie_file_data_base);
append(file_db);
end
else
begin
assignfile(file_db, put_k_data_base+rasshirenie_file_data_base);
rewrite(file_db);
end;
writeln(file_db,'Имя '+student. name);
writeln(file_db,'Фамилия '+student. familiya);
writeln(file_db,'Группа '+student. group);
writeln(file_db,'Дата '+datetostr(date));
writeln(file_db,'Время '+timetostr(time));
writeln(file_db,'Результат '+student. resultat);
writeln(file_db,' ');
{ flush(file_db);}
closefile(file_db);
end;
function tform1.resultat:integer;
var i, kol_vo_pravilnyh:integer;
begin
kol_vo_pravilnyh:=0;
for i:=1 to voprosov_v_teste do
begin
if form1.otvety_na_voprosy[i] then
kol_vo_pravilnyh:=kol_vo_pravilnyh+1;
end;
resultat:=round(10*(kol_vo_pravilnyh/voprosov_v_teste));
end;
procedure tform1.chtenie_voprosov;
label 1,2;
var
schyotchik, i,j:integer;
str:string;
b1,b2:boolean;
begin
str:=put_k_voprosam1;
b1:=FileExists(put_k_voprosam1);
b2:=FileExists(put_k_voprosam2);
if (b1) and (b2 )then
begin
str:=put_k_voprosam1;
end;
if (b1) and (not (b2))then
begin
str:=put_k_voprosam1;
end;
if (b2) and (not (b1)) then
begin
str:=put_k_voprosam2;
end;
if (not (b1))and(not (b2)) then
begin
showmessage('Не найден файл с вопросами');
halt;
end;
try
schyotchik:=0;
assignfile(file_s_voprosami, str);
reset(file_s_voprosami);
while not(seekeof(file_s_voprosami)) do
begin {n 001}
schyotchik:=schyotchik+1;
i:=0;
repeat
i:=i+1;
readln(file_s_voprosami, vse_voprosy[schyotchik].vopros[i]);
until vse_voprosy[schyotchik].vopros[i]='end of question';
vse_voprosy[schyotchik].vopros[i]:='';
for i:=1 to max_otvetov-1 do
begin {n 003}
readln(file_s_voprosami, vse_voprosy[schyotchik].otvety[i]);
if vse_voprosy[schyotchik].otvety[i]='end' then
begin {n 004}
for j:=i to max_otvetov do
vse_voprosy[schyotchik].otvety[j]:=kluch;
goto 1;
end; {k 004}
end; {k 003}
1:end; {k 001} 2:
closefile(file_s_voprosami);
schitano_voprosov:=schyotchik;
if schitano_voprosov<voprosov_v_teste then
begin
MessageDlg('Количество вопросов в тесте превышает количество вопросов в базе данных пожалуйста обновите Базу Данных',mterror,[mbok],0);
exit;
end;
except
MessageDlg('Неверен формат Базы Данных',mterror,[mbok],0);
end;
end;
procedure tform1.vivod_poley_voprosa;
var sam_vopros:string;
i:integer;
begin
labelvopros. Visible:=true;
vopros. Visible:=true;
otvet. Visible:=true;
labelotvet. Visible:=true;
otvetgotov. Visible:=true;
sam_vopros:='';
for i:=1 to strok_v_voprose do
sam_vopros:=sam_vopros+vse_voprosy[nomer].vopros[i];
end;
procedure tform1.vivod_voprosa;
label 1;
var i, j:integer;
begin
form1.vopros. Caption:='';
randomize;
labelvopros. Caption:='Вопрос №'+inttostr(tek_vopros);
1:nomer:=trunc(random(schitano_voprosov))+1;
if tek_vopros>=1 then
for i:=1 to tek_vopros do
begin
if (ispol_voprosy[i]=nomer) or (nomer>schitano_voprosov) then goto 1;
end
else nomer:=trunc(schitano_voprosov)+1;
ispol_voprosy[tek_vopros]:=nomer;
form1.vivod_poley_voprosa;
j:=1;
for i:=1 to strok_v_voprose do
begin // n 301
for j:=1 to Trunc(length(vse_voprosy[nomer].vopros[i])/bukv_stroke_voprosa)+1 do
if not((i=1) and (j=1)) then
vopros. Caption:=vopros. Caption+copy(vse_voprosy[nomer].vopros[i],(j-1)*bukv_stroke_voprosa+1,bukv_stroke_voprosa)
else
vopros. Caption:=vopros. Caption+copy(vse_voprosy[nomer].vopros[i],(j-1)*bukv_stroke_voprosa-1,bukv_stroke_voprosa)
end; // k 301
otvet. Text:='';
end;
procedure TForm1.CancelClick(Sender: TObject);
begin
close;
end;
procedure TForm1.nachaloClick(Sender: TObject);
begin
form2.ShowModal;
if not(form2.vvedenie_imeni) then exit
else
begin
student. name:=form2.name. Text;
student. familiya:=form2.Familiya. Text;
student. group:=form2.gruppa. Text;
if form1.proverka then close;
end;
screen. Cursor:=crappstart;
form1.chtenie_voprosov;
screen. Cursor:=crdefault;
tek_vopros:=1;
form1.vivod_voprosa;
otvet. SetFocus;
N5.Enabled:=true;
end;
procedure TForm1.OtvetgotovClick(Sender: TObject);
var i:integer; uroven:string;
begin
for i:=1 to max_otvetov-1 do
begin //n 200
if otvet. Text=vse_voprosy[nomer].otvety[i] then
begin //n 201
messagedlg( 'Ответ правильный',mtconfirmation,[mbok],0);
otvety_na_voprosy[tek_vopros]:=true;
tek_vopros:=tek_vopros+1;
otvet. SetFocus;
if tek_vopros=voprosov_v_teste+1 then
begin //n 202
if ((form1.resultat =9) or (form1.resultat = 10)) then
uroven := 'Вы отлично подготовлены';
if ((form1.resultat =7) or (form1.resultat = 8)) then
uroven := 'Вы хорошо подготовлены';
if ((form1.resultat =5) or (form1.resultat = 6)) then
uroven := 'Уровень подготовки средний';
if ((form1.resultat =3) or (form1.resultat = 4)) then
uroven := 'Уровень подготовки ниже среднего';
if ((form1.resultat =1) or (form1.resultat = 2) or (form1.resultat = 0)) then
uroven := 'У вас очень слабая подготовка';
Labelvopros. Caption:= 'Тест окончен';
vopros. Caption :='';
otvet. text:='';
Labelotvet. Caption:='';
messagedlg('Вы закончили тест, ваша оценка '+inttostr(form1.resultat)+' из 10. ' + uroven, mtconfirmation,[mbok],0);
student. resultat:=inttostr(form1.resultat);
form1.zapis_v_data_base;
close;
end; //k 202
form1.vivod_voprosa;
exit;
end; // k 201
end; // k 200
if not(otvety_na_voprosy[tek_vopros]) then
begin //n 203
messagedlg('Ответ неправильный',mtconfirmation,[mbok],0);
otvety_na_voprosy[tek_vopros]:=false;
tek_vopros:=tek_vopros+1;
if tek_vopros=voprosov_v_teste+1 then
begin //n 204
if ((form1.resultat =9) or (form1.resultat = 10)) then
uroven := 'Вы отлично подготовлены';
if ((form1.resultat =7) or (form1.resultat = 8)) then
uroven := 'Вы хорошо подготовлены';
if ((form1.resultat =5) or (form1.resultat = 6)) then
uroven := 'Уровень подготовки средний';
if ((form1.resultat =3) or (form1.resultat = 4)) then
uroven := 'Уровень подготовки ниже среднего';
if ((form1.resultat =1) or (form1.resultat = 2) or (form1.resultat = 0)) then
uroven := 'У вас очень слабая подготовка';
Labelvopros. Caption:= 'Тест окончен';
vopros. Caption :='';
otvet. text:='';
Labelotvet. Caption:='';
messagedlg('Вы закончили тест, ваша оценка '+inttostr(form1.resultat)+' из 10. '+ uroven, mtconfirmation,[mbok],0);
student. resultat:=inttostr(form1.resultat);
form1.zapis_v_data_base;
close;
end; // k 204
form1.vivod_voprosa;
end; // k 203
otvet. SetFocus;
end;
procedure TForm1.FormCreate(Sender: TObject);
var i, j:integer;
begin
for j:=1 to max_voprosov do
for i:=1 to strok_v_voprose do
begin
vse_voprosy[j].vopros[i]:='';
end;
for i:=1 to voprosov_v_teste do
begin
otvety_na_voprosy[i]:=false;
ispol_voprosy[i]:=0;
end;
if fileexists(put_k_parolu) then
begin
end;
end;
procedure tform1.n7click(sender:tobject);
begin
aboutbox. ShowModal;
end;
end.
Вариант №2
unit MainForm;
interface
uses about,
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus, NameEntr, jpeg, ExtCtrls;
const put_k_voprosam1='Вариант №2/voprosy1.db';
put_k_voprosam2='';
put_k_data_base='Вариант №2/database';
rasshirenie_file_data_base='.txt';
voprosov_v_teste=10;
max_variantov=4;
max_otvetov=50;
kluch='314159';
max_voprosov=100;
put_k_parolu='c:\windows\system32\OSPassword. db';
strok_v_voprose=10;
bukv_stroke_voprosa:integer=63;
type
tstudents=record
name, familiya, group, resultat:string;
end;
tvse_voprosy=record
vopros:array[1..10] of string;
otvety:array[1..max_otvetov] of string;
end;
TForm1 = class(TForm)
nachalo: TButton;
Cancel: TButton;
otvet: TEdit;
Labelotvet: TLabel;
Otvetgotov: TButton;
MainMenu1: TMainMenu;
Labelvopros: TLabel;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
vopros: TLabel;
Image1: TImage;
img1: TImage;
procedure chtenie_voprosov;
procedure CancelClick(Sender: TObject);
procedure nachaloClick(Sender: TObject);
procedure vivod_voprosa;
procedure vivod_poley_voprosa;
procedure OtvetgotovClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
function resultat:integer;
procedure zapis_v_data_base;
function proverka:boolean;
procedure n7click(sender:tobject);
procedure otvetkeypress(sender:tobject;var key:char);
private
{ Private declarations }
vse_voprosy:array[1..max_voprosov]of tvse_voprosy;
ispol_voprosy:array[1..voprosov_v_teste] of integer;
schitano_voprosov:integer;
tek_vopros, nomer:integer;
file_s_voprosami:text;
otvety_na_voprosy:array[1..voprosov_v_teste] of boolean;
public
student:tstudents;
students:array[1..200] of tstudents;
end;
var
Form1: TForm1;
s:tstrings;
implementation
{$R *.dfm}
function tform1.proverka:boolean;
var file_db:textfile;
n, vsego_proshli:integer;
str:string;
begin
if not fileexists(put_k_data_base+rasshirenie_file_data_base)then
begin
proverka:=false;
exit;
end;
assignfile(file_db, put_k_data_base+rasshirenie_file_data_base);
reset(file_db);
if ioresult=0 then
begin {n 103}
n:=0;
while not(eof(file_db))do
begin {n 101}
n:=n+1;
readln(file_db, students[n].name);
delete(students[n].name,1,4);
readln(file_db, students[n].familiya);
delete(students[n].familiya,1,8);
readln(file_db, str);
readln(file_db, str);
readln(file_db, str);
readln(file_db, str);
end; {k 101}
vsego_proshli:=n;
for n:=1 to vsego_proshli do
begin {n 102}
if (students[n].name=student. name) and
(students[n].familiya=student. familiya) then
begin
messagedlg('Извините, вы уже проходили этот тест отойдите от пожалуйста от компьютера',mtinformation,[mbok],0);
proverka:=true;
exit;
end;
end; {k 102}
end {k 103}
else proverka:=false;
closefile(file_db);
end;
procedure tform1.otvetkeypress(sender:tobject;var key:char);
begin
if key=#13 then
otvetgotov. Click;
end;
procedure tform1.zapis_v_data_base;
var file_db:textfile;
begin
if fileexists(put_k_data_base+rasshirenie_file_data_base) then
begin
assignfile(file_db, put_k_data_base+rasshirenie_file_data_base);
append(file_db);
end
else
begin
assignfile(file_db, put_k_data_base+rasshirenie_file_data_base);
rewrite(file_db);
end;
writeln(file_db,'Имя '+student. name);
writeln(file_db,'Фамилия '+student. familiya);
writeln(file_db,'Группа '+student. group);
writeln(file_db,'Дата '+datetostr(date));
writeln(file_db,'Время '+timetostr(time));
writeln(file_db,'Результат '+student. resultat);
writeln(file_db,' ');
{ flush(file_db);}
closefile(file_db);
end;
function tform1.resultat:integer;
var i, kol_vo_pravilnyh:integer;
begin
kol_vo_pravilnyh:=0;
for i:=1 to voprosov_v_teste do
begin
if form1.otvety_na_voprosy[i] then
kol_vo_pravilnyh:=kol_vo_pravilnyh+1;
end;
resultat:=round(10*(kol_vo_pravilnyh/voprosov_v_teste));
end;
procedure tform1.chtenie_voprosov;
label 1,2;
var
schyotchik, i,j:integer;
str:string;
b1,b2:boolean;
begin
str:=put_k_voprosam1;
b1:=FileExists(put_k_voprosam1);
b2:=FileExists(put_k_voprosam2);
if (b1) and (b2 )then
begin
str:=put_k_voprosam1;
end;
if (b1) and (not (b2))then
begin
str:=put_k_voprosam1;
end;
if (b2) and (not (b1)) then
begin
str:=put_k_voprosam2;
end;
if (not (b1))and(not (b2)) then
begin
showmessage('Не найден файл с вопросами');
halt;
end;
try
schyotchik:=0;
assignfile(file_s_voprosami, str);
reset(file_s_voprosami);
while not(seekeof(file_s_voprosami)) do
begin {n 001}
schyotchik:=schyotchik+1;
i:=0;
repeat
i:=i+1;
readln(file_s_voprosami, vse_voprosy[schyotchik].vopros[i]);
until vse_voprosy[schyotchik].vopros[i]='end of question';
vse_voprosy[schyotchik].vopros[i]:='';
for i:=1 to max_otvetov-1 do
begin {n 003}
readln(file_s_voprosami, vse_voprosy[schyotchik].otvety[i]);
if vse_voprosy[schyotchik].otvety[i]='end' then
begin {n 004}
for j:=i to max_otvetov do
vse_voprosy[schyotchik].otvety[j]:=kluch;
goto 1;
end; {k 004}
end; {k 003}
1:end; {k 001} 2:
closefile(file_s_voprosami);
schitano_voprosov:=schyotchik;
if schitano_voprosov<voprosov_v_teste then
begin
MessageDlg('Количество вопросов в тесте превышает количество вопросов в базе данных пожалуйста обновите Базу Данных',mterror,[mbok],0);
exit;
end;
except
MessageDlg('Неверен формат Базы Данных',mterror,[mbok],0);
end;
end;
procedure tform1.vivod_poley_voprosa;
var sam_vopros:string;
i:integer;
begin
labelvopros. Visible:=true;
vopros. Visible:=true;
otvet. Visible:=true;
labelotvet. Visible:=true;
otvetgotov. Visible:=true;
sam_vopros:='';
for i:=1 to strok_v_voprose do
sam_vopros:=sam_vopros+vse_voprosy[nomer].vopros[i];
end;
procedure tform1.vivod_voprosa;
label 1;
var i, j:integer;
begin
form1.vopros. Caption:='';
randomize;
labelvopros. Caption:='Вопрос №'+inttostr(tek_vopros);
1:nomer:=trunc(random(schitano_voprosov))+1;
if tek_vopros>=1 then
for i:=1 to tek_vopros do
begin
if (ispol_voprosy[i]=nomer) or (nomer>schitano_voprosov) then goto 1;
end
else nomer:=trunc(schitano_voprosov)+1;
ispol_voprosy[tek_vopros]:=nomer;
form1.vivod_poley_voprosa;
j:=1;
for i:=1 to strok_v_voprose do
begin // n 301
for j:=1 to Trunc(length(vse_voprosy[nomer].vopros[i])/bukv_stroke_voprosa)+1 do
if not((i=1) and (j=1)) then
vopros. Caption:=vopros. Caption+copy(vse_voprosy[nomer].vopros[i],(j-1)*bukv_stroke_voprosa+1,bukv_stroke_voprosa)
else
vopros. Caption:=vopros. Caption+copy(vse_voprosy[nomer].vopros[i],(j-1)*bukv_stroke_voprosa-1,bukv_stroke_voprosa)
end; // k 301
otvet. Text:='';
end;
procedure TForm1.CancelClick(Sender: TObject);
begin
close;
end;
procedure TForm1.nachaloClick(Sender: TObject);
begin
form2.ShowModal;
if not(form2.vvedenie_imeni) then exit
else
begin
student. name:=form2.name. Text;
student. familiya:=form2.Familiya. Text;
student. group:=form2.gruppa. Text;
if form1.proverka then close;
end;
screen. Cursor:=crappstart;
form1.chtenie_voprosov;
screen. Cursor:=crdefault;
tek_vopros:=1;
form1.vivod_voprosa;
otvet. SetFocus;
N5.Enabled:=true;
end;
procedure TForm1.OtvetgotovClick(Sender: TObject);
var i:integer; uroven:string;
begin
for i:=1 to max_otvetov-1 do
begin //n 200
if otvet. Text=vse_voprosy[nomer].otvety[i] then
begin //n 201
messagedlg('Ответ правильный',mtconfirmation,[mbok],0);
otvety_na_voprosy[tek_vopros]:=true;
tek_vopros:=tek_vopros+1;
otvet. SetFocus;
if tek_vopros=voprosov_v_teste+1 then
begin //n 202
if ((form1.resultat =9) or (form1.resultat = 10)) then
uroven := 'Вы отлично подготовлены';
if ((form1.resultat =7) or (form1.resultat = 8)) then
uroven := 'Вы хорошо подготовлены';
if ((form1.resultat =5) or (form1.resultat = 6)) then
uroven := 'Уровень подготовки средний';
if ((form1.resultat =3) or (form1.resultat = 4)) then
uroven := 'Уровень подготовки ниже среднего';
if ((form1.resultat =1) or (form1.resultat = 2) or (form1.resultat = 0)) then
uroven := 'У вас очень слабая подготовка';
Labelvopros. Caption:= 'Тест окончен';
vopros. Caption :='';
otvet. Text:='';
Labelotvet. Caption:='';
messagedlg('Вы закончили тест, ваша оценка '+inttostr(form1.resultat)+' из 10. ' + uroven, mtconfirmation,[mbok],0);
student. resultat:=inttostr(form1.resultat);
form1.zapis_v_data_base;
close;
end; //k 202
form1.vivod_voprosa;
exit;
end; // k 201
end; // k 200
if not(otvety_na_voprosy[tek_vopros]) then
begin //n 203
messagedlg('Ответ неправильный',mtconfirmation,[mbok],0);
otvety_na_voprosy[tek_vopros]:=false;
tek_vopros:=tek_vopros+1;
if tek_vopros=voprosov_v_teste+1 then
begin //n 204
if ((form1.resultat =9) or (form1.resultat = 10)) then
uroven := 'Вы отлично подготовлены';
if ((form1.resultat =7) or (form1.resultat = 8)) then
uroven := 'Вы хорошо подготовлены';
if ((form1.resultat =5) or (form1.resultat = 6)) then
uroven := 'Уровень подготовки средний';
if ((form1.resultat =3) or (form1.resultat = 4)) then
uroven := 'Уровень подготовки ниже среднего';
if ((form1.resultat =1) or (form1.resultat = 2) or (form1.resultat = 0)) then
uroven := 'У вас очень слабая подготовка';
Labelvopros. Caption:= 'Тест окончен';
vopros. Caption :='';
otvet. text:='';
Labelotvet. Caption:='';
messagedlg('Вы закончили тест, ваша оценка '+inttostr(form1.resultat)+' из 10. '+ uroven, mtconfirmation,[mbok],0);
student. resultat:=inttostr(form1.resultat);
form1.zapis_v_data_base;
close;
end; // k 204
form1.vivod_voprosa;
end; // k 203
otvet. SetFocus;
end;
procedure TForm1.FormCreate(Sender: TObject);
var i, j:integer;
begin
for j:=1 to max_voprosov do
for i:=1 to strok_v_voprose do
begin
vse_voprosy[j].vopros[i]:='';
end;
for i:=1 to voprosov_v_teste do
begin
otvety_na_voprosy[i]:=false;
ispol_voprosy[i]:=0;
end;
if fileexists(put_k_parolu) then
begin
end;
end;
procedure tform1.n7click(sender:tobject);
begin
aboutbox. ShowModal;
end;
end.
Тестирование учащихся гимназии




