Сейчас подготовил серию уроков по созданию тестов на Delphi. Эта тема сейчас очень распространненая, так как много кто пишет курсовые по этим темам, дипломные и многое другое. Тех же самых сотрудников можно протестировать, так что эта тема очень распространненая. Предлагаю серию тестов с использованием файлов. Да с использованием БД — это хорошо, но если БД локальная, то дела все теже, что и с файлами. С БД я даже рассказывать не буду как делать, там вообще все просто, тем более я рассказал курс по работе с БД в Delphi. Так вот рассмотрим создание тестов используя два варианта. С использованием обычных файлов — dat, db или любой другой свой формат, а также с использованием ini-файлов. Скажу одно, что с использованием ini-файлов необходимо шифрование данных, я про него еще не рассказывал, но все как-нибудь доберусь. Шифрование нужно хотя бы для, того, чтобы пользователь, открыв файл не узнал правильный ответ, в dat-файле например, это можно кое-как скрыть и без шифрование, так что давайте попробуем для начала добавить данные в файл. То есть добавить (создать) наш тест. Для начала нам необходимо описать структуру, где будет храниться наш тест, а затем создать файл данной структуры.
Моя структура выглядит так
Type TTest=record Name_v:String[255]; otv:string[255]; count_v:integer; count_otv:integer; pr_ot:string[255]; end;
Здесь у меня
- Name_v — вопрос
- otv — ответ
- count_v — количество вопросов
- count_otv — количество ответов
- pr_ot — правильные ответы
Далее мы описываем файл данной стуктуры, затем саму стуктуру и начинаем запись. Я про файлы не рассказывал (а надо было, займусь этим попозже), тут есть набор функций и процедур по работе с файлами. На событие формы — OnCreate мы создаем наш файл тестов
procedure TForm1.FormCreate(Sender: TObject); var F:File of TTest; begin try count:=0; AssignFile(F,'test.dat'); Rewrite(F); except on e:Exception do end; end;
Функции и процедуры по работе с файлами я расскажу потом, а сейчас менее подробно. Например AssignFile — связывает файловую переменную с именем файла. Rewrite — создает новый файл, Reset — открывае уже существующий файл, Seek — устанавливает указатель в файле на нужную компоненты (она нам очень пригодится). Также на форму я установил следующие компоненты
- TButton — 2 шт
- TEdit — 2 шт
- TCheckListBox
- TGroupBox
То есть у нас будут сколько угодно вариантов ответа и сколько угодно правильных ответов. Далее на кнопку добавления ответов в TChecklistBox я написал следующий код.
procedure TForm1.Button4Click(Sender: TObject); begin try CheckListBox1.Items.Add(Edit2.Text); Edit2.Clear; except on e:Exception do end; end;
То есть мы просто формируем наши ответы. Как Вам понятно у нас всего 3 вопроса, я первоначально нашей переменной присвоил это значение, может быть и меньше, но никаки больше. Далее я на кнопку записи вопроса в файл написал следующий код
procedure TForm1.Button1Click(Sender: TObject); var i:integer; F:File of TTest; Test:TTest; count,k:integer; arr_pr_ot:array[1..255] of string; begin try if (Trim(Edit1.Text)='') or (CheckListBox1.Count=0) then begin exit; end; inc(count); Test.count_v:=3; Test.count_otv:=CheckListBox1.Items.Count; for i:=0 to CheckListBox1.Count-1 do begin Test.Name_v:=Edit1.Text; if CheckListBox1.Checked[i] then Test.pr_ot:=IntToStr(CheckListBox1.ItemIndex); Test.otv:=CheckListBox1.Items[i]; Write(F,Test); end; if count=Test.count_v then begin ShowMessage('Test create compleate'); CloseFile(F); count:=0; end; CheckListBox1.Clear; Edit1.Clear; except on e:Exception do end; end;
Как видите мы просто записываем в цикле наши оветы с вопросами, с количеством, то есть в одной строке все. В следующей статья я расскажу как считать из файла все эти вопросы, а затем поговорим как определить правильный ли вопрос выбрал пользователь или нет. Проект пока что не прилаживаю, так как выложу его в конечном итоге.
Сообщение было отмечено как решение
Решение
можно например вот такой тест написать здесь можно создавать сколько угодно файлов с вопросами и 1000 вопросов в файле.
исходники
Unit1
Delphi | ||
|
Добавлено через 2 минуты
Unit2
Delphi | ||
|
Добавлено через 1 минуту
Unit3
Delphi | ||
|
Добавлено через 1 минуту
Unit4
Delphi | ||
|
Добавлено через 1 минуту
Unit5 // форма выбора кол-ва вопросов
Delphi | ||
|
Добавлено через 1 минуту
Unit6 // форма вывода оценки
Delphi | ||
|
Добавлено через 2 минуты
Unit7 // форма создания и выбора базы данных(фактически текстового файла)
Delphi | ||
|
Добавлено через 2 минуты
Unit содержащий процедуру записи в файл
Delphi | ||
|
Добавлено через 8 минут
Я написал этот тестер еще 2 года назад он более функционален чем некоторые и подходит для многих нужд Если вы хотите написать его то вам достаточно создать 7 Form и 1 Unit назвать их как в программе затем скопировать весь код в отдельные формы и скомпилировать приложение типа Exe -это для тех кто хочет понять как можно написать тестер для тех же кто хочет просто скачать и пользоваться предлагаю скачать программу весь дистрибутив включая все модули
Добавлено через 6 минут
Если кому интересно могу переслать дистрибутив вместе с программой по Icq или как либо еще
бесплатно.
13
Предлагаемые методические рекомендации
отображают проектирование, оформление и
разработку тестирующих программ в среде
программирования Delphi.
Рекомендуются учителям информатики, учителям
школьных предметов, учащимся старших классов
общеобразовательных средних школ с углубленным
изучением информатики.
Введение
Ощутимые шаги в раскрытии глубинных
закономерностей человеческого обучения,
сделанные мировой дидактикой, а также бурный
прогресс в области развития персональных
компьютеров выводят педагогов на необходимость
создания электронных тестирующих программ для
самоконтроля и самопроверки знаний обучающихся.
Основная цель данных методических
рекомендаций состоит в том, чтобы дать знания о
технологии создания тестирующих программ в
среде программирования Delphi.
В результате использования этих рекомендаций
могут быть сформированы умения и навыки
проектирования тестирующих программ в среде
программирования Delphi.
Создание тестирующей программы с
использованием компонентов
TLabel, TButton, TRadioGroup
Требования к предварительной подготовке:
- знать основы программирования в системе
Паскаль; - уметь пользоваться кнопками панелей
инструментов и контекстным меню.
Создание интерфейса приложения
1. Создайте проект 1 (презентация).
2. Задайте объектам следующие свойства
Объект | Свойство | Значение |
Форма | Name | Form1 |
Caption | Тест самопроверки | |
Color | cllnfoBk | |
RadioGroup | Name | RadioGroup1, :, RadioGroup5 |
Caption | — | |
Items | :(варианты ответов) | |
ItemIndex | 0,1,2,3 (индекс выбранного переключателя) | |
Font | Times New Roman, обычный, размер 14, цвет тёмно-синий |
|
Label | ||
(метка) | Name | Label1,:, Label5 |
Caption | :(текст выбранного вопроса) | |
Font | Times New Roman, полужирный, размер 14, цвет тёмно-синий |
|
Label | ||
(метка) | Name | Label4 |
Caption | — | |
Font | Times New Roman, полужирный, размер 14, цвет красный |
|
Label | ||
(метка) | Name | Label5 |
Caption | — | |
Font | Times New Roman, полужирный, размер 14, цвет красный |
|
Button | ||
(кнопка) | Name | Button1 |
Caption | Число правильных ответов | |
Button | ||
(кнопка) | Name | Button2 |
Caption | Выход |
3.Сохраните проект (File -> Save All) в своей папке.
Написание кода
1. Напишите программу теста в окне кода.
var
Form1: TForm1;
m,n,k,l,w,v:integer; {указание типа переменных
(правильных ответов)}implementation
{$R *.dfm}
{проверка правильности ответов на поставленные
вопросы}procedure TForm1.RadioGroup1Click(Sender: TObject);
begin m:=0; if RadioGroup1.ItemIndex=1 then m:=m+1 else m:=m; end;
procedure TForm1.RadioGroup2Click(Sender: TObject);
begin n:=0; if RadioGroup2.ItemIndex=0 then n:=n+1 else n:=n; end;
procedure TForm1.RadioGroup3Click(Sender: TObject);
begin k:=0; if RadioGroup3.ItemIndex=0 then k:=k+1 else k:=k; end;
procedure TForm1.RadioGroup4Click(Sender: TObject);
begin w:=0; if RadioGroup4.ItemIndex=0 then w:=w+1 else w:=w; end;
procedure TForm1.RadioGroup5Click(Sender: TObject);
begin v:=0; if RadioGroup5.ItemIndex=2 then v:=v+1 else v:=v; end;
{подсчёт правильных ответов и вывод результата
тестирования}procedure TForm1.Button1Click(Sender: TObject);
begin l:=m+n+k+w+v; if l=5 then
begin Label4.Caption:=IntToStr(l); Label5.Caption:=’Отлично!’; end else if l=4
thenbegin Label4.Caption:=IntToStr(l); Label5.Caption:=’Хорошо! Но Вам
необходимо повторить теоретический материал.’; end
else if l<=3 thenbegin Label4.Caption:=IntToStr(l); Label5.Caption:=’Плохо! Учите!’ end; end;
{выход из программы}
procedure TForm1.Button2Click(Sender: TObject); begin close; end; end.
2.Сохраните форму и проект в своей папке.
Создание тестирующей программы с
использованием компонентов TLabel, TButton, TRadioGroup,
TMainMenu
Создание интерфейса приложения
1.Создайте проект 2 (презентация).
Для этого добавьте на форму следующие
компоненты:
- компонент MainMenu, состоящий из пунктов: Тест
(Выход) и Помощь (Инструкция, О программе); - метку для текста вопросов и вывода результата
теста в виде строки «:правильных ответов из 10
вопросов»; - метку «Следующий ответ»;
- группу зависимых переключателей для вариантов
ответов (RadioGroup1,:, RadioGroup10), которые накладываются
друг на друга; - кнопку «Результат тестирования».
2. Задайте объектам следующие свойства.
Объект | Свойство | Значение |
Форма | Name | Form1 |
Caption | Тест по информатике | |
Color | clSkyBlue | |
MainMenu | Name | MainMenu1 |
Label | ||
(метка) | Name | Label1 |
Caption | :(текст вопроса) | |
Font | MS Sans Serif, полужирный курсив, размер 14, цвет тёмно-синий |
|
Label | ||
(метка) | Name | Label2 |
Caption | Следующий вопрос | |
Font | MS Sans Serif, полужирный, размер 14, цвет сиреневый |
|
Button | ||
(кнопка) | Name | Button1 |
Caption | Выход | |
Font | MS Sans Serif, полужирный курсив, размер 14, цвет чёрный |
|
Button | ||
(кнопка) | Name | Button2 |
Caption | Результат тестирования | |
Font | MS Sans Serif, полужирный курсив, размер 14, цвет чёрный |
|
Visible | False | |
RadioGroup | Name | RadioGroup1, :, RadioGroup10 |
Caption | — | |
Items | :(варианты ответов) | |
ItemIndex | 0,1,2,3 (индекс выбранного переключателя) | |
Font | Times New Roman, обычный, размер 14, тёмно-синий | |
Visible | для RadioGroup1 — True
для RadioGroup2,:, RadioGroup10 — |
3.Сохраните проект (File -> Save All) в своей папке.
Написание кода
1. Запрограммируйте метку Label2 («Следующий
вопрос») так, чтобы в метке Label1 выводился
следующий вопрос, варианты ответа на него, и при
достижении последнего вопроса метка Label2
становилась недоступной.
2. При написании программы следуйте инструкции:
- повторный выбор ответа на вопрос недоступен;
- результат тестирования вывести в метке Label1 по
щелчку кнопки Button2; - пункт главного меню «Выход» закрывает
программу; - пункт главного меню «О программе» выводит окно
формы About Box (для этого необходимо выполнить
команду File -> New-> Other, закладка Forms, форма About ); - пункт главного меню «Инструкция» выводит
информационное окно.
3.Напишите программу теста в окне кода.
Var Form1: TForm1;
{указание типа переменных (правильных ответов)}
a,b,c,d,f,g,j,l,m,n,k,p:integer; implementation uses Unit2; {$R *.dfm}
{проверка правильности ответов на поставленные
вопросы}procedure TForm1.RadioGroup1Click(Sender: TObject);
begin a:=0; if RadioGroup1.ItemIndex=0 then a:=a+1 else a:=a;
RadioGroup1.Visible:=False; end;procedure TForm1.RadioGroup2Click(Sender: TObject);
begin b:=0; if RadioGroup2.ItemIndex=1 then b:=b+1 else b:=b;
RadioGroup2.Visible:=False; end;procedure TForm1.RadioGroup3Click(Sender: TObject);
begin d:=0; if RadioGroup3.ItemIndex=1 then d:=d+1 else d:=d;
RadioGroup3.Visible:=False; end;procedure TForm1.RadioGroup4Click(Sender: TObject);
begin c:=0; if RadioGroup4.ItemIndex=0 then c:=c+1 else c:=c;
RadioGroup4.Visible:=False; end;procedure TForm1.RadioGroup5Click(Sender: TObject);
begin f:=0; if RadioGroup5.ItemIndex=3 then f:=f+1 else f:=f;
RadioGroup5.Visible:=False; end;procedure TForm1.RadioGroup6Click(Sender: TObject);
begin g:=0; if RadioGroup6.ItemIndex=2 then g:=g+1 else g:=g;
RadioGroup6.Visible:=False; end;procedure TForm1.RadioGroup7Click(Sender: TObject);
begin j:=0; if RadioGroup7.ItemIndex=1 then j:=j+1 else j:=j;
RadioGroup7.Visible:=False; end;procedure TForm1.RadioGroup8Click(Sender: TObject);
begin l:=0; if RadioGroup8.ItemIndex=1 then l:=l+1 else l:=l;
RadioGroup8.Visible:=False; end;procedure TForm1.RadioGroup9Click(Sender: TObject);
begin m:=0; if RadioGroup9.ItemIndex=3 then m:=m+1 else m:=m;
RadioGroup9.Visible:=False; end;procedure TForm1.RadioGroup10Click(Sender: TObject);
begin n:=0; if RadioGroup10.ItemIndex=2 then n:=n+1 else n:=n;
RadioGroup10.Visible:=False; end;{вывод вопроса и вариантов ответа в метке Label1 по
щелчку метки Label2(«Следующий вопрос»)}procedure TForm1.Label2Click(Sender: TObject);
begin k:=k+1; case k of
1: begin Label1.Caption:=’2 вопрос. Массовое производство
компьютеров началось в:’;
RadioGroup2.Visible:=True; end;
2: begin Label1.Caption:=’3 вопрос. Элементной базой
процессоров ЭВМ 2-ого поколения являлись:’;
RadioGroup3.Visible:=True; end;
3:begin Label1.Caption:=’4 вопрос. Какое устройство не
предназначено для обработки информации?’;
RadioGroup4.Visible:=True; end;
4:begin Label1.Caption:=’5 вопрос. За минимальную единицу
измерения количества информации принят:’;
RadioGroup5.Visible:=True; end;
5:begin Label1.Caption:=’6 вопрос. Сколько байтов занимает
в памяти ПК слово ПОБЕДА?:’;
RadioGroup6.Visible:=True; end;
6:begin Label1.Caption:=’7 вопрос. Производительность
работы компьютера зависит от:’;
RadioGroup7.Visible:=True; end;
7:begin Label1.Caption:=’8 вопрос. Какое устройство может
оказывать вредное воздействие на здоровье
человека?’; RadioGroup8.Visible:=True; end;
8:begin Label1.Caption:=’9 вопрос. При выключении
компьютера вся информация стирается:’;
RadioGroup9.Visible:=True; end;
9:begin Label1.Caption:=’10 вопрос. В целях сохранения
информации дискеты необходимо оберегать от:’;
RadioGroup10.Visible:=True; Button2.Visible:=True;Label2.Visible:=False; end; end;
end;
{подсчёт правильных ответов и вывод результата
тестирования}
procedure TForm1.Button2Click(Sender: TObject);
begin p:= a+b+c+d+f+g+j+l+m+n; if p=10 then
begin Label1.Caption:=IntToStr(p)+’ правильных ответов из 10
вопросов.’+’ Отлично!’; end
else if p>=8 then
begin Label1.Caption:=IntToStr(p)+’ правильных ответов из 10
вопросов.’+’ Хорошо!’; end
else if p=7 then
begin Label1.Caption:=IntToStr(p)+’ правильных ответов из 10
вопросов.’+’ Удовлетворительно.’;
end else if p<7 then
begin Label1.Caption:=IntToStr(p)+’ правильных ответов из 10
вопросов.’+’ Плохо! Учите!’; end;
end;
{выход из программы по кнопке Button1}
procedure TForm1.Button1Click(Sender: TObject); begin close; end;
{выход из программы по щелчку пункта главного
меню «Выход»}
procedure TForm1.N2Click(Sender: TObject);
begin close; end;
{подключение формы AboutBox}
procedure TForm1.N4Click(Sender: TObject);
begin AboutBox.show; end;
{вывод информационного окна по пункту главного
меню «Инструкция»}
procedure TForm1.N5Click(Sender: TObject);
begin MessageDlgPos(‘Будьте внимательны при выборе
варианта ответа! Повторный выбор ответа на
вопрос недоступен!’,mtInformation,[mbOK],0,300,200); end; end.
4.Сохраните форму и проект в своей папке.
Создание тестирующей программы с
использованием компонентов
TLabel, TButton, TRadioGroup, TPageControl, TImage, TPanel, TMainMenu
Создание интерфейса приложения
1.Создайте проект 3 (презентация).
Для этого добавьте на форму следующие
компоненты:
- компонент MainMenu, состоящий из пунктов: Тест
(Результат, Выход) и Помощь (Инструкция, О
программе); - метку для вывода результата теста в виде строки
«:правильных ответов из 6 вопросов»; - компонент PageControl (страница WIN32), который содержит
вкладки с номерами вопросов; - на каждую вкладку поместите метку с текстом
вопроса и группу зависимых переключателей для
вариантов ответов (RadioGroup) с 3-4 вариантами ответов; - кнопку выхода из программы;
- компонент Image (страница ADDITIONAL);
- шесть компонентов Panel разместить таким образом,
чтобы закрыть компонент Image.
2.Задайте объектам следующие свойства.
Объект | Свойство | Значение |
Форма | Name | Form1 |
Caption | Тестирующая программа по информатике | |
Color | clSkyBlue | |
MainMenu | Name | MainMenu1 |
Label | ||
(метка) | Name | Label1 |
Caption | — | |
Font | MS Sans Serif, полужирный курсив, размер 14, цвет красный |
|
Label | ||
(метка) | Name | Label2,:, Label7 |
Caption | :(текст вопроса) | |
Font | MS Sans Serif, полужирный курсив, размер 12, цвет тёмно-синий |
|
Button | ||
(кнопка) | Name | Button1 |
Caption | Выход | |
Font | MS Sans Serif, полужирный курсив, размер 14, цвет чёрный |
|
Image | Name | Image1 |
Visible | True | |
Stretch | True | |
Picture | указать путь к рисунку | |
Panel | Name | Panel1,:,Panel6 |
Caption | 1,:6 | |
PageControl | Name | PageControl1 |
Active Pages | TabSheet1 | |
Visible | True | |
TabSheet1,:, TabSheet6 | Name | TabSheet1,:,TabSheet6 |
Caption | вопрос1,:,вопрос6 | |
RadioGroup | Name | RadioGroup1, :, RadioGroup6 |
Caption | — | |
Items | :(варианты ответов) | |
ItemIndex | 0,1,2,3 (индекс выбранного переключателя) |
3.Сохраните проект (File -> Save All) в своей папке.
Написание кода
1. При написании кода программы следуйте
инструкции:
- повторный выбор ответа на вопрос недоступен;
- при правильном выборе ответа на вопрос
открывается часть рисунка (компонент Image); - пункт главного меню «Результат» выводит в
метке Label1 результат тестирования; - пункт главного меню «Выход» закрывает
программу; - пункт главного меню «О программе» выводит окно
формы About Box (для этого необходимо выполнить
команду File -> New-> Other, закладка Forms, форма About ); - пункт главного меню «Инструкция» выводит
информационное окно.
2. Напишите программу теста в окне кода.
var Form1: TForm1;
{указание типа переменных (правильных ответов)}
m,n,k,w,l,s,z:integer; implementation uses Unit2; {$R *.dfm}
{выход из программы по кнопке Button1}
procedure TForm1.Button1Click(Sender: TObject);
begin close; end;
{проверка правильности ответов на поставленные
вопросы и при правильном выборе ответа на вопрос
открытие части рисунка }procedure TForm1.RadioGroup1Click(Sender: TObject);
begin n:=0; if RadioGroup1.ItemIndex=0 then begin n:=n+1; Panel1.Visible:=False; end
else n:=n;RadioGroup1.Visible:=False; end;
procedure TForm1.RadioGroup2Click(Sender: TObject);
begin m:=0; if RadioGroup2.ItemIndex=2 then begin m:=m+1;Panel2.Visible:=False; end
else m:=m;RadioGroup2.Visible:=False; end;
procedure TForm1.RadioGroup3Click(Sender: TObject);
begin k:=0; if RadioGroup3.ItemIndex=0 then begin k:=k+1; Panel4.Visible:=False; end
else k:=k;RadioGroup3.Visible:=False; end;
procedure TForm1.RadioGroup4Click(Sender: TObject);
begin w:=0; if RadioGroup4.ItemIndex=0 then begin w:=w+1; Panel3.Visible:=False; end
else w:=w;RadioGroup4.Visible:=False;end;
procedure TForm1.RadioGroup5Click(Sender: TObject);
begin s:=0; if RadioGroup5.ItemIndex=1 then begin s:=s+1; Panel5.Visible:=False; end
else s:=s;RadioGroup5.Visible:=False; end;
procedure TForm1.RadioGroup6Click(Sender: TObject);
begin z:=0; if RadioGroup6.ItemIndex=1 then begin z:=z+1; Panel6.Visible:=False; end
else z:=z;RadioGroup6.Visible:=False;end;
{подсчёт правильных ответов и вывод результата
тестирования по пункту главного меню
«Результат»}procedure TForm1.N3Click(Sender: TObject);
begin l:=m+n+k+w+s+z; Label1.Caption:=IntToStr(l)+’ правильных ответов
из 6 вопросов’; end;{выход из программы по пункту главного меню
«Выход»}procedure TForm1.N4Click(Sender: TObject);
begin close; end;
{подключение формы AboutBox}
procedure TForm1.N7Click(Sender: TObject);
begin AboutBox.show; end;
{вывод информационного окна по пункту главного
меню «Инструкция»}procedure TForm1.N6Click(Sender: TObject);
begin MessageDlgPos(‘Будьте внимательны при выборе
варианта ответа!
Повторный выбор ответа на вопрос
недоступен!’,mtInformation,[mbOK],0,300,200); end; end.
3.Сохраните форму и проект в своей папке.
Литература
1. Анеликова Л.А. Тесты. Информатика и
информационные технологии. — Москва: Дрофа, 2004.
2. Валеева Ю.А. Объектно-ориентированное
программирование в среде Delphi. — Новокузнецк, 2003.
3. Дробахина А.Н., Можаров М.С. Структурирование
содержания профессиональной подготовки учителя
информатики средствами современного
гипертекста. — Новокузнецк, 2003.
Создание теста.
Компонент RadioGroup
Caption заголовок группы
Items задание строк
кнопок
ItemIndex содержит
номер выбранной строки (нумерация с 0),
значение -1 означает что ни одна строка
не выбрана!
1. |
2. |
3. |
|
4. |
|
5.
RadioGroup
Варианты ответов
|
Тест состоит, например, из 5 форм. На
каждой форме расположены вопрос, варианты
ответов, кнопка (New – Form
открытие новой формы, Shift
+ F12 перемещение между
формами).
Процедура пишется на кнопку Далее.
Во всей работе будет одна переменная
i: integer;
она глобальная. Описываем ее в месте,
где:
Var
Form1: TForm1;
i:integer;
вписываем сами
Implementation
Uses Unit2;
Описание глобальной переменной происходит
только в Unit1. Разработчик
теста должен знать правильный ответ,
т.к. это указывается в программе.
Процедура на
кнопку Далее:
Begin
If RadioGroup1.Itemindex=-1 then ShowMessage
(‘Забыли ответить
на вопрос!’)
Else
Begin if RadioGroup1.Itemindex=2 then i:=i+1;
Form2.show;
End;
Открываем новую форму (New
– Form) оформляем вопрос –
ответы, кнопка Далее:
Begin
If RadioGroup1.Itemindex=-1 then ShowMessage
(‘Забыли ответить
на вопрос!’)
Else
Beginif RadioGroup1.Itemindex=1 then i:=i+1;
Form2.Close;
Form3.Show;
End;
Начиная со
второго модуля
(Unit2), добавляем слово
Unit1 в то
место, где
идет перечисление:
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs,
StdCtrls, ExtCtrls,unit1;
Аналогичную работу проделываем с формой
3 и 4.
На форме 5 располагаем вопрос, варианты
ответов, кнопку Готово и пишем процедуру
на эту кнопку
Begin
If RadioGroup1.Itemindex=-1 then ShowMessage
(‘Забыли ответить
на вопрос!’)
Else
Begin if RadioGroup1.Itemindex=3 then i:=i+1;
End;
Case i of
0,1,2: ShowMessage (‘Вы получили
2’);
3: ShowMessage (‘Вы получили
3’);
4: ShowMessage (‘Вы получили
4’);
5: ShowMessage (‘Вы получили
5’);
End;
Создали тест, делаем первый раз запуск
программы, появится окно, где нужно
выбирать YES, окно будет
появляться столько раз, сколько было
форм, это устанавливаются связи.
Первую форму
можно использовать для отображения
общей информации о тесте, например:
Используемые объекты:
Компонента |
Свойство |
Значение |
Events |
Forma1 |
Caption |
Методика |
OnCreate |
Memo1 |
Lines |
очитстить |
|
Font |
Настроить |
||
ScroollBars |
ssVertical |
||
Button1 |
Caption |
Ok |
OnClick |
Весь текст отображаемый в объекте Memo1,
заранее сохранить в файле text.txt (название
может быть свое), в текущей папке проекта
procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Lines.LoadFromFile (‘text.txt’);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.show;
end;
Добавление иллюстраций
Страница
библиотеки Additional
Класс TImage
Компонент
Image
дает
отображение на форме графического
изображения. Свойство Picture
позволяет
отобразить выбранное изображение в
приложении.
Св-во |
Объявление |
AutoSize |
Указывает, |
Center |
Указывает, |
Соседние файлы в папке №10
- #
- #
22
ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ЛУГАНСКОЙ НАРОДНОЙ РЕСПУБЛИКИ
«КИРОВСКАЯ СРЕДНЯЯ ОБЩЕОБРАЗОВАТЕЛЬНАЯ ШКОЛА №3»
Практическая работа
урока информатики
Тема: “Разработка тестовой программы в среде Delphi 7”
Составитель: учитель информатики II категории
Петров Денис Сергеевич
2017 г.
Цель: приобрести практические умения и навыки разработки тестовых программ.
Задание
Создать проект в среде Delphi7, реализующий тест, в соответствии со следующими требованиями:
— в проект добавить пользовательские формы, отображающие каждый из вопросов Вашего теста;
— создать программный код для каждой программной формы, позволяющий вывести на формы содержание вопросов и ответов;
— реализовать анализ ответов обучаемого на вопросы теста, по желанию выполнив его либо после ответа на каждый вопрос, либо после ответов на все вопросы;
— предусмотреть итоговый вывод количества правильных и неправильных ответов.
Теоретические сведения
1 Этапы разработки программы
Определение требований к программе – один из важнейших этапов. На этом этапе подробно описывается исходная информация, и формулируются требования к результату. Кроме того, описывается поведение программы в особых случаях.
При разработке программы, предназначенной для работы в Windows, требования к ней могут включать пункты о желаемом виде диалоговых окон программы.
На этапе разработки алгоритма необходимо определить последовательность действий, которые надо выполнить для достижения поставленной цели, получения результата. Если задача может быть решена различными способами, и, следовательно, возможны различные варианты алгоритма решения, то, программист, используя некоторый критерий, выбирает наиболее подходящее решение. Затем составляется подробное составление алгоритма.
При программировании в Delphi основная работа программиста заключается в разработке подпрограмм. Задачу организации взаимодействия разработанных подпрограмм берет на себя Delphi. Также Delphi удобна для создания программ с визуальными компонентами, которые уже созданы в ней и имеют стандартный набор команд.
1.1 Постановка задачи
Поставленная задача заключалась в следующем. Необходимо создать программу для проведения текстовых проверок знаний в форме тестирования.
1.2 Язык программирования Delphi
Среда разработки Delphi ориентирована, прежде всего, на создание программ для семейства операционных систем Windows. При этом большое внимание уделяется возможности визуальной разработки приложений с помощью большого набора готовых компонентов, а в стандартную поставку Delphi входят основные объекты, которые образуют удачно подобранную иерархию из 270 базовых классов, позволяющих избежать ручного кодирования. Эти компоненты охватывают практически все аспекты применения современных информационных технологий.
В процессе построения приложения необходимо выбирать из палитры компоненты, на основе которых будет строиться проект. Еще до компиляции видно результаты своей работы. В этом смысле проектирование в Delphi мало чем отличается от проектирования в интерпретирующей среде, однако после выполнения компиляции получаем код, который исполняется в 10 раз быстрее, чем то же самое, сделанное при помощи интерпретатора. Среда Delphi включает в себя полный набор визуальных инструментов для скоростной разработки приложений, поддерживающей разработку пользовательского интерфейса.
- Пользовательский интерфейс
При запуске теста, показывается название программы и кнопка “Начать тест”.
После нажатия этой кнопки начинается сам тест, при этом откроется новое окно, а старое закроется.
При нажатии кнопки “Начать тест” на форме отобразится вопрос и четыре варианта ответа, выбор варианта ответа производится кликом мыши. Продолжение тестирования производится кнопкой “Ответить ” при этом на форме будут отображаться новые вопросы и четыре варианта ответа.
По окончании теста, программа подсчитает количество правильных ответов и выставит на их основе оценку тестируемого.
2 Описание исходных текстов программы
unit Unit2; // модуль главной формы
В этом модуле содержится несколько основных функций необходимых для работы программы.
Переменные.
var
Form2: TForm2;
Ini: TIniFile;
QuestNum: Integer;
QuestCount: Integer;
Scores: Integer;
Wrong: Integer;
ProgPath : string;
Count : integer;
2.1 Создание простейшей кнопки
Простейшей и, пожалуй, наиболее часто используемой кнопкой является кнопка Button расположенная на странице библиотеки Standard.
Основное с точки зрения внешнего вида свойство кнопки — Caption (надпись). В надписях кнопок можно предусматривать использование клавиш ускоренного доступа, выделяя для этого один из символов надписи. Перед символом, который должен соответствовать клавише ускоренного доступа, ставится символ амперсанта «&». Этот символ не появляется в надписи, а следующий за ним символ оказывается подчеркнутым. Тогда пользователь может вместо щелчка на кнопке нажать в любой момент клавишу Alt совместно с клавишей выделенного символа.
Основное событие любой кнопки — OnClick, возникающее при щелчке на ней. Именно в обработчике этого события записываются операторы, которые должны выполняться при щелчке пользователя на кнопке. Помимо этого есть еще ряд событий, связанных с различными манипуляциями клавишами и кнопками мыши.
Свойство Cancel, если его установить в true, определяет, что нажатие пользователем клавиши Esc будет эквивалентно нажатию на данную кнопку. Это свойство целесообразно задавать равным true для кнопок «Отменить» в различных диалоговых окнах, чтобы можно было выйти из диалога, нажав на эту кнопку или нажав клавишу Esc. Свойство Default, если его установить в true, определяет, что нажатие пользователем клавиши ввода Enter будет эквивалентно нажатию на данную кнопку, даже если данная кнопка в этот момент не находится в фокусе. Правда, если в момент нажатия Enter в фокусе находится другая кнопка, то все-таки сработает именно кнопка в фокусе.
Из методов, присущих кнопкам, имеет смысл отметить один — Click. Выполнение этого метода эквивалентно щелчку на кнопке, т.е. вызывает событие кнопки OnClick. Этим можно воспользоваться, чтобы продублировать какими-то другими действиями пользователя щелчок на кнопке. Пусть, например, вы хотите, чтобы при нажатии пользователем клавиши с символом «С» или «с» в любой момент работы с приложением выполнялись операции, предусмотренные в обработчике события OnClick кнопки Button1. Поскольку неизвестно, какой компонент будет находиться в фокусе в момент этого события, надо перехватить его на уровне формы. Такой перехват осуществляется, если установить свойство формы KeyPreview в true. Тогда в обработчике события формы OnKeyPress можно написать оператор
if (key=’C’ or key=’c’) then Button1.Click;
Если пользователь ввел символ «С» или «с», то в результате будет выполнен обработчик щелчка кнопки Button1.
2.2 Опции окна редактирования
В компоненте Edit вводимый и выводимый текст содержится в свойстве Text. Это свойство можно устанавливать в процессе проектирования или задавать программно. Выравнивание текста, как это имело место в метках и панелях, невозможно. Перенос строк тоже невозможен. Текст, не помещающийся по длине в окно, просто сдвигается, и пользователь может перемещаться по нему с помощью курсора. Свойство AutoSize в окнах редактирования имеет смысл, отличный от смысла аналогичного свойства меток: автоматически подстраивается под размер текста только высота, но не ширина окна.
Окна редактирования снабжены многими функциями, свойственными большинству редакторов. Например, в них предусмотрены типичные комбинации «горячих» клавиш: Ctrl-C — копирование выделенного текста в буфер обмена Clipboard (команда Copy), Ctrl-X — вырезание выделенного текста в буфер Clipboard (команда Cut), Ctrl-V — вставка текста из буфера Clipboard в позицию курсора (команда Paste), Ctrl-Z — отмена последней команды редактирования.
Edit можно использовать и просто как компоненты отображения текста. Для этого надо установить в true его свойство ReadOnly и целесообразно установить AutoSelect в false. В этом случае пользователь не сможет изменять отображаемый текст, и окно редактирования становится подобным меткам. При использовании окон редактирования для вывода, ввода и редактирования чисел необходимо использовать функции взаимного преобразования строк и чисел. Для вывода это описанные при рассмотрении меток функции FloatToStr и IntToStr. При вводе это функции StrToFloat — преобразование строки в значение с плавающей запятой, и StrToInt — преобразование строки в целое значение. Если вводимый текст не соответствует числу (например, содержит недопустимые символы), то функции преобразования генерируют исключение EConvertError.
Этот код обеспечивает сообщение пользователю об ошибке ввода и предотвращает ошибочные вычисления. Впрочем, это не лучший вариант предотвратить ошибочный ввод, поскольку пользователь узнает о своей ошибке только после того, как программа пытается использовать введенные данные. Лучше, если пользователь просто не сможет ввести неправильные символы. Например, если вы хотите, чтобы пользователь мог вводить в окно редактирования Edit только цифры и символ точки, вы можете в обработчик события OnKeyPress этого компонента вставить оператор:
if not (Key in [‘0’..’9′, ‘,’]) then Key := #0;
Этот оператор подменит все символы, кроме цифр и запятой, нулевым символом, который не занесется в текст окна Edit.
Внешний вид формы (Form2) в дизайнере форм. Иерархия расположения компонентов на форме приведена на рис.1.
.
Рисунок 1 — Иерархия расположения компонентов на форме
2.3 Функции
Ниже я приведу описание функций:
1) функция, ss2nn которая переводит секунды в минуты + секунды в строковом формате (необходимо для подсчета времени прошедшего с начала тестирования):
function TForm2.ss2nn(Seconds: Integer): String;
var
nMin, nSec: Integer;
begin
{Проверяем, меньше чем 1/Min}
if Seconds 60 then Result := ‘0 минут ‘ + IntToStr(Seconds) + ‘ секунд’
else begin
{Определяем минуты}
nMin := Seconds div 60;
{Определяем секунды}
nSec := Seconds — (nMin * 60);
{Возвращаем результат}
Result := IntToStr(nMin) + ‘ минут ‘ + IntToStr(nSec) + ‘ секунд’;
end;
end;
Функции надо передать количество секунд и в результате мы получим значение типа string. Например, если мы передадим функции число 70, то получим в результате 1 минут 10 секунд.
2) процедура ShowQuestion — функция, которая загружает текст вопроса и варианты ответов, а так же показывает текст вопроса и варианты ответов на текстовых метках.
procedure TForm2.ShowQuestion;
var
Count, i: Integer;
begin
if (QuestNum QuestCount) and (QuestNum 0) then
begin
{ Если номер текущего вопроса больше чем должно быть показано и кол-во вопросов 0 то выполняем следующее….}
Form3 := TForm3.Create(self);//создаем форму с результатами тестирования
res := (Scores * 100) div QuestCount;// узнаем кол-во правильных ответов
Form3.Gauge1.Progress := res; // выводим правильные ответы на графике в %
Form3.Gauge2.Progress := 100—res; //выводим кол-во неправильных ответов
//сколько всего вопросов….
Form3.Label5.Caption := ‘Вопросов в тесте: ‘+IntToStr(QuestCount);
//пишем на label кол-во правильных ответов
Form3.Label3.Caption := IntToStr(Scores);
//тоже самое, только неправильные
Form3.Label4.Caption := IntToStr(Wrong);
Timer1.Enabled:=False; //выключаем таймер времени
Form3.TimeLabel.Caption:=TimeLabel.Caption; //выводим время на label времени
Form3.ShowModal;// наконец показываем форму с результатами
Form2.close; //закрываем форму с вопросами end;
Если данное условие не выполняется, то…
Рассмотрим это фрагмент функции более подробно. Для загрузки вопросов я использовал класс TIniFile – этот класс используется для работы с ini—файлами. Список вопросов и ответов хранится в специально сформированном файле Test.ini, откуда программа их загружает. Вот вырезка из файла Test.ini:
[Тест]
Количество Вопросов=15
Название теста = Проверка знаний по русскому языку
[Вопрос №1]
Текст вопроса = Вставьте проверяемые безударные гласные А или О. Укажите слова с буквой О.
Текст кнопки 1 = ХВ__ТАТЬ
Текст кнопки 2 = К__РАТЕЛЬНЫЙ
Текст кнопки 3 = НАК__ПИТЬ ДЕНЬГИ
Текст кнопки 4 = НАСЛ__ЖДАТЬСЯ
Правильный вариант = 3
…
Ниже приведена процедура загрузки вопроса и вариантов ответов:
//загружаем текст вопроса
Label1.Caption := Ini.ReadString(‘Вопрос №’ + inttostr(QuestNum), ‘Текст вопроса’, ‘Вопрос отсутствует’);
//загружаем варианты ответов
RadioButton1.Caption := Ini.ReadString(‘Вопрос №’ + inttostr(QuestNum), ‘Текст кнопки 1’, ‘ERROR‘);
RadioButton2.Caption := Ini.ReadString(‘Вопрос №’ + inttostr(QuestNum), ‘Текст кнопки 2’, ‘ERROR’);
RadioButton3.Caption := Ini.ReadString(‘Вопрос №’ + inttostr(QuestNum), ‘Текст кнопки 3’, ‘ERROR‘);
RadioButton4.Caption := Ini.ReadString(‘Вопрос №’ + inttostr(QuestNum), ‘Текст кнопки 4’, ‘ERROR’);
{Процедура загрузки завершена}
end;
В данной функции метод ReadString класса TIniFile собственно и производит загрузку начальных значений меток (label) с вопросом и вариантами ответов.
3 Процедуры
1) Процедура – обработчик события нажатия на кнопку «Начать тест»(Button1):
procedure TForm2.Button1Click(Sender: TObject);
begin
Count:=0;
Timer1.Enabled:=True;
Label10.Visible:=True;
TimeLabel.Visible:=True;
BitBtn1.Visible := true;
Panel3.Visible := true;
Button1.Visible := false;
Label9.Visible:=True;
BitBtn1.OnClick(self);
end;
Во время выполнения этой процедуры происходит показ всех нужных для правильной работы программы компонентов, запуск таймера, а также скрытие самой кнопки «Начать тест».
2) процедура – обработчик события нажатия на кнопку «Ответить»(Button):
procedure TForm2.BitBtn1Click(Sender: TObject);
var
Answer, CA: Integer;
begin
Answer := Ini.ReadInteger(‘Вопрос №’ + inttostr(QuestNum), ‘Правильный вариант’, —1);
if Answer 0 then Exception.Create(‘В файле с вопросами не написан правильный вариант’);
ca := 0;
if RadioButton1.Checked then
Ca := 1;
if RadioButton2.Checked then
Ca := 2;
if RadioButton3.Checked then
Ca := 3;
if RadioButton4.Checked then
Ca := 4;
if Ca = Answer then
inc(Scores)
else
inc(Wrong);
inc(QuestNum);
Label6.Caption := ‘Номер вопроса: ‘ + IntToStr(QuestNum);
Label8.Caption := ‘Правильных ответов: ‘ + IntToStr(Scores);
Label7.Caption := ‘Неправильных ответов: ‘ + IntToStr(Wrong);
ShowQuestion;
end;
Читаем Правильный ответ из рабочего ini файла программы:
Answer := Ini.ReadInteger(‘Вопрос №’ + inttostr(QuestNum), ‘Правильный вариант’, -1);
Собственно определяем правильный ответ или нет
if Ca = Answer then
inc(Scores)
else
inc(Wrong);
Оператор Inc увеличивает значение указанной переменной на 1. Если да то +1 к правильным если нет, то +1 к неправильным.
3.1 Процедура работы таймера времени
procedure TForm2.Timer1Timer(Sender: TObject);
begin
Count:=Count+1;
TimeLabel.Caption:=ss2nn(Count);
end;
Начальное значение переменной Count – 0, с каждой секундой значение переменной увеличивается на 1, затем функцией ss2nn значение переводится в секунды + минуты (если нужно) и результат выводится на TimeLabel. На рисунке 2 приведена иллюстрация, демонстрирующая работу программы.
Рисунок 2 – Внешний вид программы
3.2 Форма с результатами тестирования (Form3/Unit3)
После того как программа закончила тестирование, она подсчитывает результаты, создает и показывает форму с результатами тестирования. Вид формы для результатов тестирования в дизайнере форм Delphi приведен на рисунке 3.
Рисунок 3 — Вид формы для результатов тестирования в дизайнере форм Delphi
Кнопка “Ok” на Form3 закрывает программу.
Процедуры.
Процедура – обработчик создания формы с результатами тестирования описана в предыдущем модуле (Unit2). Рассмотрим работу таймера, который собственно выставляет оценку.
procedure TForm3.Timer1Timer(Sender: TObject);
begin
if (Gauge1.Progress 40) then label7.Caption:=‘2’;
if (Gauge1.Progress = 40 )and (Gauge1.Progress 60) then label7.Caption:=‘3’;
if (Gauge1.Progress =60) and (Gauge1.Progress 90)
then label7.Caption:=‘4’; if Gauge1.Progress 90 then label7.Caption:=‘5’; end;
Приложение А
Модуль формы с вопросами.
program Project1;
uses
Forms,
Unit2 in ‘Unit2.pas’ {Form2},
Unit3 in ‘Unit3.pas’ {Form3};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm2, Form2);
Application.Run;
end.
unit Unit2; // модуль главной формы
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Buttons, IniFiles, XPMan;
type
TForm2 = class(TForm)
Panel1: TPanel;
Label1: TLabel;
BitBtn1: TBitBtn;
Panel2: TPanel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Button1: TButton;
Panel3: TPanel;
Label2: TLabel;
RadioButton1: TRadioButton;
Label3: TLabel;
RadioButton2: TRadioButton;
Label4: TLabel;
RadioButton3: TRadioButton;
RadioButton4: TRadioButton;
Label11: TLabel;
Timer1: TTimer;
Label10: TLabel;
TimeLabel: TLabel;
XPManifest1: TXPManifest;
procedure FormCreate(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
{Обьявляем необходимые переменные}
QuestNum: Integer;
QuestCount: Integer;
Scores: Integer;
Wrong: Integer;
ProgPath : string;
public
res : Integer;
{Функция для перевода секунд в минуты + секунды}
function ss2nn(Seconds: Integer): String;
procedure ShowQuestion; {!!!Главная процедура для загрузки и показа
вопросов и ответов}
end;
var
Form2: TForm2;
Ini: TIniFile;
Count : integer;
implementation
uses Unit3;
{$R *.dfm}
{ TForm2 }
function TForm2.ss2nn(Seconds: Integer): String;
var
nMin, nSec: Integer;
begin
{Проверяем, меньше чем 1/Min}
if Seconds 60 then Result := ‘0 минут ‘ + IntToStr(Seconds) + ‘ секунд’
else begin
{Определяем минуты}
nMin := Seconds div 60;
{Определяем секунды}
nSec := Seconds — (nMin * 60);
{Возвращаем результат}
Result := IntToStr(nMin) + ‘ минут ‘ + IntToStr(nSec) + ‘ секунд’;
end;
end;
procedure TForm2.ShowQuestion;
var
Count, i: Integer;
begin
if (QuestNum QuestCount) and (QuestNum 0) then
begin
{если кол-во вопросов больше чем уже показанных и кол-во вопросов
0 то выполняем следушее….}
Form3 := TForm3.Create(self);//создаем форму с результатами тестирования
res := (Scores * 100) div QuestCount;// узнаем кол-во правильных ответов
Form3.Gauge1.Progress := res; // выводим правильные ответы на графике в %
Form3.Gauge2.Progress := 100—res; //выводим кол-во неправильных ответов
//сколько всего вопросов….
Form3.Label5.Caption := ‘Вопросов в тесте: ‘+IntToStr(QuestCount);
//пишем на label кол-во правильных ответов
Form3.Label3.Caption := IntToStr(Scores);
//тоже самое, только неправильные
Form3.Label4.Caption := IntToStr(Wrong);
Timer1.Enabled:=False; //выключаем таймер времени
Form3.TimeLabel.Caption:=TimeLabel.Caption; //выводим время на label времени
Form3.ShowModal;// наконец показываем форму с результатами
Form2.close; //закрываем форму с вопросами
end;
//загружаем текст вопроса
Label1.Caption := Ini.ReadString(‘Вопрос №’ + inttostr(QuestNum), ‘Текст вопроса’, ‘Вопрос отсутствует’);
//загружаем варианты ответов
RadioButton1.Caption := Ini.ReadString(‘Вопрос №’ + inttostr(QuestNum), ‘Текст кнопки 1′, ‘ERROR‘);
RadioButton2.Caption := Ini.ReadString(‘Вопрос №’ + inttostr(QuestNum), ‘Текст кнопки 2′, ‘ERROR’);
RadioButton3.Caption := Ini.ReadString(‘Вопрос №’ + inttostr(QuestNum), ‘Текст кнопки 3′, ‘ERROR’);
RadioButton4.Caption := Ini.ReadString(‘Вопрос №’ + inttostr(QuestNum), ‘Текст кнопки 4′, ‘ERROR’);
{Процедура загрузки завершена}
end;
{Процедура созлания формы с вопросами}
procedure TForm2.FormCreate(Sender: TObject);
begin
{Получаем путь папки где находится наша прога}
ProgPath := ExtractFileDir(Application.ExeName) + »;
Ini := TIniFile.Create(ProgPath + ‘Test.ini’);
Label1.Caption := Ini.ReadString(‘Тест’, ‘Название теста’, ‘Тест без названия’);
QuestNum := 0;
Scores := 0;
wrong := —1;
QuestCount := Ini.ReadInteger(‘Тест’, ‘Количество Вопросов ‘, -2);
Label5.Caption := ‘Всего вопросов в тесте: ‘ + IntToStr(QuestCount);
end;
procedure TForm2.BitBtn1Click(Sender: TObject);
var
Answer, CA: Integer;
begin
Answer := Ini.ReadInteger(‘Вопрос №’ + inttostr(QuestNum), ‘Правильный вариант’, -1);
if Answer 0 then Exception.Create(‘В файле с вопросами не написан правильный вариант’);
ca := 0;
if RadioButton1.Checked then
Ca := 1;
if RadioButton2.Checked then
Ca := 2;
if RadioButton3.Checked then
Ca := 3;
if RadioButton4.Checked then
Ca := 4;
if Ca = Answer then
inc(Scores)
else
inc(Wrong);
inc(QuestNum);
Label6.Caption := ‘Номер вопроса: ‘ + IntToStr(QuestNum);
Label8.Caption := ‘Правильных ответов: ‘ + IntToStr(Scores);
Label7.Caption := ‘Неправильных ответов: ‘ + IntToStr(Wrong);
ShowQuestion;
RadioButton1.Checked:=False;
RadioButton2.Checked:=False;
RadioButton3.Checked:=False;
RadioButton4.Checked:=False;
end;
procedure TForm2.Button1Click(Sender: TObject);
begin
Count:=0;
Timer1.Enabled:=True;
Label10.Visible:=True;
TimeLabel.Visible:=True;
BitBtn1.Visible := true;
Panel3.Visible := true;
Button1.Visible := false;
Label9.Visible:=True;
BitBtn1.OnClick(self);
end;
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
// Ini.Free;
end;
procedure TForm2.Timer1Timer(Sender: TObject);
begin
Count:=Count+1;
TimeLabel.Caption:=ss2nn(Count);
end;
end.
Литература
-
Бобровский С.И. Delphi 5 – М.: Питер, 2002.
-
Гаевский A. Разработка программных приложений на Delphi 6 – М.: Киев, 2000.
-
Зуев В. A. Turbo Pascal 6.0, 7.0. М.: Москва, 1998.
-
Коцюбинский А.О., Грошев С.В. Язык программирования Delphi 5 – М.: Москва, 1999.
-
Леонтьев В.И. Delphi 5 – М.: Москва, 1999.
-
Моисеев А.С. Object Pascal – М.: Москва, 2000.
-
Немнюгин С.А. Программирование – М.: Питер, 2000.
-
Ремизов Н. C. Delphi – М.: Питер, 2000.
Приложение Б
Модуль формы с результатами тестирования
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Gauges, Buttons;
type
TForm3 = class(TForm)
Bevel1: TBevel;
Label1: TLabel;
Label2: TLabel;
Gauge1: TGauge;
Gauge2: TGauge;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
BitBtn1: TBitBtn;
Label6: TLabel;
Label7: TLabel;
Timer1: TTimer;
Label8: TLabel;
TimeLabel: TLabel;
procedure BitBtn1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
implementation
uses Unit1, Unit2;
{$R *.dfm}
procedure TForm3.BitBtn1Click(Sender: TObject);
begin
Close;
end;
procedure TForm3.Timer1Timer(Sender: TObject);
begin
if (Gauge1.Progress 40) then label7.Caption:=‘2’;
if (Gauge1.Progress = 40 )and (Gauge1.Progress 60) then label7.Caption:=‘3’;
if (Gauge1.Progress =60) and (Gauge1.Progress 90)
then label7.Caption:=‘4’;
if Gauge1.Progress 90 then label7.Caption:=‘5’;
end; end.
ПРИЛОЖЕНИЕ В
Вопросы теста и ответы к ним из файла Test.ini.
[Тест]
Количество Вопросов=15
Название теста = Проверка знаний по русскому языку
[Вопрос №1]
Текст вопроса = Вставьте проверяемые безударные гласные А или О. Укажите слово с буквой О.
Текст кнопки 1 = ХВ__ТАТЬ
Текст кнопки 2 = К__РАТЕЛЬНЫЙ
Текст кнопки 3 = НАК__ПИТЬ ДЕНЬГИ
Текст кнопки 4 = НАСЛ__ЖДАТЬСЯ
Правильный вариант = 3
[Вопрос №2]
Текст вопроса = Вставьте проверяемые безударные гласные (E, И, А, Я). Укажите слово с буквой E.
Текст кнопки 1 = Щ_ПАТЬСЯ
Текст кнопки 2 = Ш__ПТАТЬСЯ
Текст кнопки 3 = СТРАШНОЕ ПРИВ__ДЕНИЕ
Текст кнопки 4 = ПР_СКАКАТЬСЯ
Правильный вариант = 2
[Вопрос №3]
Текст вопроса = Вставьте непроверяемые безударные гласные А или О. Укажите слово с буквой О.
Текст кнопки 1 = ДИ__ГОНАЛЬ
Текст кнопки 2 = АМ__РАЛЬНЫЙ
Текст кнопки 3 = УТР__МБОВАТЬ
Текст кнопки 4 = ПОЛ_ГАТЬ
Правильный вариант =2
[Вопрос №4]
Текст вопроса = Вставьте непроверяемые безударные гласные (E, И, Я). Укажите слово с буквой E.
Текст кнопки 1 = МЕЛ__ОРАЦИЯ
Текст кнопки 2 = СТАЖ__РОВКА
Текст кнопки 3 = ДИЛ__ТАНТ
Текст кнопки 4 = СТ__ПЕНДИЯ
Правильный вариант = 3
[Вопрос №5]
Текст вопроса = Вставьте чередующиеся безударные гласные А или О. Укажите слово с буквой О
Текст кнопки 1 = СОПРИК__СНОВЕНИЕ
Текст кнопки 2 = ИЗЛ__ГАТЬ
Текст кнопки 3 = ПРИК_САТЬСЯ
Текст кнопки 4 = НЕПРИК__САЕМЫЙ
Правильный вариант = 1
[Вопрос №6]
Текст вопроса = Вставьте чередующиеся безударные гласные Е или И.Укажите слово с буквой Е.
Текст кнопки 1 = ОТБЛ__СК
Текст кнопки 2 = ПРИЧ__ТАЮЩИЙСЯ
Текст кнопки 3 = НАЧ__НАЮЩИЙ
Текст кнопки 4 = ПОДЖ__ГАТЬ
Правильный вариант = 1
[Вопрос №7]
Текст вопроса = Вставьте О или Ё после шипящих. Укажите слово с буквой Ё
Текст кнопки 1 = ИСКАЖ__ННОЕ ИЗОБРАЖЕНИЕ
Текст кнопки 2 = Ш__КОВАЯ ТЕРАПИЯ
Текст кнопки 3 = ПИРОГ С АЛЫЧ__Й
Текст кнопки 4 = РЕЧ__НКА
Правильный вариант = 1
[Вопрос №8]
Текст вопроса = Вставьте звонкие или глухие согласные. Укажите слово со звонкой согласной (б, в, г, д, ж, з)..
Текст кнопки 1 = _ДАЧА
Текст кнопки 2 = КРОМЕ__НАЯ ТЬМА
Текст кнопки 3 = ПРО__ЬБА О ПОМОЩИ
Текст кнопки 4 = _ДЕСЬ
Правильный вариант = 4
[Вопрос №9]
Текст вопроса = Укажите слово, где нужна непроизносимая согласная.
Текст кнопки 1 = ТРОС__НИКОВЫЙ САХАР
Текст кнопки 2 = БЕЗЫСКУС__НОСТЬ
Текст кнопки 3 = ЖИВОПИС__НЫЙ ВИД
Текст кнопки 4 = ОПАС_НЫЙ
Правильный вариант = 1
[Вопрос №10]
Текст вопроса = Укажите слово, где не нужно добавить согласную.
Текст кнопки 1 = ГА__ЛЕРЕЯ
Текст кнопки 2 = ВЕТРЕН_ЫЙ ДЕНЬ
Текст кнопки 3 = КО__ТЕДЖ
Текст кнопки 4 = ТО__НЕЛЬ
Правильный вариант = 1
[Вопрос №11]
Текст вопроса = Укажите слово, где нужен разделительные Ъ.
Текст кнопки 1 = ТРАНС__АТЛАНТИЧЕСКИЙ
Текст кнопки 2 = НЕПОД__ЁМНЫЙ ГРУЗ
Текст кнопки 3 = ОП__ЯНЁННЫЙ
Текст кнопки 4 = ЗАМУЖ_
Правильный вариант = 2
[Вопрос №12]
Текст вопроса = Укажите в слово, в котором нужен Ь после шипящей.
Текст кнопки 1 = СПЛОШ_
Текст кнопки 2 = СМЕРЧ_
Текст кнопки 3 = С ПЛЕЧ__ ДОЛОЙ
Текст кнопки 4 = УЖ_
Правильный вариант = 1
[Вопрос №13]
Текст вопроса = Определите написание сложных слов. Укажите слово с дефисным написанием.
Текст кнопки 1 = МИКРО__ХИРУРГИЯ
Текст кнопки 2 = МНОГО__СТОРОННИЙ
Текст кнопки 3 = ЛИТЕРАТУРНО__МУЗЫКАЛЬНЫЙ
Текст кнопки 4 = ЖЕЛЕЗНО_ДОРОЖНЫЙ
Правильный вариант = 3
[Вопрос №14]
Текст вопроса = Определите написание сложных слов с ПОЛ-. Укажите слово с дефисным написанием.
Текст кнопки 1 = ПОЛ__ЗАРПЛАТЫ
Текст кнопки 2 = ПОЛ__ПОЛЬШИ
Текст кнопки 3 = ПОЛ__ШЕСТОГО
Текст кнопки 4 = ПОЛ_ДОСКИ
Правильный вариант = 2
[Вопрос №15]
Текст вопроса = Вставьте 3 или С в приставки. Укажите слово с приставкой на -3.
Текст кнопки 1 = И__ЖАРИТЬ
Текст кнопки 2 = __ДУТЬ
Текст кнопки 3 = НИ__ПАДАТЬ
Текст кнопки 4 = БЕ__ПОДОБНО
Правильный вариант = 1