Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MET_VB.DOC
Скачиваний:
10
Добавлен:
21.11.2018
Размер:
282.11 Кб
Скачать

Примерные задачи для защиты лр7:

Решить одну из задач ЛР5 или ЛР6, используя при решении процедуры и функции.

Приложение к ЛР7 (Примеры оформления процедур и функций):

Подсчет суммы элементов в массиве:

Function Summa(Mas(), k As Integer) As Currency

Dim i As Integer, s As Variant

s = 0

For i = 1 To k

s = s + Mas(i)

Next i

Summa = s

End Function

Нахождение номера первого максимального элемента в массиве:

Function IndMax(Mas(), k As Integer) As Integer

Dim i As Integer, s As Integer

s = 1

For i = 2 To k

If Mas(i) > Mas(s) Then s = i

Next i

IndMax = s

End Function

Удаление j ого элемента из массива:

Sub SdvigElem(Mas(), j As Integer)

Dim i As Integer

For i = j To N - 1

Mas(i) = Mas(i + 1)

Next i

End Sub

Выделение из строки к ого слова:

Function Slovo(st As String, k As Integer) As String

Dim s As String, c As String

Dim i As Integer, nom As Integer

Dim L As Integer

st = st + " "

L = Len(st) ‘ кол-во символов в строке

s = "": nom = 0

For i = 1 To L

c = Mid(st, i, 1) iй символ строки

If c <> " " Then s = s + c

If c = " " And s <> "" Then

nom = nom + 1 ‘ номер текущего слова в строке

If nom = k Then Exit For

s = ""

End If

Next i

Slovo = s

End Function

Создание массивов из полей первых к - элементов списка:

Sub SozdMas(k As Integer)

Dim i As Integer

N = k

ReDim Firma(N), Kol(N), Cena(N), VR(N)

For i = 1 To N

s = List1.List(i - 1)

Firma(i) = Slovo(s, 1)

Cena(i) = Val(Slovo(s, 2))

Kol(i) = Val(Slovo(s, 3))

VR(i) = Cena(i) * Kol(i)

Next i

End Sub

Создание строки из i – х элементов массивов:

Function StrElem(i As Integer) As String

Dim s As String, L As Integer

L = Len(Firma(i))

s = " " + Firma(i) + Space(14 - L)

L = Len(Str(Kol(i)))

s = s + Str(Kol(i)) + Space(10 - L)

L = Len(Str(Cena(i)))

s = s + Str(Cena(i)) + Space(10 - L) + Str(VR(i))

StrElem = s

End Function

Создание списка из первых к - элементов массивов:

Sub SozdList(k As Integer)

Dim i As Integer

For i = 1 To k

List1.List(i - 1) = StrElem(i)

Next i

End Sub

Сортировка первых к - элементов массива:

Sub SortMas(Mas(), k As Integer)

Dim i As Integer, j As Integer, F As Integer

For i = 1 To k - 1

For j = i + 1 To k

F = 0

Select Case optUb

Case True: If Mas(i) < Mas(j) Then F = 1

Case False: If Mas(i) > Mas(j) Then F = 1

End Select

If F = 1 Then

Firma(0) = Firma(i): Firma(i) = Firma(j): Firma(j) = Firma(0)

Kol(0) = Kol(i): Kol(i) = Kol(j): Kol(j) = Kol(0)

Cena(0) = Cena(i): Cena(i) = Cena(j): Cena(j) = Cena(0)

VR(0) = VR(i): VR(i) = VR(j): VR(j) = VR(0)

End If

Next j, i

End Sub

Создание списка из элементов массива после его сортировки:

Sub SortList(Mas(), k As Integer)

Dim i As Integer

SortMas Mas, k

If optUb Then

lblSort.Caption = " Сортировка списка по убыванию"

Else

lblSort.Caption = " Сортировка списка по возрастанию"

End If

SozdList k

End Sub

Лабораторная работа №8.

Тема: «Работа с файлами»

Теоретические вопросы :

  1. Понятие файла.

  2. Процедуры открытия и закрытия файла.

  3. Запись данных в файл.

  4. Чтение данных из файла.

  5. Выбор имени файла для чтения с использованием элементов управления DriveListBox, DirListBox и FileListBox.

Задание на ЛР8 является логическим продолжением задания на ЛР7:

1). Первая форма проекта остается прежней (как в ЛР4 – ЛР7).

2). Во вторую форму проекта следует добавить две новые кнопки: «Чтение данных из файла» и «Запись в файл», предназначенных, соответственно, для ввода данных из файла и для записи их на диск. При этом кнопка «Чтение данных из файла» должна быть всегда доступна, а доступ к кнопке «Запись в файл» должен открываться после обработки данных.

3). Выбор имени файла для ввода данных следует оформить через группу элементов: DriveListBox, DirListBox и FileList Box, поместив их в элемент контейнер Frame (дать ему имя (свойство Name), например, frmFile). Работа этой группы должна быть синхронизирована:

Private Sub Drive1_Change()

Dir1.Path = Drive1.Drive

End Sub

Private Sub Dir1_Change()

File1.Path = Dir1.Path

End Sub

и контейнер должен становиться видимым лишь при выборе кнопки «Чтение данных из файла»:

Private Sub cmdReadFL_Click()

frmFile.Visible = True

End Sub

4). Данные из выбранного файла должны загружаться в список (см. ниже процедуру ReadFile) по двойному щелчку мыши на его имени (событие DblClick). При этом загрузка должна сопровождаться проверкой: является ли файл табличным. Если нет, то следует дать предупреждение, поместив его в MsgBox, и предложить выбрать другой файл. После этого контейнер frmFile должен стать вновь невидимым (frmFile.Visible = False):

Sub ReadFile(Name As String)

Dim i As Integer

nomFL = FreeFile

Open Name For Input As nomFL

i = 0

Do Until EOF(nomFL)

Line Input #nomFL, s

If Val(Slovo(s, 2)) * Val(Slovo(s, 3)) > 0 Then

If i = 0 Then List1.Clear

List1.List(i) = s

i = i + 1

End If

Loop

Close #nomFL

If i = 0 Then Name = ""

End Sub

Private Sub File1_DblClick()

NameFL = File1.Path + "\" + File1.FileName

ReadFile NameFL

If NameFL <> "" Then

SozdMas List1.ListCount

TextClear True

TextClear False

lblSred.Caption = " Средние значения :"

lblSum.Caption = " Кол-во данных = "

SortOptions False

cmdObrabotka.Enabled = True

cmdVvod.Caption = "&Ввод новых данных"

lblFile.Visible = True

lblFile.Caption = "Исходные данные из файла " + NameFL

Else

MsgBox "Нужен другой файл", vbOKOnly + vbCritical, "Файл не для этой таблицы !"

End If

cmdReadFL.Caption = "Чтение другого файла"

frmFile.Visible = False

End Sub

5). Вся обработка данных должна быть, как в ЛР7. Кроме этого должна быть предусмотрена возможность записи на диск результата обработки через выбор кнопки «Запись в файл» (см. ниже процедуру WriteFile). Выбор имени файла в этом случае должен быть оформлен через InputBox.

Sub WriteFile(Name As String)

Dim nomFL As Integer, i As Integer

Dim sk As Currency, sc As Currency, sv As Currency

nomFL = FreeFile

Open Name For Output As nomFL

Print #nomFL, " Firma Kol-vo Cena Viruchka "

Print #nomFL, "---------------------------------------------"

For i = 1 To N

Print #nomFL, List1.List(i - 1)

Next i

Print #nomFL, "---------------------------------------------"

If N > 0 Then sk = Summa(Kol, N) / N: sc = Summa(Cena, N) / N: sv = Summa(VR, N) / N

Print #nomFL, "Sred. znach. : "; sk; " "; sc; " "; sv

Print #nomFL, "Summa viruchki = "; Summa(VR, N)

Close #nomFL

End Sub

Private Sub cmdWriteFL_Click()

Dim NF As String

s = "или Cancel - отказ от записи"

If lblFile.Visible Then s = s + Endln + "(" + lblFile.Caption + ")"

NF = InputBox("Введите имя файла:" + Endln + s, " Запись в файл", NameFL)

If NF = "" Then Exit Sub

WriteFile NF

cmdWriteFL.Enabled = False

End Sub

6). Командные коды всех кнопок, как и в ЛР7, должны быть записаны через вызовы процедур и функций.

Остальные требования к кнопкам как в ЛР7.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]