Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка_VB_Палагута.doc
Скачиваний:
2
Добавлен:
14.11.2019
Размер:
15.15 Mб
Скачать

Приклад виконання програми роботи з файлом

Як приклад розглядається програма, під час виконання якої можна ввести дані про господарські операції реалізації товарів - дата реалізації, покупець, найменування товару, ціна, кількість. Введені дані можна записати у файл довільного доступу realiz.doc. Форма програми вміщує кнопки для переходу до попереднього, наступного запису файлу. Коли переміщення неможливе - виконано перехід до початку або кінця файлу, видається відповідне повідомлення. Програма також дає змогу додати новий запис до файлу, знищити непотрібні записи файлу.

Рисунок 6.1 - Вид вікна програми для роботи з файлом довільного доступу

На етапі візуальної розробки програми слід створити об'єкти за описом.

Об’єкт

Властивість

Значення

Форма (Form)

Name

frmProgram

Caption

Програма - приклад

Font

Times New Roman, 12 п., напівжирний

Етикетка (Label)

Name

lblDate

Caption

Дата реалізації:

Етикетка (Label)

Name

lblPok

Caption

Покупець:

Етикетка (Label)

Name

lblTov

Caption

Найменування товару:

Етикетка (Label)

Name

lblC

Caption

Ціна:

Етикетка (Label)

Name

lblK

Caption

Кількість:

Текстове поле (TextBox)

Name

txtDate

Text

“_”

Текстове поле (TextBox)

Name

txtPok

Text

“_”

Текстове поле (TextBox)

Name

txtTov

Text

“_”

Текстове поле (TextBox)

Name

txtC

Text

“_”

Текстове поле (TextBox)

Name

txtK

Text

“_”

Командна кнопка (CommandButton)

Name

cmdNew

Caption

Новий запис

Командна кнопка (CommandButton)

Name

cmdNext

Caption

Наступний запис

Командна кнопка (CommandButton)

Name

cmdPrivious

Caption

Попередній запис

Командна кнопка (CommandButton)

Name

cmdDelete

Caption

Знищення запису

Командна кнопка (CommandButton)

Name

cmdFin

Caption

Завершення роботи

Далі слід у вікні модуля (команда меню Project - Add Module), оголосити новий тип даних:

Дані в рядку коду

Коментар

Type Zap

Date As String * 12

поле для дати реалізації

Pok As String * 20

поле для роботи з найменуванням покупця

Tov As String * 20

поле найменування товару

C As String * 10

поле ціни

K As String * 10

поле кількості

End Type

Програмний код повинен бути таким як у таблиці:

Дані в рядку коду

Коментар

1

2

Option Explicit

Dim Z As Zap

Оголошення змінних є обов'язковим

Змінна Z типу Zap буде використана для зчитування даних з файлу, запису інформації в файл

Dim LastRec As Long

Змінна - покажчик останнього запису файлу

Dim CurRec As Long

Змінна - покажчик поточного запису файлу

Dim NFile As Integer

Змінна для збереження номеру відчиненого файлу (дескриптору файлу)

Dim RZ As Long

Розмір файлу

Private Sub frmProgram _Load()

Процедура, яка виконується при завантаженні форми (подія Load)

RZ = Len(Z)

Значення змінної RZ буде дорівнювати розміру змінної - запису Z, значення отримано функцією Len()

NFile = FreeFile

Змінна Nfile отримує значення номеру вільного в дану мить файлу

Open "realiz.doc" For Random As NFile Len = RZ

Відчиняється файл realiz.doc, що міститься в поточній папці, у режимі довільного доступу (Random) як файл з номером Nfile і розміром запису RZ. Якщо файл не буде знайдено, система його створить і відкриє.

CurRec = 1

Покажчик поточного запису CurRec отримує значення 1.

LastRec = FileLen("realiz.doc") / RZ

Покажчик останнього запису LastRec отримує значення - розмір файлу "realiz.doc", що визначається за допомогою функції FileLen(), який буде поділено на довжину запису RZ.

If LastRec = 0 Then

Якщо номер останнього запису дорівнює 0, то

LastRec = 1

змінній LastRec привласнюється значення 1

End If

Кінець оператору If

ShowZ

Виклик процедури ShowZ для виведення у вікні вмісту поточного запису файлу.

End Sub

Кінець процедури.

1

2

Public Sub ShowZ()

