Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Візуал Бейсік 2010 Глінський.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
4 Мб
Скачать
☆

§ 28. Структури даних (записи)

У першому розділі ми розглянули поняття об’єкт, клас об’єктів, екземпляри класу, інформаційне моделювання, імітували ство­рення бази даних. Тепер навчимося зберігати дані про реальні об’єкти в оперативній пам’яті і файлах даних.

1. Поняття структури даних користувача. На прикладі задачі про студентів розглянемо об’єкти, для опису яких використовують дані різних типів. Об’єкт «Студент» можна змоделювати за допомо­гою таких властивостей: прізвище, ім’я, рік народження, рейтинговий бал — середній бал за деякий період навчання (зі 100 балів). Декілька екземплярів класу «Студенти» можна задати так:

Прізвише

Ім’я

Рік народження

Бал

Петренко

Віктор

1994

65

Катренко

…

Остап

1995

75

Тут кожний рядок містить дані текстового і числового типів. От­же, рядок складається з даних різних типів. Для зберігання одного рядка в оперативній пам’яті застосовують структуру даних, яку називають структурою у VB або записом (чи типом користувача) у VBA. Терміни «запис» і «структура» вважатимемо синонімами.

Структура чи запис складається з полів (інші терміни — власти­вості, компоненти). У кожному полі зберігається одне дане деякого конкретного типу. У вищенаведеному прикладі є такі поля: прізви­ще, ім’я, рік народження, бал.

Розглянемо приклади даних, які можна зберігати в структурі:

  1. прізвище, ім’я, адреса студента;

  2. прізвище, ім’я студента, оцінки з декількох предметів;

  3. прізвище спортсмена, оцінки суддів;

  4. назва філіалу компанії, доходи за певний період;

  5. рядок турнірної таблиці з футболу чи інших змагань тощо.

Структуру даних (запис) у коді передусім треба описати.

2. Описування структури. У VB структуру з k полями описують за допомогою такої конструкції:

Structure <назва структури>

Dim <назва поля 1> As <тип поля 1>;

…

Dim <назва поля k> As <тип поля к>;

End Structure

Замість службового слова Dim можна використовувати слова Ргivate або Public.

У VBA запис (тип користувача) описують так:

Туре <назва типу>

<назва поля 1> As <тип поля 1>;

…

<назва поля k> As <тип поля k>;

End Туре

Усі назви придумує користувач. Типом поля може бути будь-який зі стандартних типів (Integer, Long, Single, Double, String) або ін­ша структура.

У VBA опис Туре поміщають в окремий модуль, що додається до проекту командами з головного меню Insert => Module. У VB опис структури можна розташувати в окремому модулі або у розділі Dec­larations.

Нагадування. У VBA довжину п текстового даного можна конк­ретизувати типом String*n, де п — деяке число.

3. Моделювання об’єктів за допомогою структур. Розглянемо предметну область про студентів і змоделюємо об’єкт «Студент» за допомогою структури, що містить відомості про анкетні дані особи: прізвище (surname), ім’я (name), рік народження (year), рейтинговий бал (bal).

Структуру назвемо student:

Structure student 'Це у VB

Dim surname As String

Dim name As String

Dim year As Integer

Dim bal As Single

End Structure

Структуру (запис) з текстовими полями фіксованої довжини у VBA описують так:

Type student 'Це у VBA

surname As String*20

name As String*15

year As Integer

bal As Single

End Type

Модифікуємо структуру, доповнивши її додатковими полями. Поле про рік народження (year) у VBA замінимо записом birthday з такими полями: рік (year), місяць (month), день (day). Отримаємо (у термінах VBA) такий тип користувача:

Type student

name As String*20

surname As String* 15

Type birthday

year As Integer

month As Integer

day As Integer

End Type

bal As Single

End Type

Завдання 1. Опишіть таку структуру у термінах VB.

Завдання 2. Змоделюйте об’єкт «Автомобіль» за допомогою структури даних. Опишіть структуру.

4. Оголошення змінних типу структура і масиву структур. Коли структуру (запис) описано, треба оголосити змінні типу «структура» за допомогою команди Dim так:

Dim <назва змінної> As <назва структури (запису) >

