Пояснительная записка на 39 листах

Вид материалаПояснительная записка

Содержание


II. Практическая часть – программа проведения тестов
Головная форма (Intro) и модуль Unit1.
Блок тестирования (Process) и модуль Unit2
Рисунок 1 - Модуль тестирования
Подобный материал:
1   2   3
^

II. Практическая часть – программа проведения тестов


Программа организована в виде трех форм и четырех модулей:

Модули:

Имя модуля

Назначение

Unit1

Модуль с обработчиками для головной формы (ввод Фамилии, Имени и Реакция пользователя, при готовности к началу тестирования)

Unit2

Модуль с непосредственной реализацией тестировани

Unit3

Модуль вывода результатов

GlobalEmb

Дополнительные переменные и функции общего пользования
  1. ^

    Головная форма (Intro) и модуль Unit1.


Здесь тестируемый должен ввести имя и фамилию.



Листинг программы имеет следующий вид:

unit Unit1; //Приглашение к работе


interface


uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Unit2, Unit3, GlobalEmb;


type

TIntro = class(TForm) //Сама форма

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

EntSur: TEdit;

EntName: TEdit;

StartTest: TButton;

procedure StartTestClick(Sender: TObject);

procedure Terminate(Sender: TObject; var Action: TCloseAction);

private

{ Private declarations }

public

{ Public declarations }

end;


var

Intro: TIntro;


Implementation


{$R *.dfm}


procedure TIntro.StartTestClick(Sender: TObject); //Передаем данные для дальнейшего использования

begin

StName:=EntName.Text; //Имя

StSurName:=EntSur.Text; //И фамилию

Counter:=0; //Изначально, вопросов не задано

Rights:=0; //Правильных ответов тоже нет

Intro.Hide; //Скрываем форму

Process.Show; //Открываем новую

end;


procedure TIntro.Terminate(Sender: TObject; var Action: TCloseAction); //Если пользователь закрыл приложение

begin

System.Halt;

end;


end.

  1. ^

    Блок тестирования (Process) и модуль Unit2;


При нажатии на кнопку «Начать тест!!!» происходит считывание вопросов текстового файла «\test.txt». Блок реализует сам процесс тестирования. Файл с вопросами и ответами имеет имя ‘test.txt’(как уже было указано выше) и должен располагаться в том же каталоге, из которого вызывается программа.Правильным считается первый ответ.





^ Рисунок 1 - Модуль тестирования


Тест состоит из 80 вопросов, которые можно изменять или удалять. Каждый вопрос имеет только один правильный ответ. Если тестируемый не ответил на вопрос и нажал «Далее», то вопрос считается неверным.

Листинг программы:


unit Unit2; // сам тест


interface


uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ExtCtrls, Unit3, GlobalEmb;


type

TVector=array [1..3] of String; //Перетасовка вопросов

TProcess = class(TForm)

QuestTitle: TLabel;

Vars: TRadioGroup;

Var1: TRadioButton;

var2: TRadioButton;

var3: TRadioButton;

Button1: TButton;

Button2: TButton;

procedure FormCreate(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Terminate(Sender: TObject; var Action: TCloseAction);

private

{ Private declarations }

public

{ Public declarations }

end;


var

Process: TProcess;

c1:byte;

implementation


{$R *.dfm}


procedure TProcess.FormCreate(Sender: TObject); //Подготовка условий

var

S:String; //Временная строка

St:TVector; //Список вариантов

i:byte; //Счетчик

begin

Process.Caption:='Добро пожаловать, '+StName+#32+StSurName; //Формирование заголовка окна с учетом фамилии и имени


reset(Questions); //Открыли файл для чтения

Button1.Caption:='Далее>>'; //Задали подпись для кнопки

Wrong:=nil; //Неверных ответов пока нет

randomize; //Инициализация генератора случайных чисел для перетасовки ответов


if not SeekEof(Questions) then //Файл непуст

begin

system.Readln(Questions,S); //Считываем заголовок

QuestTitle.Caption:=S; //Выводим его

for i:=1 to 3 do //Считываем варианты ответов

System.Readln(Questions,St[i]);

c1:=random(3)+1; //Находим, ч каким номером поменять ответ, при этом сохранить код верного ответа (c1)


S:=St[1]; //Меняем варианты местами

St[1]:=St[c1];

St[c1]:=S;

Var1.Caption:=St[1]; //Вывод вариантов ответов - код правильного ответа в c1


Var2.Caption:=St[2];

Var3.Caption:=St[3];

Var1.Checked:=False; //Еще ни один ответ не выбран

Var2.Checked:=False;

Var3.Checked:=False;

end

end;


procedure TProcess.Button1Click(Sender: TObject);

var

i:byte;

S:String;

St:TVector;

begin

inc(Counter); //Количество вопросов увеличилось на единицу

case c1 of //Устанавливаем верность ответа, если неверен - добавляем номер вопроса в список


1:if Process.Var1.Checked then inc(rights) //(не используем массив, чтобы не ограничивать количество вопросов


else AddList(Wrong,Counter);

2:if Process.Var2.Checked then inc(rights)

else AddList(Wrong,Counter);

3:if Process.Var3.Checked then inc(rights)

else AddList(Wrong,Counter);

end;

if not SeekEof(Questions) then //Вопросы еще остались???

begin

system.Readln(Questions,S);

QuestTitle.Caption:=S;

for i:=1 to 3 do

System.Readln(Questions,St[i]);

c1:=random(3)+1;

S:=St[1];

St[1]:=St[c1];

St[c1]:=S;

Var1.Caption:=St[1];

Var2.Caption:=St[2];

Var3.Caption:=St[3];

Var1.Checked:=False;

Var2.Checked:=False;

Var3.Checked:=False;

end

else

begin //Если нет - откроем формулу с результатами и спрячем предыдущую


Process.Hide;

ShowRes.Show;

end;

end;


procedure TProcess.Button2Click(Sender: TObject); //На прерывание теста

begin

System.Halt;

end;


procedure TProcess.Terminate(Sender: TObject; var Action: TCloseAction); //На закрытие формы

begin

System.Halt;

end;


end.