ТОП 10:

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



Як приклад розглядається програма, під час виконання якої можна ввести дані про господарські операції реалізації товарів - дата реалізації, покупець, найменування товару, ціна, кількість. Введені дані можна записати у файл довільного доступу 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  

 

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

Дані в рядку коду Коментар
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 Кінець процедури.

 

 

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 Кінець процедури.

 


 

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 Кінець процедури.

 


 

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 Кінець процедури.

 

5.4 Контрольні запитання

1. Як інформація розташовується в файлі довільного доступу?

2. Як розчинити файли довільного, послідовного доступу, бінарні файли?

3. Що таке номер вільного файлу (дескриптор файлу)?

4. Як визначити розмір файлу?

5. Які оператори використовується для зчитування – запису даних у файл довільного доступу?

6. Які відмінності є в роботі операторів Print і Write? При роботі з якими файлами вони використовуються?

7. Як виконати зчитування даних з файлу послідовного доступу?

8. У чому схожість між файлами довільного доступу і бінарними файлами?

 

Практичні завдання

Завдання №1

Розробити програму, яка дає змогу записати дані про нормативний залишок товарів у файл послідовного доступу. Запис файлу повинна вміщувати найменування товару і норматив залишку товару на складі. Запис і редагування даних слід здійснювати у одному вікні, після роботи з яким файл обов’язково слід зачинити. Інше вікно програми повинно використовуватися для того, щоб на основі введених найменування товару і його фактичного залишку можна було зробити висновок про відхилення залишку конкретного товару від нормативу. При завантаженні вікна програми треба відкрити файл з нормативними, прочитати усі записи файлу в масив змінних – записів.

 

Завдання №2

Розробити програму для запису в файл послідовного доступу дані про 8 співробітників підприємства: прізвище та ініціали, освіта, стаж роботи, оклад.

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

 

а) б)
с)

Рисунок 6.2 - Вікна програми

 

Завдання №3

Створити програму, яка призначена для зчитування даних з текстового файлу, що створено за допомогою програми “Блокнот”, виведення інформації у вікні програми. Користувач повинен мати змогу ввести маршрут пошуку та ім’я файлу.

 







Последнее изменение этой страницы: 2016-08-12; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.235.29.190 (0.011 с.)