Увага! Всі конференції починаючи з 2014 року публікуються на новому сайті: conferences.neasmo.org.ua
Наукові конференції
 

АВТОМАТИЗОВАНА ПЕРЕВІРКА ЗНАНЬ

Автор: 
Роман Прокопів (Дрогобич)

Пропонуємо Вашій увазі варіант використання мови програмування Delphi для автоматизованої перевірки знань студентів.

Призначення програми – перевірка знань конкретного учня/студента чи групи учнів/студентів у будь – якій галузі. Програмний продукт складається з двох частин: програми – тестера (програми, яка призначена безпосередньо для тестування та оцінювання знань студента з теми, яку було викладено викладачем на лекційних заняттях) та програми – редактора тестів, яка призначена для експлуатації її викладачем навчального закладу (створення нових та редагування вже існуючих тестів по темі, яку було пояснено учням/студентам на лекційних заняттях). Процес тестування та створення тестів максимально спрощений та автоматизований і не потребує ніяких спеціальних знань чи навичок роботи з програмою чи комп’ютером, тобто користуватись редактором тестів може будь – який викладач із мінімальним рівнем підготовки для роботи з комп’ютером.

Робота програми для розробки тестів реалізовується наступним чином: після створення користувачем нового тесту, він зберігється у структурованому файлі у вигляді запису. Перевагою такого підходу є неможливість свідомої і ціленаправленої успішної модифікації файлу тесту з метою підробки результату тестування, оскільки дані збергаються у зашифрованому вигляді. Структура тесту оголошена в програмі наступним чином:

PQuestion=^TQuestion;

TQuestion=record

Name: String[255];

ResultCount:Integer;

ResiltText: array[0..10] of String[255];

ResiltValue: array[0..10] of boolean;

Тут оголошено структуру TQuestion із наступними полями:

Name – тут буде зберігатись запитання;

ResultCount – кількість варіантів відповіді;

ResiltText – рядковий масив для десяти варіантів відповіді;

ResiltValue – масив із логічних змінних, які вказують на правильність відповіді.

Також тут оголошено змінну PQuestion, яка являє собою вказівник на структуру TQuestion.

Розглянемо детальніше етапи створення нового тесту:

Спочатку, після кліку на кнопці «Створити» панелі інструментів або при виборі відповідного пункту головного меню з’явиться вікно створення нового тесту, де потрібно ввести його назву. Після введення назви потрібно натиснути на кнопку ОК, після чого відкриється вікно редагування щойно створеного тесту. Нижче приведено оброблювач події натиснення на кнопку для створення нового запитання тесту:

procedure TQuestionResultForm.ToolButton1Click(Sender: TObject);

var

NewQuest:PQuestion;

i:integer;

begin

//Очищаю вміст вікна EditQuestionForm

if IsCreate = false then

begin

QuestionList:=TList.Create;

IsCreate:= not IsCreate;

end;

EditQuestionForm.ResultListBox.Items.Clear;

EditQuestionForm.QuestionEdit.Text:='';

//відображаю вікно на екрані

EditQuestionForm.ShowModal;

if EditQuestionForm.ModalResult<>mrOK then exit;

//створюю в пам'яті нову структуру

NewQuest:=New(PQuestion);

NewQuest.Name:=EditQuestionForm.QuestionEdit.Text;

NewQuest.ResultCount:=EditQuestionForm.ResultListBox.Items.Count;

//Добавляю в структуру варіанти відповідей

for i:= 0 to NewQuest.ResultCount-1 do

begin

NewQuest.ResiltText[i]:=EditQuestionForm.ResultListBox.Items.Strings[i];

NewQuest.ResiltValue[i]:=EditQuestionForm.ResultListBox.Checked[i];

end;

QuestionList.Add(NewQuest);

//Добавляю новий елемнт в дерево запитань

with QuestionTreeView.Items.Add(nil, NewQuest.Name) do

begin

ImageIndex:=0;

Data:=NewQuest;

end;

end;

Оброблювач події натиснення на кнопку «Редагувати» має наступну реалізацію:

procedure TQuestionResultForm.ToolButton2Click(Sender: TObject);

var

i:Integer;

begin

//Тут QuestionTreeView.Selected вказує на виділений елемент

//в дереві. якщо він рівний nil, то нічого не виділено, і потрібно вийти

if QuestionTreeView.Selected=nil then exit;

//заповнюю компонент QuestionEdit в вікні редагування запитання

1EditQuestionForm.QuestionEdit.Text:=PQuestion(QuestionTreeView.Selected.Data).Name;

//очищую список варіантів відповідей в вікні редагування запитань

EditQuestionForm.ResultListBox.Clear;

for i:=0 to PQuestion(QuestionTreeView.Selected.Data).ResultCount-1 do

begin

//заповнюю список варіантів відповідей в вікні редагування запитань

EditQuestionForm.ResultListBox.Items.Add(

PQuestion(QuestionTreeView.Selected.Data).ResiltText[i]);

//якщо відповідь правильна, то ставимо галочку

if PQuestion(QuestionTreeView.Selected.Data).ResiltValue[i]=true then

EditQuestionForm.ResultListBox.Checked[i]:=true;

end;

//відображаю вікно редагування запитання

EditQuestionForm.ShowModal;

if EditQuestionForm.ModalResult<>mrOK then exit;

//Записую інформацію назад в структуру

PQuestion(QuestionTreeView.Selected.Data).Name:=EditQuestionForm.QuestionEdit.Text;

PQuestion(QuestionTreeView.Selected.Data).ResultCount:=

EditQuestionForm.ResultListBox.Items.Count;

for i:= 0 to PQuestion(QuestionTreeView.Selected.Data).ResultCount-1 do

begin

PQuestion(QuestionTreeView.Selected.Data).ResiltText[i]:=

EditQuestionForm.ResultListBox.Items.Strings[i];

PQuestion(QuestionTreeView.Selected.Data).ResiltValue[i]:=EditQuestionForm.ResultListBox.Checked[i];

end;

//Викликаю процедуру QuestionTreeViewChange, яка повинна обновити

//інформацію в ResultView. Перший параметр нас не цікавить, а другий

//ми повинні вказати, тому що в процедурі QuestionTreeViewChange

//ми його використовуємо. Я вказую виділений елемент.

QuestionTreeViewChange(nil, QuestionTreeView.Selected);

end;

Процедура видалення даного запитання із тесту має наступний вигляд:

procedure TQuestionResultForm.ToolButton3Click(Sender: TObject);

var

index:Integer;

begin

if QuestionTreeView.Selected=nil then exit;

//Підтвердження видалення

if Application.MessageBox(PChar('Ви справді хочете видалити '+ QuestionTreeView.Selected.Text+ ' ?'), 'Увага!!!', MB_OKCANCEL+ MB_ICONINFORMATION) <>idOk then Exit;

//Зберігаю індекс виділеного елемента

index:=QuestionTreeView.Selected.Index;

//видаляю із контейнера

QuestionList.Remove(QuestionTreeView.Selected.Data);

//Видаляю виділений елемент із дерева

QuestionTreeView.Items.Delete(QuestionTreeView.Selected);

end;

Примітка:

У зв’язку з обмеженням кількості сторінок статті розмістити всю інформацію не вдалося. Для отримання детальнішої інформації звертатися на email prokopivr@ukr.net.