Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MS_VB_dop_vozm_5_04.doc
Скачиваний:
5
Добавлен:
19.11.2019
Размер:
1.64 Mб
Скачать
  1. Работа с таймером

В языке Visual Basic существует возможность выполнения через одинаковые промежутки времени операций, которые не зависят от действий пользователя во время работы приложения. Для этого используется элемент управления типа Timer, который задает промежутки времени для возникновения события Timer. При работе программы данный элемент не отображается на форме. Основные свойства элемента Timer:

  • Enabled – позволяет таймеру начать отсчет;

  • Interval – задает количество миллисекунд для интервала времени между событиями Timer для таймера. Может принимать значения от 0 до 65535 и теоретически способно заставить систему генерировать события со скоростью от 1000 в секунду до 1 в минуту. Интервал, равный 0 (по умолчанию), отключает таймер. Необходимо учитывать, что технически для компьютера имеется порог чувствительности разрешения таймера (порядка 18 событий в секунду или 56 мс) (величина тактовой частоты). Чем больше данное значение, тем медленнее движение. При этом значение свойства Interval, равное 1000, соответствует 1 сек.

В случае применения элемента таймер операторы задания повторяющихся действий будут находиться в теле процедуры обработки его события Timer.

Пример 3.1. В качестве примера применения таймера для инициализации некоторых действий через равные промежутки времени рассмотрим программу, реализующую тест для обучаемого. Тест содержит десять вопросов с тремя вариантами ответов на каждый. С помощью таймера ограничивается время ответа на вопрос до тридцати секунд, т.е. пользователю, отвечающему на вопросы теста, предоставляется тридцать секунд на выбор правильного ответа. Для отслеживания времени на форме имеется счетчик секунд в убывающем порядке. Переход к следующему вопросу происходит либо по нажатию кнопки «Далее», либо по истечении тридцати секунд. После ответа на десятый вопрос и нажатия кнопки «Результат» появляются результаты прохождения теста:

  • список вопросов с выбранными ответами;

  • оценка выполнения теста, номера правильных ответов;

  • суммарное затраченное время на выполнение теста.

Результат выполнения теста параллельно записывается в текстовый файл.

Проект содержит две формы:

  • стартовую форму, содержащую кнопку «Старт» и текстовое приглашение к началу работы следующего содержания: «Добрый день! Перед Вами тест по информатике! Тема – описание языка Visual Basic. Вам предстоит ответить на десять вопросов. Для ответа на каждый вопрос Вам предоставляется 30 секунд. Желаем удачи!».

  • основную форму, содержащую все другие элементы для выполнения теста, общий вид которой изображен на рисунке 3.1.

Вторая форма добавляется в проект пунктом меню Project \ Add Form \ New \ Form. В проекте, содержащем более одной формы, только одна из форм может быть «стартовой», т.е. такой, которая появляется на экране при запуске программы на выполнение. Задать «стартовую» форму можно в окне свойств проекта (Project \ Project Properties \ General \ Startup Object), выбрав из списка нужную. В нашем случае «стартовой» будет форма, содержащая кнопку «Старт».

После нажатия кнопки «Старт» становится видимой основная форма, а стартовая, в свою очередь, пропадает с экрана. Кроме этого, на основной форме появляются элементы для выполнения теста (вопросы, ответы, элементы, связанные с таймером, поясняющие метки и др.), кроме элементов для отображения результатов выполнения теста и командной кнопки «Результат» (рис. 3.2).

Рис. 3.1. Общий вид интерфейса проекта создания теста

После выбора ответа на десятый вопрос и очередного нажатия кнопки «Далее» появляется командная кнопка «Результат», а вместо вопроса – приглашение нажать эту кнопку. При ее нажатии становятся видимыми элементы для отображения результатов выполнения теста и кнопка «Выход», и невидимыми все остальные элементы (рис. 3.3).

