Смекни!
smekni.com

Разработка прикладного программного обеспечения отдела кадров университета (стр. 2 из 2)

Поле 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

End If

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.: ил.