Использование условного оператора

 

Цель работы: Расширить навыки практической работы в среде программирования VBA.

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

В конце лабораторной работы студенты должны представить отчёт по работе преподавателю в виде демонстрации работы тестовой программы.

 

Указания по порядку выполнения работы.

Постановка задачи. Некоторая компьютерная фирма, для того чтобы стимулировать клиентов кприобретению ее продукции, предложила следующую схему. Любой клиент,который приобретает у фирмы ее продукцию на сумму свыше 10000 руб.,получает скидку в размере 5 % от стоимости приобретаемой продукции.Требуется разработать программу, которая в зависимости от введеннойпользователем суммы определяет размер скидки на продукцию и сообщаетпользователю стоимость приобретаемой им продукции с учетом скидки.Если же приобретаемая пользователем продукция стоит менее 10000 руб., топрограмма должна выдать сообщение о том, что данный пользователь неимеет права на скидку.

Введение

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

If условие Then вариант 1 Else вариант 2

Механизм работы этого оператора следующий: вначале проверяетсяусловие, находящееся после служебного слова If. В качестве такого условияобычно выступает какая-либо операция сравнения. Результатом выполнениятакой операции является логическая величина, которая может приниматьтолько два значения: True (истина) или False (ложь). Если условиеистинно, то программа выполняет вариант 1, находящийся послеслужебного слова Then. Если же условие ложно, то выполняетсявариант 2, который находится после служебного слова Else. Каждый изэтих вариантов в свою очередь может представлять собой один оператор илигруппу операторов языка VBA.

Приведенная выше форма записи условного оператораIf ... Then ... Else называется однострочной, так как все служебныеслова и соответствующие им варианты записаны в одну строку. Эта формазаписи не всегда бывает удобна для программиста. Если какой-либо извариантов (или оба) представляют собой достаточно длиннуюпоследовательность операторов, то строка выйдет за пределы экрана, и длятого чтобы отредактировать такую строку (или даже просто просмотреть еесодержимое) придется постоянно «прокручивать» ее в ту или иную сторону.Поэтому наряду с однострочной формой записи применяется и другаяформа записи условного оператора, называемая блочной. Для блочнойформы записи общий вид данного оператора будет следующим:

If условие Then

вариант 1

Else

вариант 2

End If

Синтаксис оператора при такой форме записи отличается наличиемслужебных слов End If, которые необходимы для того, чтобы можно былоопределить, где заканчивается данный оператор. Механизм работы условногооператора при блочной форме записи не отличается от механизма приоднострочной, но блочная форма записи часто бывает удобней длявосприятия и понимания текста программы.

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

If условие Then вариант

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

IfусловиеThen

вариант

EndIf

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

If условие 1 Then

вариант 1

ElseIf условие 2 Then

вариант 2

Else

вариант 3

EndIf

Для такого условного оператора применяется следующий механизм работы. В начале проверяется условие 1, находящееся в верхней строке оператора после служебного слова If. Если это условие истинно (его значение равно True), то выполняется вариант 1, расположенный между служебными словами Then и ElseIf.

Если же исходное условие 1 ложно (его значение равно False), то производится новая проверка. На этот раз проверяется условие 2. Если значение этого условия равно True, то выполняется вариант 2, находящийся между вторым служебным словом Then и Else. Если же условие 2 тоже оказывается ложным, то выполняется вариант 3, расположенный между служебными словами Else и End If.

Порядок выполнения.

 

1. Создать интерфейс заданной программы, который должен включать следующие элементы:

1.1. Три текстовых окна. В первое окно Textbox1 будет вводиться исходная сумма. Во втором окне Textbox2 будет выводится сумма скидки. Это окно по умолчанию сделаем невидимым, так как в случае отсутствия у пользователя права на скидку в наличии окна Textbox2 на экранной форме нет смысла. Это окно будет становиться видимым только в том случае, если сумма заказа превышает 10000 руб.

Для того чтобы сделать окно Textbox2 невидимым, в окне свойств для данного объекта найдем свойство Visible и установим для него значение False. При работе в режиме проектирования программы это окно все равно будет оставаться видимым, но как только мы запустим программу на выполнение, это окно «исчезнет» с экранной формы и «проявится» только при указанном выше условии.

В третьем текстовом окне Textbox3 будет отображаться стоимость покупки с учетом положенной клиенту скидки, которая равна исходной сумме покупки за вычетом этой скидки. Если скидка клиенту не положена, то величина, отображаемая в текстовом окне Textbox3, будет равна исходной величине, вводимой в окно Textbox1.