Наприклад,

Dim studl As student

Dim stud2 As student

Dim stud3 As student.

Ці команди резервують місце в оперативній пам’яті для трьох змінних, куди можна буде помістити дані про трьох студентів. У групі зазвичай є більше студентів. Оголосити так велику кількість змінних можна, але опрацьовувати їх не зручно. На допомогу при­водить складена структура даних, яку називають масивом структур (масивом записів):

Dim <назва масиву>(<кількість елементів>) As <структура (запис)>

Наприклад, масив структур для 25 студентів (домовимося нуме­рацію вести від одиниці) можна оголосити так:

Dim stud(25) AS student.

У таких масивах зберігають цілі таблиці з даними: відомості про групу осіб, учнів класу, групу студентів, про філіали компанії, про результати змагань чи конкурсів з декількома учасниками тощо.

Декілька таблиць зазвичай описують предметну область.

Отже, структури і масиви структур дають змогу моделювати предметні області засобами мови програмування.

5. Опрацювання структур. Дії виконують не з усією структурою а з її полями. Дані вводять у поля структури або у поля масиву структур з клавіатури, з масивів даних, зі списків, з файлів тощо.

Масив структур опрацьовують так, як звичайні масиви. Опра­цьовані дані виводять з полів структур на екран чи у файли. Після виведення результатів дані зберігаються в оперативній пам’яті (т структурах) до закінчення роботи програми.

Доступ до конкретного поля дає така складена назва:

<Назва змінної>.<Назва поля>

Наприклад, назви полів структури першого студента такі:

studl.name,

studl.surname,

studl.birthday.year,

studl.birthday.month,

studl.birthday.day,

studl.bal

У випадку масиву структур назви змінних, що містять дані пр: першого студента (якщо нумерація від одиниці), будуть такі:

stud(1).name,