Вопросы, варианты ответов и номера правильных ответов считываются в программе из текстовых файлов, созданных заранее с использованием, например, стандартного приложения Windows – Блокнот и помещенных в тот же каталог, где находится файл проекта. Считывание информации из текстовых файлов (файлов с последовательным доступом) производится построчно. Файл вопросов Voprosi.txt содержит по одному вопросу в каждой строке. Файл ответов Otveti.txt содержит тридцать строк с (записанными последовательно) вариантами ответов на десять вопросов. Файл верных ответов VOtveti.txt состоит из номеров правильных ответов, записанных в столбик по одному числу в каждой строке.

Предварительное приглашение к работе и вопросы теста помещаются в элемент Метка, варианты ответов присваиваются трем Переключателям. На формах размещены четыре Командные кнопки: для начала работы (на первой форме), для перехода к следующему вопросу, для вывода результатов на форму и для завершения работы (на второй форме).

Рис. 3.2. Интерфейс проекта после нажатия кнопки «Старт»

В элемент Список помещаются результаты выполнения теста – вопросы и выбранные пользователем ответы. Оценка, количество и перечень правильных ответов, затраченное на выполнение теста время размещаются в элементах Метка.

Для реализации счетчика времени на форму помещается элемент Таймер, свойство Interval которого устанавливается равным 1000, что соответствует секундному интервалу между событиями. Переменная для хранения текущего времени CurTim уменьшается на единицу при каждом возникновении события Timer до тех пор, пока не станет равной нулю. При переходе к очередному вопросу переменная CurTim вновь принимает значение 30.

Рис. 3.3. Результат выполнения теста

На основной форме размещены поясняющие надписи. Некоторые элементы при проектировании основной формы перекрывают друг друга (переключатели и список), так как при выполнении программы появляются в разные промежутки времени.

Текст программы приведен ниже.

Текст программы стартовой формы:

Private Sub Command4_Click() обработка события нажатие

командной кнопки «Старт»

Form2.Hide ‘ удаление с экрана стартовой формы

Form1.Show ‘ вывод на экран основной формы

End Sub

Текст программы основной формы:

D

переменные счетчиков

im i As Byte

Dim j As Byte

Dim Vop(10) As String массив вопросов

Dim Otv(30) As String массив ответов

Dim VerOtv(10) As Byte ‘ массив верных ответов

Dim OtvPol(10) As String ‘ массив ответов пользователя

Dim MasVO(10) As Single ‘ массив номеров верных ответов

пользователя

Dim Vopros As String ‘ переменная для хранения вопроса

Dim Otvet As String ‘ переменная для хранения ответа

Dim Votvet As String ‘ переменная для хранения верного ответа

Dim SumBal As Byte ‘ переменная для хранения кол-ва верных

ответов

Dim Ocenka As Byte ‘ переменная для хранения оценки

Dim CurTim As Byte ‘ переменная для хранения текущего времени

Dim SumTim As Integer ‘ переменная для хранения суммарн. времени

Private Sub Form_Load() ‘ процедура обработки события «Загрузка

формы»

i = 1

S

начальные установки

umTim = 0

CurTim = 30

SumBal = 0

Ocenka = 0

LCh.Caption = CurTim

Open "Voprosi.txt" For Input As #1 открытие файла

для чтения вопросов

Open "Otveti.txt" For Input As #2 ‘ открытие файла

для чтения вариантов ответов

Open "VOtveti.txt" For Input As #3 ‘ открытие файла

для чтения верных ответов

Open "Resultat.txt" For Output As #4 ‘ открытие

файла для записи результатов выполнения теста

Do While EOF(1) = False

Input #1, Vopros ‘ чтение вопросов из файла вопросов

Vop(i) = Vopros ‘ и запоминание их в массиве вопросов

i = i + 1

Loop

i = 1

Do While EOF(2) = False

Input #2, Otvet ‘ чтение ответов из файла ответов

Otv(i) = Otvet ‘ и запоминание их в массиве ответов

i = i + 1

Loop

i = 1

Do While EOF(3) = False

Input #3, Votvet ‘ чтение верных ответов из файла верных

ответов

VerOtv(i) = Votvet ‘ и запоминание их в массиве верных

ответов

i = i + 1

Loop

i = 1

