Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторна робота №12

.pdf
Скачиваний:
10
Добавлен:
15.02.2015
Размер:
515.49 Кб
Скачать

У програмі встановлено обмеження на кількість елементів масиву

T_TEXT - не більше 10. За бажанням це можна змінити. Після встановлюються властивості компоненти форма. Список значень властивості Items компоненти

RadioGroup1 формуватимемо в ході програми залежно від кількості елементів в масиві довідника тестів. Для цього до властивості Items застосовуємо метод

Add:

For I:=1 to 4 do RadioGroup1.Items.Add(T_TEXT[I]);

Якщо файл довідника тестів відсутній, то буде видано повідомлення Відсутній довідник тестів. В результаті форма буде виглядати так як на рис.12.4

Рисунок 12.4

Створіть нову форму Form2 і збережіть під ім'ям Unit2.pas. Під'єднаєте створену форму до титульної форми. Для цього в Unit1.pas у розділі interface в

рядок списку приєднаних модулів додайте Unit2. Створимо процедуру, яка обробляє ситуацію натиснення кнопки Button1 (Тест). Для цього виділіть об'єкт

Button1, перейдіть на вкладку Events Інспектора об'єктів (Object Inspector),

знайдіть подію OnClick, праворуч від нього двічі клацнути лівою кнопкою миші. Попавши в код програми, треба написати наступний код:

procedure TForm1.Button1Click(Sender: TObject);

21

Var N:Byte;

Begin

N:=RadioGroup1.ItemIndex+1; AssignFile(FFILE,'TEST_'+IntToStr(N)+'.txt'); // Тест с номером N

{$I-} Reset(FFILE); {$I+}

If IOResult = 0 then begin

AssignFile(FF_R, 'TEST_R.txt'); // Рабочий файл тестов

Rewrite(FF_R); Repeat Read(FFILE,TEST_); Write(FF_R,TEST_); until (Eof(FFILE)); CloseFile(FFILE); CloseFile(FF_R); Form2.ShowModal; end

else ShowMessage('Відсутній файл тестів'); end;

На початку процедури формується ім'я тесту залежно від номера вибраного рядка компонента RadioGroup1.

Примітка

Індекс першого перемикача дорівнює 0, а масив довідника містить індекс першого елементу дорівнює 1.

Далі відкривається вибраний файл-тест. Якщо даний файл відсутній, то видається повідомлення «Відсутній файл тестів». Якщо при відкритті файлу-

тесту не виникло помилки, то інформація з нього, переписується в робочий файл тестів (TEST_R.txt). У завершенні відкривається форма як модальна. Це означає, що управління передається новій формі, і користувач не може передати

22

фокус іншій формі даного застосування до тих пір, поки він не закриє модальну форму.

Створимо процедуру, яка обробляє ситуацію натиснення кнопки Button2 («Вихід»). Для цього виділіть об'єкт Button2, перейдіть на вкладку Events

Інспектора об'єктів (Object Inspector), знайдіть подію OnClick, праворуч від нього двічі клацнути лівою кнопкою миші. Попавши в код програми, треба написати наступний код:

procedure TForm1.Button2Click(Sender: TObject);

begin

Close;

end;

4.2. Створення форми тестування

Зробіть активною Form2 і розмістіть а ній компоненти у відповідності з

рис.12.5

Рисунок 12.5

23

Найменування

Сторінка

Призначення

п/п

компоненту

 

 

1

Label1

Standard

Виведення тексту «Питання № ...»

2

Label2

Standard

Виведення тексту «Текст» питання

3

Label3

Standard

Виведення тексту «Всього питань ...»

4

Label4

Standard

Виведення тексту «Правильних

 

 

 

відповідей ...»

5

RadioGroup1

Standard

Виведення варіантів відповідей

6

Button1

Standard

Кнопка для переходу до наступного

 

 

 

питання, показу результату і

 

 

 

завершенню тестування

В розділі implementation розмістіть опис типу і даних, які будемо використовувати під час роботи.

