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

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Результат, что обеспечивает их вывод на форму в область, отведенную для результата.

Выполнение программы и анализ полученных результатов

На капитальный ремонт офиса выделено 250 000 грн. Был проведен конкурс, в котором приняли участие две ремонтно-строительные фирмы "Комфорт" и "Щит". В следующей таблице приведены суммы планируемых расходов по месяцам, представленные каждой фирмой.

Таблица

Планируемые расходы на ремонт офиса

Месяц

"Комфорт"

"Щит"

1

40 000

20 000

2

60 000

20 000

3

60 000

20 000

4

50 000

20 000

5

55 000

20 000

6

30 000

20 000

7

40 000

20 000

8

60 000

20 000

9

20 000

10

20 000

11

20 000

12

20 000

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

 

а) фирма "Комфорт"                                       б) фирма "Щит"

Рис. 5.11. Результат решения задачи

Варианты задач

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

2.  Ателье получило заказ на пошив N платьев разного размера. Затраты ткани на каждое платье известны. Хватит ли тюка ткани, в котором S метров, на пошив всех платьев?

3.  Электростанция имеет мощность Р квт-часов. Ее электроэнергию желают использовать N предприятий, потребности каждого из которых известны. Они подключались к электроэнергии по мере необходимости. Смогут ли получать электроэнергию все предприятия? Если совокупные затраты превышают заданную мощность, то осуществляется аварийное отключение.

4.  Определить средний вес стальной заготовки из числа заготовок, которые перевозятся автотранспортным предприятием из места изготовления к месту их обработки. Ввод и обработку данных осуществлять до тех пор, пока не поступит заготовка весом 285 кг.