Расчет сдачи и вывод результата

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