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

5. Vb. Команди для роботи з файлами даних прямого доступу.

Команда відкривання доступу до файлу z має такий вигляд:

FileOpen(nf, z, OpenMode.Random,,, Len (zs)).

Тут Len (zs) — функція, що визначає довжину одного даного ти­пу структура. Три коми означають, що пропущено два необов’язкові параметри.

Команда записування даного zs у файл з номером nf у позицію, задану номером і, має такий вигляд: FilePut(nf, zs, і).

Команда записування даного zs у файл nf у наступну (поточну) позицію така: FilePut(nf, zs).

Команда зчитування г-го даного з файлу nf і присвоєння його змінній zs така: FileGet(nf, zs, і).

Команда зчитування поточного (наступного) даного з файлу nf і присвоєння його змінній zs така: FileGet(nf, zs).

Команда закривання файлу з номером nf така: FileClose (nf).

6. Проект «Моделювання бази даних про студентів». Предметну область про студентів опишемо таблицею «Студенти». Для моделю­вання застосуємо структуру (запис) з двома полями: прізвище сту­дента і рейтинговий бал з навчання. Розробимо проект відповідно до наступного технічного завдання (сценарію).

Проект має експлуатуватися у трьох режимах:

  1. створення масиву структур (записів) і файлу даних;

  2. використання файлів даних з метою введення даних в опера­тивну пам’ять і виведення даних на екран для перегляду;

  3. пошук потрібних даних, наприклад, виведення прізвищ сту­дентів, рейтинговий бал яких не менший за 71 (зі 100 можли­вих, зазвичай такі студенти отримують стипендію).

Режими вибиратимемо за допомогою трьох кнопок. Опишемо сценарії опрацювальників подій (коди кнопок).

Код першої кнопки має створити масив структур і файл даних. Для цього дані про k студентів у режимі діалогу з клавіатури введе­мо у масив структур. Ці дані запишемо у файл даних прямого дос­тупу для постійного зберігання.

Код другої кнопки моделюватиме ситуацію, коли масиву струк­тур у пам’яті немає. Використаємо створений файл даних. З файлу дані занесемо у масив структур і виконаємо такі дії: всі дані у ви­гляді таблиці занесемо у текстове поле «Поле з усіма даними», а прізвища —- у список «Список прізвищ».

Увага! Прізвища студентів у файлі непонумеровані. Передбачимо в коді їх автоматичну нумерацію. Для цього під час формування списку прізвищ заповнимо асоціативний масив з назвою т, який міститиме порядкові номери студентів (їх номери у файлі). Цей ма­сив буде використано для пошуку студентів за певним критерієм.

Рис. 2.5. Моделювання бази даних про студентів

Код третьої кнопки реалізує такі дії: очищає список; виконує пошук студентів у масиві структур за критерієм bal >= z1, де z1 — деяке число, яке користувач введе з клавіатури, наприклад, 71. Прізвища студентів, що відповідають критерію відбору, будуть до­дані до списку прізвищ, а відомості про студента (прізвище і бал) — занесені у два текстові поля, що є під кнопкою 3 (рис. 2.5, кнопка «Знайти дані»).

Паралельно зі створенням списку прізвищ створимо асоціатив­ний масив m з номерами відібраних студентів. Якщо об’єкт пошуку знайдено і дані відображено на екрані у списку і полях, то має з’я­витися вікно повідомлень з текстом «Далі», що створюватиме паузу до натискання кнопки ОК у вікні повідомлень. Натискання на кнопку ОК продовжить процес пошуку потрібних студентів. Якщо вікно не з’явиться, то це означає, що пошук закінчено.

Розглянемо сценарій для коду списку з відібраними прізвища­ми. Якщо у списку прізвищ вибрати деяке прізвище, то у двох текстових полях мають з’явитися додаткові відомості про вибраний об’єкт — прізвище студента і його бал. Під час створення цього коду буде застосовано асоціативний масив т.

