Смекни!
smekni.com

Разработка программы с помощью языка программирования Delphi (стр. 2 из 4)


Рисунок 2.1 – Внешний вид формы FormAvto

Для вывода вопросов, ввода ответов пользователя предусмотрим отдельную форму FormTest. Список объектов, используемых в форме приведен в таблице 2.2, а внешний вид приведен на рисунке 2.2.

Таблица 2.2 – Объекты экранной формы FormTest

Имя Тип Назначение
Label1 TLabel надпись «Текущий вопрос»
LbNom TLabel надпись, в которой будет выводиться номер текущего вопроса
StaticText1 TStaticText поле, в котором будет выводиться очередной вопрос
RGroup1 TRadioGroup поля для вывода вариантов ответов и их указания студентом
BitBtn1 TBitBtn кнопка «Принять ответ» для анализа ответа и перехода к следующему вопросу
BNewTest TButton кнопка для закрытия формы тестов и перехода на форму авторизации (для новой попытки тестирования)

При построении формы предполагалось, что база вопросов будет построєна таким образом, чтобы ответ предполагал выбор только одного из перечисленных четырех вариантов ответов. То есть, база не должна содержать вопросов с множественным выбором, либо вариантов без правильного ответа. Также не должно быть вопросов, требующих ввода ответа в текстовом виде (например, ответ вычисленной формулы или правильное написание ключевого слова).


Рисунок 2.2 – Внешний вид формы FormTest

Во избежание кратковременного завершения теста скроем системное меню окна, установив параметр формы FormTest. BorderIcons biSystemMenu равным false. Также в алгоритме следует предусмотреть, что в начале тестирования кнопка с надписью «Начать заново» должна быть невидимой, и должна появляться только после ответа на все вопросы и вывода итоговой оценки.

Анализируя все вышеизложенные предположения и разработанные формы, можем составить словесные алгоритмы приложения.

1. Запустить экранную форму авторизации FormAvto

2. При нажатии на кнопку «Начать» следует выполнить действия:

2.1 Сгенерировать базу вопросов, и перемешать их случайным образом;

2.2 Сформировать имя файла из имени студента и его группы и открыть файл для записи;

2.3 Обнулить количество правильных ответов;

2.4 Установить номер текущего вопроса на первый вопрос;

2.5 Скрыть форму FormAvto и показать форму с тестами FormTest;

2.6 Показать первый вопрос и варианты его ответов на форме FormTest;

2.7 Ожидать нажатия на кнопку «Принять ответ».

3. При нажатии на кнопку «Принять ответ» следует выполнить действия:

3.1 Проанализировать выбранный вариант ответа и сравнить его с правильным, и если ответ правильный, то нарастить количество правильных ответов на 1;

3.2 Записать в файл протокола текущий вопрос и вариант, который выбрал пользователь в качестве ответа;

3.3 Если номер текущего вопроса меньше общего количества вопросов в базе, то нарастить номер на 1, вывести очередной вопрос на форму и перейти к началу пункта 3.

3.4 Если номер текущего вопроса равен количеству вопросов в базе, то:

3.4.1.подсчитать оценку пропорционально количеству правильных ответов;

3.4.2.показать сообщение с оценкой;

3.4.3.сделать кнопку «Начать заново» видимой

4. При нажатии кнопки «Начать заново» закрыть форму с тестами FormTest и показать форму авторизации FormAvto.

Анализируя требования к функциям разрабатываемого приложения под разработанные экранные формы и словесный алгоритм, можно выделить следующие программные модули:

1) Генерация базы вопросов;

2) Перемешивание базы вопросов случайным образом;

3) Анализ текущего ответа и переход на следующий вопрос, если вопрос не последний либо вывод результатов тестирования при достижении последнего вопроса;

4) Модули перехода между экранными формами авторизации и тестирования.

Каждый из вышеприведенных модулей реализуем при помощи процедуры. Модуль 1 целесообразно запускать один раз при создании формы с тестами. Модуль 2 следует запускать каждый раз при начале нового теста, то есть при активизации формы с тестами. Модель 3 должен запускаться каждый раз при нажатии на кнопку «Принять ответ». Модули 4 должны быть обработчиками нажатий на кнопку «Начать» экранной формы авторизации и кнопку «Начать заново» экранной формы тестирования.

Составим алгоритм приложения, который представлен в приложении на рисунке A.1. На алгоритме приведены основные события экранных форм. В этом алгоритме:

Блок №4 реализован процедурой FormAvto, BitBtnStartClick,

блок №5 – процедурой FormTest. FormCreate,

блок №6 – процедурой FormTest. FormActivate,

блок№7 – процедуройFormTestBNewTestClick,

блок№8 реализованпроцедуройFormTest. BitBtn1Click.

Детальное описание разработанной программы, алгоритмов и их программной реализации приведено в последующих разделах.

