- •Институт информационных систем управления
- •Кандидат экономических наук, доцент в.А. Машурцев
- •Введение.
- •Глава 1. Vb 6.0 – среда разработки приложений.
- •1.1. Окна среды vb.
- •1.2. Файловая структура проекта.
- •1.3. Визуальное конструирование приложения.
- •1.4. Основные свойства формы и задание их значений.
- •1.5. Добавление форм к проекту и удаление форм из проекта.
- •1.6. Основные элементы управления и их свойства.
- •1.6.1. Элемент Label.
- •1.6.2. Элемент TextBox. Элемент TextBox (текстовое окно) предназначен для ввода исходной
- •1.6.3. Элементы HscrollBar и VscrollBar.
- •1.6.4. Элемент CommandButton.
- •1.7. События и методы.
- •1.8. Включение изображений в интерфейс пользователя.
- •1.8.1. Элемент Image. Элемент управления Image предназначен в основном для нанесе-
- •1.8.2. Элемент PictureBox.
- •1.9. Сохранение проекта.
- •Глава 2. Данные vb.
- •2.1. Типы данных.
- •2.1.1. Типы числовых данных.
- •2.1.1.1. Целочисленные данные.
- •2.1.1.2. Вещественные данные.
- •2.1.2. Типы нечисловых данных.
- •2.2. Объявление переменных и констант.
- •2.3. Область видимости переменных и констант.
- •2.4. Совместимость и преобразование типов данных.
- •2.5. Ввод исходных данных и вывод результатов обработки.
- •2.5.1. Окно сообщений. Оператор и функция MsgBox.
- •2.6. Форматирование вывода чисел.
- •Глава 3. Алгоритмизация вычислительных процессов.
- •3.1. Алгоритм и его свойства.
- •3.2. Типы вычислительных процессов.
- •3.3. Операторы vb.
- •3.4. Логические выражения.
- •3.5. Управляющие конструкции.
- •3.5.1. Операторы ветвлений.
- •3.5.1.1. Условный оператор.
- •3.5.1.2. Оператор выбора.
- •3.5.2. Операторы циклов.
- •3.5.2.1. Регулярный цикл.
- •3.5.2.2. Итерационные циклы.
- •3.5.2.3. Цикл перечислимого типа.
- •3.5.3. Элементы выбора.
- •3.5.3.1. Элемент CheckBox.
- •3.5.3.2. Элемент OptionButton.
- •3.5.4. Элемент управления и функция Timer.
- •3.5.5. Дата и время.
- •3.5.6. Оператор DoEvents.
- •3.5.7. Объединение кнопок в группы.
- •3.5.7.1. Элемент Frame.
- •3.6. Списки.
- •3.6.1. Элемент ListBox.
- •3.6.2. Элемент ComboBox.
- •Глава 4. Массивы.
- •4.1. Одномерные массивы.
- •4.2. Двумерные массивы.
- •4.3. Статические и динамические массивы.
- •4.4. Функция Array.
- •4.5. Генератор случайных чисел.
- •4.6. Функции lBound и uBound.
- •4.7. Массивы элементов управления.
- •4.8. Сопоставление массивов и списков.
- •4.9. Элемент msFlexGrid.
- •4.10. Упорядочение строк элемента msFlexGrid.
- •Глава 5. Процедуры и функции полоьзователя.
- •5.1. Создание стандартного модуля в приложении.
- •5.2.2. Вызов процедуры на выполнение.
- •5.3. Функции пользователя.
- •Глава 6. Обработка текстовой информации.
- •6.1. Изменение регистра символов в тексте.
- •6.2. Поиск заданной подстроки в тексте.
- •6.3. Выборка части текста.
- •6.4. Замена символов в тексте.
- •6.5. Удаление лишних пробелов из строки текста.
- •6.6. Инвертирование строк.
- •6.7. Преобразование текстовых строк в числа и наоборот.
- •6.8. Определение длины текста.
- •Глава 7. Создание меню пользователя.
- •Глава 8. Пользовательский тип данных.
- •8.1. Записи.
- •8.2. Сложные структуры данных.
- •Глава 9. Файлы.
- •9.1. Файлы последовательного доступа.
- •9.1.1. Открытие файла последовательного доступа.
- •9.1.2. Запись информации в файл.
- •9.1.3. Чтение информации из файла.
- •9.1.4. Закрытие файла.
- •9.2. Файлы произвольного доступа.
- •9.2.1. Открытие файла произвольного доступа.
- •9.2.2. Запись информации в файл.
- •9.4. Операции с файлами в vb.
- •9.5. Файловые операторы и функции обработки данных.
- •9.6. Сравнительный пример работы с файлами.
- •Глава 10. Обработка бд Access в среде vb.
- •10.1. Создание бд Access в среде vb.
- •10.2. Использование технологии Data Access Objects (dao).
- •10.2.1. Элемент управления Data.
- •10.2.2. Свойство Recordset элемента Data.
- •10.2.3. Программное связывание элементов.
- •10.3. Технология ActiveX Data Objects (ado).
- •10.3.1. Подключение ado Data к источнику данных (бд).
- •10.3.2. Подключение ado Data к источнику записей.
- •10.3.3. Элемент управления DataGrid.
- •10.4. Объекты ado.
- •10.4.1. Объект Connection.
- •10.4.2. Объект RecordSet.
- •10.4.3. Перемещение по набору записей.
- •10.4.4. Обращение к отдельным полям записи.
- •10.4.5. Выполнение запросов к бд.
- •10.5. Пример обработки бд в рамках технологии ado.
- •Глава 11. Обмен данными между приложениями.
- •11.1. Экспорт данных из бд в текстовый файл.
- •11.2. Технология внедрения и связывания (ole).
- •11.3. Связывание и внедрение на этапе design.
- •11.3.1. Связывание на этапе проектирования. Сразу же после размещения на форме элемента ole появляется
- •11.3.2. Внедрение на этапе проектирования.
- •11.4. Связывание и внедрение объектов на этапе run.
- •11.4.1. Свойства ole-контейнера.
- •11.4.2. Методы ole-контейнера.
- •11.4.3. События, связанные с ole-контейнером.
- •11.4.5. Внедрение объекта на этапе run. Для внедрения объектов в vb-приложение используется метод CreateEmbed. Синтаксис оператора, использующего этот метод:
- •Глава 12. Графические средства vb 6.
- •12.1. Управление цветом.
- •12.2. Изображения в интерфейсе проекта.
- •12.2.1. Наложение изображения на этапе проектирования. Наложение изображения на форму.
- •Восстановление утраченных графических файлов.
- •Наложение изображения на элемент PictureBox.
- •Наложение изображения на элемент CommandButton.
- •12.2.2. Наложение изображений на этапе выполнения.
- •12.3. Использование анимированных изображений.
- •12.3.1. Визуализация анимированных gif-файлов.
- •12.3.2. Визуализация на форме клипов.
- •12.4. Рисунки на графических объектах.
- •12.4.1. Элемент Shape.
- •12.4.2. Элемент Line.
- •12.5. Графические методы.
- •12.5.1. Методы для работы с изображением точки.
- •12.5.2. Метод Line.
- •12.5.3. Метод Circle.
- •12.6. Использование графики для решения отдельных задач.
- •12.6.1. Визуализация процесса сортировки элементов массива.
- •12.6.2. Принадлежность точки заданной области.
- •Приложение 1. Типовые алгоритмы обработки чисел.
- •Приложение 3. Алгоритмы обработки массивов.
- •Приложение 4. Примеры создания процедур и функций.
- •Приложение 5. Пример обработки типизированных файлов.
- •Приложение 6. Пример обработки бд Access в среде vb.
- •Оглавление
- •Глава 1. Vb 6.0 – среда разработки приложений. 4
- •Глава 2. Данные vb. 20
- •Глава 3. Алгоритмизация вычислительных процессов. 33
- •Глава 4. Массивы. 61
- •Глава 5. Процедуры и функции полоьзователя. 77
- •Глава 10. Обработка бд Access в среде vb. 110
- •Глава 11. Обмен данными между приложениями. 139
- •Глава 12. Графические средства vb 6. 150
Приложение 5. Пример обработки типизированных файлов.
Создать на МД 2 файла прямого доступа с данными о складах:
1. Код склада, ФИО директора, удаленность от центра (км),
температура в помещении, метраж (кв.м)
2. Код склада, стоимость 1 кв.м, срок сдачи (сутки)
Вывести содержимое файлов на экран. Получить выходной документ в
форме:
3. Код склада, ФИО директора, стоимость сдачи, удаленность от
центра, температура в помещении.
Обеспечить возможность:
- добавления новых записей в файл;
- удаления записи с заданным номером из файла;
- корректировки в файле записи с заданным номером;
- сортировки записей в файле по задаваемому полю и ключу.
Объявляем пользовательские типы данных и необходимые
переменные в соответствии с условием задачи:
Private Type Rec1
kod As Integer
FIO As String * 15
dist As Single
t As Integer
pl As Integer
End Type
Private Type Rec2
kod As Integer
stm As Currency
srok As Byte
End Type
Private Type Rec3
kod As Integer
FIO As String * 15
obst As Currency
dist As Single
t As Integer
End Type
Private zap1 As Rec1, zap2 As Rec2, zap3 As Rec3
Private x As Rec3, y As Rec3
Private kolzap%, nRec%, b As Boolean
Процедура вывода на экран условия задачи:
Private Sub Form_Load()
Label1 = " Создать на МД 2 файла прямого доступа с данными о
складах: " & vbCrLf & _
" 1. Код склада, ФИО директора, удаленность от центра (км),
температура в помещении, метраж (кв.м) " & vbCrLf & _
" 2. Код склада, стоимость 1 кв.м, срок сдачи (сутки)" & vbCrLf & _
" Вывести содержимое файлов на экран. Получить выходной
документ в форме: " & vbCrLf & _
" 3. Код склада, ФИО директора, стоимость сдачи, удаленность от
центра, " & vbCrLf & " температура в помещении.
Отсортировать его по ключевому полю. " & vbCrLf & _
" Обеспечить возможность:" & vbCrLf & _
" - добавления новых записей в файл;" & vbCrLf & _
" - удаления записи с заданным номером из файла;" & vbCrLf & _
" - корректировки в файле записи с заданным номером;" & vbCrLf
& “ - сортировки записей в файле по заданному полю и ключу. "
End Sub
Процедура создания файла первой таблицы:
Private Sub mnuMakeFile1_Click()
Open CurDir$ & "\sklad1.dat" For Random As #1 Len = Len(zap1)
Do
zap1.kod = InputBox("Введите код склада")
zap1.FIO = InputBox("Введите ФИО директора")
zap1.dist = Val(InputBox("Введите удаленность склада от центра
(км)"))
zap1.t = InputBox("Введите температуру в помещении складад")
zap1.pl = InputBox("Введите метраж складского помещения")
Put #1, , zap1
Loop Until MsgBox("Продолжить ввод данных ?", 36) = vbNo
Close #1
End Sub
Процедура создания файла второй таблицы:
Private Sub mnuMakeFile2_Click()
Open CurDir$ & "\sklad2.dat" For Random As #2 Len = Len(zap2)
Do
zap2.kod = InputBox("Введите код склада")
zap2.stm = InputBox("Введите стоимость аренды 1 кв. м.")
zap2.srok = InputBox("Введите срок сдачи (суток)")
Put #2, , zap2
Loop Until MsgBox("Продолжить ввод данных ?", 36) = vbNo
Close #2
End Sub
Процедура просмотра содержимого файла первой таблицы:
Private Sub mnuViewTab1_Click()
Dim i%, j%
Open CurDir$ & "\sklad1.dat" For Random As #1 Len = Len(zap1)
kolzap = LOF(1) \ Len(zap1)
fg1.Cols = 5: fg1.Rows = 1
fg1.Clear
fg1.FormatString = "^ Код |< ФИО дирек. |> Расстояние |^ Температура
|^ Метраж "
For i = 1 To kolzap
fg1.Rows = fg1.Rows + 1
Get #1, , zap1
fg1.TextMatrix(i, 0) = zap1.kod
fg1.TextMatrix(i, 1) = zap1.FIO
fg1.TextMatrix(i, 2) = zap1.dist
fg1.TextMatrix(i, 3) = zap1.t
fg1.TextMatrix(i, 4) = zap1.pl
Next i
Close #1
End Sub
Процедура просмотра содержимого файла второй таблицы:
Private Sub mnuViewTab2_Click()
Dim i%, j%
Open CurDir$ & "\sklad2.dat" For Random As #2 Len = Len(zap2)
kolzap = LOF(2) \ Len(zap2)
fg2.Cols = 3: fg2.Rows = 1
fg2.Clear
fg2.FormatString = "^ Код |> Стоимость 1 кв. м. |^ Срок (сутки) "
For i = 1 To kolzap
fg2.Rows = fg2.Rows + 1
Get #2, , zap2
fg2.TextMatrix(i, 0) = zap2.kod
fg2.TextMatrix(i, 1) = zap2.stm
fg2.TextMatrix(i, 2) = zap2.srok
Next i
Close #2
End Sub
Процедура создания файла выходного документа:
Private Sub mnuDokument_Click()
Dim i%, j%, stoim@
Open CurDir$ & "\sklad1.dat" For Random As #1 Len = Len(zap1)
Open CurDir$ & "\sklad2.dat" For Random As #2 Len = Len(zap2)
Open CurDir$ & "\docum.dat" For Random As #3 Len = Len(zap3)
kolzap = LOF(1) \ Len(zap1)
For i = 1 To kolzap
fg3.Rows = fg3.Rows + 1
Get #1, , zap1
zap3.kod = zap1.kod
zap3.FIO = zap1.FIO
zap3.dist = zap1.dist
zap3.t = zap1.t
Seek #2, 1
For j = 1 To kolzap
Get #2, , zap2
If zap1.kod = zap2.kod Then
stoim = zap2.stm * zap1.pl * zap2.srok: Exit For
End If
Next j
zap3.obst = stoim
Put #3, , zap3
Next i
Close
Open CurDir$ & "\docum.dat" For Random As #3 Len = Len(zap3)
kolzap = LOF(3) \ Len(zap3)
fg3.Clear
fg3.Cols = 5: fg3.Rows = 1
fg3.FormatString = "^ Код |< ФИО директора |> Общая стоимость
аренды |> Расстояние (км)|^ Температура (град.)"
For i = 1 To kolzap
fg3.Rows = fg3.Rows + 1
Get #3, , zap3
fg3.TextMatrix(i, 0) = zap3.kod
fg3.TextMatrix(i, 1) = zap3.FIO
fg3.TextMatrix(i, 2) = zap3.obst
fg3.TextMatrix(i, 3) = zap3.dist
fg3.TextMatrix(i, 4) = zap3.t
Next i
Close #3
End Sub
Процедура удаления из файлов информации о складе с заданным
кодом:
Private Sub mnuDel_Click()
Dim num1%, num2%, i%, kd%
kd = InputBox("Введите код склада, данные о котором нужно удалить
из обоих файлов ")
Open CurDir$ & "\Newsklad.dat" For Random As #4 Len = Len(zap1)
Open CurDir$ & "\sklad1.dat" For Random As #1 Len = Len(zap1)
kolzap = LOF(1) \ Len(zap1)
По введенному коду находим в 1-ой таблице номер удаляемой из нее
записи
For i = 1 To kolzap
Get #1, i, zap1
If zap1.kod = kd Then num1 = i: Exit For
Next i
Циклически сдвигаем все записи, начиная с num1 + 1 и до конца
файла, вверх
i = num1 + 1
Do While Not EOF(1)
Get #1, i, zap1
Put #1, i - 1, zap1
i = i + 1
Loop
Переписываем все записи от первой до предпоследней из 1-го
файла в 4-ый
For i = 1 To kolzap - 1
Get #1, i, zap1
Put #4, i, zap1
Next i
Close #1
Close #4
Уничтожаем первый файл
Kill CurDir$ & "\sklad1.dat"
Даем третьему файлу имя уничтоженного первого
Name CurDir$ & "\Newsklad.dat" As CurDir$ & "\sklad1.dat"
Close #1
Call mnuViewTab1_Click
Повторяем всю процедуру удаления для записей 2-ой таблицы
Open CurDir$ & "\Newsklad.dat" For Random As #4 Len = Len(zap2)
Open CurDir$ & "\sklad2.dat" For Random As #2 Len = Len(zap2)
kolzap = LOF(2) \ Len(zap2)
По введенному коду находим во 2-ой таблице номер удаляемой из
нее записи
For i = 1 To kolzap
Get #2, i, zap2
If zap2.kod = kd Then num2 = i: Exit For
Next i
Циклически сдвигаем все записи, начиная с num2 + 1 и до конца
файла, вверх
i = num2 + 1
Do While Not EOF(2)
Get #2, i, zap2
Put #2, i - 1, zap2
i = i + 1
Loop
Переписываем все записи от первой до предпоследней из 2-го
файла в 4-ый
For i = 1 To kolzap - 1
Get #2, i, zap2
Put #4, i, zap2
Next i
Close #2
Close #4
Уничтожаем первый файл
Kill CurDir$ & "\sklad2.dat"
Даем второму файлу имя уничтоженного первого
Name CurDir$ & "\Newsklad.dat" As CurDir$ & "\sklad2.dat"
Close #2
Call mnuViewTab2_Click
End Sub
Процедура добавления в файлы новой информации о складах:
Private Sub mnuAdd_Click()
Dim i%
Open CurDir$ & "\sklad1.dat" For Random As #1 Len = Len(zap1)
Open CurDir$ & "\sklad2.dat" For Random As #2 Len = Len(zap2)
Do
Добавляем новые записи в первую таблицу
kolzap = LOF(1) \ Len(zap1)
Seek #1, kolzap + 1
zap1.kod = InputBox("Введите код склада")
zap1.FIO = InputBox("Введите ФИО директора")
zap1.dist = Val(InputBox("Введите удаленность склада от центра"))
zap1.t = InputBox("Введите температуру в помещениях склада")
zap1.pl = InputBox("Введите площадь помещений склада")
Put #1, , zap1
Добавляем новые записи во вторую таблицу
kolzap = LOF(2) \ Len(zap2)
Seek #2, kolzap + 1
zap2.kod = zap1.kod
zap2.stm = InputBox("Введите стоимость аренды 1 кв. м. склада")
zap2.srok = InputBox("Введите срок сдачи помещений в аренду")
Put #2, , zap2
Loop Until MsgBox("Продолжить ввод данных ?", 36) = vbNo
Close
Выводим на экран новое состояние обеих таблиц
Call mnuViewTab1_Click
Call mnuViewTab2_Click
End Sub
Процедура редактирования данных в заданном поле заданной записи в заданном файле (в заданной таблице):
Private Sub mnuEdit_Click()
Dim st$, stp$, kd%, i%, nom%
Корректируем задаваемое поле задаваемой записи в
задаваемой таблице
st = InputBox("Введите имя таблицы, в которой требуется" & vbCrLf & _
"изменить информацию о складе (tab1 или tab2)")
fg1.Rows = 3
If st = "tab1" Then
fg1.Clear: fg1.Cols = 5
fg1.FormatString = "^ Код |< ФИО дирек. |> Расстояние |^ Температура
|^ Метраж "
Open CurDir$ & "\sklad1.dat" For Random As #1 Len = Len(zap1)
kd = InputBox("Введите код склада, информация о котором требует
корректировки")
kolzap = LOF(1) \ Len(zap1)
For i = 1 To kolzap
Get #1, , zap1
If zap1.kod = kd Then
nom = i
fg1.TextMatrix(1, 0) = zap1.kod
fg1.TextMatrix(1, 1) = zap1.FIO
fg1.TextMatrix(1, 2) = zap1.dist
fg1.TextMatrix(1, 3) = zap1.t
fg1.TextMatrix(1, 4) = zap1.pl
stp = InputBox("Введите имя требующего корректировки поля
записи")
Select Case stp
Case "kod"
zap1.kod = InputBox("Введите новое значение кода")
fg1.TextMatrix(1, 0) = zap1.kod
Case "FIO"
zap1.FIO = InputBox("Введите новое значение ФИО")
fg1.TextMatrix(1, 1) = zap1.FIO
Case "dist"
zap1.dist = InputBox("Введите новое значение расстояния")
fg1.TextMatrix(1, 2) = zap1.dist
Case "t"
zap1.t = InputBox("Введите новое значение температуры")
fg1.TextMatrix(1, 3) = zap1.t
Case "pl"
zap1.pl = InputBox("Введите новое значение площади")
fg1.TextMatrix(1, 4) = zap1.pl
End Select
Exit For
End If
Next i
Seek #1, nom
Put #1, , zap1
Close #1
Call mnuViewTab1_Click
Корректируем задаваемое поле задаваемой записи во второй из
Таблиц
ElseIf st = "tab2" Then
fg2.Clear: fg2.Cols = 3
fg2.FormatString = "^ Код |> Стоимость 1 кв. м. |^ Срок (сутки) "
Open CurDir$ & "\sklad2.dat" For Random As #2 Len = Len(zap2)
kd = InputBox("Введите код склада, информация о котором требует
корректировки")
kolzap = LOF(2) \ Len(zap2)
For i = 1 To kolzap
Get #2, , zap2
If zap2.kod = kd Then
nom = i
fg2.TextMatrix(1, 0) = zap2.kod
fg2.TextMatrix(1, 1) = zap2.stm
fg2.TextMatrix(1, 2) = zap2.srok
stp = InputBox("Введите имя требующего корректировки поля
записи")
Select Case stp
Case "kod"
zap2.kod = InputBox("Введите новое значение кода")
fg2.TextMatrix(1, 0) = zap2.kod
Case "stm"
zap2.stm = InputBox("Введите новое значение стоимости аренды
1-го кв. м.")
fg2.TextMatrix(1, 1) = zap2.stm
Case "srok"
zap2.srok = InputBox("Введите новое значение срока сдачи в
аренду")
fg2.TextMatrix(1, 2) = zap2.srok
End Select
Exit For
End If
Next i
Seek #2, nom
Put #2, , zap2
Close #2
Call mnuViewTab2_Click
End If
End Sub
Процедура, меняющая местами две соседние записи в файле:
Private Sub Replace()
Seek #3, nRec
Put #3, , y
Put #3, , x
b = True
End Sub
Процедура сортировки записей в файле выходного документа:
Private Sub mnuSort_Click()
Dim s$, ks%
Open CurDir$ & "\docum.dat" For Random As #3 Len = Len(zap3)
s = "": b = True
kolzap = LOF(3) \ Len(zap3)
s = InputBox("Введите имя поля, по которому нужно сортировать" &
vbCrLf & " записи: kod, FIO, obst, dist, t")
ks = InputBox("Введите ключ сортировки :" & vbCrLf & " -1: по
убыванию;" & vbCrLf & " 1: по возрастанию")
Do While b = True
b = False: nRec = 1
Seek #3, 1
Do While nRec < kolzap
Читаем из файла две соседние записи с номерами n_rec и n_rec + 1
Seek #3, nRec
Get #3, , x
Get #3, , y
Сравниваем имена полей с введенным именем и с помощью
процедуры Replace меняем местами в файле прочитанные записи в
соответствии с условиями сортировки
Select Case s
Case "kod"
If ks * x.kod > ks * y.kod Then Replace
Case "FIO"
Select Case ks
Case -1
If x.FIO < y.FIO Then Replace
Case 1
If x.FIO > y.FIO Then Replace
End Select
Case "obst"
If ks * x.obst > ks * y.obst Then Replace
Case "dist"
If ks * x.dist > ks * y.dist Then Replace
Case "t"
If ks * x.t > ks * y.t Then Replace
End Select
nRec = nRec + 1
Loop
Loop
Close #3
Open CurDir$ & "\docum.dat" For Random As #3 Len = Len(zap3)
kolzap = LOF(3) \ Len(zap3)
Выводим на экран отсортированный по задаваемому полю
выходной документ
fg3.Clear
fg3.Cols = 5: fg3.Rows = 1
fg3.FormatString = "^ Код |< ФИО директора |> Общая стоимость
аренды |> Расстояние (км)|^ Температура (град.)"
For i = 1 To kolzap
fg3.Rows = fg3.Rows + 1
Get #3, , zap3
fg3.TextMatrix(i, 0) = zap3.kod
fg3.TextMatrix(i, 1) = zap3.FIO
fg3.TextMatrix(i, 2) = zap3.obst
fg3.TextMatrix(i, 3) = zap3.dist
fg3.TextMatrix(i, 4) = zap3.t
Next i
Close #3
End Sub
Процедура завершения работы приложения:
Private Sub mnuExit_Click()
End
End Sub
Ниже приведен возможный вид рабочей формы данного проекта.
Уяснив различия в использовании операторов при обработке файлов с произвольным и последовательным доступом, изложенные в разделе 9.6, эту же задачу можно решить и с использованием файла с последовательным доступом.