- •Лабораторная работа № 6 использование в решении задач массивов данных
- •Общие сведения
- •Пример решения задачи.
- •Использованные данные
- •Код проекта Процедуры обработки событий нажатий на кнопки «Ввод данных» и «Поиск», представлены ниже.
- •Реализация проекта
- •Анализ проекта
- •Прайс-лист
- •Варианты задач.
- •Контрольные вопросы.
Использованные данные
Реквизит |
Имя |
Предназначение |
N i k Названиеі Ценаі Ценаn |
N i k Nazv(i) Cena(i) C |
Количество всех товаров Номер текущего товара Количество найденных товаров Название i-го товара Цена i-го товара Цена, по которой надо отобрать товары |
Интерфейс с пользователем
Поскольку в приложение нет простых данных, которые вводятся и относятся к основной задаче, то на форме нет текстовых полей. Результат также не одно значение, а набор названий, количество которых неизвестно. Поэтому на форме нет надписей. Командные кнопки смещены вправо, поскольку результат выводится на форму, начиная с левого верхнего угла (рис. 7.2.).
Решение задачи осуществляется в два этапа, для активизации каждого этапа имеются командные кнопки «Ввод данных» и «Поиск».
Рис 7.1. Алгоритм выбора товаров с заданной ценой.
Рис. 7.2. Форма для решения задачи
Код проекта Процедуры обработки событий нажатий на кнопки «Ввод данных» и «Поиск», представлены ниже.
Option Explicit ‘Явное описание переменных
Option Base 1 ‘Нумерация элементов массива с 1
Const N=5 ‘ Количество всех товаров
‘Описание массивов для всех процедур формы
Dim Nazv(N) As String
Dim Cena(N) As Currency
‘Ввoд входных данных
‘Подпрограмма для ввода данных
____Private Sub cmbВведение_данных_Click ( )_______
Dim i As Integer ‘Номер текущего элемента массива
' Очищение формы от предыдущих данных,
'вывод оператором Print
Cls
‘Ввод данных
For i = 1 To N
Nazv(i) = (Input Box (“Введите название товара”, Str (i) + “-й товар”))
Next i
End Sub
‘Подпрограмма поиска товаров с заданной ценой
______Private sub cmdПоиск_Click ( )_____________
Dim С As Currency, i As Integer, k As Integer
‘ Ввод заданной цены
С = Ccur (InputBox (“Ввод заданной цены”, “Цена товара”))
‘ Вывод заголовка результата
Print “Товары с ценой” & Format (С, “0.00 грн.”)& “:”
K = 0 ‘ Количество найденных товаров
‘просмотр и вывод названий товаров сзаданной ценной
For i = 1 To N
If Cena (i) = C Then Print Nazv(i)
K = k +1 ‘Подсчёт количества найденных товаров
End If
Next i
If k = 0 Then Print “Отсутствуют”
Print “----------------------------------”
End Sub
Реализация проекта
Для реализации проекта необходимо:
Запустить VB для создания нового проекта.
Задать заголовок и имя формы.
На форме создать кнопки «Ввод данных» и «Поиск».
В окне кода в разделе общих описаний (General Declarations) ввести операторы
Option Basel
Const N =5
Dim Nazv (N) As String, Cena(N) As Currency
В окне формы дважды нажать на кнопку «Ввод данных» и ввести тело кода процедуры обработки события нажатия на эту кнопку, а далее выполнить аналогичные действия для кнопки «Поиск».
Сохранить форму и проект в папке на диске.
Анализ проекта
В коде приложения строго придерживается дисциплина явного описания переменных. Она обеспечивается наличием оператора OptionExplicitв разделе общих описаний. Тут же расположено описание массивов данныхNazvиCena, поскольку эти массивы употребляются в обeих процедурах.
Каждый массив состоит из N элементов, где N – константа. Она определена в операторе Const, который в данном случае должен передавать оператору описания массивов Dim. По этой причине, а также потому, что N используется в обeих процедурах, оператор Const N = 5 размещен в разделе общих описаний.
Для того чтобы нумерация элементов массива начиналась не с нуля, а с единицы, в разделе общих описаний записан оператор Option Base 1
Переменные, которые используются как счётчик в операторах цикла For, принято описывать как локальные переменные. Поэтому переменная i описана не в разделе общих описаний, а в каждой процедуре отдельно.
Для ввода массивов названий товаров и их цен в процедуре обработки события нажатия на кнопку «Ввод данных» используется функция InputBox. Эта функция так же используется для ввода значения цены, по которой отбираются товары из прайс-листа в процедуре обработки события Нажатие на кнопку “Поиск”.
В этой процедуре есть цикл для просмотра всех цен и сравнения с заданной ценой. Если значение цены товара совпадает с заданной ценой, то сразу же на форму выводится названия этого товара.
Сравнение цен выполняется оператором If , а вывод – оператором Print, который записан в ветви Then. Тут также увеличивается значение счётчика количества найденных товаров k. Перед началом просмотра (перед циклом) k приравнивается нулю. Если после окончания просмотра списка цен, обнаружится, что k, как и раньше, равняется нулю, то это означает, что товаров с заданной ценой в списке нет. В этом случае выдаётся соответствующее сообщение.
Следовательно, после нажатия на кнопку «Поиск» на форму выводится информация о товарах с заданной ценой. Если ещё раз нажать на эту кнопку и задать значения другой необходимой цены, то ниже выведутся результаты другого поиска и т.д.
Если необходимо сделать новый поиск с новым прайс-листом, предварительно не закрывая формы, то желательно очистить её от результатов предыдущих поисков. Такое очищение обеспечивается с помощью оператора Cls в процедуре ввода_данных перед вводом информации с нового прайс-листа.
По схеме алгоритма видно , что данные о всех товарах (название и цена) обрабатываются одинаково. Поэтому в программе использованы не наборы простых переменных строкового и денежного типов, а массивы данных этих типов. Доступ к каждому элементу массива происходит по индексу .
Выполнение программы и анализ полученных результатов
Результаты решения задачи приведены на рис. 7.3. При этом были использованы данные из табл. 7.2.
Рис. 7.3. Результаты поиска товаров с необходимыми ценами.