Type TTEST = Record

TEXT : String [250]; // Текст питання

OTV : Array [1..4]of String [100];// Варіанти відповідей

REZ : Array [1..4]of Byte // Правильна відповідь

end;

Var FF_R : File of TTEST; // Рабочий файл тестів

KOL : Byte; // Кількість питань в тесті

KOL_N: Byte; // Поточний номер питання

TEST_: TTEST; // рядок запису файлу

REZ_N: Byte;// Кількість правильних відповідей

Для об’єкту Form2, перейдіть на вкладку Events Інспектора об’єктів

(Object Inspector), знайдіть подію OnActivate, справа від нього двічі клацніть

лівою кнопкою миші. Потрапивши в код програми, треба написати наступний

код:

procedure TForm2.FormActivate(Sender: TObject); Var I : Byte;

Begin

AssignFile(FF_R,'TEST_R.txt');

Reset(FF_R);

Read(FF_R,TEST_);

KOL:= FileSize(FF_R)-1;

KOL_N:=1;

24

REZ_N:=0;

Label1.Visible:=True;

RadioGroup1.Visible:=True;

Form2.Caption:=TEST_.TEXT;

Form2.Height:=420;

Form2.Width:=850;

Label3.Caption:='Всього питань - '+IntToStr(KOL); Label3.Top:=20;

Label3.Left:= 700;

Label3.Font.Size := 8;

Label4.Caption:='Правильних відповідей - '+IntToStr(REZ_N); Label4.Top:=40;

Label4.Left:= 700; Label4.Font.Size := 8;

Label4.Font.Color:=clBlack;

Button1.Caption:='Наступний';

Button1.Top:=350;

Button1.Left:=720;

Button1.Width:= 100;

Button1.Height:=30;

Read(FF_R,TEST_);

Label1.Caption:='Питання № '+IntToStr(KOL_N); Label1.Font.Style := [fsBold]; Label1.Font.Size := 11;

Label1.Height:=50;

Label1.Width:=400;

Label1.Left:=40;

Label1.Top:=70;

Label2.Caption:=TEST_.TEXT;

Label2.Font.Size := 12;

Label2.Height:=50;

Label2.Width:=500;

Label2.Left:=60;

Label2.Top:=100;

25

Label2.WordWrap := True;

Label2.AutoSize := False;

RadioGroup1.Top:=160;

RadioGroup1.Left:=60;

RadioGroup1.Width:= 750;

RadioGroup1.Height:= 150;

RadioGroup1.Font.Size:=11;

RadioGroup1.Caption:= ' Оберіть відповідь ';

RadioGroup1.Items.Clear;

For I:=1 to 4 do RadioGroup1.Items.Add(TEST_.OTV[I]); end;

Робота даної процедури починається з того, що відкривається робочий файл тестів TEST_R.txt і зчитується перший запис, який містить назву тесту.

За допомогою функції FileSize визначаємо кількість записів у файлі, а кількість питань буде на одиницю менше.

Далі налаштуємо компоненти Form2, Label3, Label4, Button1. Читаємо з робочого файлу тестів ще один запис - перше питання. Після цього налаштовуємо компоненти Label1, Label2, RadioGroup1. При описі компонента RadioGroup1 додамо RadioGroup1.Items.Clear;

Цей рядок дозволяє нам очистити список значень властивості Items

компоненти RadioGroup1, який формується в ході програми. Вживання методу

Clear нам необхідне при повторному тестуванні - очистити список від попередніх варіантів відповідей. В результаті форма виглядатиме так само як на рис.12.6

26

Рисунок 12.6

Створимо процедуру, яка обробляє ситуацію натиснення кнопки Button1. Для цього виділіть об'єкт Button1, перейдіть на вкладку Events Інспектора об'єктів (Object Inspector), знайдіть подію OnClick, праворуч від нього двічі клацнути лівою кнопкою миші. Попавши в код програми, треба написати наступний код:

Часть № 1

procedure TForm2.Button1Click(Sender: TObject); Var N, I :Byte;

OZENKA : Byte;

Begin

If Button1.Caption= 'Результат'

Then begin

OZENKA:=Round(REZ_N/KOL*5);

Button1.Caption:= 'Вихід';

Label1.Visible:=False;

RadioGroup1.Visible:=False;

Label2.Font.Size := 12;

Label2.Left:=250;

Label2.Top:=150;

27

Label2.Caption:='Кількість правильних відповідей - '+IntToStr(REZ N)+ ' з '+IntToStr(KOL);

Label3.Font.Size := 14;

Label3.Font.Style := [fsBold];

Label3.Left:=300;

Label3.Top:=200;

Label3.Caption:='Оцінка';

Label4.Font.Size := 14;

Label4.Left:=350;

Label4.Top:=200;

Case OZENKA of

1..2: Label4.Font.Color:=clPurple;

3:Label4.Font.Color:=clMaroon;

4:Label4.Font.Color:=clGreen;

5:Label4.Font.Color:=clNavy; end; Label4.Caption:=IntToStr(OZENKA); end

else

If Button1.Caption= 'Вихід' Then begin

Close; CloseFile(FF_R); end else begin

N:=RadioGroup1.ItemIndex+1; REZ_N:=REZ_N+ TEST_.REZ[N]; KOL_N:=KOL_N+1;

If KOL_N>KOL Then begin

Label4.Caption:='Правильних відповідей - '+IntToStr(REZ_N); Button1.Caption:= 'Результат' end

else begin

Label4.Caption:='Правильних відповідей - '+IntToStr(REZ_N); Read(FF_R,TEST_);

28

Label1.Caption:='Питання № '+IntToStr(KOL_N);

Label2.Caption:=TEST_.TEXT;

RadioGroup1.Items.Clear;

For I:=1 to 4 do RadioGroup1.Items.Add(TEST_.OTV[I]); end;

end;

end;

В ході програми кнопка Button1 може мати написи «Наступна», «Результат», «Вихід». Якщо кнопка має напис «Результат» і кликнули на ній, то в цьому випадку визначається значення змінної OZENKA по п'яти бальній системі залежно від кількості правильних відповідей Rez_n і загальної кількості питань

KOL. Потім встановлюється напис кнопки «Вихід», формується нове зображення форми, виводиться підсумкова оцінка, робляться невидимими компоненти Label1 і RadioGroup1 (тому в процедурі TForm2.FormActive

встановлюються компоненти видимими).

Якщо кнопка має напис «Вихід» і ви кликнули на ній, то в цьому випадку закривається робочий файл тестів і закривається форма. Якщо кнопка має напис «Наступний» і ви кликнули на ній, то в цьому випадку визначається яка була вибрана відповідь на питання, результат додається до змінної REZ_N.

Збільшує значення змінної KOL_N (номер поточного питання). Якщо новий поточний номер більше кількості питань, то змінюється напис на кнопці

Результат»), інакше переходимо до читання нового питання з робочого файлу тестів і формуємо виведення нового питання. Все, програма готова.

Залишилося лише її протестувати.

Завдання для самостійного виконання

Завдання

1Написати програму, яка здійснює конвертацію інформації з текстового файлу в типізований файл, для файлу з тестовими завданнями.

2Передбачити можливість вибору випадковим чином тестового завдання із загального списку завдань.

29

3Створити файл, в якому накопичується інформація про проходження тестування. Інформація, яка може знаходитися в ньому наступна: прізвище, ім'я, група, номер питання, номер відповіді учня, кількість правильних відповідей, кількість неправильних відповідей, час початку тестування, час закінчення тестування і т.п.

Контрольні питання

1.Який файл називають текстовим?

2.Що таке типізований файл?

3.Чим відрізняється нетипізований файл від типізованого?

4.Охарактеризуйте поняття поточного положення у файлі.

5.Який синтаксис оголошення файлу в програмі на мові Delphi?

6.Яку функцію виконують директиви компілятора {$I+}/{$I-}?

30