Дипломная работа: Автоматизация процесса контроля знаний учащихся ГБОУ города Москвы школы №656 А.С. Макаренко

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
83
Рисунок 2.12 - Форма вопросов и ответов
Форма FormTest вызывается из формы FAdm при нажатии на кнопку
«Начать прохождение теста» в командной панели списка тестов. Данная форма
предназначена для прохождения выбранного теста учащимся и фиксации
результатов его прохождения в базе данных.
В первую очередь у формы FormTest переопределен метод ShowModal,
унаследованный от родительского класса TForm. Теперь этот метод имеет два
параметра, через которые в форму передаются идентификатор теста,
прохождение которого будет обеспечено формой, и идентификатор пользователя,
который проходит данный тест. В этом же методе происходит динамическое
создание объекта класса TTest.
Как уже говорилось, класс TTest инкапсулирует в себе все необходимые
свойства и методы для работы с объектом предметной области «Тест».
Происходит считывание из базы данных параметров теста и формирование
84
списка вопросов и ответов, которые представляют из себя списки объектов
классов TQuestion и TAnswer. Далее вся работа с тестом происходит через
объект класса TTest.
Форма имеет четыре панели для отображения органов управления работы
с тестом: панель наименования, панель текущего вопроса, панель ответов на
текущий вопрос, панель навигации по тесту.
В панели наименования отображается подробное наименование теста, а
также значение времени и номер вопроса. В значении времени отображается
время в часах, минутах и секундах, оставшееся до окончания теста, если в
параметрах теста задан лимит времени на его прохождение. Если лимит времени
не задан, то отображается текущее системное время. Для реализации функции
времени предназначены два объекта TTimer, размещенные на форме. Первый из
них предназначен для контроля лимита времени (если он задан). В его интервал
записывается значение в миллисекундах, соответствующее лимиту времени,
заданному в минутах. При срабатывании этого таймера вызывается процедура
завершения теста. Второй таймер имеет интервал в одну секунду и
предназначен для изменения текста в компоненте TLabel, отображающем
оставшееся или текущее время.
В панели текущего вопроса отображается текст и картинка текущего
вопроса. Номер текущего вопроса – это свойство класса TTest, которое в методе
ShowModal принимает значение ноль и далее меняется в зависимости от
навигации по тесту. Текущий вопрос берется из объекта TTest при помощи
метода GetQuest. Заметим, что если в текущем вопросе нет картинки, то поле
для нее не отображается и вся панель текущего вопроса занята текстом вопроса.
Для вывода изображения картинки вопроса предназначен компонент TImage
размещенный на панеле-контейнере TPanel. При выводе изображения
вызывается метод ComputeImage формы FQuestAnswer, который рассчитывает
размер и местоположение компонента TImage относительно компонента-
контейнера TPanel таким образом, чтобы изображение в компоненте TImage
85
было пропорциональным, но при этом занимало максимальную площадь
компонента-контейнера.
Панель ответов предназначена для вывода ответов на текущий вопрос.
Она представляет из себя компонент TScrollBox в котором динамически
создаются компоненты TradioButton или TCheckBox (в зависимости от типа
ответа вопроса) , текст которых заполняется текстом ответов. Таким образом,
пользователю предоставляется возможность выбрать вариант ответа
предложенный ему из нескольких возможных. Возможность вертикальной
прокрутки объектов в компоненте TScrollBox обеспечивают отображение
любого количества ответов. В создаваемых динамически компонентах
TRadioButton и TCheckBox запоминается порядковый номер ответа и при ответе
на вопрос именно этот номер фиксируется как выбранный пользователем
вариант ответа. Если тип ответа вопроса установлен как «текст», то
динамические объекты TRadioButton и TCheckBox не создаются, а вместо этого
становится видимым поле ввода, в которое пользователю предлагается ввести
свой вариант ответа. Введенный ответ фиксируется как данный пользователем
ответ при нажатии на кнопку «Ответить».
Панель навигации предназначена для фиксации пользователем ответа на
вопрос, для завершения теста по желанию пользователя и для передвижения по
вопросам теста.
Для фиксации ответа на вопрос предназначена кнопка «Ответить». При ее
нажатии в текущий вопрос теста (объект класса TQuestion списка вопросов
Questions объекта класса TTest) записывается порядковый номер ответа,
выбранный пользователем при помощи радиокнопок, либо сам текст ответа,
введенный пользователем в поле ввода. Результат ответа на вопрос не
вычисляется.
Для навигации по тесту предназначена кнопки «Вперед» и «Назад», при
нажатии на которые увеличивается или уменьшается на единицу номер
текущего вопроса и вызывается функция его отображения. Кроме того, на
86
панели навигации динамически создаются кнопки-объекты класса TSpeedButton,
каждая из которых соответствует вопросу. При нажатии на какую-либо из
кнопок порядковый номер вопроса объекта TTest принимает соответствующее
значение, происходит отображение текущего вопроса, а свойство Down кнопки
становится равное True, что визуально представляется как «вдавленная» кнопка.
Для завершения прохождения теста по желанию пользователя на панели
навигации находится кнопка «Завершить» при нажатии на которую вызывается
метод Close формы.
Завершение теста происходит либо по желанию пользователя при нажатии
на кнопку «Завершить», либо по срабатыванию таймера лимита времени. В
любом случае вызывается метод Close формы. Пользователь может и любым
другим способом, принятым в Windows-приложениях закрыть окно формы
FormTest. Фиксация результатов теста происходит в обработчике события
закрытия формы.
При фиксации результатов происходит расчет результатов каждого
вопроса, расчет результата теста в целом, а также таких параметров как
количество вопросов на которые даны ответы и количество вопросов на которые
даны правильные ответы. Все эти данные, а также данные об идентификаторе
теста, идентификаторе пользователя, проходившего тест, дате и времени начала
и окончания теста заносятся в таблицу jornal базы данных.
Заметим, что назначение формы FormTest заключается в том, чтобы
обеспечить пользователю корректное и удобное прохождение теста. Для этого во
избежание непреднамеренных ошибок пользователя методы формы должны
корректно обрабатывать такие ситуации, как попытка зафиксировать ответ на
вопрос при не данном ответе, попытка перейти к другому вопросу теста без
фиксации ответа на текущий вопрос (если ответ был дан), попытка закончить
тест при наличии вопросов, на которые не даны ответы. На все эти и подобные
случаи форма должна реагировать выдачей соответствующих предупреждений.
Внешний вид формы представлен на рисунке 2.12.
87
Рисунок 2.12 - Форма прохождения теста.
Форма FormTest предназначена также и для отображения результатов
прохождения теста пользователем после фиксации результатов теста в базе
данных перед окончательным закрытием формы. Органы управления, в которых
отображаются параметры теста и результаты теста становятся видимыми после
прохождения теста в них отображается вся необходимая информация. При
нажатии на кнопку «Подробно» становится виден компонент TMemo, в котором
отображается история прохождения теста в текстовом виде: выводятся строка с
тестом вопроса, строка с текстом выбранного или введенного ответа,
рассчитанный балл вопроса, строка с текстом правильного ответа. При
повторном нажатии на кнопку «Подробно» компонент TMemo становится не
видимым. Если для теста задана интерпретация, то при на панели просмотра
результатов становится видимой кнопка «Расшифровать», при нажатии на
Источник: https://baza.diplomsite.ru/previewfile/2090