j = 1

LVop.Caption = Vop(1)

Option1.Caption = Otv(1)

Option2.Caption = Otv(2)

Option3.Caption = Otv(3)

End Sub

Private Sub Command1_Click() обработка события нажатие

командной кнопки «Далее»

Timer1.Enabled = True ‘ включение таймера

Call Zapusk(i, j) ‘ вызов пользовательской процедуры-

подпрограммы для подготовки очередного вопроса

End Sub

Private Sub Timer1_Timer() ‘ обработка события таймер

элемента таймер

If CurTim > 0 Then

CurTim = CurTim - 1

LCh.Caption = CurTim ‘ отображение счетчика времени

Else

Call Zapusk(i, j) ‘ переход к следующему вопросу через 30 сек.

End If

End Sub

Sub Zapusk(i, j) ‘ пользовательская процедура-подпрограмма для подготовки следующего вопроса с ответами по нажатию кнопки «Далее»

SumTim = SumTim + (30 - CurTim) ‘ накапливание суммарного

времени

CurTim = 30

LCh.Caption = CurTim

Timer1.Enabled = True

Option1.Value = False

Option2.Value = False

Option3.Value = False

If i = 10 Then

Timer1.Enabled = False

Option1.Visible = False

Option2.Visible = False

Option3.Visible = False

Command1.Visible = False

Label2.Caption = " "

Label3.Caption = " "

LCh.Caption = " "

LVop.Caption = " Теперь, пожалуйста, нажмите_

кнопку «Результат»!"

Command3.Visible = True

End If

If i < 10 Then

i = i + 1

j = j + 3

LVop.Caption = Vop(i)

Option1.Caption = Otv(j)

Option2.Caption = Otv(j + 1)

Option3.Caption = Otv(j + 2)

OtvPol(i) = " "

MasVO(i) = 0

End If

End Sub

Private Sub Option1_Click() обработка события «Выбор 1

переключателя»

OtvPol(i) = Otv(j)

If VerOtv(i) = 1 Then

SumBal = SumBal + 1

MasVO(i) = i

End If

End Sub

Private Sub Option2_Click() ‘ обработка события «Выбор 2

переключателя»

OtvPol(i) = Otv(j + 1)

If VerOtv(i) = 2 Then

SumBal = SumBal + 1

MasVO(i) = i

End If

End Sub

Private Sub Option3_Click() обработка события «Выбор 3

переключателя»

OtvPol(i) = Otv(j + 2)

If VerOtv(i) = 3 Then

SumBal = SumBal + 1

MasVO(i) = i

End If

End Sub

Private Sub Command2_Click() обработка события нажатие

командной кнопки «Выход»

End

End Sub

Private Sub Command3_Click() обработка события нажатие

командной кнопки «Результат»

Form1.Cls

LVop.Caption = " "

Command3.Visible = False

List1.Visible = True

Label1.Visible = True

Label4.Visible = True

Label5.Visible = True

Label6.Visible = True

Label7.Visible = True

Label9.Visible = True

Label10.Visible = True

Label11.Visible = True

F

заполнение списка вопросами и пользова-тельскими ответами

or i = 1 To 10

List1.AddItem Vop(i)

List1.AddItem " " & OtvPol(i)

Next

S elect Case SumBal

Case 10

Ocenka = 5

присвоение оценки в зависимости от количества верных ответов

Case 9, 8

Ocenka = 4

Case 5 To 7

Ocenka = 3

Case Else

Ocenka = 2

End Select

Label11.Caption = "("

For i = 1 To 10 'формирование строки с верными ответами

If MasVO(i) = i Then Label11.Caption = _

Label11.Caption & MasVO(i) & ","

Next

Label11.Caption = Label11.Caption & ")"

Label7.Caption = Ocenka

Label5.Caption = SumTim

Label10.Caption = SumBal

F or i = 1 To 10

формирование массива вопросов и ответов пользователя

Write #4, Vop(i)

Write #4, OtvPol(i)

Next

Write #4, Ocenka

Close All

Command2.Visible = True

End Sub

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]