Процедуру для зчитування запису з файлу і виведення даних у формі слід створити за допомогою команди меню Tools - Add Procedure.

Get #NFile, CurRec, Z

Оператором зчитується поточний запис CurRec файлу з номером NFile у змінну Z.

txtDate.Text = Trim(Z.Date)

Властивості Text текстового поля txtDate для роботи з датою привласнюється значення поля Date змінної Z. Функція Trim() знищує пробіли у кінці текстового рядка.

txtPok.Text = Trim(Z.Pok)

Властивості Text текстового поля txtPok для виведення, редагування найменування покупця привласнюється значення поля Pok змінної Z.

txtTov.Text = Trim(Z.Tov)

Властивості Text текстового поля txtTov для роботи з найменуванням товару привласнюється значення поля Tov змінної Z.

txtC.Text = Trim(Z.C)

Властивості Text текстового поля txtC для виведення, редагування ціни товару привласнюється значення поля C змінної Z.

txtK.Text = Trim(Z.K)

Властивості Text текстового поля txtK для роботи з кількістю товару привласнюється значення поля K змінної Z.

frmProgram.Caption = "Запис " + Str(CurRec) + " / " + Str(LastRec)

У заголовку вікна програми виводиться: Запис <номер поточного запису> / <загальна кількість записів у файлі>

End Sub

Кінець процедури.

Public Sub SaveZ()

Процедура буде виконувати запис даних у файл.

Z.Date = txtDate.Text

Полю Date змінної Z привласнюється значення властивості Text об'єкту txtDate, яке може бути введено, відредаговано.

Z.Pok = txtPok.Text

Полю Pok змінної Z привласнюється значення властивості Text об'єкту txtPok.

Z.Tov = txtTov.Text

Полю Tov змінної Z привласнюється значення властивості Text об'єкту txtTov.

Z.C = txtC.Text

Полю C змінної Z привласнюється значення властивості Text об'єкту txtC.

Z.K = txtK.Text

Полю K змінної Z привласнюється значення властивості Text об'єкту txtK.

Put #NFile, CurRec, Z

Запис у файл realiz.doc (файл з номером Nfile) у запис з номером CurRec умісту змінної Z.

End Sub

Кінець процедури.

1

2

Private Sub cmdNew_Click()

Процедуру буде виконано, якщо клацнути на кнопці Новий запис.

SaveZ

Виконання процедури SaveZ - збереження у файл поточного запису файлу.

LastRec = LastRec + 1

Покажчик останнього запису файлу LastRec збільшується на 1.

Z.Date = " "

Знищується вміст полів змінної - запису Z

Z.Pok = " "

Z.Tov = " "

Z.C = " "

Z.K = " "

Put #NFile, LastRec, Z

До файлу додається новий запис (запис з номером LastRec) зі змінної Z.

CurRec = LastRec

Покажчик поточного запису приймає значення LastRec.

ShowZ

Виконується процедура ShowZ - виведення вмісту поточного запису файлу у вікні програми.

End Sub

Кінець процедури.

Private Sub cmdNext_Click()

Процедуру буде виконано, якщо клацнути на кнопці Наступний запис.

If CurRec = LastRec Then

Якщо покажчик поточного запису CurRec дорівнює покажчику останнього запису LastRec, то

Beep

видається звуковий сигнал

MsgBox "Кiнець файлу!", vbOKOnly + vbExclamation

на екрані з'являється вікно повідомлення, що вже досягнуто кінця файлу (тобто перехід до наступного запису неможливий)

Else

інакше

SaveZ

виконується процедура SaveZ збереження даних, що введено або відредаговано у вікні програми, у поточному записі файлу

CurRec = CurRec + 1

покажчик поточного запису збільшується на одиницю

ShowZ

виконується процедура ShowZ зчитування запису CurRec з файлу і виведення інформації, що отримана, у вікні програми

End If

кінець оператору If.

txtDate.SetFocus

Текстове поле txtDate отримує фокус - поле стає активним, курсор буде розташовано в полі.

End Sub

Кінець процедури.

1

2

Private Sub cmdPrivious_Click()

Процедуру буде виконано, якщо клацнути на кнопці Попередній запис.

If CurRec = 1 Then

Якщо покажчик поточного запису CurRec дорівнює одиниці, то

Beep

виводиться звуковий сигнал

MsgBox "Початок файлу!", vbOKOnly + vbExclamation

на екрані з'являється вікно повідомлення, що вже досягнуто початку файлу, перехід до попереднього запису неможливий

