Основы программирования на языке Visual Basic, страница 11

Согласно алгоритму значения цены и количества для каждого вида товара вводятся и сразу же используются при вычислении общей стоимости S, т.е. они не нужны по отдельности для следующих шагов решения задачи. Поэтому значения цены и количества товара текущего вида можно вводить в поля памяти, в которые перед этим вводились данные по товару предыдущего вида. Это позволяет в данной задаче использовать не индексированные переменные Ценаі и Количествоі, а простые переменные Цена и Количество.

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

Переменные, в которых хранятся значения цены (Цена) и общей стоимости (S), должны иметь дробный тип (2 десятичных разряда для копеек). Поэтому в программе им можно задать денежный тип и соответственно имена curЦена и curS.

Переменная, в которой хранится количество текущего товара, должна иметь целый тип, поэтому ее имя будет intКоличество.

 


Рис. 5.1. Схема алгоритма определения стоимости покупок

Используемые в программе переменные представлены в приведенной ниже таблице.

Таблица

Используемые переменные

Реквизит

Имя

Назначение

Ценаi

curЦена

Цена текущего товара, грн.

Количествоi

intКоличество

Количество текущего товара, шт.

i

i

Номер по порядку текущего товара

S

curS

Общая стоимость купленных товаров, грн.

Интерфейс с пользователем

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

Ввод цены товара i -го вида производится с помощью окна ввода, приведенного на рис. 5.2, а количества товара – с помощью аналогичного окна (рис. 5.3).

Перед вводом данных по товару очередного вида пользователь должен ответить на запрос с помощью окна сообщений (рис. 5.4). Полученный результат решения задачи выводится в диалоговом окне (рис. 5.5).

 

Рис. 5.2. Диалоговое окно ввода Рис. 5.3. Диалоговое окно ввода

цены вида товара                                   количества вида товара

                       

Рис. 5.4. Окно                                 Рис. 5.5. Диалоговое окно

сообщений                                         вывода результата

Поскольку ввод и вывод осуществляется с помощью специальных окон, на форме имеется только одна кнопка, нажатием на которую начинается процесс определения стоимости покупок (рис. 5.6).

Рис. 5.6. Форма для расчета стоимости покупок

Код программы

В процедуре, которая обрабатывает событие Щелчок на кнопке «Вычислить», используются следующие операторы:

Option Explicit

Private Sub cmdВычислить_Click()

'Описание переменных

Dim curЦена        As Currency,  _

    intКоличество  As Integer,  _

    i                        As Integer,  _

    curS                 As Currency

curS = 0  'Общая стоимость

i = 0     'Номер покупки

'Цикл по обработке покупок

Do While MsgBox("Будут еще покупки?", vbQuestion + vbYesNo,  _

                "Покупки") = vbYes 'Условие продолжения

  i = i + 1

'Ввод цены и количества

  curЦена = CCur(InputBox("Введите цену",  _

                 i & "-й товар"))

  intКоличество = CInt(InputBox("Введите количество",  _

                 i & "-й товар"))

'Вычисление общей стоимости

  curS = curS + curЦена * intКоличество

Loop 'Конец цикла

'Вывод результата

MsgBox "Стоимость всех покупок "  _

       & Format(curS, "0.00") & " грн.", ,  _

       "Благодарим за покупки"

End Sub

Анализ проекта

Объявление переменных осуществляется в операторе Dim. Их имена и типы соответствуют параметрам, указанным в п. 5.4.

Для организации повторений по вводу и обработке данных для каждой покупки используется цикл Do Loop, поскольку заранее не известно количество покупок. Так как возможен случай, когда не произведено ни одной покупки, применяется конструкция While с верхним окончанием (цикл с предусловием).

В качестве условия повторения использовано сравнение

MsgBox("Будут еще покупки?", vbQuestion + vbYesNo,  _

                "Покупки") = vbYes

Действие встроенной функции MsgBox состоит в вызове окна сообщений, в котором выводится заданное сообщение (первый параметр) и заголовок (третий параметр). В окне сообщений могут выводиться различные рисунки и кнопки, которые определяются суммой соответствующих констант (второй параметр). Названия констант запоминать не нужно, т.к. они выводятся при задании соответствующего параметра в виде подсказок. Второй параметр можно опустить, тогда на окне сообщений выводится только кнопка «ОК».

Если же в окне сообщений несколько кнопок, то пользователь может нажать любую из них. В этом случае значением функции MsgBoxбудет соответствующая этой кнопке константа. Названия констант-результатов также выводятся в виде подсказок. В условии после слова While проверяется, нажата ли кнопка «Да» (MsgBox(…) = vbYes).

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

Для ввода исходных данных цены и количества по каждому виду товара используется функция InputBox, которая вызывает диалоговое окно ввода, на котором выводится подсказка (первый параметр) и заголовок (второй параметр). Нужное значение вводится в поле ввода на этом окне. Ввод значения завершается нажатием кнопки «ОК».