3. Описание программных модулей

3.1 Описание переменных и объектов

В программе используется переменная FormAvto, которая представляет собой экранную форму. Объекты экранной формы были приведены в таблице 2.1. У формы имеется лишь один обработчик нажатия на кнопку BitBtnStart. Текст обработчика приведен в строках 26–32 листинга из приложения Б. В теле обработчика происходит считывание введенных имени и фамилии учащегося и его группы в переменные, после чего исходная форма скрывается и активизируется форма тестирования.

Переменная FormTest, представляет собой экранную форму, объекты которой приведены в таблице 2.2.

В разделе var опишем переменные, приведенные в таблице 3.1

Таблица 3.1 – Переменные программы

Наименование Тип Назначение
SFam, SGr String хранение фамилии и группы учащегося
fName String имя текстового файла для записи протокола
f TextFile переменная для работы с текстовым файлом
BasaV CVoprosi класс, хранящий базу вопросов и ответы
CurN byte номер текущего вопроса из базы
Ratio byte количество правильных ответов

Для хранения базы вопросов разработаем пользовательский класс CVoprosi. В классе содержится одно поле и два метода. Поле test – это динамический массив, в котором хранятся вопросы и ответы. При это каждый тест храниться в виде записи типа TTest со следующими полями:

- Vopr: string – содержит вопрос теста;

- ans: array [0..3] of string – содержит 4 варианта ответов;

- korans: byte – содержит вариант правильного ответа (его номер в массиве ans).

Для формирования базы ответов создан метод AddTest (_vopr, _ans0, _ans1, _ans2, _ans3:string; _korans:byte), которому в качестве параметров передаются вопрос, четыре варианта ответов и номер правильного ответа, а в теле метода происходит увеличение длины массива с тестами на единицу и текущий тест записывается в конец массива.

Второй метод класса CVoprosi. Mix предназначен для перемешивания базы вопросов. В нём организован цикл, в теле которого генерируются два произвольных числа i1 и i2 в интервале от 0 до количества вопросов в базе каждое. После чего вопросы с номерами i1 и i2 меняются местами.

В разработанной программе содержится описание пользовательских процедур и обработчиков событий, которые приведены в таблице 3.2.

Таблица 3.2. Пользовательские процедуры и обработчики событий

Наименование Обр-к Назначение Строки
BitBtnStartClick + переход на форму тестов после нажатия «НАЧАТЬ» 26–32
FormCreate + формирование базы вопросов при создании фомры тестирования 108–156
FormActivate + инициализация тестирования (перемешивание, сброс количества ответов и номера текущего вопроса, вывод первого вопроса) при активизации формы тестирования 157–182
BitBtn1Click + анализ введенного ответа и вывод очередного вопроса или итоговой оценки 183–228
BNewTestClick + закрытие формы тестов и переход на форму авторизации при нажатии на «Начать заново» 229–235
AddTest добавление нового теста в базу 78–90
Mix перемешивание базы тестов случайным образом 91–107

3.2 Описание процедуры BitBtn1Click

Процедура BitBtn1Click предназначена для анализа ответа и вывода очередного вопроса или итоговой оценки. Алгоритм выполнения процедуры приведен на рисунке А.2 приложения А.

В теле процедуры выполняются следующие действия: Если текущий номер вопроса меньше общего количества вопросов, то формируется строка S c вопросом и выбранным ответом и записывается в файл протоколов f. Сравнивается выбранный номер ответа (RGroup1. ItemIndex) с номером правильного ответа (BasaV.test[curN].Korans) и, если он совпадает, то наращивается количество правильных ответов Ratio. Наращивается номер текущего вопроса curN. И очередной вопрос с вариантами ответов выводится на форму.

Если все вопросы были заданы (curN равно количеству вопросов), то рассчитывается итоговая оценка как (Ratio*12)/(общее количество вопросов) и записывается в файл протокола, а также выводится сообщение в виде диалогового окна с оценкой. Также становится видимой кнопка BNewtest c надписью «Начать заново», позволяющая перейти на форму авторизации. Во избежание подбора ответов выводится только последняя итоговая оценка без указания в каких вопросах были сделаны ошибки.

4. Инструкция оператору

Разработанная программа представляет собой исполняемый файл Tester.exe размером 422912 байт. В программе выполняется тестирование пользователя основам языка Pascal.

После запуска программы появляется окно, изображенное на рисунке 4.1.

Рисунок 4.1 – Окно авторизации

В этом окне учащийся должен задать свою фамилию и группу, после чего нажать на кнопку с надписью «НАЧАТЬ». После этого появится вторая форма с тестовыми вопросами, изображенная на рисунке 4.2. Заметим, что порядок вопросов при каждом новом запуске случайный, поэтому содержание поля вопроса и ответом может быть иным.