Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Практическая часть. Разработать простейшую базу данных с помощью файла произвольного дос­тупа



Постановказадачи.

Разработать простейшую базу данных с помощью файла произвольного дос­тупа. Каждая запись включает в себя фамилию, имя, дату рождения, инфор­мацию о стипендии и адрес студента, который отображаются в массиве объектов Combo1. Элементы интерфейса позволяют перемещаться от записи к записи, осуществлять быстрый переход назад (на последнюю запись) и вперед (на первую запись). Кроме этого предусмотрены возможности:

ввода данных через диалог InputBox;

добавление записи в список элементов ComboBox;

удаление записи из списка ComboBox;

удаление всех записей из списка ComboBox;

записать все записи из списка ComboBox в файл Stud.dat;

чтения записей из файла Stud.dat;

поиск записей по критерию (список фамилий из диапазона первых букв от “К” до “Ч”) и занесение их в список ComboBox.

Установите для всех элементов массива ComboBox свойство Combo1.Style=0

Код программы.

Private Type Person

Surname As String * 15 'Фамилия

myName As String * 15 'Имя

BirthDay As Date 'Дата рождения = 8 байт

Stip As Boolean 'Стипендия = 2 байта

Address As String * 40 'Дополнительные данные

End Type

Dim Student As Person, k As Integer

Private Sub Ввод_Click()

Dim List As String

K = 0 ‘Счетчик записей

Do ‘Запускаем бесконечный цикл формирования записей

For j% = 0 To 4 ‘j - номер индекса Combo1

Select Case j

Case 0

List = "фамилий"

Case 1

List = "имен"

Case 2

List = "дат рождения (27.12.88)"

Case 3

List = "стипендий (1-да,0-нет)"

Case 4

List = "адресов"

End Select

S$ = InputBox("Введите очередное значение:", "Ввод данных в список " & List)

IF j = 0 And S = "" Then Exit Do

Combo1(j).AddItem S

Next j

k = k + 1

Loop Until False

For j = 0 To 4

Combo1(j).ListIndex = 0

‘Установить указатель в каждом из элементов массива Combo1 на первую запись

Next j

End Sub

Private Sub Добавить_Click()

For j% = 0 To 4

Combo1(j).AddItem Combo1(j).Text

Combo1(j).ListIndex = Combo1(j).TopIndex

‘Добавляем новую запись в качестве элемента списка

Next j ‘ и устанавливаем указатель на начало списка

End Sub

Private Sub Удалить_Click()

k% = Combo1(0).ListCount

IF k > 0 Then

For j% = 0 To 4

Combo1(j).RemoveItem Combo1(j).ListIndex

‘Удалить подсвеченную запись во всех полях массива Combo1

Next j

End IF

k = Combo1(0).ListCount

If k > 0 Then

For j = 0 To 4

Combo1(j).ListIndex = 0

Next j

End If

End Sub

Private Sub В_начало_Click()

For j% = 0 To 4

Combo1(j).ListIndex = 0

Next j

End Sub

Private Sub В_конец_Click()

k% = Combo1(0).ListCount

For j% = 0 To 4

Combo1(j).ListIndex = k - 1

Next j

End Sub

Private Sub Назад_Click()

If Combo1(0).ListIndex > 0 Then

For j% = 0 To 4

Combo1(j).ListIndex = Combo1(j).ListIndex - 1

Next j

End If

End Sub

Private Sub Вперед_Click()

k% = Combo1(0).ListCount

If Combo1(0).ListIndex < k - 1 Then

For j% = 0 To 4

Combo1(j).ListIndex = Combo1(j).ListIndex + 1

Next j

End If

End Sub

Private Sub УдалитьВсе_Click()

k% = Combo1(0).ListCount

For j% = 0 To 4

Combo1(j).ListIndex = 0

Next j

Do

For j = 0 To 4

Combo1(j).RemoveItem 0

Next j

k = Combo1(0).ListCount

Loop Until k = 0

End Sub

Private Sub Записать_Click()

X% = Len(Student)

'Если вновь создаешь тот же файл, но меньшего размера, он не записывается

'Если вновь создаешь тот же файл большего размера, то будет все в порядке

Kill "C:\Stud.dat" 'Сначала уничтожим старый файл

Open "C:\Stud.dat" For Random As #1 Len = X

K% = Combo1(0).ListCount ‘Определяем количество записей в Combo1

For I% = 1 To K

With Student

.Surname = Combo1(0).List(i - 1)

.myName = Combo1(1).List(i - 1)

.BirthDay = CDate(Combo1(2).List(i - 1))

.Stip = CBool(Combo1(3).List(i - 1))

.Address = Combo1(4).List(i - 1)

End With

Put #1, i, Student

Next i

Close #1

End Sub

Private Sub ЧитатьФайл_Click()

X% = Len(Student)

Open "C:\Stud.dat" For Random As #1 Len = X

K% = LOF(1) \ X

For I% = 1 To K

Get #1, i, Student

Combo1(0).AddItem Student.Surname

Combo1(1).AddItem Student.myName

Combo1(2).AddItem Student.BirthDay

Combo1(3).AddItem Student.Stip

Combo1(4).AddItem Student.Address

Next i

Close #1

For j% = 0 To 4

Combo1(j).ListIndex = 0

Next j

End Sub

Private Sub Поиск_Click()

X% = Len(Student)

Open "C:\Stud.dat" For Random As #1 Len = x

K% = LOF(1) \ x

For I% = 1 To K

Get #1, i, Student

If Student.Surname > "К" And Student.Surname < "Ч" Then

Combo1(0).AddItem Student.Surname

Combo1(1).AddItem Student.myName

Combo1(2).AddItem Student.BirthDay

Combo1(3).AddItem Student.Stip

Combo1(4).AddItem Student.Address

End IF

Next i

Close #1

For j% = 0 To 4

Combo1(j).ListIndex = 0

Next j

End Sub

Private Sub Выход_Click()

End ‘Выход

End Sub

Индексирование записей

Заполнение базы данных (в виде файлов с произвольным доступом) производится чаще всего стихийно (беспорядочно). Отыскать какую-либо запись при большом их количестве бывает сложно. Очевидно, для удобства работы с файлами их как-то нужно упорядочить. Самый распространенный способ – переставить записи файла так, чтобы значения какого-нибудь поля были расположены в алфавитном (лексикографическом) порядке, а если значение поля числовое – в порядке возрастания или убывания. Такой способ упорядочивания называется сортировкой файла. А выбранное для этой цели поле называют ключом сортировки.

Какое поле следует выбрать в качестве ключа? Поле Фамилия может быть им? Очевидно, нет, так как студенты могут носить одинаковые фамилия. Тогда можно взять объединение полей: Фамилия и Имя. Но лучшим решением проблемы является введение еще одного специального поля, которое называют идентификатором записи – это число, которое однозначно определяет запись (счетчик).

Пусть все же у нас ключом сортировки будут два поля: Фамилия и Имя. Для того, чтобы представить записи файла в упорядоченном виде, вместо сортировки всего файла (а это процесс на диске довольно длительный) удобнее использовать следующий алгоритм:

создать в памяти так называемый индекс – множество коротких записей, каждая из которых состоит из Ключа и НомераДлиннойЗаписи. Длинная запись – полная запись файла, для которой создается индекс, состоящая из полей: Фамилия, Имя, Дата рождения, Стипендия, Адрес. Короткие записи – это Ключ и НомерДлиннойЗаписи).

Затем отсортировать этот индекс по возрастанию (убыванию) Ключа.

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

В раздел описаний предыдущей программы добавим новый пользовательский тип (ТипИндекса), переменную этого типа (Index) и процедуру сортировки записей, как показано ниже.

Дополнительный код программы.

Private Type Person

Surname As String * 15 'Фамилия

myName As String * 15 'Имя

BirthDay As Date 'Дата рождения = 8 байт

Stip As Boolean 'Стипендия = 2 байта

Address As String * 40 'Дополнительные данные

End Type

Private Type ТипИндекса

FIO As String * 40

Number As Integer

End Type

Dim Student As Person, k As Integer

Dim Index() As ТипИндекса

………… ……………. ……………. …………….





Дата публикования: 2014-12-28; Прочитано: 206 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.013 с)...