1.2. Три надписи Label1, Label2 и Label3, которые поясняют пользователю назначение каждого из текстовых окон. Для текста первойнадписи Label1 («Введите сумму заказа») зададим синий цвет, для текстоввторой и третьей надписи (вывод результатов расчетов) зададим красныйцвет. Вторую надпись Label2 («Сумма скидки составляет») подобно окнуTextbox2, также сделаем по умолчанию невидимой, так как ее наличие имеет смысл только при сумме заказа, превышающей 10000 руб. Третьянадпись Label3 сообщает об итоговой сумме покупки.

1.3. Четыре экранные кнопки CommandButton1, CommandButton2, CommandButton3 и CommandButton4. Щелчок на кнопке CommandButton1 («Расчет») позволяет подсчитать сумму скидки и итоговую стоимость покупки с учетом скидки. Кнопка CommandButton2 («Сброс») очищает все три текстовых окна и делает невидимым второе текстовое окно и вторую надпись, для того чтобы подготовить программу к новому вводу данных и дальнейшим расчетам. Кнопка CommandButton3 («Об авторе») выводит на экран дополнительное диалоговое окно со сведениями о разработчике программы. Кнопка CommandButton4 («Выход») закрывает основную экранную форму.

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

Рис. 1.

2. Написать программный код для чего начнем с кнопки CommandButton1. В процедуре CommandButton1_Click, описывающей реакцию этой экранной кнопки на щелчок левой кнопкой мыши введем следующие локальные переменные: Sum – исходная стоимость приобретаемой продукции; Skidka – размер скидки, положенной клиенту фирмы; Itog – итоговая стоимость приобретаемой продукции, вычисляемая с учетом скидки. Описываем Sum как переменную целого типа, а переменные Skidka и Itog – как вещественные переменные двойной точности.

3. Затем выполнить с помощью функции Val преобразование значения исходной суммы, введенного в окно Textbox1, из текстовой формы в числовую и присвоить получившееся числовое значение переменной Sum.

4. Создаем в процедуре условный оператор и в заголовке этого оператора после служебного слова If записываем следующее условие: Sum>10000.

5. Дальнейший ход действий в программе должен зависеть от значенияпеременной Sum. Если значение этой переменной более 10000, то еобходимо выполнить следующие действия:

1. Вычислить величину скидки, взяв 5 % от исходной суммы, и

присвоить полученное значение переменной Skidka.

2. Подсчитать итоговую стоимость приобретаемой продукции, которая

будет равна исходной за вычетом скидки. Полученное значение присвоить

переменной Itog.

3. Сделать видимыми текстовое окно Textbox2 и соответствующую

ему надпись Label2.

4. Надписи Label2 присвоить значение: «Сумма скидки составляет».

5. Преобразовать вычисленную сумму скидки и итоговую стоимость из

числовой формы в текстовую с помощью функции Str и вывести эти

текстовые величины соответственно в окнах Textbox2 и Texbox3.

Все эти действия записываются в условном операторе послеслужебного слова Then.

6. Если сумма приобретаемой продукции меньше 10000, то нужно сделать следующее:

1. Присвоить переменной Itog значение, равное переменной Summa,

так как итоговая сумма будет равна исходной ввиду отсутствия скидки,преобразовать это значение переменной Itog в текстовую форму и вывестиэто значение в окне Textbox3.

2. Сделать видимой надпись Label2 и присвоить этой надписиследующее значение: «Извините, скидка Вам не положена».

Эти действия записываются в условном операторе после служебногослова Else.

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

If Sum > 10000 Then

Skidka = Sum * 0.05

TextBox2.Text = Str(Skidka)

TextBox2.Visible = True

Itog = Sum - Skidka

TextBox3.Text = Str(Itog)

Label2.Caption = " Суммаскидкисоставляет"

Label2.Visible = True

Else

Itog = Sum

TextBox3.Text = Str(Itog)

Label2.Visible = True

Label2.Caption = "Извините, скидка Вам не

положена"

End If

7. Далее, записываем код процедуры для экранной кнопки CommandButton2. Эта процедура должна делать следующее:

1. Очистить все имеющиеся в программе текстовые окна – TextBox1,TextBox2 и Textbox3.

2. Сделать невидимой надпись Label2 и текстовое окно Textbox2до следующего ввода исходных данных.

 

В случае с первой операцией свойству Text всех трех текстовых оконприсваивается «нулевое» значение. Для выполнения второй операциисвойству Visible обоих рассматриваемых объектов присваиваетсязначение False. Затем пишем процедуры для экранных кнопокCommandButton3 («Об авторе») и CommandButton4 («Выход»).

Данные кнопки программируются аналогично тому, как это делалось впредыдущих проектах.

После написания программного кода для всех четырех экранныхкнопок создание программного модуля для данного проекта можно считатьзавершенным

8. Сопоставить полученный текст программного модуля с приводенным ниже:

Private Sub CommandButton1_Click()

Dim Sum As Integer