Рефераты. Программа для тестовых проверок знаний

Окна редактирования снабжены многими функциями, свойственными большинству редакторов. Например, в них предусмотрены типичные комбинации «горячих» клавиш: 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-файлами[1]. Список вопросов и ответов хранится в специально сформированном файле 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);


Собственно определяем правильный ответ или нет

Страницы: 1, 2, 3, 4



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.