Розглянемо необов’язковий фрагмент проекту. У групі елементів керування «Почати спочатку» поміщено три перемикачі та кнопку, за допомогою якої роботу з проектом можна розпочинати не із самого початку, а з будь-якого режиму експлуатації (третього, дру­гого, першого). Наприклад, якщо файл з даними уже є на диску, то його вдруге створювати не треба і натискати на першу кнопку не­має сенсу. Натискання на четверту кнопку відповідає натисканню:

  • на кнопку 3, якщо ввімкнено перемикач «файл уже є», тобто дані введені та відображені (цей перемикач перший на малюнку, його номер 1 у коді) — запуск третього режиму експлуатації;

  • на кнопку 2, якщо ввімкнено перемикач «файл є, показати дані» (він другий на малюнку, номер 2 у коді) — запуск другого режи­му експлуатації проекту;

  • на кнопку 1, якщо ввімкнено перемикач «файлу немає, створити» (перемикач на малюнку третій, номер 3 у коді) — це запуск пер­шого режиму.

Зауваження. Після запуску проекту фокус встановимо на кноп­ці 1 командою CommandButtonl.SetFocus. SetFocus — стандартний ме­тод (тут кнопки 1). Якщо фокус є на кнопці 1, то на неї натискати не обов’язково, достатньо натиснути на клавіатурі на клавішу Enter.

Кнопка 5 — резервна. Вона призначена для реалізації креатинних ідей.

Програмування. Розглянемо код проекту для середовища VBA. Для VB код легко можна адаптувати. Для цього треба застосувати лише відповідні команди для роботи з файлами і замінити назви деяких елементів керування і команд.

Зауваження 1. Всі коди цього та інших проектів для середовищ VB і VBA можна завантажити із сайту www.hlvnskv.lviv.ua з розді­лу «Файли проектів». Тому вручну коди можна не вводити.

Ми ж виконаємо такий алгоритм.

1. Спочатку у модуль Modulel помістимо опис типу запису:

Type student

s As String * 15

bal As Integer

End Type

2. У розділі Declarations оголосимо глобальні змінні:

Dim а(10) As student

Dim zstudent As student

Dim k As Integer 'Кількість записів у масиві

Dim k1 As Integer 'Кількість записів у файлі

Dim m(10) As Integer 'Асоціативний масив з номерами студентів

3. Запрограмуємо кнопку 1 для створення масиву записів і файлу.

Private Sub CommandButton1_Click()

Dim nf As Integer

Dim і As Integer nf = FreeFile

Open "d:\myfile1.dat" For Random As nf Len = Len(zstudent)

k = InputВох(“Введіть кількість записів”)

TextBox1.Text= k

For і = 1 To k 'Створюємо масив записів

With a(i)

.s = InputВох(''Введіть прізвище студента")

.bal = InputВох("Введіть бал студента")

End With

Put nf, і, a(i) 'Записуємо запис у файл

Next і

Close nf 'Закриваємо файл даних

End Sub

4. Запрограмуємо кнопку 2 для введення даних з файлу у масив за­писів і виведення даних у список і текстове поле на формі.

Private Sub CommandButton2_Click()

Dim u As String

Dim nf As Integer

Dim і As Integer

nf = FreeFile

ListBox1.Clear 'Очищуємо список

'Відкриваємо раніше створений файл

Open "d:\myfile1 .dat" For Random As nf Len = Len(zstudent)

k1 = FileLen("d:\myfile1 .dat") / Len(zstudent)

TextBox1.Text = k1

'Формуємо таблицю для текстового поля

u=””

For і = 1 To k1

Get nf, i, zstudent 'Вводимо дане з файлу у запис

а(і) = zstudent 'Створюємо масив записів заново

u = u + zstudent.s + " " + Chr(9) + Str(zstudent.bal) + vbCr

ListBox1.AddItem zstudent.s 'Створюємо список прізвищ

m(i) = і 'Цей масив зберігає номери студентів

Next і

TextBox3.Text = u 'Виводимо таблицю на екран

End Sub

5. Запрограмуємо кнопку 3 для пошуку прізвищ за критерієм bal >= z1, де значення z1, наприклад 71, буде введене користувачем.

Private Sub CommandButton3_Click()

Dim і As Integer, z1 As Integer, ml As Integer

ml = 0 'Це лічильник знайдених об'єктів

TextBox4.Text = TextBox5.Text = '"'

ListBox1.Clear

z1 = InputBox("Введіть критерій пошуку")

For i = 1 To k1

If a(i).bal >= z1 Then

TextBox4.Text = a(i).s: TextBox5.Text = a(i).bal

ListBox1.AddItem a(i).s 'Відібрані прізвища заносимо у список

ml = ml + 1

m(m1) = і 'Утворюємо масив з номерами відібраних студентів

MsgBox ("Далі")

End If

Next і

End Sub

6*. Запрограмуємо четверту кнопку для вибору режиму функціону­вання проекту.

Private Sub CommandButton4_Click()

If OptionButtonl.Value = True Then CommandButton3_Click

If OptionButton2.Value = True Then CommandButton2_Click

If OptionButton3.Value = True Then CommandButton1_Click

End Sub

7. Запрограмуємо метод списку для виведення у текстові поля до­даткових відомостей про особу, прізвище якої вибрали мишею у списку прізвищ.

Private Sub ListBox1_Click()

Dim z As Integer 'Допоміжна змінна

z = ListBox1.ListIndex + 1 'Далі застосовуємо масив m

TextBox4.Text = a(m(z)).s

TextBox5.Text = a(m(z)).bal

End Sub

8. Оскільки ми плануємо почати роботу з першої кнопки, то надає­мо їй фокус на етапі завантаження форми. Клацнувши на формі, введемо у заготовку команду CommandButtonl.SetFocus.

Private Sub UserForm_Initialize()

CommandButtonl.SetFocus

End Sub

Завдання 1. Реалізуйте проект і поекспериментуйте з ним. Завдання 2. Доповніть структуру ще двома полями з даними про студентів і виведіть ці додаткові дані на форму під час пошуку даних чи вибору прізвища у списку.

7. VB. Фрагмент коду проекту. Атрибут <VBFixedString(n)>. Розглянемо початок коду проекту і код першої кнопки (створення файлу даних прямого доступу) для середовища VB. Зверніть увагу, що відмінності від VBA є лише в описі структури і в командах для роботи з файлами.

Public Class Forml

Structure student 'Опис структури

<VBFixedString(15)> Dim s As String

Dim bal As Integer

End Structure

Dim a(10) As student 'Опис глобальних змінних

Dim zstudent As student

Dim k As Integer 'Кількість записів у масиві

Dim k1 As Integer 'Кількість записів у файлі

Private Sub Button 1_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles Buttonl.Click

Dim nf, k, і As Integer

Dim z As String

nf = FreeFile()

z = "d:\myfile10.dat"

FileOpen(nf, z, OpenMode.Random,,, Len(zstudent))

k = InputВох("Введіть кількість записів")

TextBox1.Text = k

For і = 1 To k 'Створюємо масив записів

With a(i)

.s = InputВох("Введіть прізвище студента")

.bal = lnputBox("Введіть бал студента")

End With

FilePut(nf, a(i), і) 'Записуємо структуру у файл

Next

FileClose(nf) 'Закриваємо файл даних

End Sub

End Class

Дані, які будуть заноситися у файл даних прямого доступу, по­винні мати фіксовану довжину. Тому поля типу String у структурі описують з атрибутом <VBFixedString(n)>, де п — деяке число, наприк­лад, так: <VBFixedString(15)> Dim s As String. Атрибут дає таку вказівку компілятору: на етапі записування даного у файл розглядати його як текстове дане довжиною п символів.

Задача 1. Визначіть обсяг даного типу Mystudents:

Structure Mystudents 'Це лише у VB

<VBFixedString(15)> Dim surname As String

<VBFixedString(10)> Dim name As String

Dim year As Integer

Dim reityng As Single

End Structure

Розв’язування. Обсяг даного — 15 + 10+ 4 + 4 = 33 байти.

Вправи

  1. Організуйте в коді кнопки 5 пошук студентів за двома параметрами, наприклад, за умовою z1<bal<z2 чи іншою.

  2. Модифікуйте проект для іншої предметної області: автомобілі, пар­фуми, продукти тощо.

  3. Виберіть предметну область, опишіть структури даних, розробіть власний сценарій опрацювання даних. Нарисуйте ескіз форми для проекту. Опишіть сценарій.

  4. Модифікуйте проект, ввівши до сценарію моделювання деякої пред­метної області власні творчі елементи. Можна вставити у проект нові елементи керування: медіаплеєр для відтворення звуку чи відео, ка­лендар для роботи з датами, власний браузер для пошуку відомостей тощо.