Else

інакше

SaveZ

зберігається поточний запис у файлі за допомогою процедури SaveZ

CurRec = CurRec - 1

покажчик поточного запису зменшується на 1

ShowZ

виконується процедура ShowZ зчитування запису CurRec з файлу і виведення інформації, що отримана, у вікні програми

End If

кінець оператору If.

txtDate.SetFocus

Передача фокусу текстовому полю txtDate.

End Sub

Кінець процедури.

Private Sub cmdDelete_Click()

Процедуру буде виконано, якщо клацнути на кнопці Знищення запису.

Dim TmpNFile

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

Dim TmpZ As Zap

Оголошення змінної TmpZ типу Zap

Dim RecN As Long

Оголошення змінної RecN для роботи з номером запису файла realiz.doc.

Dim TmpRecN As Long

Оголошення змінної TmpRecN для роботи з номером запису тимчасового файлу

If MsgBox("Знищити запис?", vbYesNo) = vbNo Then

Якщо у вікні повідомлення обрано кнопку Нет, то

txtDate.SetFocus

Текстове поле txtDate отримує фокус.

Exit Sub

Процедура завершує свою роботу.

End If

Кінець оператору If.

If Dir("realiz.tmp") = "realiz.tmp" Then

Якщо у поточному каталозі знайдено тимчасовий файл realiz.tmp, то

Kill "realiz.tmp"

файл realiz.tmp знищується

End If

Кінець оператору If.

TmpNFile = FreeFile

Змінна TmpNFile отримує номер вільного файлу

Open "realiz.tmp" For Random As TmpNFile Len = RZ

Розчиняється тимчасовий файл як файл довільного доступу з номером файлу TmpNFile і довжиною запису RZ.

RecN = 1

Змінна RecN отримує значення 1

TmpRecN = 1

Змінна TmpRecN отримує значення 1

Do While RecN < LastRec + 1

Цикл діє доки RecN < LastRec + 1 (LastRec - номер останнього запису файлу realiz.doc)

If RecN <> CurRec Then

Якщо номер запису файлу realiz.tmp не дорівнює номеру поточного запису файлу realiz.doc (запис, що знищується), то

Get #NFile, RecN, TmpZ

у змінну TmpZ зчитується запис файлу realiz.doc з номером RecN

Put #TmpNFile, TmpRecN, TmpZ

записується запис з номером TmpRecN у файл realiz.tmp

TmpRecN = TmpRecN + 1

змінна TmpRecN збільшується на 1

End If

Кінець оператору If.

RecN = + 1

Змінна RecN збільшується на 1 щоразу крім ітерації циклу коли обробляється запис з номером CurRec - той, що слід знищити.

Loop

Кінець оператору циклу.

Close NFile

Зачиняється файл realiz.doc.

Kill "realiz.doc"

Знищується файл realiz.doc.

Close TmpNFile

Зачиняється файл realiz.tmp.

Name "realiz.tmp" As "realiz.doc"

Перейменовується файл realiz.tmp у файл realiz.doc.

NFile = FreeFile

Визначається номер вільного файлу

Open "realiz.doc" For Random As NFile Len = RZ

Розчиняється файл realiz.doc, що міститься в папці диску С:, у режимі довільного доступу (Random) як файл з номером Nfile і розміром запису RZ. Якщо файл не буде знайдено, система його створить і розчинить.

LastRec = LastRec - 1

Зменшується значення покажчика останнього запису файлу LastRec оскільки один запис знищено.

If LastRec = 0 Then LastRec = 1

Якщо LastRec = 0 (у файлі не залишилось записів), то LastRec привласнюється значення 1.

If CurRec > LastRec Then

Якщо покажчик поточного запису файлу виходить за межи файлу, то

CurRec = LastRec

йому привласнюється значення LastRec

End If

Кінець оператору If.

ShowZ

Виконується процедура ShowZ зчитування запису CurRec з файлу і виведення інформації, що отримана, у вікні програми

txtDate.SetFocus

Передача фокусу текстовому полю txtDate.

End Sub

Кінець процедури.

Private Sub cmdFin_Click()

Процедуру буде виконано, якщо клацнути на кнопці Завершення роботи.

SaveZ

Збереження даних у поточному записі файлу.

Close #NFile

Зачинення файлу realiz.doc.

End

Кінець програми.

End Sub

Кінець процедури.