Примеры решения задач

Пример 1. Разработать приложение для работы с типизированным файлом целых чисел. Предусмотреть создание файла двумя способами: с помощью ввода чисел с клавиатуры и чтения чисел из заранее созданного текстового файла. Вывести содержимое файла в окно списка ListBox. Для задания имени файла использовать компоненты SaveFileDialog и OpenFileDialog. Создать меню для работы с файлом, используя компоненту MenuStrip.

Разработать модуль, в который поместить следующие подпрограммы работы с файлом:

1. Функция, которая проверяет, составляют ли числа файла арифметическую прогрессию. Если составляют, функция возвращает TRUE, иначе функция возвращает FALSE.

2. Процедура редактирования файл: каждое четное число возводится в квадрат.

3. Процедура добавления несколько чисел в конец файла.

4. Процедура удаления из файла всех чисел, равных нулю.

Public Class Form1

Public fname As String

Private Sub ВыходToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ВыходToolStripMenuItem.Click

End

End Sub

Private Sub СоздатьToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles СоздатьToolStripMenuItem.Click

SaveFileDialog1.ShowDialog()

fname = SaveFileDialog1.FileName

sozd(fname)

End Sub

Private Sub ОткрытьToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ОткрытьToolStripMenuItem.Click

OpenFileDialog1.ShowDialog()

fname = OpenFileDialog1.FileName

prosmotr(fname, ListBox1)

End Sub

Private Sub РедактироватьToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles РедактироватьToolStripMenuItem.Click

If fname = "" Then

OpenFileDialog1.ShowDialog()

fname = OpenFileDialog1.FileName

End If

redakt(fname)

prosmotr(fname, ListBox2)

End Sub

Private Sub УдалениеToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles УдалениеToolStripMenuItem.Click

If fname = "" Then

OpenFileDialog1.ShowDialog()

fname = OpenFileDialog1.FileName

End If

udal(fname)

prosmotr(fname, ListBox2)

End Sub

Private Sub ПроверкаToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ПроверкаToolStripMenuItem.Click

If fname = "" Then

OpenFileDialog1.ShowDialog()

fname = OpenFileDialog1.FileName

End If

If proverka(fname) = True Then

MsgBox("Числа в файле составляют арифметическую прогрессию")

Else

MsgBox("Числа в файле не составляют арифметическую прогрессию")

End If

End Sub

Private Sub СоздатьТекстToolStripMenuItem1_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItem1.Click

Dim fname1 As String

OpenFileDialog1.ShowDialog()

fname1 = OpenFileDialog1.FileName

SaveFileDialog1.ShowDialog()

fname = SaveFileDialog1.FileName

sozd_iz_text(fname, fname1)

End Sub

End Class

Модуль с подпрограммами обработки файла

Module Module1

Public Sub sozd(ByVal fn As String)

'Процедура создания файла целых чисел.Числа вводятся с клавиатуры.

'fn - входной параметр, имя физического файла, который будет создан.

Dim i, n, a As Integer

FileOpen(1, fn, OpenMode.Random,,, Len(a))

n = Val(InputBox("введите количество чисел"))

For i = 1 To n

a = Val(InputBox("Введите число"))

FilePut(1, a)

Next

FileClose(1)

End Sub

Public Sub sozd_iz_text(ByVal fn As String, ByVal fn1 As String)

'Процедура создания файла целых чисел. Числа вводятся из текстового файла.

'fn - входной параметр, имя физического файла, который будет создан.

'fn1 - входной параметр, имя физического текстового файла, из которого читаются числа.

Dim i, n, a As Integer

FileOpen(1, fn, OpenMode.Random,,, Len(a))

FileOpen(2, fn1, OpenMode.Input)

Do Until EOF(2)

a = Val(LineInput(2))

FilePut(1, a)

Loop

FileClose(1, 2)

End Sub

Public Sub prosmotr(ByVal fn As String, ByRef list As ListBox)

'Процедура вывода содержимого файла целых чисел в окно списка

'fn - входной параметр, имя физического файла, содержимое которого будет выведено.

'list - имя окна списка, в который будет осуществлен вывод.

Dim i, n, a As Integer

FileOpen(1, fn, OpenMode.Random,,, Len(a))

n = LOF(1) \ Len(a)

For i = 1 To n

FileGet(1, a)

list.Items.Add(Str(a))

Next

FileClose(1)

End Sub

Public Sub redakt(ByVal fn As String)

'Процедура редактирует файл: каждое четное число возводит в квадрат.

'fn - входной параметр, имя физического файла, который будет изменен.