stud(1/surname,

stud(1).birthday.year,

stud(1).birthday.month,

stud(1).birthday.day,

stud(1).bal.

Аналогічно для другого студента:

stud(2).name,

stud(2).surname

…

З полями виконують такі ж дії, як з простими змінними. На­приклад:

stud(1).name = "Володимир"

stud(1).sumame = "Трошкін"

stud(1).birthday.month = InputВох("Введіть місяць")

TextBox1.Text = stud(1).surname

Debug.Print stud(1).surname 'VBA

Console.WriteLine(stud(1).surname) 'VB

stud(1).bal = (a + b + с + d) / 4.

6. Команда With. Команда With (читається віз, перекладається з) задає контейнер, всередині якого можна записувати крапку і назви волів (властивостей) без назви структури (об’єкта).

Команда має такий вигляд:

With <назва об’єкта (структури)> <контейнер>

End With

Наприклад,

With stud(1)

.name = "Володимир"

.surname = " Трошкін "

.birthday.month = InputВох("Введіть місяць")

End With

Команда With призначена для компактного написання коду.

7. Опрацювання масиву структур. Проект «Автосалон». Елемен­ти масиву структур опрацьовують за допомогою алгоритмічної конструкції «цикл».

Задача 1. Розробити проект з назвою «Автосалон» відповідно до наступного сценарію.

Сценарій проекту. Дані про п’ять видів автомобілів, що є на скла­ді автосалону, треба ввести з клавіатури в масив структур (після на­тискання на кнопку «Створити»).

Кнопка «Вивести» має забезпечити виведення на екран (в еле­мент керування класу «списки») всіх відомостей про всі автомарки: марка, рік випуску, об’єм двигуна, ціна, колір, кількість на складі. Список підпишемо так: «Усі моделі авто».

Рис. 2.4. Проект «Автосалон»

Кнопка «Знайти» має забезпечити пошук у масиві структур всіх авто синього кольору і виведення відомостей про назву автомарки та її ціну в інший список — «Шукані авто».

Інтерфейс проекту. Форму треба сконструювати так, як показа­но на рис. 2.4 (або краще, підібравши картинку для тла форми, ве­ликі шрифти для підписів елементів керування тощо, створивши меню у VB замість кнопок).

Моделювання. Змоделюємо предметну область. Нехай структура складається з таких полів: марка, рік випуску, об’єм двигуна, ціна, ко­лір, кількість на складі. Опишемо структуру, якій дамо назву avto у середовищах VB і VBA.

Structure avto 'VB

Dim marka As String

Dim rik As Integer

Dim dvygun As Single

Dim cina As Integer

Dim kolir As String

Dim kilkist As Integer

End Structure

Type avto 'VBA

marka As String*10

rik As Integer

dvygun As Single

cina As Integer

kolir As String*10

kilkist As Integer

End Type

Розглянемо змінні, які будуть глобальними: n — кількість авто­мобілів (нехай n <= 5) і а(5) — масив структур, який міститиме дані про всі автомобілі. Оголосимо ці змінні:

Dim n As Integer

Dim а(5) As avto

Програмування. Виконаємо такий алгоритм.

  1. У VB структуру і глобальні змінні опишемо під командою Public Class Forml. А у VBA тип запису опишемо в окремому модулі, і глобальні змінні — на початку коду.

  2. Складемо і введемо код для кнопки «Створити»:

Dim і As Integer

n = InputBox("Введіть кількість авто")

For і = 1 То n

a(i).marka = InputВох("Введіть марку авто")

a(i).rik = InputBox(“Введіть рік випуску”)

a(i).dvygun = InputВох("Введіть об’єм двигуна")

a(i).cina = InputВох("Введіть ціну авто")

a(i).kolir = InputВох("Введіть колір авто")

a(i).kilkist = InputВох("Введіть кількість на складі")

Next і

  1. Складемо і введемо код кнопки «Вивести» з використанням кон­тейнера With:

Dim і As Integer, z As String

For і = 1 To n

With a(i)

z = .marka + Chr(9) + Str(.cina) + Chr(9) + Str(.dvygun) + _

Chr(9) + Str(.rik) + Chr(9) + .kolir + Chr(9) + Str(. kilkist)

ListBoxl.Items.Add(z) 'VB

ListBox1.AddItem z 'VBA

End With

Next і

Довідка. Функція Chr(9) у текстових виразах забезпечує пропуски між даними і вирівнювання даних на екрані у стовпцях. Вона діє як натискання на клавішу Tab на клавіатурі під час введення текс­тів. Замість Chr(9) можна використовувати сталу vbTab.

  1. Складемо і введемо код кнопки «Знайти»:

Dim і As Integer, z As String, color As String

color = InputВох("Введіть потрібний колір")

For і = 1 To n

With a(i)

If Trim(.kolir) = color Then

z = .marka + Chr(9) + Str(.cina)

ListBox2.Items.Add(z) "VB

ListBox2.AddItem z 'VBA

End If

End With

Next і

Завдання 1. Запустіть проект на виконання й переконайтеся, до результат відповідає технічному завданню (рис. 2.4).

Завдання 2. Переробіть код першої кнопки, застосувавши кон­тейнер With.

Завдання 3. Модифікуйте код, щоб одержати інформацію про машини, які були випущені після 2008 року і ціна яких менша від 20000 у.о.

8*. Зчитування даних з файлу даних у масив структур. Масив структур зберігається в оперативній пам’яті, яка після закінчення роботи проекту очищається. Тому недоліком проекту «Автосалон», де використано масиви структур, є необхідність під час кожного пере­запуску «вручну» вводити дані (відомості про автомобілі) з клавіатури.

Зручніше вводити вхідні дані з клавіатури лише один раз, а ви­користовувати їх багаторазово. Таку можливість надають файли даних.

З текстовими файлами даних ви вже знайомі. Наберемо в Блок­ноті текст, що складається з рядків:

"Мерседес", 2009, 3.0, 22000, "чорний", 3

"Тойота", 2010, 2.2, 19999, "сірий", 4 і т.д.

Збережемо його у файлі myavto.txt на диску d: чи іншому. Модифікуємо код кнопки «Створити», щоб ввести дані з файлу у масив структур так:

Dim z As String

Dim n As Integer

z = "d:\myavto.txt"

FileOpen(1, z, OpenMode.Input) 'VB

Open z For Input As #1 'VBA

n = 0 'Готуємо лічильник

Розділ 1. ОСНОВИ ПРОГРАМУВАННЯ 2