Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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




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

 

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

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

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

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

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

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

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

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

v Установите для всех элементов массива 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

 

 

 

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

 

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

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

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

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

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

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

В раздел описаний предыдущей программы добавим новый пользовательский тип (ТипИндекса), переменную этого типа (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 ТипИндекса

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

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

X% = Len(Student) ‘Длина записи

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

K% = LOF(1) \ x ‘Число записей

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

Cls ‘Очистка формы

For I% = 1 To K

Get #1, i, Student

Index(i).FIO = UCase(Trim(Student.Surname) + Trim(Student.myName))

Index(i).Number = i

Next i

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

For i = 1 To k - 1

For j% = i + 1 To k

If Index(i).FIO > Index(j).FIO Then

Index(0) = Index(j): Index(j) = Index(i): Index(i) = Index(0)

End If

Next j

Next i

Print vbCrLf, vbCrLf, vbCrLf, vbCrLf, vbCrLf ‘пропуск на форме 6-ти пустых строк

For i = 1 To k

Get #1, Index(i).Number, Student

Print " " & Trim(Student.Surname) & " " & Trim(Student.myName), _

Trim(Student.BirthDay), Trim(Student.Address)

Next i

Close #1

End Sub

 

· Задание на самостоятельную работу.

v Ввод начальных значений полей и запись их на диск осуществляется с клавиатуры через диалог InputBox.

v Все введенные записи должны быть отображены в списках массива управляющих элементов ComboBox.

v Для ввода новой записи используют список ComboBox, после чего она должна быть записана на диск.

v Предусмотреть поиск записей на диске по критерию, а также перемещение от записи к записи в начало и в конец.

v Осуществить вывод на форму отсортированных записей по ключу.

 




Поделиться с друзьями:


Дата добавления: 2014-12-23; Просмотров: 444; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.026 сек.