|
Разработка прикладного программного обеспечения деятельности отдела аренды ЗАО "Сириус"
Разработка прикладного программного обеспечения деятельности отдела аренды ЗАО "Сириус"
2 Министерство транспорта Российской Федерации Федеральное агентство железнодорожного транспорта ГОУ ВПО «Дальневосточный государственный университет путей сообщения» Кафедра «Информационные технологии и системы» Курсовой проект Разработка прикладного программного обеспечения деятельности отдела аренды ЗАО «Сириус» Вариант 30 Выполнил: Шолков И.Д. 220 группа Проверил: Гурвиц Г.А. Хабаровск 2009 Оглавление 1. Задание на курсовой проект 2. Описание процесса создания векторного плана этажа здания 2.1 Создание приложения 2.2 Создание чертежа 3. Описание предметной области и схемы модели данных 4. Разработка приложения Список литературы 1. Задание на курсовой проектРазработать прикладное программное обеспечение деятельности отдела аренды ЗАО «Сириус». После удачной приватизации, когда у руководства этого предприятия оказалась большая часть акций, дела некогда мощного предприятия пошли на спад. В настоящее время основной статьей получения прибыли является сдача в аренду другим предприятиям и организациям площадей, которыми владеет «Сириус». В его собственности имеется 12-этажное здание, которое состоит примерно из 300 помещений. Почти все они сдаются в аренду. Один арендатор может арендовать несколько помещений, причем срок аренды для каждого устанавливается отдельно. Величина арендной платы и ее периодичность устанавливается арендодателем. Субаренда площадей запрещена. Закрытые договоры не удаляются из БД для отслеживания предыдущих арендаторов. 2. Описание процесса создания векторного плана этажа зданияМоя работа связана с отдельной поликлиникой, поэтому мне необходимо начертить план здания поликлиники, нанести на неё различные чертёжные элементы и элементы интерьера. Именно этот план послужит для создания графической опоры моей геоинформационной системы.Для разработки плана здания воспользуемся графическим редактором AutoCAD. Он предоставляет широкие возможности для графических решений. Целесообразность очевидна из его функциональности.2.1 Создание приложения.Создав проект AutoCAD перед нами появляется среда разработки. Для начала установим единицы измерения, для этого откроем вкладку Формат ->Единицы. И в окне выберем сантиметры.2.2 Создание чертежаВесь план должен быть выполнен в слоях, поэтому я выделил следующее разделение:1. Схема здания 2. Заполнение 3. Интерьер 4. Подписи Для создания слоев воспользуемся вкладкой ФОРМАТ -> СЛОЙ. В результате чего появится окно Диспетчер свойств слоёв Для создания своих слоев существует соответствующая кнопка - Создать слой. Значок галочки соответствует активному слою. Далее в процессе проектирования чертежа, для того, чтобы нарисовать объект в определённом слое, необходимо сделать данный слой активным, и чертить объект. Сделать слой активным можно, нажав на зелёную галочку. Далее приступаем непосредственно к отрисовке плана здания. После проделанной работы получили следующий чертёж: Не маловажно создать ещё один слой. На это слое будут отображать блоки, которые необходимы для связи пространственной информации с атрибутивной. Проделываем заново операции со слоями и создаём слой блоков. На нём непосредственно чертим контуры будущих блоков. Это будет красный прямоугольник над подписью кабинета. Далее необходимо создать собственно блок. Для этого на панели инструментов нажимаем кнопку создать блок, после чего появляется диалоговое окно создания блока: В нём вводим имя блока, выбираем объект(в нашем случае это красный квадрат) и нажимаем ОК. Всё, блок создан. Аналогичные операции проделываем и с другими блоками. 3. Описание предметной области и схемы модели данныхПо моему варианту дана таблица с полями и данными этих полей. Понятно, что использование данной таблицы в будущей работе невозможно, хотя возможно, но это будет в корне не правильно.Поэтому данные необходимо нормализовать. В работе мы будем использовать 3 нормальные формы баз данных.Первая нормальная форма. Условие нахождения базы в первой нормальной форме является разбиение её на таблицы, которые не содержат повторяющихся полей.Сделаем это с нашей таблицей, получим следующие таблицыArendatorRoomsContractПолучили таблицы, которые содержат информацию об арендаторах, помещениях и контрактах.Казалось бы всё, данные объединены в родственные группы. Но со стороны реляционных баз данных следует разделить эти таблицы ещё на несколько новых. Это существенно упростит работу с данными.Создадим таблицу идентификации улицы(Street), создадим дополнительное поле в таблице Arendator под названием Nbuild в будущем это упростит ввод адреса.Streetdistrict:Далее перейдём к рассмотрению второй нормальной формы.Если база находится во второй нормальной форме, то она удовлетворяет условиям первой нормальной формы и имеет ключевые поля, которые однозначно определяют любые не ключевые.Для того чтобы быстро найти, связать данные необходимы поля, которые однозначно определяют данные таблицы, именно они называются первичными ключами. Расставим в каждой таблицы данные ключи:Arendator - CustomerIDRooms - HallIDContract - TreatyIDStreet - StreetDistrict - DistrictТретья нормальная форма. Условие нахождения в третьей нормальной форме, это удовлетворение второй нормальной форме и ни одно не ключевое поле не определяет ключевые поля.Далее эти таблицы создаются в MS Access где они принимают следующий вид:Чтобы создать таблицу, на вкладке Создание выбираем Таблица в итоге появляется новая таблица, входим в режим конструктора и Access просит ввести имя таблиц, вводим и начинаем создавать таблицу. Вписываем имя поля определяем тип данных если надо расставляем индексы и определяем возможность повторений. Аналогичный вид принимают и остальные таблицы в зависимости от назначения полей.Далее необходимо создать ключевые поля. Для этого перейдём в конструктор таблицы. Там на вкладке конструктор есть добавить ключевое поле. Выбираем наше ключевое поле в соответствии с предыдущим разбиением и нажимаем добавить ключ. В итоге напротив поля появится значок ключа.Аналогичные операции проводим и для всех остальных таблиц.Следующий этап это определение связей между таблицами. На вкладке Работа с базами данных нажмём на пиктограмму Схема данных. Появится пространство в которое мы добавим все наши таблицы.Получим следующее:Для создания связи выделим ключевое поле и перетащим его к соответствующему не ключевому полю другой таблицы. В итоге появится окно (один-к-одному, один-многие, многие-многие в зависимости от того разрешены или нет повторяющиеся значения)Жмём Создать и связь создана аналогично проделываем те же операции для других таблиц и получаем следующую схему:На этом этапе все работы с базами завершены. Далее идёт их обычное заполнение.4. Разработка приложенияНастал самый тяжёлый этап создания проекта. Этап разработки и ошибок. На данном шаге мы приступаем к разработке самого приложения, которое позволит работать с базой с помощью диалогового окна Windows.Связь атрибутивной и пространственной информации будет организовываться с помощью языка программирования Visual Basic for Application (VBA). Это разновидность языка VB, так как он прикреплён к нашей среде разработки AutoCAD, но в остальном он полностью синонимичен языку VB. Как принято в культурном мире, каждый человек при встрече обязан поприветствовать другого... Не будем отступать от правил и начнём разработку с окна приветствия. Для этого зайдем на вкладку сервис->макросы->создать макрос И перед нами появилась среда разработки. В левом верхнем углу можно видеть дерево проекта, где отображены объекты AutoCAD , формы и модули. Добавим форму следующим путём Insert->UserForm. У нас появилась форма. По середине мы видим саму форму, а рядом находится панель ToolBox на которой размещены элементы, необходимые для разработки приложения (Controls «Контролы») Добавим на форму Label со словами приветствия и 2 кнопки Commandbutton1(закрывает форму и открывает стартовую форму) и Commandbutton2(закрывает форму и закрывает рисунок AutoCad).Програмный код формыPrivate Sub CommandButton1_Click()Unload MeUserForm2.ShowEnd SubPrivate Sub CommandButton2_Click()Unload MeThisDrawing.CloseEnd SubСтартовая форма//Выбор базыPrivate Sub UserForm_Activate()//Добавление базы из папки расположения AutoCADTextBox1.Text = ThisDrawing.Path + "\mydatabase.accdb"//Присвоение переменной пути файлаpath_db = TextBox1.TextEnd Sub//Запись в ComboBox Имени пользователяPrivate Sub ComboBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)ComboBox1.Text = "Илья"End Sub//Обработчик нажатия на OptionButton Private Sub OptionButton1_Click()// Меняем значение переменной на ложь. Для второй OptionButton тоже //самое, только присваиваем значение истинаchec = FalseEnd SubPrivate Sub CommandButton2_Click()//Присвоение переменным значений полейa = TextBox2.Textn = ComboBox1.Text//проверка условия входа базуIf chec = True Then//Проверка пароля для дальнейшей работы If (a = 11111) And (n = "Илья") Then//Установка соединения с базойSet ThisDrawing.adoConnect = New ADODB.ConnectionWith ThisDrawing.adoConnect//Подключение провайдера для работы с базами и привязка базы к чертежу.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & TextBox1.Text.OpenEnd WithUnload MeUserForm3.ShowElse// Если пароль введён не верно то выводится сообщениеMsgBox "Возможно пользователь или пароль введёны не правильно!!! Пожалуйста введите пользователя и пароль!!!", vbOKOnly + vbExclamationEnd IfElseUnload MeEnd IfEnd SubФорма для регистратуры.//Объявление глобальных переменныхPrivate Sub UserForm_Activate()// Установка соединенияSet ThisDrawing.adoConnect = New ADODB.ConnectionWith ThisDrawing.adoConnect.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisDrawing.Path & "\rt.accdb".OpenEnd With//Установка переменной выборки базы данныхSet record = New ADODB.Recordsetrecord.ActiveConnection = ThisDrawing.adoConnectWith record//Текст запроса к базе//Остальные запросы выполнены по аналогии с той лишь разницей, что //переменные будут другие, поэтому дальше текст запроса рассматривать не //будем.Source = "Select * from Arendator where CustomerID =1".OpenEnd With//Функция обновления выведенных данных прописана нижеprint_iEnd SubPublic Sub print_i()//Присвоение текст боксу значения ячейки выбранной из базы. Код //аналогичен для всех выводовTextBox1.Text = record!CustomerID//Определение по логическому полю физическое лицо или юридическоеIf (record!CustomerType = True) ThenTextBox2.Text = "Физическое"ElseTextBox2.Text = "Юридическое"End If//Передача переменной Формы 4 параметра выборки для дальнейшего //использованияUserForm4.aa = record1!CustomerIDEnd Sub//Переход по базам осуществляется аналогично выполнению запроса в //активации формы. Опишем лишь интересные моменты//Если выборка достигает конца записи, то параметр i обнуляется If record.EOF = True Theni = 0CommandButton5_Click//Иначе продолжается выборка по запросамElseWith records = i + 1//передача параметра s в качестве переменной запроса.Source = "Select * from Rooms where CustomerID =" & s.OpenEnd With//Далее идут запросы//Обновление формыprint_ii = i + 1End IfEnd SubДанные о врачеПо большому счёту весь код данных форм практически идентичен предыдущему в силу того, что используются запросы с другими параметрами и из других таблиц, вот и все отличия.Данные о пациентеФорма управления слоямиДля того, чтобы в объекте ListBox1 появился список слоёв, необходимо методе инициализации формы прописать следующие строки: Private Sub UserForm_Initialize()//Данный цикл выводит существующие слои в ListBoxFor I = 2 To ThisDrawing.Layers.Count - 1ListBox1.AddItem (ThisDrawing.Layers.Item(I).Name)Next IEnd SubВ результате выполнения данного кода объект ListBox1 будет заполняться названиями существующих слоёв.В обработчике кнопки «Отключить слой» пропишем следующие строки: Private Sub CommandButton1_Click()//проверка условия выбранного поляIf ListBox1.ListIndex = -1 ThenMsgBox "Выберите слой"Else//метод для отключения слояThisDrawing.Layers.Item(ListBox1.Text).LayerOn = FalseEnd If//обновление формыUserForm1.RefreshEnd SubЭтот участок кода отвечает за выключение выбранного слоя.Аналогичный код будет и для кнопки «Включить слой». Разница будет лишь в методе:ThisDrawing.Layers.Item(ListBox1.Text).LayerOn = TrueТеперь следует рассмотреть код нажатия по блокам в среде AutoCAD.//Объявление глобальных переменныхPublic adoConnect As ADODB.ConnectionPublic path_db As StringPublic ID As VariantPublic ID_A As IntegerPublic a As StringPublic n As String//При загрузке приложения автоматически открывается форма //приветсвтияPrivate Sub AcadDocument_Activate()UserForm6.ShowEnd Sub//Обработчик нажатия на блокPrivate Sub AcadDocument_SelectionChanged()//определение локальных переменныхDim objGen As AcadEntityDim i As Integer//Установка соединения и подключение провайдераSet ThisDrawing.adoConnect = New ADODB.ConnectionWith ThisDrawing.adoConnect.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisDrawing.Path & "\rt.accdb".OpenEnd With//Именно в этой части кода осуществляется передача данных //переменной objGen от блоков чертежаIf ThisDrawing.PickfirstSelectionSet.Count > 0 ThenSet objGen = ThisDrawing.PickfirstSelectionSet.Item(ThisDrawing.PickfirstSelectionSet.Count - 1)//Проверка на принадлежность блокуIf objGen.ObjectName = "AcDbBlockReference" ThenSelect Case objGen.Name//По имени нажатого блока определяются параметры которые нужно //передать дальше для выполнения запросовCase 1ID_A = 10//Передача параметров переменной формы 4UserForm4.aa = ID_AUserForm4.ShowCase 2ID_A = 70UserForm5.aa = ID_AUserForm5.ShowCase 3UserForm3.ShowEnd SelectEnd If//Снятие всех выделенийFor i = 0 To ThisDrawing.PickfirstSelectionSet.Count - 1ThisDrawing.PickfirstSelectionSet.Item(i).Highlight (False)ThisDrawing.PickfirstSelectionSet.Item(i).UpdateNext iThisDrawing.SendCommand (".Выбрать" & vbCr)End IfEnd SubСписок литературы:Гурвиц Г.А. Microsoft Access 2007. Разработка приложений на реальном примере.- СПб.: БХВ-Петербург, 2007. - 672 с.: ил. + CD-ROM AutoCAD 2007. Видео курс.- СПб.: БХВ-Петербург, 2007.
|
|