№
|
Поле
|
Тип
|
Размер
|
Описание
|
1
|
PersonID
|
Числовой
|
5
|
Регистрационный номер
сотрудника
|
2
|
Name
|
Текстовый
|
40
|
ФИО сотрудника
|
3
|
Departament
|
Текстовый
|
40
|
Название кафедры, на
которой он работает
|
4
|
Institute
|
Текстовый
|
40
|
Название института
(департамента)
|
5
|
Birth
|
Дата/время
|
Авто
|
Дата рождения
сотрудника
|
6
|
Place
|
Текстовый
|
20
|
Место рождения
|
7
|
Address
|
Текстовый
|
60
|
Домашний адрес
сотрудника
|
8
|
Phone
|
Текстовый
|
15
|
Домашний телефон
сотрудника
|
9
|
Education
|
Текстовый
|
40
|
Оконченный вуз
|
10
|
Year
|
Числовой
|
4
|
Год окончания вуза
|
11
|
Speciality
|
Текстовый
|
30
|
Специальность
сотрудника
|
12
|
Picture
|
Объект OLE
|
Авто
|
Фотография сотрудника
|
13
|
Логический
|
1
|
Учёная степень
(есть/нет)
|
14
|
Degree
|
Числовой
|
1
|
Учёная степень
сотрудника
|
15
|
Rank
|
Числовой
|
1
|
Учёное звание
сотрудника
|
16
|
Post
|
Текстовый
|
20
|
Занимаемая должность
|
17
|
Comment
|
Поле Memo
|
Авто
|
Примечания
|
18
|
Passport
|
Текстовый
|
20
|
Номер паспорта
|
19
|
PassportDate
|
Дата/время
|
Авто
|
Дата выдачи паспорта
|
20
|
Region
|
Текстовый
|
40
|
Кем выдан паспорт
|
21
|
WorkBegin
|
Дата/время
|
Авто
|
Дата начала трудовой
деятельности
|
22
|
WorkEnd
|
Дата/время
|
Авто
|
Дата окончания трудовой
деятельности
|
23
|
Work
|
Текстовый
|
20
|
В качестве кого работал
|
24
|
WorkPlace
|
Текстовый
|
20
|
Название предприятия
|
25
|
WorkAddress
|
Текстовый
|
60
|
Адрес предприятия
|
26
|
WorkPhone
|
Текстовый
|
15
|
Телефон предприятия
|
27
|
Reason
|
30
|
Причина увольнения
|
28
|
Penalty
|
Поле Memo
|
Авто
|
Сведения о взысканиях
|
29
|
Rewards
|
Поле Memo
|
Авто
|
Сведения о награждениях
|
3. Реализация базы
данных
1. Создание таблиц.
Нормализация данных
Для систематизации
данных, представленных в таблице выше, необходимо создать базу данных. Для
создания базы данных я воспользовался продуктом компании Microsoft – MS Access 2007.
База данных – совместно
используемый набор логически связанных данных для удовлетворения информационных
потребностей организации.
СУБД (система управления
базами данных) – ПО, с помощью которого пользователи могут создавать,
модифицировать базу данных и осуществлять к ней контролируемый доступ.
Для начала необходимо
разделить все данные в исходной таблицы на отдельные таблицы. При создании
первой нормальной формы я выделил главную таблицу – tblWorker, в которой содержались все данные о
работнике университета.
Поле Address я разбил на 3 поля: StreetName, Sign, First
и занес их в отдельную таблицу tblStreet.
Поля PersonID таблицы tblWorker и StreetID таблицы tblStreet назначены ключевыми полями, следовательно,
записи однозначно определятся по этим полям. Чтобы создать ключевое поле,
необходимо нажать правой кнопкой на поле и выбрать "ключевое поле".
Возле этого поля появится соответственный значок ключа.
Далее я отделил от
основной таблицы некоторые поля и занес их в отдельные следующие таблицы,
представленные на рисунке:
2. Создание связей
После создания всех
таблиц необходимо создать связи между ними и после этого база данных будет
готова к работе. Microsoft Access поддерживает 4 типа связей:
один-к-одному, один-ко-многим, многие-к-одному и многие-ко-многим. Для создания
связей нужно сначала открыть схему данных. Для этого надо выбрать на ленте "Создание"
и нажать кнопку "Схема данных". После этого переносим все таблицы на
пространство схемы данных. И переносим курсор мыши, зажав левую клавишу от поля
одной таблицы к полю другой, которые мы хотим объединить связью. Появится окно "Изменение
связей":
Для целостности данных
необходимо отметить галочки "Обеспечение целостности данных" и "каскадное
обновление связанных полей".
По окончанию создания
связей я получил следующую схему данных:
4. Разработка
приложения
После создания базы
данных и создания векторного чертежа наступает самый сложный и объемный этап
работы – разработка приложения. Без законченного приложения обычный
пользователь не сможет работать с этими данными и, следовательно, не получится
законченной геоинформационной системы! Программное обеспечение связывает
графическую информацию с информацией атрибутивной, что позволяет удобно и
просто оперировать с этими данными.
Своё приложение я
создавал при помощи мощного инструмента, входящего в состав многих программных
продуктов, – Visual Basic for Applications (VBA).
Для начала работы с VBA необходимо в Автокаде выполнить
команду меню "Сервис-Макросы-Редактор Visual Basic". Откроется окно редактора Microsoft Visual Basic.
Для начала необходимо
создать стартовую форму и сделать для неё автозапуск, чтобы она открывалась при
открытии Автокада. Для начала выбираем пункт меню "Insert-UserForm". Появится новая пустая форма.
Необходимо добавить на форму элементы управления с помощью окна Toolbox и отредактировать их свойства в окне
Properties.
Внешний вид объектов на
форме:
После создания формы и
всех объектов на ней необходимо написать код обработки событий для этих
объектов. Для автозапуска стартовой формы необходимо создать обработчик события
AcadDocument_Activate(), которое выполняется при активации документа. Для этого
в окне Project дважды кликаем на ThisDrawing и перед нами откроется окно
редактирования кода. Над ним расположено 2 раскрывающихся списка. В левом
выбираем AcadDocument, а в правом – Activate и автоматически создастся обработчик
этого события. В него пишем следующий код:
Private Sub
AcadDocument_Activate()
StartForm.Show 'При
активации документа показываем стартовую форму
End Sub
Теперь при активации
документа появится стартовая форма.
Моё приложение работает в
двух режимах: пользователя и конструктора. Путь к базе данных изначально
устанавливается автоматически в той же директории, что и файл чертежа. Также
можно выбрать другой путь к базе данных, нажав на кнопку открытия. При выборе
режима конструктора осуществляется переход к Автокаду и никакой код не
выполняется. При выборе пользовательского режима блокируются все слои, кроме
слоя Блоков, дабы избежать потери графической информации. За выбор режима
отвечает следующий код:
Далее если пользователь
зашел в пользовательский режим, то ему предоставляется выбор из трёх объектов
на чертеже. При нажатии на какой-либо из объектов выскакивает сообщение с
краткой информацией об объекте и предложением просмотреть более подробную
информацию.
Это реализуется в ThisDrawing в обработчике события
AcadDocument_SelectionChanged()
(изменение выбора) следующим образом:
If
ThisDrawing.PickfirstSelectionSet.count > 0 Then 'Проверяем, выбрано
ли что-либо
Set objGen =
ThisDrawing.PickfirstSelectionSet.Item _
(ThisDrawing.PickfirstSelectionSet.count
- 1) 'Если выбрано то устанавливаем objGen как последний выбранный объект
If objGen.ObjectName =
"AcDbBlockReference" Then 'Проверяем, является ли выбранный объект
блоком
Select Case objGen.Name 'Проверяем,
какой объект выбран
Case 1
If MsgBox("Выбрана
Библиотека" & vbCr & "Показать информацию об этом
помещении?", _
vbOKCancel, "Выбрано
помещение") = vbOK Then 'Выдаем сообщение и запрос на вывод информации
ShowInf = True 'Показать
информацию
End If
ID = 1 'Устанавливаем
номер выбранного помещения
Case 2
If MsgBox("Выбран
Деканат" & vbCr & "Показать информацию об этом
помещении?", _
vbOKCancel,
"Выбрано помещение") = vbOK Then
ShowInf = True
End If
ID = 2
Case 3
If MsgBox("Выбрана
Кафедра" & vbCr & "Показать информацию об этом
помещении?", _
vbOKCancel,
"Выбрано помещение") = vbOK Then
ShowInf = True
ID = 3
End Select
Далее, если пользователь
нажимает "Да", то появляется окно с информацией о работниках данного
помещения:
При этом происходит
соединение с базой данных и посылается запрос на работников, работающих в
данном помещении. Список работников выводится в ListBox. Текст запроса и вывода:
Public record As
ADODB.Recordset 'Переменная запроса к базе данных
…
Set record = New
ADODB.Recordset 'Создаем переменную запроса к базе
…
With record
'Создаём запрос в базу
.Source =
"Select tblWorker.PersonID, tblWorker.Family, tblWorker.FirstName,
tblWorker.SecondName, " & _
"tblWorkPlace.Place
From tblWorker, tblWorkPlace where tblWorker.WorkPlace=tblWorkPlace.WorkPlace
and " & _
"tblWorker.WorkPlace="
& ID & " order by Family, FirstName, SecondName"
'Открываем его
.Open
CountQuery = .RecordCount
'Считаем кол-во записей в запросе
End With
FlatInf.ListBox1.Clear
FlatInf.TextBox1.Text =
record!Place 'Устанавливаем место работы сотрудника
FlatInf.Label3.Caption =
"Всего: " & CountQuery & " " &
Operations.intToStroka(CountQuery) 'Устанавливаем в Label3 кол-во работников,
попавших в запрос
For i = 0 To CountQuery -
1 'Перебираем все записи
FlatInf.ListBox1.AddItem
(record!Family & " " & record!FirstName & " "
& record!SecondName) 'Добавляем в список Фамилию, имя и отчество работника record.MoveNext
'Переходим к следующей записи
Next i
При нажатии на кнопку "Показать
информацию о работнике" вызывается форма, в которой содержится вся
информация о данном работнике.
При построении данной
формы посылается запрос в базу данных по всем таблицам. При этом осуществляются
проверки на правильность данных в таблице. Например, для поля текстового типа:
Rem Фамилия
If rec!Family
<> "" Then
.TextBox1.Text
= rec!Family
.Caption =
.Caption & rec!Family
Else TextBox1.Text =
""
End If
Такие компоненты, как ComboBox заполняются данными из отдельных
таблиц. Например, список кафедр заполняется в ComboBox1:
Rem Составляем список кафедр
DopRec.Open ("Select
* from tblDepartament") 'Получаем все кафедры
For i = 0 To DopRec.RecordCount - 1 'Проходим по всем записям
.ComboBox1.AddItem
(DopRec!Departament) 'Добавляем запись в ComboBox1
DopRec.MoveNext 'Переходим к следующей записи
Next i
Rem Выбор Кафедры
If (Not rec!DepartamentID = 0) Then 'Если в поле кафедры есть значение
.ComboBox1.ListIndex = rec!DepartamentID - 1 'Выбираем его номер в списке
Else 'Иначе
.ComboBox1.ListIndex = -1 'Ничего не выбираем
End If
DopRec.Close
Также из этой формы
открывается дополнительное окно, которое содержит информацию о трудовой книжке
сотрудника. Эта информация также получается с помощью запросов к базе данных.
Из формы с информацией о
сотруднике можно перейти к стартовой форме, нажав соответствующую кнопку. Кроме
того, в ней можно пролистывать записи базы данных, вносить изменения в базу,
создавать новые записи о сотрудника и удалять записи. При обновлении в базу
посылается SQL запрос на обновление данных и все
поля базы обновляются. При успешном обновлении появляется сообщение. При
добавлении новой записи в базу данных посылается запрос на добавление записи и
вносится новый PersonID
сотрудника, после чего вызывается обновление этой записи, тем самым
производятся изменения всех полей записи. При удалении записи посылается запрос
на удаление и производится переход на соседнюю запись. Если в базе записей нет,
то появляется сообщение об этом и форма закрывается.
5. Авторские находки
Для того, чтобы еще более
автоматизировать своё приложение, и сделать проще доступ к нему, я решил
создать отдельное автономное приложение, из которого можно открыть все файлы
данной курсовой работы. И я написал .exe файл, из которого можно открыть файл моего чертежа AutoCAD, файл базы данных Access и этот файл отчёта. Внешний вид
программы:
6. Список литературы
1. Полещук Н.Н. AutoCAD: разработка приложений, настройка и адаптация. СПб.:
БХВ-Петербург, 2006 - 992 c.:
ил.
2. Погорелов В.И. AutoCAD 2007. Экспресс-курс. СПб.: БХВ-Петербург, 2006 - 560 c.: ил.
3. Гурвиц Г.А. Access 2007. Разработка приложений на реальном примере. СПб.: БХВ-Петербург,
2007 - 672 c.: ил.