logo
Разработка автоматизированной системы "Склад"

3.2 Структурированные типы данных

Для реализации и обработки базы данных в программе будем использовать массивы и пользовательский тип данных - запись.

Массив - это самый распространенный структурный тип данных. Массив представляет собой упорядоченную совокупность данных одного типа. Порядок элементов задается индексами, то есть порядковыми номерами элементов в соответствующей структуре. В Visual Basic массивы могут одномерными и многомерными. Допустимое число измерений около 60.

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

Dim | Public | Private | Static} <имя переменной> (<список размерностей>) [As <имя типа>]

Каждое измерение в списке отделяется запятой и определяется заданием верхней и нижней границы изменения индексов. Массивы - это структуры с прямым доступом к элементам. Доступ осуществляется посредством указания имени массива и индекса элемента. Индекс элемента прописывается в круглых скобках.

Приведем пример:

Public Sub MyArray()

Const LowBound As Integer = -5, HighBound As Integer = 5

Dim MyArr(LowBound To HighBound) As Byte

Dim I As Integer

Debug.Print "Элементы массива MyArr:"

For I = LowBound To HighBound

MyArr(I) = I + 6

Debug.Print MyArr(I)

Next I

End Sub

При исполнении данной процедуры будут напечатаны числа от 1 до 11.

Рассмотренный пример показывает работу со статическим массивом. Количество элементов такого массива определено в момент объявления его в программе. Visual Basic имеет мощное средство работы с массивами - динамические массивы. Массив считается динамическим, если при первоначальном объявлении не указывается его размерность, но в последующем она может быть определена и переопределена оператором ReDim. Размерность определяется динамически в той процедуре и в тот момент, когда она становится фактически известной. При этом границы изменения индексов можно задавать не только как константы, но и как выражения, зависимые от переменных. Если же при переопределении массива задать ключевое слово Preserve, можно сохранить все ранее полученные значения элементов и расширить массив, добавив новые элементы.

Приведем пример работы с динамическим массивом:

- Объявление динамического массива на уровне модуля

Public Vector() As Integer

Public Sub DinArray()

- Определяется фактическая размерность массива Vector

Dim N As Byte, I As Byte

N = InputBox("Введите число элементов вектора")

ReDim Vector(1 To N)

For I = 1 To N

Vector(I) = 2 * I + 1

Next I

- Массив расширяется с сохранением ранее вычисленных элементов

ReDim Preserve Vector(1 To 2 * N + 1)

For I = N + 1 To 2 * N + 1

Vector(I) = 2 * I

Next I

-А теперь печать

Debug.Print "Элементы Vector:" & Chr(13)

For I = 1 To N * 2 + 1

Debug.Print Vector(I)

Next I

End Sub

При исполнении данной процедуры будет выдан запрос на определение количества элементов массива, затем печать выведенных значений. Например, если ввести число 10, то вначале будут напечатаны нечетные числа от 3 до 21, а затем четные от 22 до 42.

Запись относится к сложным типам данных, который конструируется, как и массив, объединением совокупности данных простых типов. В отличие от массива, запись представляет собой объединение элементов, каждый из которых может иметь свой тип. Элементы записи называют ее полями. Запись хорошо ассоциируется с таблицей. В этом случае имена полей записи соответствуют наименованиям столбцов таблицы, а значения элементов записи - значениям соответствующих ячеек какой-либо строки таблицы.

Формально в Visual Basic отсутствует понятие «запись». Чтобы обеспечить работу с записями, в Visual Basic предусмотрены средства для определения пользовательского типа. Таким образом, записи в Visual Basic называются типом, определенным пользователем. Синтаксис такого определения определен следующим образом:

[Private | Public] Type <имя типа>

<имя элемента> [([<размерность массива>])] As <тип элемента>

[<имя элемента> [([<размерность массива>])] As <тип элемента>]

End Type

Определение типа дается на уровне модуля, и если оно является закрытым (Private), то оно распространяется на один модуль, а для общих (Public) типов - на все.

Приведем пример определения типа и его использования:

- Определение структуры записи из двух полей

Type Fam

FirstName As String

LastName As String

End Type

Type Person

Fio As Fam

Birthdate As Date

End Type

Public Sub UserType()

- Объявление переменных типа запись

Dim Semenoff As Person

Dim Arhipov As Person

- Присваиваются значения полям соответствующих записей

Semenoff.Fio.FirstName = "Авдей"

Semenoff.Fio.LastName = "Семенов"

Semenoff.Birthdate = #11/2/1975#

Arhipov.Fio.FirstName = Semenoff.Fio.FirstName

Arhipov.Fio.LastName = "Архипов"

Arhipov.Birthdate = #18/11/1976#

- А теперь просмотр результата в окне вывода

MsgBox (Semenoff.Fio.FirstName & " " & Semenoff.Fio.LastName & "родился " & Semenoff.Birthdate)

MsgBox (Arhipov.Fio.FirstName & " " & Arhipov.Fio.LastName & " родился " & Arhipov.Birthdate)

End Sub

Как видно из представленного фрагмента программы, определенный пользователем тип используется при описании программных переменных так же, как и стандартные типы. Здесь же показан принцип работы с записями. Записи обрабатываются поэлементно. Для доступа к элементу записи используется составное имя, которое состоит из имени записи и имени соответствующего поля или полей. Соответствующие имена разделяются знаком точка. Другая форма обращения к элементу записи предполагает использование оператора присоединения (With …. End With). Рассмотрим на примере принцип кодирования данной инструкции языка Visual Basic.

With Arhipov

.Fio.FirstName = Semenoff.Fio.FirstName

.Fio.LastName = "Архипов"

.Birthdate = #7/21/1966#

End With

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

Применительно к поставленной задаче имеем:

Размещено на http://www.allbest.ru/

Рис. 1. Тип - запись с информацией о товаре

Таблица 2. Формат данных

Характеристика

Тип

Длина

Код товара

Integer

-

Название

String

25

Количество на складе

Integer

-

Страна производитель

String

15

Дата выработки

String

10

Срок годности

Integer

-