Структурная схема приложения представлена на рисунке 1.
Рисунок 1 – Структурная схема приложения
1.5 Макет экранных форм
Начальная заставка приложения (zastavka) в режиме конструирования показана на рисунке 2.
Рисунок 2 – Форма начальной заставки (zastavka) в режиме конструирования
Форма непосредственного тестирования, вывода вопроса, вариантов ответов и выбора правильного (Form1) показана на рисунке 3.
Рисунок 3 – Форма непосредственного тестирования, вывода вопроса, вариантов ответов и выбора правильного (Form1)
Форма для вывода результатов тестирования (ResultForm) показана на рисунке 4.
Рисунок 4 – Форма для вывода результатов тестирования (ResultForm)
1.6 Руководство программиста
Подробное описание процесса разработки тестирующей программы в выбранной среде разработки
Описание основных элементов каждой из имеющихся форм приведено в таблицах 2–4.
Таблица 2 – Описание основных элементов формы заставки (zastavka)
Имя элемента
|
Тип
|
Назначение в программе
|
Image1
|
TImage
|
Область вывода картинки
|
Label1
|
TLabel
|
Вывод текста «Тест по истории»
|
Label3
|
TLabel
|
Вывод текста «Для перехода к следующему вопросу необходимо нажимать»
|
Label41
|
TLabel
|
Вывод текста «кнопку Далее>>»
|
Timer1
|
TTimer
|
Таймер закрытия формы заставки
|
Таблица 3 – Описание основных элементов формы непосредственного тестирования, вывода вопроса, вариантов ответов и выбора правильного (Form1)
Имя элемента
|
Тип
|
Назначение в программе
|
MainMenu1
|
TMainMenu
|
Главное меню приложения
|
Panel1
|
TPanel
|
Панель группировки элементов
|
Button1
|
TButton
|
Кнопка перехода к следующему вопросу
|
Label1
|
TLabel
|
Вывод текста вопроса
|
RadioOtvet1
|
TRadioButton
|
Переключатель выбора первого варианта ответа
|
RadioOtvet2
|
TRadioButton
|
Переключатель выбора второго варианта ответа
|
RadioOtvet3
|
TRadioButton
|
Переключатель выбора третьего варианта ответа
|
RadioOtvet4
|
TRadioButton
|
Переключатель выбора четвертого варианта ответа
|
TextVoprosa
|
TLabel
|
Вывод текста вопроса
|
StatusBar1
|
TStatusBar
|
Нижняя панель для вывода ФИО, номера текущего вопроса и общего количества
|
Таблица 4 – Описание основных элементов формы вывода результатов тестирования (ResultForm)
Имя элемента
|
Тип
|
Назначение в программе
|
Button1
|
TButton
|
Кнопка завершения работы с программой
|
Image1
|
TImage
|
Область вывода картинки
|
Label1
|
TLabel
|
Вывод текста «Результаты тестирования»
|
Label2
|
TLabel
|
Вывод текста «Всего:»
|
Ocenka_Label
|
TLabel
|
Вывод количества верных ответов
|
Procent_Labell
|
TLabel
|
Вывод процента верных ответов
|
SG
|
TStringGrid
|
Таблица для вывода результатов каждого вопроса
|
vernih_label
|
TLabel
|
Вывод количества верных ответов
|
voprosov_label
|
TLabel
|
Вывод общего количества вопросов
|
При первоначальном открытии главной формы выполняется обработчик:
procedure TForm1.FormCreate(Sender: TObject);
// Создание формы
var
k:integer; // Номер позиции последнего символа \ в имени файла
i: integer; // Переменная цикла
begin
exename:=Application.ExeName; // Полное имя приложения
lenpath:=length(exename); // Длина полного имени
k:=0; // Обнуление позиции последнего / в полном именни
for i:=lenpath downto 1 do // Цикл по длине пути
if ((copy(exename,i,1)='\') and (k=0)) then begin
exepath:=copy(exename,1,i);
k:=i;
end;
ini:=TIniFile.Create(exepath+'NASTROY.INI'); // Определение INI-файла
end;
Затем выполняется обработчик открытия формы-заставки:
procedure TForm1.FormShow(Sender: TObject);
begin
zastavka.ShowModal; // Отображжение заставки
end;
При выборе пункта меню Тестирование → Начать тестирование по истории выполняется обработчик:
procedure TForm1.N2Click(Sender: TObject);
// Начать тестирование
var
i,j: integer; // Переменная цикла
koltest: integer; // Количество тестов
vr: string; // Временная переменная для сортировки
begin
KolVern:=0; // Обнуление счетчика верных ответов
Test_Name:='История России_Тест';// RegistrForm.Test.Text+'_Тест';}
Kol_voprosov:=ini.ReadInteger(Test_Name,'Всего',0);
StatusBar1.Panels[3].text:='Всего вопросов: '+inttostr(Kol_voprosov);
NomerVoprosa:=1; // Начать с первого вопроса
// Вывод первоог вопроса и ваииантов ответов
voprosi[NomerVoprosa].vopros:=ini.ReadString(Test_Name,'Вопрос'+inttostr(NomerVoprosa),'');
voprosi[NomerVoprosa].Otvet1:=ini.ReadString(Test_Name,'Ответ'+inttostr(NomerVoprosa)+'_1','');
voprosi[NomerVoprosa].Otvet2:=ini.ReadString(Test_Name,'Ответ'+inttostr(NomerVoprosa)+'_2','');
voprosi[NomerVoprosa].Otvet3:=ini.ReadString(Test_Name,'Ответ'+inttostr(NomerVoprosa)+'_3','');
voprosi[NomerVoprosa].Otvet4:=ini.ReadString(Test_Name,'Ответ'+inttostr(NomerVoprosa)+'_4','');
voprosi[NomerVoprosa].vern:=StrToInt(ini.ReadString(Test_Name,'Верный'+inttostr(NomerVoprosa),''));
TextVoprosa.Caption:=voprosi[NomerVoprosa].vopros; // Вывод текста вопроса
RadioOtvet1.Caption:=voprosi[NomerVoprosa].Otvet1; // Вывод 1-го варианта ответа
RadioOtvet2.Caption:=voprosi[NomerVoprosa].Otvet2; // Вывод 2-го варианта ответа
RadioOtvet3.Caption:=voprosi[NomerVoprosa].Otvet3; // Вывод 3-го варианта ответа
RadioOtvet4.Caption:=voprosi[NomerVoprosa].Otvet4; // Вывод 4-го варианта ответа
Label1.Caption:='Вопрос № '+inttostr(NomerVoprosa); // Вывод номера вопроса
RadioOtvet1.Checked:=true; // Выбор певого ответа
TextVoprosa.Visible:=true; // Отображениее теста вопроса
Panel1.Visible:=true; // Вывод панели с вариантамии ответов
end;
При нажатии кнопки перехода к следующему вопросу (Далее >>) выполняется обработчик:
procedure TForm1.Button1Click(Sender: TObject);
// Кнопка перехода к следующему вопросу
var
i:integer; // Переменная цикла
procent: real; // Процент правильных ответов
begin
if NomerVoprosabegin
if RadioOtvet1.Checked then vibor[NomerVoprosa]:=1;
if RadioOtvet2.Checked then vibor[NomerVoprosa]:=2;
if RadioOtvet3.Checked then vibor[NomerVoprosa]:=3;
if RadioOtvet4.Checked then vibor[NomerVoprosa]:=4;
NomerVoprosa:=NomerVoprosa+1; // Переход к следующему вопросу
voprosi[NomerVoprosa].vopros:=ini.ReadString(Test_Name,'Вопрос'+inttostr(NomerVoprosa),'');
voprosi[NomerVoprosa].Otvet1:=ini.ReadString(Test_Name,'Ответ'+inttostr(NomerVoprosa)+'_1','');
voprosi[NomerVoprosa].Otvet2:=ini.ReadString(Test_Name,'Ответ'+inttostr(NomerVoprosa)+'_2','');
voprosi[NomerVoprosa].Otvet3:=ini.ReadString(Test_Name,'Ответ'+inttostr(NomerVoprosa)+'_3','');
voprosi[NomerVoprosa].Otvet4:=ini.ReadString(Test_Name,'Ответ'+inttostr(NomerVoprosa)+'_4','');
voprosi[NomerVoprosa].vern:=StrToInt(ini.ReadString(Test_Name,'Верный'+inttostr(NomerVoprosa),''));
TextVoprosa.Caption:=voprosi[NomerVoprosa].vopros; // Вывод текста вопроса
RadioOtvet1.Caption:=voprosi[NomerVoprosa].Otvet1; // Вывод 1-го варианта ответа
RadioOtvet2.Caption:=voprosi[NomerVoprosa].Otvet2; // Вывод 2-го варианта ответа
RadioOtvet3.Caption:=voprosi[NomerVoprosa].Otvet3; // Вывод 3-го варианта ответа
RadioOtvet4.Caption:=voprosi[NomerVoprosa].Otvet4; // Вывод 4-го варианта ответа
Label1.Caption:='Вопрос № '+inttostr(NomerVoprosa);
RadioOtvet1.Checked:=true;
end
else // Номер вопроса равен наиболльшему
begin
// Определение выбранного ответа
if RadioOtvet1.Checked then vibor[NomerVoprosa]:=1;
if RadioOtvet2.Checked then vibor[NomerVoprosa]:=2;
if RadioOtvet3.Checked then vibor[NomerVoprosa]:=3;
if RadioOtvet4.Checked then vibor[NomerVoprosa]:=4;
ResultForm.SG.RowCount:=Kol_voprosov+1; // Число строк таблицы результатов
// Заголовки столбцов таблицы ррезультатов
ResultForm.SG.Cells[0,0]:='Номер вопроса';
ResultForm.SG.Cells[1,0]:='Результат';
// Цикл вывода результатов всех вопросов
for i := 1 to Kol_voprosov do
begin
ResultForm.SG.Cells[0,i]:=inttostr(i); // Ввывод номера вопроса
if (vibor[i]=voprosi[i].vern) then begin // Если ответ аерен
KolVern:=KolVern+1;
ResultForm.SG.Cells[0,i]:=inttostr(i);
ResultForm.SG.Cells[1,i]:='правильно';
end
else begin // Если ответ неверен
ResultForm.SG.Cells[0,i]:=inttostr(i);
ResultForm.SG.Cells[1,i]:='неправильно';
end;
end;
procent:=KolVern/Kol_voprosov*100; // Определение процента веных ответов
// Вывод общего числа вопросов, колличества и процента ошибок
ResultForm.voprosov_label.Caption:='- вопросов: '+inttostr(Kol_voprosov);
ResultForm.vernih_label.Caption:='- верных ответов: '+inttostr(KolVern);
ResultForm.procent_label.Caption:='- процент верных ответов: '+copy(floattostr(procent),1,5);
// Определение оценки в зависимости от процента ошибок
if (procent<=50) then ResultForm.Oceqnka_Label.Caption:='неудовлетворительно';
if ((procent>50) and (procent<=70)) then
ResultForm.Oceqnka_Label.Caption:='удовлетворительно';
if ((procent>70) and (procent<=90)) then ResultForm.Oceqnka_Label.Caption:='хорошо';
if (procent>90) then ResultForm.Oceqnka_Label.Caption:='отлично';
ResultForm.ShowModal; // Показ формы выода результатов
end;
end;
При выборе пункта меню Тестирование → Выход выполняются 2 обработчика:
procedure TForm1.N4Click(Sender: TObject);
// Пункт мен Тестирование - Выход
begin
close;
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
// Подтверждение завершения работы
begin
if MessageDlg('Вы действительно хотите завершить работу?', mtConfirmation,
[mbOk, mbCancel], 0) = mrCancel then CanClose := False;
end;
Достарыңызбен бөлісу: |