lab / Создание теста
.pdfЗАДАНИЕ
Разработайте тестирующую систему в среде Delphi. Описание построения одного из
вариантов ТЕСТЕРА для вопросов с одним верным вариантом ответа приведено в тексте лабораторной работы.
Требования к оформлению
Для разработки системы рекомендуется использовать традиционный интерфейс (формы, кнопки, информационные сообщения и т.п.).
Работа с тестирующей системой должна начинаться с информационного сообщения для тестируемых (тема теста, краткая инструкция и/или т.п.).
В каждом вопросе должен быть верным только один вариант ответа. Рекомендуемое количество вариантов ответов на каждый вопрос – от трех до пяти.
Вопросы теста должны соответствовать выбранной Вами теме индивидуального проекта. Тестирующая система должна выполнять чтение вопросов и вариантов ответов из файла,
оформленного в соответствии со структурой.
Итогом работы тестовой системы должна быть статистика ответов (подсчет числа верных, неверных и не отвеченных).
ОПИСАНИЕ ПРОЦЕССА СОЗДАНИЯ ПРОГРАММЫ «ТЕСТЕР»
I.Создание «пустого» проекта
1Создайте новый проект в среде Delphi File\New\Application (Если открыт уже существующий).
2Сохраните проект File\Save All. Файл модуля главной формы (*.pas) сохраните под именем Main_Form.pas, файл проекта (*.dpr) сохраните под именем
Tester.dpr.
II.Создание главной формы
1Перед Вами новый проект и главная форма. Если она не видна, нажмите F12. Выберите форму щелчком мыши. Далее переустановите следующие свойства
формы в Инспекторе объектов (если не виден, то нажмите F11)
Caption=ТЕСТЕР
Width=800 |
{т.к. мониторы с расширением ниже 800х600 теперь |
Height=600 |
почти не встречаются} |
Position=poScreenCenter {расположение формы по центру} |
|
FormStyle=fsStayOnTop |
{расположение формы поверх всех приложений} |
BorderStyle=bsNone |
{убираем системные кнопки и запрещаем изменение |
размеров} |
{задаем имя формы} |
Name=Main |
2Предотвратим закрытие формы методом ALT+F4. Для этого обработаем событие OnClose для данной формы. В созданной процедуре введем команду abort.
Процедура будет иметь вид:
procedure TMain.FormClose(Sender: TObject; var Action: TCloseAction); begin
abort;
end;
III.Создание формы «черного экрана»
1Добавьте в проект новую форму (File\New|Form) сохраните проект (File\Save All) и укажите имя модуля новой формы BlackScreen_form.pas.
2Далее переустановите следующие свойства формы в Инспекторе объектов:
Caption = '' {пустая надпись оформляется с целью удаления верхней строки окна}
left=0
PDF created with pdfFactory trial version www.pdffactory.com
Top=0
Name=BlackScreen
FormStyle=fsStayOnTop
WindowState=wsMaximized
Color=clBlack
BorderStyle=bsNone
3 Предотвратим закрытие формы методом ALT+F4 (см. пункт II.2).
IV. Порядок вывода форм
1При запуске ТЕСТЕРА необходимо сначала вывести черный экран, а затем на него главную форму. Это можно сделать, добавив процедуру для обработки
события OnShow для главной формы: procedure TMain.FormShow(Sender: TObject);
begin |
{порядок вывода форм} |
blackscreen.Show; |
|
main.Show; |
{отключаем форму blackscreen, чтобы |
blackscreen.Enabled:=false; |
исключить возможность ее активации} end;
2Установите связь главной формы Main с формой BlackScreen. Для этого в
файле модуля главной формы в разделе implementation добавим строку uses
BlackScreen_form. Это будет выглядеть так: implementation
uses BlackScreen_form;
Сохраните проект и запустите его на выполнение. Если все выполнено без ошибок, Вы увидите форму – прямоугольник на черном фоне.
Выйти из запуска можно прерыванием программы по нажатию CTRL+F2.
V.Оформление главной формы
1Помещаем на форму панель Panel1 (находится на палитре Standart) и задаем
еесвойства:
Caption ='' {пустая надпись}
Align=alClient
BevelOuter=bvNone
2 На панель помещаем картинку Image1 (палитра Additional) и задаем свойства:
Align=alClient
Strech=True
Picture=FileName.jpg {указывается имя файла, содержащего фоновую картинку}
3 На панель помещаем метку Label1 (палитра Standart) и задаем свойства:
Caption = "ТЕСТЕР"
Transparent = True
Font= Times New Roman / Размер 48 / Жирный
Left=262 { Это приблизительно центр } Top=100
4 На панель помещаем метку Label2 и задаем свойства:
Caption = "С ОДНИМ ВАРИАНТОМ ОТВЕТА" Transparent = True
Font = Times New Roman / Размер 28 / Жирный Left=92
Top=260
5 Вот так все должно выглядеть после сохранения и запуска:
PDF created with pdfFactory trial version www.pdffactory.com
|
|
|
6 |
Помещаем на панель таймер Timer1 (палитра System) и задаем свойство: |
|
|
Interval=3000 |
|
7 |
Пишем обработчик события OnTimer для таймера: |
|
|
procedure TMain.Timer1Timer(Sender:TObject); |
|
|
begin |
{скрытьпанель} |
|
panel1.Hide; |
|
|
timer1.Enabled:=false; |
{отключить таймер} |
|
end; |
|
|
Сохраняем и запускаем. Через 3 секунды заставка должна пропасть. |
|
8 |
Далее помещаем на форму еще одну панель Panel2 и задаем свойства: |
|
|
Caption ='' {пустая надпись} |
|
|
Align = alClient |
|
|
BevelOuter = bvNone |
|
9 |
На панель Panel2 помещаем картинку Image2. Задаем свойства: |
|
|
Align = alClient |
|
|
Strech = True |
{указывается имя файла, содержащего картинку} |
|
Picture = FileName.jpg |
|
10 |
Помещаем на панель Panel2 метку Label3 и задаем свойства: |
|
|
Caption="В каждом вопросе только 1 правильный ответ. Для выбора ответа |
|
|
нажмите на панель с этим ответом. На выполнение отводится 30 минут." |
|
|
AutoSize=False |
|
|
Aligment=taCenter |
|
|
Transparent=True |
|
|
Wordwrap=True |
|
|
Font=Times New Roman / Размер 28 / Жирный |
|
|
Помещаем метку Label3 в центр. |
|
11 |
Над ней помещаем еще одну метку Label4 и задаем ее свойства: |
|
|
Caption="Инструкция" |
|
|
Transparent=True |
|
|
Font=Times New Roman / Размер 28 / Жирный / Подчеркнутый |
|
12 |
Помещаем кнопку Button1 (палитра Standart) в самый низ формы и задаем |
|
|
свойства: |
|
|
Caption = "Начать !!!" |
|
|
Name = Start |
|
|
Font = Times New Roman / Размер 28 / Жирный |
|
13 |
Теперь обработаем событие OnClick для кнопки. Для этого создадим процедуру: |
|
|
procedure TMain.StartClick(Sender: TObject); |
|
|
begin |
|
|
Panel2.Hide; |
|
|
end; |
|
14 |
В процессе конструирования приложения компоненты Panel2 и Image2 могут |
|
|
оказаться внутри компонента Panel1. Если это произошло, необходимо с |
PDF created with pdfFactory trial version www.pdffactory.com
помощью окна Object TreeView (если окна нет, то нажмите Shift+Alt+F11) разместить объекты так, как на рисунке ниже.
15Далее следует разместить компонент Panel2 на заднем плане (позади Panel1).
Для этого необходимо в окне Object TreeView выбрать компонент Panel2 и выполнить команду Edit, Send to Back.
16Вот так это должно выглядеть после сохранения и запуска:
17 Помещаем на форму, главную панель Panel3 и задаем ее свойства:
Caption ='' {пустая надпись} Align = alClient
BevelOuter = bvNone
18 Помещаем на панель таймер Timer2, его свойства:
Interval=1000 |
{Секундомер. Временной интервал можно изменять.} |
Enabled=false |
|
19 Добавим метку Label5. Задаем свойства:
Font=Times New Roman / Размер 28 / Жирный / Подчеркнутый
Name=Qnumber
Transparent=True Caption="Вопрос № 1"
20 Добавляем на панель строку состояния StatusBar1 (палитра Win32) и задаем свойства:
Height = 30
Font = Times New Roman / Размер 12 / Жирный UseSystemFont = False
21Разделим строку состояния StatusBar1 на три информационные панели. Для этого вызываем окно Editing StatusBar1.Panels (см. рисунок ниже) используя
свойство Panels для компонента StatusBar1.
PDF created with pdfFactory trial version www.pdffactory.com
Нажимаем в данном окне три раза на кнопку Add New (Ins) или на клавишу Insert. Окно будет иметь вид:
Задаем свойства для каждой из панелей.
Для Panels[0]:
Width=150 Text="Время: " Alignment=taCenter
Для Panels[1]:
Width=200
Text=" Вопрос № 1" Alignment=taCenter
Для Panels[2]:
Width=400
Text="В этом тесте только 1 верный ответ" Alignment=taCenter
22 Помещаем на главную панель Panel3 для вывода текста вопроса метку Label5. Задаем свойства:
Alignment=taCenter
AutoSize=False
Font=Times New Roman / Размер 16 / Жирный Heigth=250
Name=Question
Left=20
Top=70
Width=750
Transparent=True
Wordwrap=True
23 Помещаем на главную панель Panel3 компонент для чтения вариантов ответов ListBox1 (палитра Standart) и задаем его свойства:
BevelKind = bkFlat
Font = Times New Roman / Размер26 / Жирный Heigth = 208
ItemHeigth = 40 Left = 25 TabStop = false Top = 260 Width = 745 Name = Answer
24Также помещаем на панель Panel3 компонент BitBtn1 (палитра Additional) и задаем его свойства:
PDF created with pdfFactory trial version www.pdffactory.com
Name = Button
Caption = 'Принять'
Font = Times New Roman / Размер14 / Жирный
Heigth = 45
Left = 24
Top = 480
Width = 745
25 Сверху на главную панель Panel3 помещаем кнопку BitBtn2 со свойствами:
Kind = bkCancel Name = Exit Caption = "Выход"
26 Обработаем событие OnClick для кнопки Exit. Процедура будет иметь вид: procedure TMain.ExitClick(Sender: TObject);
begin application.Terminate; end;
27Оформление интерфейса завершено. В итоге главная панель Panel3 проекта должна выглядеть следующим образом:
28Разместим компонент Panel3 на заднем плане (позади Panel1 и Panel2). Дерево объектов должно выглядеть:
PDF created with pdfFactory trial version www.pdffactory.com
VI. Оформление рабочей части проекта
VI.1. Оформление таймера
1 Описываем 3 глобальные переменные Min, Hour, Sec: integer; (это надо делать там, где описывается главная форма перед разделом implementation)
var
Main: TMain;
Min, Hour, Sec : integer; implementation
2 Для формы Main описываем обработчик события создания формы OnCreate, где задаем переменным начальные значения.
procedure TMain.FormCreate(Sender: TObject); begin
hour := 0; min := 30; sec := 0; end;
3 Для таймера Timer2 создадим процедуры обработку события работы таймера
OnTimer:
procedure TMain.Timer2Timer(Sender: TObject); var time : string;
begin
if (sec > 0) then sec:=sec-1 else
if (sec = 0) and (min > 0) then begin
min:=min-1; sec:=59; end
else
if (sec = 0) and (min = 0) and (hour > 0) then begin
hour:=hour-1; min:=59; sec:=59;
end
else if (sec = 0) and (min = 0) and (hour = 0) then timer1.Enabled:=false; if hour < 10 then time := '0'+inttostr(hour) else time := inttostr(hour); time:=time+':';
if min < 10 then time := time+'0'+inttostr(min) else time :=
PDF created with pdfFactory trial version www.pdffactory.com
time+inttostr(min);
time:=time+':';
if sec < 10 then time := time+'0'+inttostr(sec) else time := time+inttostr(sec);
Statusbar1.Panels[0].Text := 'Время: '+time; end;
На данный момент, когда заканчивается время (в нашем случае 30 минут), таймер останавливается. Сохраним проект.
4При работе с тестером необходимо, чтобы таймер начинал работать сразу после инструкции. Для этого вернемся к панели Panel2 и для кнопки Start (кнопка с надписью «Начать!!!») в процедуре обработки события OnClick (procedure
TMain.StartClick(Sender: TObject); – эта процедура уже создана ранее) надо добавить: timer2.enabled := true;
Оформление таймера завершено. Сохраним проект.
VI.2. Оформление процесса обработки вопросов и ответов
1 Создадим текстовый файл Test.txt (лучше это выполнить с помощью Блокнота), который должен выглядеть следующим образом:
4
4Текст Вопроса +Ответ1 -Ответ2 -Ответ3 -Ответ4 5Текст вопроса +Ответ1 -Ответ2 -Ответ3 -Ответ4 -Ответ5 4Текст Вопроса +Ответ1 -Ответ2 -Ответ3 -Ответ4 3Текст Вопроса +Ответ1 -Ответ2 -Ответ3
Поясним требования к оформлению.
В начале файла находится число, которое определяет общее количество вопросов. Цифра перед вопросом обозначает количество ответов, далее идет текст вопроса. На каждой строке перед вариантом ответа помещается символ «-», если ответ неправильный, или символ «+», если правильный. Оптимальным считается не более 5 вариантов ответа на один вопрос.
2Объявляем глобальную переменную txt типа Text (это надо делать там, где описывается главная форма перед разделом implementation).
В процедуре обработки события OnCreat для главной формы (procedure
TMain.FormCreate(Sender: TObject); – эта процедура создана ранее) допишем процедуру открытия файла следующим образом:
assignfile(txt,'test.txt');
reset(txt);
3Теперь оформим процесс считывания вопросов/ответов в процедуру NextQ.
Но перед этим объявим новые глобальные переменные: cnt – счетчик верных ответов и total – общее количество вопросов cnt, total: integer; (это надо
делать там, где описывается главная форма перед разделом implementation). procedure NextQ;
PDF created with pdfFactory trial version www.pdffactory.com
var str : string; num : integer; begin readln(txt,str);
num := strtoint(copy(str,1,1)); delete(str,1,1); Main.Question.Caption := str; main.Answer.Items.Clear;
for cnt:=0 to num-1 do begin readln(txt,str);
if copy(str,1,1) = '+' then main.Question.Tag := cnt; delete(str,1,1);
main.Answer.Items.Add(str);
end;
end;
Поясним работу процедуры NextQ. При чтении из файла Test.txt свойства компонента Question содержат соответственно: Caption – текст вопроса, Тag – номер правильного ответа.
4В обработчике события создания формы OnCreate (процедура уже создана ранее) считаем из файла значение переменной total. Для этого добавим строку readln(txt,total);.
Сохраним проект.
VI.3. Оформление процесса перехода по вопросам и создание отчета
1 На главную форму помещаем панель Panel4 и задаем ее свойства:
Align = alClient BevelOuter = bvNone Caption = ' '
Эта панель будет содержать итоги тестирования.
2 На панель помещаем картинку Image3 (палитра Additional). Задаем свойства:
Align = alClient Strech = True
Picture = FileName.jpg {указывается имя файла, содержащего фоновую картинку}
3 Для создания отчетной таблицы используем компонент StringGrid (палитра Additional) со свойствами:
ColCount = 100 {количество столбцов в таблице (число вопросов)} RowCount = 2 {количество строк в таблице}
FixedCols = 0
FixedRows = 0 DefaultColWidth = 23 Heigth = 71
Name = Result Left = 8
ScrollBars = ssHorizontal Top = 448
Width = 777
4 Поместим на картинку Image3 кнопку BitBtn1 и зададим ее свойства:
Kind = bkCancel Caption = 'Выход' Name = Exit2
Font = MS Sans Serif / Размер 12 / Жирный Heigth = 33
Left = 300
Top = 527
Width = 177
5 Обработаем событие OnClick для кнопки Exit2: procedure TMain.Exit2Click(Sender: TObject); begin
application.Terminate;
PDF created with pdfFactory trial version www.pdffactory.com
end;
6Поместим на картинку Image3 три метки (Label) с именами и надписями соответственно:
Nright (Верных ответов ->) Nwrong (Неверных ответов ->) Nnoans (Не отвечено ->)
7Далее все оформите как на рисунке:
Оформление интерфейса завершено. Сохраните проект.
8Разместим компонент Panel4 на заднем плане (позади всех панелей). Дерево объектов имеет следующий вид:
9Для обработки ответов объявим 3 переменные: wrong, right, nq: Integer; где wrong – количество неправильных ответов, right – количество правильных ответов, nq – номер вопроса.
10Вернемся к ранее созданной процедуре обработки события OnCreat для главной формы (procedure TMain.FormCreate(Sender: TObject);). Выполним ее
редактирование следующим образом: procedure TMain.FormCreate(Sender: TObject); begin
hour := 0; min := 30; sec := 0; assignfile(txt,'test.txt'); reset(txt);
readln(txt,total); nq := 1;
nextq;
PDF created with pdfFactory trial version www.pdffactory.com