Интерфейс с пользователем
Среди исходных данных есть величина, общая для всей задачи – предельная сумма денег. Ее можно ввести с помощью текстового поля txtSПред на форме. Все остальные исходные данные (расходы по месяцам) вводятся с помощью окна ввода. Результат выводится в вогнутую область на форме, которая представляется надписью lblРезультат. Процесс ввода расхода денег по месяцам и вывода результатов начинается после щелчка на кнопке «Вычислить». Таким образом, задача решается с помощью формы, приведенной на рис. 6.9.
В области результата выводится сообщение "За первых i месяцев Вы предполагаете израсходовать SОбщ грн. Это больше предельной суммы на SОбщ - SПред" или сообщение "За год Вы предполагаете израсходовать SОбщ грн.". Здесь вместо i, SОбщ и SПред будут подставлены соответствующие значения.
Ввод данных по расходам за i-тый месяц производится с помощью окна ввода (рис. 6.10).
Рис. 6.9. Форма дляРис. 6.10. Окно для ввода
Решения задачи расходов
Код программы
В процедуре обработки события "Щелчок на кнопке «Вычислить»" используются следующие операторы
Option Explicit
Private Sub cmdВычислить_Click()
Const KМес = 3 'Количество месяцев при планировании
Dim curРасход As Currency, _
curSОбщ As Currency, _
curSПред As Currency, _
i As Integer
'Ввод предельной суммы
curSПред = CCur(txtSПред)
curSОбщ = 0
i = 0
'Планирование расходов по месяцам
Do
i = i + 1
curРасход = CCur(InputBox("Введите расходы", _
Str(i) & "-й месяц"))
curSОбщ = curSОбщ + curРасход
Loop Until (i = KМес) Or (curSОбщ > curSПред)
'Подготовка и вывод результата
If curSОбщ > curSПред Then
lblРезультат = "За первых " & Str(i) _
& " месяцев Вы предполагаете израсходовать " _
& Format(curSОбщ, "0.00") & " грн." & vbCrLf _
& "Это больше предельной суммы на" _
& Format(curSОбщ - curSПред, "0.00") & " грн."
Else
lblРезультат = _
"За год Вы предполагаете израсходовать " _
& Format(curSОбщ, "0.00") & " грн."
End If
End Sub
Анализ проекта
В проекте использована константа КМес для определения количества месяцев, в течение которых будут производиться расходы планируемых финансов. Это позволяет быстро изменять период планирования. Например, при отладке программы достаточно взять 3 месяца, а для эксплуатации программы – 12 месяцев.
Перед началом ввода планируемых расходов производится преобразование предельной суммы, введенной в текстовое поле txtSПред, к денежному типу, поскольку дальнейшие действия будут выполняться с числовыми данными.
Для организации повторений по обработке планируемых расходов по месяцам использован цикл Do ...Loop, т.к. заранее не известно количество повторений. Оно определяется предельной суммой и величиной расходов за каждый месяц. Поскольку в планировании участвует, по крайней мере, хотя бы один месяц (т. е. операторы тела цикла должны выполниться не менее одного раза), то использована модификация цикла с нижним окончанием.
Условием выхода из цикла является или окончание планируемого периода (i = КМес), или превышение предельной суммы денег (curSОбщ > curSПред), или то и другое. Поэтому эти два условия объединены логической операцией Or. Так как при выполнении хотя бы одного из этих условий должно прекращаться дальнейшее планирование расходов (выход из цикла), то в операторе цикла используется ключевое слово Until.
Поскольку выход из цикла возможен по двум разным причинам, то и дальнейшие действия будут зависеть от соответствующей причины. Поэтому после оператора цикла используется оператор If, в котором проверяется, был ли выход из-за превышения предельной суммы. В случае положительного ответа формируется результат решения задачи. Ответ состоит из двух предложений. Чтобы второе предложение выводилось с начала новой строки, используется константа Visual Basic vbCrLf (переход в начало новой строки). В случае отрицательного ответа формируется другой результат.
В каждом из случаев сформированные строки ответов присваиваются надписи lblРезультат, что обеспечивает их вывод на форму в область, отведенную для результата.
Дата добавления: 2020-10-14; просмотров: 337;