Вычисление суммы к оплате за купленный товар
На рис. 4.10 представлен программный код процедуры расчета суммы к оплате за купленный товар при наступлении события – щелчок по кнопке «Расчет» (CmdРасчет) на форме.
Option Explicit
'Объявление глобальных переменных
Public CurZena, CurStoimost, CurNalich, CurSdacha As Currency
Private Sub CmdРасчет_Click()
'Объявление локальных переменных
Dim IntKolichestvo, IntI As Integer
Dim StrSoobschenie, StrVid, StrText As String
CurStoimost = 0 'Подготовка к накоплению стоимости
IntI = 0
Do 'Начало тела цикла
IntI = IntI + 1
1: StrText = InputBox("Введите количество " & _
Format(IntI, "# ##0") & "-го товара", "СуперМаркет КЛАСС")
If StrText = "" Then
MsgBox "Что же ты делаешь? Повтори попытку!"
GoTo 1
Else:
IntKolichestvo = CInt(StrText)
End If
2: StrText = InputBox("Введите цену " & Format(IntI, "# ##0 ") & _
"-го товара", "СуперМаркет КЛАСС")
If StrText = "" Then
MsgBox "Опять? Что же ты делаешь? Повтори попытку!"
GoTo 2
Else:
CurZena = CCur(StrText)
End If
CurStoimost = CurStoimost + CurZena * IntKolichestvo
Loop While MsgBox("Будем еще покупать? ", vbQuestion + vbYesNoCancel, _
"СуперМаркет КЛАСС") = vbYes
' Завершение цикла при ответе "Нет"
TxtОплата.Text = Format(CurStoimost, "# ##0.00")
' Нужно обеспечить согласование в предложениях
Select Case IntI
Case 1: StrVid = " вид товара"
Case 2, 3, 4: StrVid = " вида товара"
Case Else: StrVid = " видов товаров"
End Select
'Вывод результатов
StrSoobschenie = "Вы приобрели " & IntI & " " & StrVid & _
" на общую сумму " & _
Format(CurStoimost, "# ##0.00") & " гривень"
LblРезультат.Caption = StrSoobschenie
End Sub
Рис. 4.10. Процедура расчета суммы к оплате за купленный товар
В результате выполнения процедуры на форме (в текстовом поле TxtОплата) отобразится сумма к оплате за купленный товар.
Расчет сдачи и вывод результата
На рис. 4.11 представлен программный код процедуры расчета сдачи и вывода результата в виде сообщения при наступлении события – снятие фокуса с текстового поля TxtНаличные (для VB-6.0 – LostFocus, а для VBA – Exit).
Private Sub TxtНаличные_Exit(ByVal Cancel As _
MSForms.ReturnBoolean)
'Расчет сдачи
CurNalich = CCur(TxtНаличные.Text)
CurSdacha = CurNalich – CurStoimost
TxtСдача.Text = Format(CurSdacha, "# ##0.00")
End Sub
Рис. 4.11. Процедура расчета сдачи и вывода результата
В результате выполнения процедуры на форме (в текстовом поле TxtСдача) отобразится сдача.
Подготовка рабочего места к обслуживанию очередного покупателя
На рис. 4.12 представлен программный код процедуры подготовки рабочего места к работе при наступлении события – щелчок по кнопке «Сброс» (CmdСброс) на форме.
'Подготовка рабочего места к работе со следующим покупателем
Private Sub CmdСброс_Click()
LblРезультат.Caption = Empty
TxtНаличные.Text = Empty
TxtОплата.Text = Empty
TxtСдача.Text = Empty
End Sub
Рис. 4.12. Процедура подготовки рабочего места к работе
В результате выполнения процедуры на форме будут очищены текстовые поля TxtОплата, TxtНаличные, TxtСдача и надписи LblРезультат.
Реализация проекта
1. Запустить на выполнение VBA для создания нового проекта.
2. Построить форму согласно проекту.
3. Дважды щелкнуть на кнопке Расчет и в открывшемся окне кода в заготовку процедуры CmdРасчет_Click ввести соответствующие операторы.
4. Дважды щелкнуть на текстовом поле TxtНаличные и в открывшемся окне кода в заготовке процедуры TxtНаличные_Click заменить событие Click на событие Exit из раскрывающегося списка событий и ввести соответствующие операторы в заготовку процедуры.
6. Дважды щелкнуть на кнопке Сброс и в открывшемся окне кода в заготовку процедуры CmdСброс_Click ввести соответствующие операторы.
Анализ проекта
Процедура cmdРасчет_Click предназначена для вычисления стоимости приобретенных товаров с учетом предусмотренных скидок.
Для организации повторений по вводу и обработке данных для каждой покупки используется цикл Do Loop, поскольку заранее не известно количество покупок. Так как возможен случай, когда не произведено ни одной покупки, применяется конструкция While с верхним окончанием (цикл с предусловием).
В качестве условия повторения использовано сравнение
MsgBox("Будут еще покупки?", vbQuestion + vbYesNo, _
"Покупки") = vbYes
Действие встроенной функции MsgBox состоит в вызове окна сообщений, в котором выводится заданное сообщение (первый параметр) и заголовок (третий параметр). В окне сообщений могут выводиться различные рисунки и кнопки, которые определяются суммой соответствующих констант (второй параметр). Названия констант запоминать не нужно, т.к. они выводятся при задании соответствующего параметра в виде подсказок. Второй параметр можно опустить, тогда на окне сообщений выводится только кнопка «ОК».
Если же в окне сообщений несколько кнопок, то пользователь может нажать любую из них. В этом случае значением функции MsgBoxбудет соответствующая этой кнопке константа. Названия констант-результатов также выводятся в виде подсказок. В условии после слова While проверяется, нажата ли кнопка «Да» (MsgBox(…) = vbYes).
Для ввода исходных данных цены и количества по каждому виду товара используется функция InputBox, которая вызывает диалоговое окно ввода, на котором выводится подсказка (первый параметр) и заголовок (второй параметр). Нужное значение вводится в поле ввода на этом окне. Ввод значения завершается нажатием кнопки «ОК».
Значением функции является введенное пользователем значение. Оно имеет строковый тип. Для преобразования в нужный числовой тип используются функции CСur (для цены – в денежный тип) и CInt (для количества – в целый тип).
Процедура TxtНаличные_Exit запускается при переводе курсора в любое другое место формы, что соответствует снятию фокуса с поля TxtНаличные, и предназначена для расчета сдачи и вывода результатов.
В процедуре подготовки рабочего места к работе CmdСброс_Click() использована константа Empty для обнуления результатов расчетов.