Dim i, n, a As Integer

FileOpen(1, fn, OpenMode.Random,,, Len(a))

n = LOF(1) \ Len(a)

For i = 1 To n

FileGet(1, a, i)

If a Mod 2 = 0 Then

a = a * a

FilePut(1, a, i)

End If

Next

FileClose(1)

End Sub

Public Sub dobav(ByVal fn As String)

'Процедура добавляет несколько чисел в конец файла.

'fn - входной параметр, имя физического файла, который будет изменен.

Dim i, n, a, k As Integer

FileOpen(1, fn, OpenMode.Random,,, Len(a))

n = LOF(1) \ Len(a)

k = Val(InputBox("введите количество добавляемых чисел"))

For i = 1 To k

a = Val(InputBox("Введите число"))

FilePut(1, a, n + i)

Next

FileClose(1)

End Sub

Public Sub udal(ByVal fn As String)

'Процедура удаляет из файла все числа равные нулю.

'fn - входной параметр, имя физического файла, который будет изменен.

Dim i, n, a As Integer

Dim fn1 As String

FileOpen(1, fn, OpenMode.Random,,, Len(a))

n = LOF(1) \ Len(a)

fn1 = fn + "1"

FileOpen(2, fn1, OpenMode.Random,,, Len(a))

For i = 1 To n

FileGet(1, a)

If a <> 0 Then FilePut(2, a)

Next

FileClose(1, 2)

Kill(fn)

Rename(fn1, fn)

End Sub

Public Function proverka(ByVal fn As String) As Boolean

'Функция проверяет, составляют ли числа файла арифметическую прогрессию.

' Если составляют, функция возвращает TRUE. В противном случае функция возвращает FALSE.

'fn - входной параметр, имя физического файла.

Dim i, n, a, b, d As Integer

FileOpen(1, fn, OpenMode.Random,,, Len(a))

n = LOF(1) \ Len(a)

FileGet(1, a)

FileGet(1, b)

d = b - a

proverka = True

For i = 3 To n

a = b

FileGet(1, b)

If b - a <> d Then proverka = False

Next

FileClose(1)

End Function

End Module

Пример 2. Разработать приложение для работы с типизированным файлом структур, содержащих информацию о студентах. О каждом студенте известно: фамилия, группа, 3 оценки. Каждая структура имеет: процедуру ввода; функцию вычисления среднего балла; функцию формирования строки для вывода. Вывести содержимое файла в окно списка ListBox. Для задания имени файла использовать компоненты SaveFileDialog и OpenFileDialog. Создать меню для работы с файлом, используя компоненту MenuStrip.

Разработать модуль, в который поместить следующие подпрограммы работы с файлом:

1.Процедура сортировки студентов по фамилиям по алфавиту.

2.Процедура создания нового файла из студентов заданной группы, имеющих средний балл выше среднего по всем студентам. Группа передается в процедуру как параметр.

3.Процедура редактирования файла. Редактировать данные студента, заданного фамилией. Фамилию ввести в основной программе и передать в процедуру как параметр.

Public Class Form1

Dim fn, fn2 As String

Private Sub ВыходToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ВыходToolStripMenuItem.Click

End

End Sub

Private Sub ЗаданиеСКлавиатурыToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ЗаданиеСКлавиатурыToolStripMenuItem.Click

'Исходные данные вводятся в файл пользователем с клавиатуры

SaveFileDialog1.ShowDialog()

fn = SaveFileDialog1.FileName

Создание1(fn)

End Sub

Private Sub ПечатьФайлаToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ПечатьФайлаToolStripMenuItem.Click

If fn = "" Then

OpenFileDialog1.ShowDialog()

fn = OpenFileDialog1.FileName

End If

Печать(fn, ListBox1)

End Sub

Private Sub СортировкаToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles СортировкаToolStripMenuItem.Click

'Сортировка файла по фамилиям

If fn = "" Then

OpenFileDialog1.ShowDialog()

fn = OpenFileDialog1.FileName

End If

Отсортировать(fn)

Печать(fn, ListBox2)

End Sub

Private Sub РедактированиеToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles РедактированиеToolStripMenuItem.Click

'Редактирование данных, записанных в файл

Dim familia as string

Familia=inputbox(“введите фамилию для редактирования”)

If fn = "" Then

OpenFileDialog1.ShowDialog()

fn = OpenFileDialog1.FileName

End If

Корректировка(fn,familia)

End Sub

Private Sub НовыйФайлToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles НовыйФайлToolStripMenuItem.Click

