Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
хороший пример по созданию БД.doc
Скачиваний:
17
Добавлен:
13.05.2015
Размер:
1.02 Mб
Скачать

8. Пользовательские модули

В проекте используется два стандартных модуля, не связанных ни с какими формами. Один из них, с именем Declar, используется для объявления пользовательских типов, констант и переменных. Другой, с именем Sorting, содержит пользовательские процедуры сортировки данных различных типов.

Сначала в проект нужно добавить новый стандартный модуль командой Project / Add Module и дать ему имя, затем ввести программный код.

Приведем программный код модуля Decl.

‘ Подключение библиотек ввода и вывода для работы с файлами

Imports System.IO

Imports System.Text

‘ создание нового пространства имен для

‘ возможности подключения модуля к формам проекта

Namespace Decl

Module Declar

‘ Объявление пользовательского типа,

‘ описывающего структуру записи для

‘ входных данных – информации о студенте

Public Class TStud

Public Kurs As Byte ' курс

Public Group As Byte ' номер группы

Public FIO As String ' фамилия, имя и отчество

Public Spec As Integer' учетный номер специальности

Public DataR As Date ' дата рождения

Public Pol As Byte ' пол

Public Kol As Byte ' количество экзаменов

Public M(4) As Byte ' полученные оценки

Public len As Integer = 1 + 1 + 40 + 4 + 20 + 1 + 1 + 5

' размер переменной

Public Sub writeToFile(ByVal ff As FileStream)

Dim writer As BinaryWriter = New BinaryWriter(ff)

Dim tempstr As String

If FIO.Length > 20 Then

FIO = Left(FIO, 20)

Else

tempstr = New String(" ", 20 - FIO.Length)

FIO = FIO + tempstr

End If

writer.Write(Kurs)

writer.Write(Group)

Dim temp() As Byte = _

UnicodeEncoding.Unicode.GetBytes(FIO)

writer.Write(temp)

writer.Write(Spec)

temp = _

UnicodeEncoding.Unicode.GetBytes(DataR.ToString("dd.MM.yyyy"))

writer.Write(temp)

writer.Write(Pol)

writer.Write(Kol)

writer.Write(M)

End Sub

Public Sub writeToFile(ByVal ff As FileStream, _

ByVal i As Integer)

ff.Seek((i - 1) * len, SeekOrigin.Begin)

writeToFile(ff)

End Sub

Public Sub ReadFromFile(ByVal ff As FileStream, _

ByVal i As Integer)

ff.Seek((i - 1) * len, SeekOrigin.Begin)

Dim reader As BinaryReader = New BinaryReader(ff)

Dim temp() As Byte

Kurs = reader.ReadByte()

Group = reader.ReadByte()

temp = reader.ReadBytes(40)

FIO = UnicodeEncoding.Unicode.GetString(temp, 0, 40)

Spec = reader.ReadInt32()

temp = reader.ReadBytes(20)

DataR = _

CType(UnicodeEncoding.Unicode.GetString(temp, 0, 20), Date)

Pol = reader.ReadByte()

Kol = reader.ReadByte()

M = reader.ReadBytes(5)

End Sub

End Class

' Объявление пользовательского типа,

' описывающего структуру записи для

' входных данных справочника – информации о специальности

Public Class TSpec

Public Code As Integer ' учетный номер специальности

Public Number As String = New String(" ", 6)

' шестизначный код специальности

Public Name As String = New String(" ", 100)

' наименование специальности

Public len As Integer = 4 + 7 + 200 ' размер переменной

Public Sub writeToFile(ByVal ff As FileStream)

Dim writer As BinaryWriter = New BinaryWriter(ff)

Dim tempstr As String

If Number.Length > 6 Then

Number = Left(Number, 6)

Else

tempstr = New String(" ", 6 - Number.Length)

Number = Number + tempstr

End If

If Name.Length > 100 Then

Name = Left(Name, 100)

Else

tempstr = New String(" ", 100 - Name.Length)

Name = Name + tempstr

End If

Dim temp() As Byte = _

UnicodeEncoding.Unicode.GetBytes(Number)

writer.Write(Code)

writer.Write(temp)

temp = UnicodeEncoding.Unicode.GetBytes(Name)

writer.Write(temp)

End Sub

Public Sub writeToFile(ByVal ff As FileStream, _

ByVal i As Integer)

ff.Seek((i - 1) * len, SeekOrigin.Begin)

writeToFile(ff)

End Sub

Public Sub ReadFromFile(ByVal ff As FileStream, _

ByVal i As Integer)

ff.Seek((i - 1) * len, SeekOrigin.Begin)

Dim reader As BinaryReader = New BinaryReader(ff)

Dim temp() As Byte

Code = reader.ReadInt32()

temp = reader.ReadBytes(12)

Number = UnicodeEncoding.Unicode.GetString(temp, 0, 12)

temp = reader.ReadBytes(200)

Name = UnicodeEncoding.Unicode.GetString(temp, 0, 200)

End Sub

End Class

' Объявление пользовательского типа,

' описывающего структуру записи

' для вычисления среднего балла студента

Public Class TBall

Public Kurs As Byte ' курс

Public Group As Byte ' номер группы

Public FIO As String = New String(" ", 20)

Public Sb As Single ' средний балл

Public len As Integer = 1 + 1 + 40 + 4 ' размер

‘ переменной

Public Sub writeToFile(ByVal ff As FileStream)

Dim writer As BinaryWriter = New BinaryWriter(ff)

Dim tempstr As String

If FIO.Length > 20 Then

FIO = Left(FIO, 20)

Else

tempstr = New String(" ", 20 - FIO.Length)

FIO = FIO + tempstr

End If

Dim temp() As Byte = _

UnicodeEncoding.Unicode.GetBytes(FIO)

writer.Write(Kurs)

writer.Write(Group)

writer.Write(temp)

writer.Write(Sb)

End Sub

Public Sub writeToFile(ByVal ff As FileStream, _

ByVal i As Integer)

ff.Seek((i - 1) * len, SeekOrigin.Begin)

writeToFile(ff)

End Sub

Public Sub ReadFromFile(ByVal ff As FileStream, _

ByVal i As Integer)

ff.Seek((i - 1) * len, SeekOrigin.Begin)

Dim reader As BinaryReader = New BinaryReader(ff)

Kurs = reader.ReadByte()

Group = reader.ReadByte()

Dim temp() As Byte = reader.ReadBytes(40)

FIO = UnicodeEncoding.Unicode.GetString(temp, 0, 40)

Sb = reader.ReadSingle()

End Sub

End Class

' Объявление констант и переменных,

' используемых в модулях форм,

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

Public Const Nmax As Integer = 100

Public Const PathUntitled As String = "с:\untitled.dan"

Public Const PathTemp As String = "c:\$$$$.tmp"

Public Path As String

Public PathSpec As String

Public Path1 As String

Public Path2 As String

Public FName As String

Public richName As String

Public f1 As FileStream

Public F2 As FileStream

Public F3 As FileStream

Public F4 As Integer

Public F1_sp As FileStream

Public N As Integer

Public NSpec As Integer

Public Pos As Integer

Public Ind(Nmax) As Integer

Public Del(Nmax) As Integer

Public Button As MsgBoxResult

‘ функция, которая закрывает все открытые рабочие файлы

Public Sub CloseAllFiles()

If Not (f1 Is Nothing) Then f1.Close()

If Not (F1_sp Is Nothing) Then F1_sp.Close()

If Not (F2 Is Nothing) Then F2.Close()

If Not (F3 Is Nothing) Then F3.Close()

End Sub

End Module

End Namespace

После описания пользовательского модуля Declar необходимо изменить функцию обработки события выбора пункта меню «Выход». Измененная функция имеет вид:

Private Sub mnuFileExitItem_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles mnuFileExitItem.Click

If (vbYes =MsgBox("Действительно хотите выйти?",vbYesNo)) Then

Decl.CloseAllFiles()

End

End If

End Sub