Мегаобучалка Главная | О нас | Обратная связь


Уточнение структуры циклической программы (уровень-2)



2019-05-24 214 Обсуждений (0)
Уточнение структуры циклической программы (уровень-2) 0.00 из 5.00 0 оценок




Подход к уроку:

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

Защита от неверных действий пользователя

Защита от неверных действий пользователя – это общее требование к хорошо сделанным программам. В нашем тесте напрашивается следующее применение этого принципа: если пользователь не выбрал вариант ответа, программа не должна переходить к следующему вопросу.

Реализация защиты основана на следующих соображениях:

· Если ответ не выбран, то надо сообщить об этом пользователю и просто остановиться. Пользователь выберет вариант ответа, щелкнет по кнопке «Дальше» и тем самым вновь запустит процедуру Дальше_Click.

· Факт того, что ответ не выбран, можно определить с помощью переменной, в которой лежит номер ответа.

· Очевидно, что для проверки отсутствия ответа надо использовать ветвление.

· С точки зрения логики программы отсутствие ответа пользователя может считаться скорее исключением, чем одним из двух равновероятных вариантов.

· Для обработки исключений рекомендуется использовать неполную форму ветвление с немедленным выходом из процедуры.

В результате раздел «обработка ответа пользователя» событийной процедуры Дальше_Click может выглядеть так:

otv = <ввод с ЭУ> определение ответа пользователя
If otv = 0 Then если ответ не выбран, то
MsgBox “Ответ не выбран” сообщаем об этом пользователю
Exit Sub немедленно выходим из процедуры
End if конец цикла
  процедура продолжается, только если otv не равно 0 (т.е. если ответ выбран)
mesto2.Value = otv запоминаем ответ в таблице
и т.д.  

Переход программы на вывод результатов

Как уже говорилось, основная часть нашего теста имеет циклический характер. Понятно, что когда на все вопросы будут даны ответы, цикл должен закончиться. Разумное продолжение программы – вывод информации о результатах работы.

Переход программы на вывод результатов должен осуществляться:

· из процедуры Дальше_Click (по щелчку пользователя по кнопке «Дальше»);

· в том случае, если вопросы кончились (если ячейка с вопросом пустая);

· «вместо» вывода очередного вопроса.

Таким образом получается, что вывод вопроса и переход на результаты – это два альтернативных действия, выбор одного из которых зависит от условия. Соответственно, надо использовать ветвление с двумя ветвями. Действия по выводу результатов удобно оформить как вложенную процедуру (назовем ее results). Соответственно, раздел «вывод вопроса» событийной процедуры Дальше_Click приобретает следующий вид:

If Len(mesto1(1, 1)) > 0 Then

vopros

Else

results

End If

Работа над проектом

Задание:

Реализовать защиту в случае отсутствия ответа пользователя, а также выход программы из цикла.

Программирование

Реализация защиты описана достаточно подробно и не требует дополнительных уточнений.

Для проверки перехода к результатам воспользуемся приемом «установки заглушек». Заглушкой принято называть процедуру, которая вместо выполнения ожидаемых действий лишь объявляет о том, что она запущена. Заглушки часто используются при разработке программы методом последовательной детализации «сверху вниз». Вот возможный текст такой заглушки:

Sub results

Msgbox “Здесь будут результаты”

End Sub

После набора такой процедуры можно:

· в процедуре Дальше_Click заменить вызов процедуры vopros на ветвление, описанное выше;

· проверить работу проекта

Работа с несколькими экранами

К настоящему моменту у нас реализована основная часть тестовой программы. Однако, понятно, что программа должна иметь и другие части. Так, обязательной частью программы считается заставка, которая обычно содержит информацию о программе, инструкцию по работе с ней, а также дает возможность пользователю зарегистрировать себя. В предыдущем разделе речь шла о показе результатов работы, а это тоже отдельная часть программы. Не исключены еще какие-либо варианты.

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

Возможны два варианта реализации нескольких экранов:

· одна форма со сменой видимости элементов управления;

· несколько форм.

Основным мы будем считать вариант с несколькими формами, как более соответствующий технологии WYSIWYG. Однако прокомментируем оба варианта.

Одна форма

1. Все ЭУ располагаем на одной форме. Допустимо, если ЭУ, относящиеся к разным экранам, будут накладываться один на другой.

2. Видимостью ЭУ управляем с помощью свойства Visible («видимость»). Пример:

Text1.Visible = False

ListBox1.Visible = True

Несколько форм

1. Стараемся придерживаться правила: «один экран – одна форма».

2. Все глобальные переменные и общие процедуры описываем в обычном модуле, а не в модуле формы. При объявлении переменных используем ключевое слово Public вместо Dim.

3. Убедительно рекомендуется присваивать формам осмысленные имена.

4. Для смены форм используем методы объекта «Форма»: Show (показать) и Hide (спрятать). Пример:

Form_Zastavka.Hide

Form_Vopros.Show

Для закрытия формы, вместо метода Hide, можно (и даже рекомендуется) использовать команду UnLoad, выгружающую форму из памяти (Load – «загрузить», Un – обратное действие). Формат:

