ВСЕРОССИЙСКАЯ ДЕТСКО-ЮНОШЕСКАЯ НАУЧНО-ПРАКТИЧЕСКАЯ КОНФЕРЕНЦИЯ

В ОБЛАСТИ ПОЖАРНОЙ БЕЗОПАСНОСТИ

«МИР В НАШИХ РУКАХ!»

Секция «Информационные технологии и программирование»

Тест по пожарной безопасности

на языке программирования 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.

Тестирование учащихся гимназии