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


Решение задачи осуществляется с помощью формы, на которой имеется одно простое текстовое поле txtТребуется и массив текстовых полей txtПлан (рис. 8.3). В эти текстовые поля вводятся соответствующие исходные данные. Результаты расчетов выводятся в области надписей lblИтого (сумма плановых значений по дням недели) и lblОтклонение (текстовая информация о результатах сравнения величин «Требуется» и «Итого»), а соответствующее числовое значение – в текстовое поле txtОтклонение.

 

Рис. 8.3. Форма для решения задачи планирования

 

Поскольку на форме нет командных кнопок, то процесс вычисления и вывода результата запускается событиями в полях ввода исходных данных – выходом из текстового поля txtТребуется после ввода исходных данных (событие потеря фокуса – LostFоcus) и изменения в плановых данных по любому дню недели (событие – Change).

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

Численное значение отклонения дает представление о том, какую величину показателя нужно еще распределить или наоборот – на какую уменьшить

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

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

Для реализации задачи планирования в коде нужно предусмотреть обработку следующих двух событий:

1) потеря фокуса текстовым полем txtТребуется;

2) изменение любого значения в массиве текстовых полей txtПлан.

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

 

Option Explicit

'Вычисление отклонения заданного плана на неделю

'от требуемого значения показателя

 

Private Sub txtТребуется_LostFocus()

Dim sngИтого As Single 'Сумма плана по дням

Dim sngТребуется As Single 'Требуемое значение

Dim i As Byte 'Номер дня недели

 

'Вычисление суммы плановых значений по дням недели

sngИтого = 0

For i = 1 To 7

sngИтого = sngИтого + CSng(txtПлан(i - 1))

Next i

 

'Вывод на форму

lblИтого = Format(sngИтого, "0.00")

 

'Подготовка к использованию в вычислениях

sngТребуется = CSng(txtТребуется)

 

'Вывод сообщения об отклонении

If sngИтого > sngТребуется Then

lblОтклонение = "Перевыполнение"

lblОтклонение.BackColor = vbYellow

ElseIf sngИтого < sngТребуется Then

lblОтклонение = "Недовыполнение"

lblОтклонение.BackColor = vbRed

Else

lblОтклонение.BackColor = vbGreen

lblОтклонение = "Норма"

End If

 

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

txtОтклонение = Abs(sngИтого - CSng(txtТребуется))

End Sub

 

'Те же действия, что и в предыдущей процедуре,

'но при изменении планового значения в любой день

Private Sub txtПлан_Change(Index As Integer)

txtТребуется_LostFocus

End Sub

Реализация проекта

1. Запустить на выполнение VB для создания нового проекта.

2. Задать заголовок формы и ее имя.

3. Для ввода требуемого значения показателя создать текстовое поле txtТребуется и надпись к нему.

4. Для определения контейнера, в котором будут содержаться данные по дням недели, создать рамку fraEжедневный_план достаточных размеров, чтобы в ней поместился массив текстовых полей из семи элементов.

5. Для ввода плановых значений по дням недели создать внутри рамки текстовое поле txtПлан и надпись lblПн (для понедельника) к нему. Свойству Text для поля txtПлан задать значение ноль. Скопировать пару этих элементов в буфер, а затем вставить из буфера в рамку. При вставке подтвердить запрос VB о том, что создается массив элементов. Затем еще пять раз произвести вставки из буфера. Таким образом, в рамке будет содержаться семь текстовых полей с соответствующими надписями (заголовки надписей скорректировать в соответствии с днями недели).

7. Для вывода суммы плановых значений по дням недели (величина «Итого») создать ниже рамки пару надписей на одном уровне – свойству Caption левой задать значение Итого, а для правой установить значения следующих свойств:

Name: lblИтого,

Caption: пусто,

BorderStyle: 1.

8. Для вывода текстовой и числовой информации об отклонении суммы плановых значений от требуемой величины показателя под предыдущей парой надписей создать текстовое поле с надписью слева от него. Установить значения следующих свойств надписи:

Name: lblОтклонеие,

Caption: пусто.

Для текстового поля установить значения следующих свойств:

Name: txtОтклонение

Text: пусто.

8. Для создания процедуры обработки события ”Потеря фокуса текстовым полем txtТребуется” дважды щелкнуть на этом поле, в поле со списком <Procedure> выбрать событие LostFocus и ввести тело процедуры.

9. Для создания процедуры обработки события “Изменение значения в массиве текстовых полей txtПлан” дважды щелкнуть на любом текстовом поле массива элементов управления txtПлан и в заготовку процедуры скопировать имя предыдущей процедуры txtТребуется_LostFocus

10. Сохранить форму и проект в папке на диске D:.

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

Для вычисления суммы плановых значений по дням недели в коде используется оператор цикла со счетчиком, который изменяется от 1 до 7. Поскольку нумерация элементов массива текстовых полей txtПлан начинается не с единицы (как счетчик цикла), а с нуля, то в теле цикла при обращении к элементам массива индекс на единицу меньше, чем счетчик (txtПлан(i-1)).

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

 

lblОтклонение.BackColor=vbYellow

 

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

Ссылка в процедуре txtПлан_Change на имя процедуры txtТребуется_LostFocus означает, что процедура txtПлан_Change будет выполнять те же действия, что и процедура txtТребуется_LostFocus.

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



Дата добавления: 2020-10-14; просмотров: 319;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.015 сек.