Расчет сдачи и вывод результата
На рис. 3.5 представлен программный код процедуры расчета сдачи и вывода результата в виде сообщения при наступлении события – снятие фокуса с текстового поля TxtНаличные (для VB-6.0 – LostFocus, а для VBA – Exit).
Private Sub TxtНаличные_Exit(ByVal Cancel As _
MSForms.ReturnBoolean)
Dim StrSoobsh As String
Dim StrSoobsh1 As String
CurNalch = CCur(TxtНаличные.Text)
'If CurNalch < CurOpl Then MsgBox "Мало денег" Else
CurSdasha = CurNalch - CurOpl
'Вывод результата
StrSoobsh = "Вы приобрели товара на сумму " & _
Format(CurSum, "# ##0.00") & " грн." & vbCrLf & _
"Сидки сегодня: " & vbCrLf & _
"на стоимость: " & Format(SngSk1, "##0.00") & " %, " & _
"на тип покупателя: " & Format(SngSk2, "##0.00") & " %, " & _
"на день недели: " & Format(SngSk3, "##0.00") & " %, " & vbCrLf & _
"К оплате: " & Format(CurOpl, "# ##0.00") & " грн." & vbCrLf & _
"Наличные: " & Format(CurNalch, "# ##0.00") & " грн." & vbCrLf & _
"Сдача: " & Format(CurSdasha, "# ##0.00") & " грн." & vbCrLf & _
"Спасибо за покупку! Будем рады Вас видеть!"
StrSoobsh1 = IIf(CurSdasha < 0, "Недоплата!!! Нужно доплатить " & Format(-CurSdasha, "# ##0.00") & " гривень", StrSoobsh)
MsgBox StrSoobsh1, vbInformation, "Супермаркет Класс"
TxtСдача.Text = Format(CurSdasha, "# ##0.00")
If CurSdasha > 0 Then
LblРезультат.Caption = StrSoobsh
TxtНаличные.BackColor = vbWhite
Else
TxtНаличные.BackColor = vbRed
Exit Sub
End If
End Sub
Рис. 3.5. Процедура расчета сдачи и вывода результата
В результате выполнения процедуры на форме (в текстовом поле TxtСдача) отобразится сдача и пользователю будет выдано сообщение о результатах покупки или необходимости доплаты за покупку.
Подготовка рабочего места к обслуживанию очередного покупателя
На рис. 3.6 представлен программный код процедуры подготовки рабочего места к работе при наступлении события – щелчок по кнопке на форме «СБРОС» (CmdСброс).
'Процедура подготовки рабочего места к работе
Private Sub CmdСброс_Click()
TxtКоличество.Text = Empty
TxtЦена.Text = Empty
TxtОплата.Text = Empty
TxtНаличные.Text = Empty
TxtСдача.Text = Empty
LblРезультат.Caption = Empty
TxtНаличные.BackColor = vbWhite
End Sub
Рис. 3.6. Процедура подготовки рабочего места к работе
В результате выполнения процедуры на форме будут очищены текстовые поля TxtЦена, TxtКоличество, TxtОплата, TxtНаличные, TxtСдача и надписи LblРезультат.
Реализация проекта
1. Запустить на выполнение VBA для создания нового проекта.
2. Построить форму согласно проекту.
3. Дважды щелкнуть на форме и в открывшемся окне кода в заготовку процедуры UserForm_Initialize ввести ее тело (операторы).
4. Дважды щелкнуть на кнопке РАСЧЕТ и в открывшемся окне кода в заготовку процедуры CmdРасчет_Click ввести соответствующие операторы.
5. Дважды щелкнуть на текстовом поле TxtНаличные и в открывшемся окне кода в заготовке процедуры TxtНаличные_Click заменить событие Click на событие Exit из раскрывающегося списка событий и ввести соответствующие операторы в заготовку процедуры.
6. Дважды щелкнуть на кнопке СБРОС и в открывшемся окне кода в заготовку процедуры CmdСброс_Click ввести соответствующие операторы.
Анализ проекта
В коде программы применяется принцип явного описания переменных. С этой целью в начале кода стоит оператор Option Explicit.
Поскольку переменные CurZena, CurSum, CurOpl, CurNalch, CurSdasha, CurPorog, SngSk1, SngSk2, SngSk3 используются в нескольких процедурах, то они помещены в коде программы перед всеми процедурами и объявлены глобально с использованием оператора Public.
В процедуре UserForm_Initialize использованы встроенные функции Date и Time, с помощью которых определяются текущие дата и время.
Установка движка линейки прокрутки в положение, которое соответствует текущему дню недели, обеспечивается присвоением свойству Value элемента управления ScrollBar номера дня недели. Этот номер в процедуре определяется с помощью функции WeekDay(Date) и однострочного оператора If.
Процедура cmdРасчет_Click предназначена для вычисления стоимости приобретенных товаров с учетом предусмотренных скидок.
Ввод исходных данных в процедуре осуществляется с помощью операторов CCur() и CInt().
Для определения размера скидок на объем покупки использован однострочный оператор If. Размер скидок в зависимости от типа покупателя определяется с использованием расширенной блочной формы оператора If, а скидки на день недели – с использованием оператора выбора Select Case.
Процедура TxtНаличные_Exit запускается при переводе курсора в любое другое место формы, что соответствует снятию фокуса с поля TxtНаличные, и предназначена для расчета сдачи и вывода результатов.
Для формирования сообщения в случае недоплаты покупателем используется функция IIf.
В процедуре подготовки рабочего места к работе CmdСброс_Click() использована константа Empty для обнуления результатов расчетов.