UnLoad <Имя_формы>

Пример:

UnLoad Form_Zastavka

Обратите внимание на отличие синтаксиса метода объекта (Hide) и команды с аргументом (UnLoad).

5. При закрытии текущей формы (а именно текущую форму как правило приходится закрывать) можно пользоваться принципом умолчания. Это очень удобно, так как позволяет не задумываться об имени формы. Для метода Hide имя формы просто опускается. Формат:

Hide

Для команды UnLoad имя текущей формы можно заменить словом Me. Получается что-то вроде «выгрузи меня»:

UnLoad Me

6. При запуске метода Show выполнение текущей процедуры приостанавливается до того момента, пока форма не будет закрыта (Hide или UnLoad). Об этом удобно думать так: метод Show похож на вложенную процедуру, которая заканчивается только тогда, когда форма закрывается. Учесть эту особенность метода позволяет следующее правило:

· Строка <Имя_формы>.Show должна быть в процедуре последней (писать что-либо после нее не имеет смысла)

· Действия, которые должны выполняться при открытии формы (которые должны были бы быть написаны после строки <Имя_формы>.Show), надо включить в событийную процедуру <Форма_Инициализация> открывающейся формы.

Работа над проектом

Задание:

В процедуре results реализовать переход на другую форму. В дальнейшем мы используем эту форму для вывода результатов. Пока на ней надо разместить текст-заглушку, например «Здесь будут результаты».

Редакторские действия:

1. В текущем файле создайте еще одну пользовательскую форму (Редактор Visual Basic – Меню–Insert–UserForm)

2. В окне свойств присвойте форме имя Form_Results (свойство Name), а свойству Caption значение «Результаты».

3. Разместите на форме ЭУ «Надпись»; убедитесь, что имя элемента – Label1.

4. Получите для новой формы программный модуль и в нем – заготовку событийной процедуры UserForm_Initialize

Программирование

Приведем схему необходимых действий:

Действие Текст В какую процедуру включать
выгрузить текущую форму UnLoad Me results
показать форму результатов Form_Results.Show results
вывести текст на ЭУ Label1.Caption = "…" UserForm_Initialize

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

Реализация заставки

Как уже говорилось, обычно заставка содержит информацию о программе, инструкцию по работе с ней, а также дает возможность пользователю зарегистрировать себя. Рассмотрим простой вариант заставки с реализацией всех этих функций на одной форме (будем считать, что имя формы – Form_Zastavka):

 

 

 
 

<Название программы >

 
 

 

 
 

Инструкция

 
 

<текст инструкции>

 
 

 

 
 

Кто ты?

 
 

<Поле-со-списком для регистрации:>

 
 

 

 

 

Начало  
 

 

 
       

Организация действий

В программном модуле заставки будут две процедуры: «Форма_Инициализация» и «Начало_Click».

Форма заставки будет стартовой в нашем проекте, поэтому установку начальных значений глобальных переменных надо будет перенести в процедуру «Форма_Инициализация» этой формы.

Задачи процедуры «Начало_Click»:

· проверить регистрацию и сохранить данные о ней (см. далее)

· закрыть текущую форму

· открыть форму с вопросами (будем считать, что теперь ее имя – Form_Vopros)

Следующая схема показывает перераспределение действий между процедурами в сравнении со старым вариантом – без заставки:

Без заставки

Действия

С заставкой

Инициализация

вопросов

Установка значений глобальных переменных

Инициализация заставки   Обработка регистрации

Кнопка «Начало»

(_Click)

  Смена форм

Вывод первого вопроса

Инициализация вопросов Кнопка «Дальше»  (Click)

Обработка ответа

Следующий вопрос

Кнопка «Дальше» (_Click)

Работа над проектом

Задание:

Перепланировать проект для работы с несколькими формами.

Создать заставку и реализовать переход с заставки на форму-вопросы.

Порядок работы:

1. Создать новую форму, присвоить форме ей имя Form_Zastavka, разместить на ней необходимые ЭУ: надпись–заголовок, поле для инструкции, раскрывающийся список для регистрации и подпись к нему, кнопку «Начало».

2. Переименовать основную форму (с вопросами) в Form_Vopros.

3. Создать для заставки программный модуль и в нем – заготовки событийных процедуры UserForm_Initialize и Начало_Click.

4. В процедуру UserForm_Initialize заставки перенести установку начальных значений глобальных переменных (из одноименной процедуры формы-вопросов).

5. В процедуре Начало_Click реализовать смену форм (см. схему в «Организация действий» и практикум в предыдущей теме)

6. Проверить работу проекта:

6.1. Запустить на выполнение форму-заставку.

6.2. Щелкнуть по кнопке начало

6.3. Проверить первые 2-3 вопроса.



2019-05-24 214 Обсуждений (0)
Уточнение структуры циклической программы (уровень-2) 0.00 из 5.00 0 оценок









Обсуждение в статье: Уточнение структуры циклической программы (уровень-2)

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы...
Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной...
Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас...
Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (214)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.01 сек.)