'Запись в новый файл студентов заданной группы, средний балл которых выше общего среднего балла

Dim gruppa, fn1 As String

If fn = "" Then

OpenFileDialog1.ShowDialog()

fn = OpenFileDialog1.FileName

End If

MsgBox("Задайте имя файла студентов заданной группы")

SaveFileDialog1.ShowDialog()

fn1 = SaveFileDialog1.FileName

gruppa = InputBox("Введите номер группы")

СрБалл(fn, fn1, gruppa)

Печать(fn1, ListBox2)

End Sub

End Class

Модуль с подпрограммами обработки файла

Module Module1

Public Structure Студент

Public Фамилия As String

Public Группа As String

Public Оценки() As Byte

Public Sub Ввод()

Dim j As Integer

Фамилия= InputBox("Фамилия студента")

Группа= InputBox("Группа студента")

ReDim st.Оценки(2)

For j = 0 To 2

st.Оценки(j) = Val(InputBox("Оценка " + Str(j + 1) + "-я " +студента"))

Next

End Sub

Public Function СреднийБалл() As Single

Dim sum, i As Byte

sum = 0

For i = 0 To 2

sum = sum + Оценки(i)

Next

СреднийБалл = sum / 3

End Function

Public Function Строка() As String

Dim i As Integer

Строка = LSet(Фамилия, 20) + LSet(Группа, 10)

For i = 0 To 2

Строка = Строка + Str(Оценки(i)) + vbTab

Next

End Function

End Structure

Public st As Студент

Public Sub Создание1(ByVal fn As String)

Dim n, i, j As Integer

FileOpen(1, fn, OpenMode.Random,,, 50)

n = Val(InputBox("Количество студентов"))

For i = 1 To n

St.vvod()

FilePut(1, st)

Next

FileClose()

End Sub

Public Function Ideal(ByRef s As String) As String

'Функция удаляет точки в строке, заменяя их пробелами, а также удаляет между словами

' лишние пробелы, оставляя по одному из них

s = Replace(s, ".", " ")

s = Trim(s)

Do While InStr(s, " ") <> 0

s = Replace(s, " ", " ")

Loop

Return s

End Function

Public Sub Печать(ByVal fn As String, ByRef lst As ListBox)

lst.Items.Clear()

FileOpen(1, fn, OpenMode.Random,,, 50)

Do Until EOF(1)

FileGet(1, st)

lst.Items.Add(st.Строка)

Loop

FileClose()

End Sub

Public Sub Отсортировать(ByVal fn As String)

Dim i, j, n As Integer

Dim st1, st2 As Студент

FileOpen(1, fn, OpenMode.Random,,, 50)

n = LOF(1) \ 50 + 1

MsgBox(n)

For i = 1 To n - 1

For j = 1 To n - i

FileGet(1, st1, j)

FileGet(1, st2, j + 1)

If st1.Фамилия > st2.Фамилия Then

FilePut(1, st2, j)

FilePut(1, st1, j + 1)

End If

Next

Next

FileClose()

End Sub

Public Sub Корректировка(ByVal fn As String,byval familia as string)

Dim n, i, j As Integer

FileOpen(1, fn, OpenMode.Random,,, 50)

n = LOF(1) \ 50 + 1

For i = 1 To n

FileGet(1, st, i)

If st.Фамилия =familia then

st.Фамилия = InputBox("Фамилия " + Str(i) + "-го студента", "", st.Фамилия)

st.Группа = InputBox("Группа " + Str(i) + "-го студента", "", st.Группа)

For j = 0 To 2

st.Оценки(j) = Val(InputBox("Оценка " + Str(j + 1) + "-я " + Str(i) + "-го студента", " ", Str(st.Оценки(j))))

end if

Next

FilePut(1, st, i)

Next

FileClose()

End Sub

Public Sub СрБалл(ByVal fn As String, ByVal fn1 As String, ByVal gruppa As String)

Dim srball As Single, n As Integer

srball = 0

FileOpen(1, fn, OpenMode.Random,,, 50)

n = LOF(1) \ 50 + 1

Do Until EOF(1)

FileGet(1, st)

srball = srball + st.СреднийБалл

Loop

FileClose()

srball = srball / n

FileOpen(1, fn, OpenMode.Random,,, 50)

FileOpen(2, fn1, OpenMode.Random,,, 50)

Do Until EOF(1)

FileGet(1, st)

If st.Группа = gruppa And st.СреднийБалл > srball Then

FilePut(2, st)

End If

Loop

FileClose()

End Sub

End Module




Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: