Вычисление суммы к оплате за купленный товар

На рис. 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 для обнуления результатов расчетов.

Наши рекомендации