Розробка гнучкої системи автоматизації розрахунку вартості ремонту
Загальні принципи СОМ-технології і склад СОМ-додатку. Принципи створення контролерів автоматизації MS Excel і організації низькорівневого інтерфейсу OLE DB. Логіко-функціональна схема роботи й можливості спроектованої системи розрахунку вартості ремонту.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | украинский |
Дата добавления | 26.10.2012 |
Размер файла | 3,4 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Інтерфейс IDBCreateCommand створює об'єкт Command.
Об'єкт Command служить для обробки команд, які являють собою рядки, передані від споживача до провайдера для виконання. У більшості випадків така команда містить у собі SQL-оператор SELECT, але може містити й інші оператори. Один сеанс (об'єкт Session) може містити трохи пов'язаних з ним команд. Результатом виконання команди є новий об'єкт Rowset.
Об'єкт Command підтримує свій набір інтерфейсів:
Інтерфейс ICommand використовується для виконання запитів або команд.
Інтерфейс ICommandText використовується для визначення тексту запиту.
Інтерфейс ICommandProperties визначає необхідні властивості набору рядків, що повертає по команді.
Інтерфейс ICommandWithParameters дозволяє виконувати запити з параметрами.
Об'єкт Rowset дозволяє провайдерам даних представляти дані із джерел у табличному форматі. Цей об'єкт представляється як деяка безліч рядків, у кожній з яких утримується один або кілька стовпців. Такий об'єкт може бути створений у результаті виклику інтерфейсу IOpenRowset::OpenRowset або згенерований провайдером даних при настанні певної події. Цей об'єкт може застосовуватися для відновлення, вставки й видалення рядків, якщо провайдер має відповідні інтерфейси.
Найбільш часто використовувані інтерфейси об'єкта Rowset перераховані нижче:
Інтерфейс IRowset дозволяє об'єкту сканувати осередку.
Інтерфейс IAccessor привласнює стовпці наборам рядків.
Інтерфейс IColumnsInfo дозволяє одержувати інформацію про стовпці набору рядків.
Інтерфейс IRowsetInfo відповідає за одержання інформації про властивості набору рядків.
Інтерфейс IrowsetIndex потрібно для індексованих наборів рядків. Використовується функціями, що працюють із індексами.
Інтерфейс IConvertType робить перевірку на можливість перетворення стовпця набору рядків одного типу до іншого.
До складу OLE DB входять й інші об'єкти, крім розглянутих вище. Об'єкт Enumerator використовується для перерахування доступних об'єктів джерел даних (провайдерів OLE DB), а також вказівки інших перечисельників, наявних у системі. У більшості випадків інформація, що повертає об'єктом, витягається з реєстру. Об'єкт Enumerator надає інтерфейс ISourceRowset і повертає об'єкт Rowset з описом всіх джерел даних і перечисельників, які він містить у собі. Одержати цю інформацію можна за допомогою методу GetSourcesRowset інтерфейсу ISourceRowset. Існує кореневий об'єкт Enumerator, що повертає джерела даних верхнього рівня, і інші перечисельники, які можуть використатися для витягу інформації, до якої має доступ конкретний провайдер.
Об'єкт Transaction підтримує транзакції із джерелами даних. Розрізняють локальні й розподілені транзакції. Локальними транзакціями називаються такі транзакції, які виконуються за участю локального провайдера даних. Провайдер даних, що підтримує локальні транзакції, надає інтерфейс ITransactionLocal за допомогою об'єкта Session.
Властивості транзакцій провайдера можна з'ясувати через інтерфейс IDBProperties. Для виконання розподілених транзакцій, тобто транзакцій, що використовують кілька розподілених провайдерів даних, споживачі використовують інтерфейс ITransactionJoin. Цей інтерфейс може застосовуватися лише в тому випадку, якщо провайдер підтримує розподілені транзакції. Додаток викликає метод JoinTransaction для включення в сеанс розподіленої транзакції. Після включення в розподілену транзакцію використовується інтерфейс ITransaction для завершення або скасування транзакції.
Крім кодів повернення й інформації про стан, що вказує на успішний або ж несприятливий результат, що має, виклик кожного методу OLE DB, провайдери можуть надавати розширену інформацію про помилку за допомогою об'єкту Error. Розроблювачеві варто використати ISupportErrorInfo для того, щоб установити, чи може даний об'єкт повернути об'єкти ISupportErrorInfo й одержати інтерфейси, які повертають ці об'єкти.
3.3 Стандартні провайдери OLE DB
Деякі виробники СУБД поставляють зі своїми продуктами драйвери OLE DB для доступу до баз даних. Майкрософт поставляє стандартні провайдери OLE DB у пакеті Microsoft Data Access Components (MDAC). Основні провайдери перераховані нижче:
Провайдер Microsoft OLE DB Provider for ODBC надає можливість одержати доступ до джерела даних ODBC. Але використати дане рішення не рекомендується, тому що драйвери ODBC самі по собі не відрізняються швидкодією, а додатковий рівень швидкості роботи не додасть.
Провайдер Microsoft OLE DB Provider for Microsoft Indexing Service дозволяє одержати доступ (у режимі тільки для читання) до файлових систем й інтернет-ресурсів, проіндексованим за допомогою Microsoft Indexing Service.
Провайдер OLE DB Provider for Microsoft Directory Services дозволяє одержати доступ до ресурсів служби каталогів (Active Directory Services).
Провайдер Microsoft Jet4.0 OLE DB Provider використовується для роботи з базами даних MS Access.
Провайдер Microsoft OLE DB Simple Provider призначений для з'єднання із джерелами даних, підтримуючі тільки базисні можливості технології OLE DB.
Провайдер Microsoft OLE DB Provider for Internet Publishing призначений для забезпечення доступу до веб-серверів й одержання інформації від ресурсів, побудованих на базі Microsoft FrontPage й Microsoft Internet Information Server.
Провайдер Microsoft OLE DB Provider Oracle забезпечує з'єднання із сервером Oracle.
Провайдер Microsoft OLE DB Provider SQL Server забезпечує з'єднання із сервером Microsoft SQL Server.
Провайдер Microsoft OLE DB Provider for OLAP Services використовується для забезпечення доступу до служб OLAP сервера MS SQL.
3.4. Високорівнева об'єктна надбудова ADO
Технологія Microsoft Active Data Objects (ADO) являє собою високорівневу об'єктну надбудову над OLE DB. Незважаючи на те що OLE DB надає повний набір інтерфейсів для маніпулювання даними, більшість розроблювачів не має потреби в низькорівневом контролі за процесом з'єднання з даними й керування ними, що надає OLE DB. У той же час розроблювачі часто використовують високорівневі мови, які не підтримують покажчики на функції й інші механізми C++. ADO може використовуватися для роботи з будь-якими провайдерами OLE DB. Схема наведена на рис.3.3.
Рис. 3.3 Доступ до даних за допомогою ADO
Як джерела даних можуть виступати різні сховища інформації, наприклад таблиці, файли й бази даних.
3.4.1 Об'єктна модель ADO
Об'єктна модель ADO складається із сіми об'єктів, ієрархія яких показана на рис.3.4.
Об'єкт Connection інкапсулюює у собі об'єкти OLE DB DataSource й Session. Він містить єдину сесію із джерелом даних. Об'єкт Connection визначає властивості з'єднання, визначає можливості локальних транзакцій, надає централізований об'єкт для одержання інформації про помилки Error і покажчики для використання схем запитів.
Об'єкт Command інкапсулюює однойменний об'єкт OLE DB Command. Об'єкт використовується для виконання команд визначення й маніпуляції даними. Якщо як джерело даних виступає реляційна СУБД, об'єкт може виконати деякі SQL-оператори. Об'єкт Command дозволяє визначити параметри й установити порядок виконання запитів. Колекція об'єктів Parameter надає доступ до параметрів.
Размещено на http://www.allbest.ru/
Рис. 3.4 Об'єктна модель ADO
Об'єкт Recordset інкапсулюює функціональність об'єкта OLE DB Rowset. Об'єкт Recordset є поточним інтерфейсом доступу до даних, що може бути отриманий у результаті обробки запиту або яким-небудь іншим способом. Об'єкт дозволяє контролювати використовуваний механізм блокувань, тип використовуваного курсору, число рядків, що повертають в одному пакеті, та ін. Об'єкт Recordset надає доступ до колекції об'єктів Field, які містять метаданні про властивості стовпців набору даних, таких як ім'я, тип, довжина й точність. Також утримуються поточні значення записів. Об'єкт Recordset також використовується для переміщення по наборі даних й їхньої модифікації.
Кожен високорівневий об'єкт ADO містить колекцію об'єктів Property. Об'єкт Property дозволяє ADO динамічно публікувати можливості будь-якого провайдеру даних. Тому що не всі провайдери підтримують деякі функції, дуже важливою особливістю об'єктної моделі ADO є можливість надання динамічного доступу до специфічних функцій.
Компоненти бібліотеки VCL, призначені для роботи з ADO, будуються на базі розглянутих об'єктів.
3.4.2 Компонент TADOConnection
Компонент TADOConnection інкапсулюює об'єкт ADO Connection. Даний компонент призначений для з'єднання зі сховищами даних. З одним компонентом TADOConnection може бути пов'язано кілька компонентів TADOTableHTADOQuery.
З'єднання зі сховищем даних відкривається й закривається за допомогою властивості Connected або методу Open. Методу Open можна передати параметри UserID й Password, у яких зберігаються логін і пароль. Закрити з'єднання можна, викликавши метод Close.
Властивість ConnectOptions визначає тип з'єднання. Можна створювати синхронне й асинхронне з'єднання. За замовчуванням з'єднання визначається як синхронне. У тому випадку, коли сервер працює досить повільно, вибирається асинхронне з'єднання.
Властивість CursorLocation визначає порядок функціонування курсорів. Якщо для властивості задати значення clUseServer, то обробка рядків буде вироблятися на сервері. Клієнтський додаток буде одержувати лише готові результати запитів. Якщо використати значення clUseClient, то додатку пересилається весь набір даних, і курсор буде оброблятися на клієнті. Однак використати клієнтський курсор для більших наборів даних невигідно. Серверний курсор є ледве більш повільним у порівнянні із клієнтським, але знімає обов'язок по обробці даних з клієнта й значно знижує навантаження на мережу.
Властивість IsolationLevel визначає рівень ізоляції транзакції. Цей рівень визначає, як транзакції взаємодіють із іншими з'єднаннями, що одночасно звертаються до таблиці, і визначає область видимості транзакції.
У списку, наведеному нижче, описані основні типи ізоляції транзакцій і додаткові ефекти, що виникають при їхньому використанні:
Значення ilUnspecified вказує, що сервер використовує рівень ізоляції транзакції, відмінний від того, який був запитаний. Також це значення використовується, якщо рівень ізоляції транзакції не був визначений заздалегідь.
Значення ilChaos говорить, що зміни, внесені транзакціями, що мають більш високий рівень, не можуть бути перезаписані в даній сесії.
Значення ilReadUncommitted вказує, що незбережені зміни, внесені іншими транзакціями, є видимими.
Значення ilBrowse показує, що незбережені зміни, внесені іншими транзакціями, є видимими.
Значення ilCursorStability вказує, що зміни, внесені іншими транзакціями, будуть видні тільки після їхнього збереження в базі даних.
Значення ilReadCommitted, як й у попередньому випадку, свідчить, що зміни, внесені іншими транзакціями, будуть видні тільки після їхнього збереження в базі даних.
Значення ilRepeatableRead показує, що зміни, зроблені іншими транзакціями, споконвічно не будуть видні, але повторний запит (відновлення) набору даних може повернути нові записи.
Значення iISerializable змушує сервер ізолювати транзакції друг від друга.
Властивість Provider містить ім'я провайдера, що у цей момент використовується об'єктом Connection. Права доступу, приписані з'єднанню, визначаються за допомогою властивості Mode. Значення властивості Mode вказує на те, які операції можуть бути виконані в даному з'єднанні. Це властивість прямо зв'язана із властивістю ConnectModeEnum об'єкта ADO Connection.
Значення cmUnknown вказує, що обмеження не були встановлені або не можуть бути визначені.
Значення cmRead вказує, що дане з'єднання може читати дані, але не змінювати їх.
Значення cmWrite дозволяє з'єднанню тільки змінювати дані, але не читати їх.
Значення cmReadWrite дозволяє з'єднанню читати й змінювати дані.
Значення cmShareDenyRead вказує, що інші користувачі не можуть відкрити з'єднання з дозволом на читання.
Значення cmShareDenyWrite вказує, що користувачі не можуть відкрити з'єднання з дозволом на запис.
Значення cmShareExclusive забороняє іншим користувачам відкривати з'єднання.
Значення cmShareDenyNone вказує, що інші користувачі не можуть відкрити з'єднання, незалежно від їхніх повноважень.
Властивість KeepConnection визначає, чи може даний додаток підтримувати зв'язок з базою даних, якщо немає відкритих наборів даних. Коли властивість має значення True, з'єднання буде втримуватися у відкритому стані. Для з'єднань із вилученими СУБД або для додатків, які часто відкривають і закривають набори даних, установка значення властивості в True значно зменшує мережний трафик і збільшує швидкість роботи додатку, тому що не потрібно щораз проходити аутентифікацію на сервері.
Для одержання прямого доступу до об'єкта помилок ADO варто звернутися до властивості Errors. Властивість DataSets містить масив активних наборів даних, пов'язаних з компонентом. А властивість DataSetCount дозволяє одержати число активних наборів даних, пов'язаних з компонентом.
var
i:Integer:
begin
for i:=0 to (ADOConnection1.DataSetCount - 1) do
ListBox1.Items.Add(ADOConnection1.DataSets[i].Name)
Властивість State дозволяє довідатися, у якому стані перебуває набір даних. А властивість ConnectionString містить рядок, у якій вказується інформація, необхідна для установки з'єднання із джерелом даних.
До і після відкриття й закриття з'єднання виникають методи-оброблювачі подій AfterConnect, BeforeConnect, AfterDisconnect й BeforeDisconnect відповідно. Методи BeginTrans, CommitTrans й RollbackTrans ініціюють транзакцію, підтверджують її й роблять відкат транзакції відповідно. Ці методи варто помістити в блоки секцій try-finally й try-except.
3.4.3 Механізм з'єднання зі сховищем даних ADO
Перед створенням з'єднання необхідно визначити його параметри. Для цього, як уже говорилося, призначена властивість ConnectionString.
Набір параметрів змінюється залежно від типу використовуваного провайдера й може настроюватися як вручну, так і за допомогою редактора. Для того щоб викликати редактор з'єднань, необхідно двічі клацнути на компоненті TADOConnection. У результаті буде активоване діалогове вікно, показане на рис.3.5.
У цьому вікні можна настроїти з'єднання, використовуючи поле Use Connection String, або завантажити параметри з'єднання з файлу в розділі Use Data Link File.
Рис. 3.5 Вікно редактора рядка з'єднання
Для того щоб настроїти з'єднання з даним провайдером, необхідно нажати на кнопку Build. З'явиться вікно, зображене на рис. 3.6, у якому буде опублікований список доступних провайдерів.
Рис. 3.6 Настроювання параметрів з'єднання
На вкладці Provider можна вибрати підходящий провайдер даних OLE DB для конкретного джерела даних. У списку провайдерів також присутні провайдери, призначені для доступу до конкретних служб операційної системи. На вкладці Connection необхідно вказати шлях до бази даних або сервер. Вкладка Advanced призначена для вказівки режиму доступу, аналогічно властивості Mode. Вкладка All призначена для більш “тонкого” настроювання специфічних властивостей провайдера. Для подальшої роботи потрібно вибрати провайдер MicrosoftJet4.0 OLE DB Provider. Потім потрібно перейти на вкладку Connection. З'явиться вікно, показане на рис. 3.7
Рис. 3.7 Настроювання параметрів джерела даних
У вікні, що з'явилося, необхідно вказати шлях до бази даних. В полі Select or enter a database name потрібно вказати шлях до демонстраційної бази dbdemos.mdb.
Після вказівки шляху до бази даних і завдання інших необхідних параметрів потрібно перевірити створене з'єднання за допомогою кнопки Test Connection. Якщо параметри з'єднання зазначені вірно, з'явиться повідомлення Test connection succeeded. Після закриття цього вікна в рядку з'єднання буде відображена інформація, за допомогою якої провайдер зможе одержати доступ до даних.
3.4.4 Клас TCustomADODataSet
Клас TCustomADODataSet є базовим класом, на основі якого побудовані компоненти наборів даних ADO. Клас інкапсулює властивості, методи й повідомлення для роботи із провайдером даних через провайдер ADO. Додатки не можуть безпосередньо працювати з об'єктами класу TCustomADODataSet, але можуть взаємодіяти з компонентами, породженими від даного класу, такими як ADODataSet, TADOTable, TADOQuery або TADOStoredProc. Клас TCustomADODataSet є прямим нащадком класу TDataSet. Отже, він успадковує його методи й властивості й додає власні. Тому повторно розглядати успадковані можливості немає необхідності.
За допомогою властивості Connection набір даних з'єднується зі сховищем даних. У цій властивості можна вибрати екземпляр компонента TADOConnection або вказати параметри з'єднання за допомогою звичайного рядка.
Властивість LockType дозволяє визначити блокування, що накладають на набір даних при його відкритті:
Значення ltUnspecified вказує, що тип блокування не визначений, тому вона буде встановлена джерелом даних.
Значення ltReadOnly використовується для відкриття набору даних у режимі “тільки для читання”.
Значення ltPessimistic вказує, що інші записи не можуть редагувати запис доти, доки вона не буде записана в сховище даних.
Значення ltOptimistic вказує, що блокування накладає на запис тільки в момент внесення змін.
Значення ltBatchOptimistic накладає блокування на пакет записів під час запису в сховище даних.
Для того щоб одержати відомості про стан набору даних, варто звернутися до властивості RecordsetState. Дана властивість прямо зв'язана із властивістю State об'єктів ADO Connection, Command й Recordset.
Властивість CursorLocation визначає порядок обробки курсорів. А властивість CursorType визначає тип курсору набору даних ADO. Тип курсору набору даних вказує напрямок, у якому буде вироблятися переміщення по набору даних й, відповідно до цього, відображення видимих записів. Тип курсору повинен бути встановлений перед активацією компонента набору даних.
Для цієї властивості передбачений свій жорстко заданий набір значень:
Значення ctUnspecified вказує, що тип курсору не був визначений, тому він буде обраний відповідно до можливостей джерела даних.
Значення ctOpenForwardOnly задає використання односпрямованого курсору, що допускає переміщення по записах тільки вперед.
Значення ctKeyset дозволяє використати двунаправний курсор, що не забезпечує можливість перегляду записів, доданих і вилучених іншими користувачами.
Значення ctDynamic вказує, що даний тип курсору є двунаправним, і забезпечує перегляд всіх змін, внесених у набір даних.
Значення ctStatic дозволяє використати двунаправний курсор, що одержує зліпок набору даних й, відповідно, що ігнорує зміни, внесені іншими користувачами. Використовується в основному при створенні звітів.
У випадку розташування курсору на стороні клієнта підтримується тільки статичний курсор, що задає значенням ctStatic. Якщо заданий тип курсору не підтримується провайдером даних, то останній сам вибирає підходящий тип курсору.
Після відновлення набору даних викликається метод-оброблювач події OnFetchComplete. Як параметр метод може одержувати об'єкт Error, що є посиланням на однойменний об'єкт ADO Error. Через параметр EventStatus набору даних повертається повідомлення, що сповіщає про успішне або неуспішне виконання даної операції.
Перед переміщенням запису викликається метод-оброблювач події OnWillMove. Параметр цього методу Reason містить метод, що викликав даний метод-оброблювач. Після переміщення запису викликається метод-оброблювач події OnMoveComplete.
Цілочисельна властивість CacheSize визначає розмір кеша набору даних. Після передачі клієнтові пакета записів вони розміщаються в буфері локальної пам'яті. Коли додаток переміщається по набору даних, йому пересилаються рядки, розташовані в буфері.
Для одержання розміру запису варто звернутися до властивості RecordSize. А властивість BlockReadSize дозволяє визначити число записів, що поміщають у буфер при пакетній передачі. За замовчуванням властивість має нульове значення і є неактивним. Якщо значення властивості містить ненульове значення, то набір даних переводиться в режим dsBlockRead.
Властивість RecordStatus визначає статус поточного запису. Ця властивість містить інформацію про те, чи був запис доданий, змінена, вилучена або взагалі не піддавалася змінам. Дана властивість може також надати інформацію про те, чому рядок не був збережений після її модифікації, видалення або додавання. Кількість значень цієї властивості строго регламентовано:
Значення rsOK вказує, що запис був успішно збережений.
Значення rsNew свідчить, що запис був успішно доданий.
Значення rsModified вказує, що запис був змінений.
Значення rsDeleted вказує, що запис був вилучений.
Значення rsUnmodified вказує, що запис не був змінений.
Значення rsInvalid вказує, що запис не був збережений.
Значення rsMultipleChanges сигналізує, що запис не може бути збережений через множинні зміни.
Значення rsPendingChanges вказує, що запис не може бути збережений через посилання на незбережені зміни.
Значення rsCanceled вказує, що операція із записом була скасована.
Значення rsCantRelease вказує, що запис був заблокований.
Значення rsConcurrencyViolation сигналізує, що запис не був збережений через те, що використалося оптимістичне блокування.
Значення rsIntegrityViolation вказує на порушення посилальної цілісності.
Значення rsMaxChangesExceeded вказує, що всі зміни не могли бути збережені через занадто велику їхню кількість.
Значення rsObjectOpen вказує на конфлікт із відкритим об'єктом сховища даних.
Значення rsOutOfMemory свідчить про недолік оперативної пам'яті.
Значення rsPermissionDenied вказує, що даний користувач не має прав на здійснення даної операції.
Значення rsSchemaViolation вказує на порушення структури бази даних.
Значення rsDBDeleted вказує, що запис був раніше вилучений.
Метод UpdateStatus повертає поточний стан запису. Цей метод сигналізує про зміни в кеші, якщо вони відбулися. Значення, що повертають даним методом, наведені в списку:
Значення usUnmodified вказує, що даний запис не містить незбережених змін.
Значення usModified свідчить про те, що запис містить незбережені зміни.
Значення usInserted вказує, що поточний запис був доданий у таблицю, але не був збережений в сховище даних.
Значення usDeleted вказує, що запис був вилучений, але зміни не були збережені.
Метод-оброблювач події OnWiilChangeRecord викликається перед внесенням змін у запис набору даних. А подія OnRecordChangeComplete ініціюється відразу після внесення змін. Параметр RecordCount методу, що обробляє ця подія, містить число змінених записів.
Властивість CommandType визначає тип виконуваної команди. У ньому визначається тип команди, що втримується у властивості CommandText. Значення властивості CommandType повинне узгоджуватися зі значенням властивості CommandText. Наприклад, якщо властивість CommandText містить назву таблиці, то властивість CommandType повинна мати значення cmdTable або cmdTableDirect. За замовчуванням властивості CommandType привласнюється значення cmdUnknown. Якщо тип команди визначений на етапі розробки, то істотно заощаджується час, необхідне для визначення типу команди по її значенню. Дана властивість прямо з'єднується із властивістю ADO CommandTypeEnum. Значення цієї властивості зазначені в списку:
Значення cmdUnknown вказує, що тип команди не визначений.
Значення cmdText вказує, що виконується текстова команда, що інтерпретується джерелом даних (SQL-запит або збережена процедура).
Значення cmdTable вказує, що дана команда повертає набір даних зі сховища по імені таблиці.
Значення cmdStoredProc вказує, що використовується збережена процедура.
Значення cmdFile вказує, що застосовується команда одержання набору даних, збережених у файлі
Значення cmdTableDirect вказує, що застосовується команда одержання набору даних з таблиці прямо.
Властивість CommandText використовується для визначення операторів виконуваної команди. Команди, задані у властивості CommandText, виконуються при активізації набору даних.
Для настроювання параметрів процесу виконання команд варто звернутися до властивості ExecuteOptions. Дана властивість може приймати чотири значення:
Значення eoAsyncExecute вказує, що команди виконуються асинхронно.
Значення eoAsyncFetch вказує, що використовується асинхронне виконання команд відновлення набору даних.
Значення eoAsyncFetchNonBlocking вказує, що буде застосовуватися асинхронне відновлення набору даних без накладення блокувань.
Значення eoExecuteNoRecords вказує, що в даному режимі виконування команди й збережені процедури не повертають результатів.
Під час розробки властивість Parameters використовується для доступу до параметрів SQL-запитів, використовуваних компонентами ADO, інкапсулюючими набори даних. Властивості Parameters можна використати для установки й одержання значень параметрів або для установки й перевірки їхніх атрибутів. Властивість TParameters містить колекцію об'єктів Parameters.
До будь-якого параметра, що зберігається в даному екземплярі класу TParameters, можна звернутися по його індексу через властивість Items. А значення параметра можна одержати за допомогою властивості ParamValues, що повертає варіантний масив, що містить значення параметрів. Ім'я параметра передається через константу ParamName. Якщо необхідно одержати доступ більш ніж до одного параметра, то їхні назви розділяються крапкою з комою.
До параметра можна також звернутися по його імені, використовуючи метод ParamByName. Ім'я параметра задається параметром Value.
Для додавання параметра в колекцію необхідно використати метод СгеаteParameter. Ім'я параметра втримується у властивості Name. А тип даних параметра задається властивістю DataType. Тип даних параметра пов'язаний з полем, з яким він взаємодіє. У цілочисельній властивості Size вказується розмір значення параметра строкового типу.
Вид параметра визначається властивістю TParameterDirection. Значення цього списку зазначені далі:
Значення pdUnknown застосовується, коли тип параметра не був заданий.
Значення pdInput вказує, що переданий був вхідний параметр, що використовується в збережених процедурах і запитах.
Значення pdOutput застосовується для позначення вихідного параметра, що використовується в збережених процедурах і запитах.
Значення pdInputOutput визначає, що використовується вхідний і вихідний параметр, що використовується в збережених процедурах і запитах.
Значення pdReturnValue вказує, що даний параметр повертає значення.
Значення параметра втримується у властивості Value. Властивість Attributes містить атрибути параметра, що характеризують тип його значення:
Значення psSigned вказує, що параметру може бути привласнене символьне значення.
Значення psNullable вказує, що значення параметра може бути порожнім.
Значення psLong вказує, що параметру можуть бути привласнені дані типу BLOB.
Також параметру можна привласнити значення, завантаживши їх з файлу або з потоку методами LoadFromFile й LoadFromStream відповідно.
Для одержання прямого доступу до об'єкта ADO Parameter можна звернутися до властивості ParameterObject. Звичайно, звертатися прямо до цього об'єкта не рекомендується, але в деяких випадках клас TParameter не надає потрібні властивості або методи.
Клас TCustomADODataSet підтримує крім звичайної фільтрації, успадкованої від класу TDataSet, фільтрацію записів по їхньому стану. Властивість FilterGroup задає умову фільтрації записів, ґрунтуючись на їхньому стані. Можливі значення властивості зазначені в списку:
Значення fgUnassigned показує, що умови фільтрації не задані.
Значення fgNone вказує, що умови фільтрації знімаються. Всі записи стають видимими. Використання цього значення рівноцінно присвоюванню властивості Filtered значення False.
Значення fgPendingRecords показує, що відображаються ті записи, які були змінені, але не були збережені в сховище даних (UpdateBatch), або ті, зміни яких були скасовані (CancelBatch).
Значення fgAffectedRecords показує, що фільтр відображає ті записи, які були порушені при останнім збереженні.
Значення fgFetchedRecords показує, що відображаються записи, отримані при останнім відновленні із джерела даних.
Значення fgPredicate показує, що відображаються вилучені записи.
Значення fgConflictingRecords показує, що відображаються записи, які не вдалося зберегти в сховище даних внаслідок виниклих помилок.
Для того щоб фільтрація могла бути виконана, необхідно властивості LockType привласнити значення ltBatchOptimistic і включити її, привласнивши властивості Filter значення True.
Для пошуку в наборі даних по полях поточного індексу можна використати метод Seek. У параметрі цього методу KeyValues перераховуються значення індексу, по яких буде вестися пошук. Якщо індекс складається з одного поля, то пошук буде вестися по ньому. Якщо індекс становлять кілька полів, то значення полів вказуються в порядку зростання важливості. Параметр SeekOption визначає порядок повернення результату пошуку:
Значення soFirstEQ вказує, що курсор установлюється на перший знайдений запис. Якщо запис не знайдений, то курсор переводиться на останній запис набору.
Значення soLastEQ вказує, що курсор установлюється на останній знайдений запис. Якщо запис не знайдений, то курсор переводиться на останній запис набору.
Значення soAfterEQ вказує, що курсор встановлюється на знайдений запис або, якщо вона не знайдена, після того місця, де вона могла б перебувати.
Значення soAfter вказує, що курсор встановлюється за знайденим записом.
Значення soBeforeEQ вказує, що курсор встановлюється на знайдений запис або, якщо вона не знайдена, перед тим місцем, де вона могла б перебувати.
Значення soBefore вказує, що курсор встановлюється перед знайденим записом.
Для того щоб використати даний метод, необхідно виконати кілька умов:
Індекс, по якому буде робитися пошук, повинен бути обраний у властивості IndexName.
Властивість CommandType повинне мати значення cmdTableDirect(для TADOTable властивості TableDirect необхідно привласнити значення True).
Властивість CursorLocation повинне мати значення clUseServer.
Властивість CursorType повинне мати значення ctKeySet.
Дані, що зберігаються в кеші набору даних, можна зберегти у файл і завантажити їх з файлу, використовуючи методи SaveToFile й LoadFromFile відповідно. Параметр FiIeName містить ім'я файлу, з яким будуть оперувати методи. У параметрі Format вказується формат, у якому буде збережений набір даних. За замовчуванням використовується значення pfADTG.
3.4.5 Компонент TADODataSet
Даний компонент являє собою набір даних, одержуваних зі сховища ADO. Компонент успадковує властивості й методи класу TCustomADODataSet і додає трохи своїх. Компонент має можливість одержувати результуючі набори даних від однієї або декількох таблиць.
Використовуючи властивість CommandText, можна вказати текст команди, за допомогою якої будуть отримані дані. Це може бути SQL-запит, назва таблиці або назва збереженої процедури. А у властивості CommandType вказується тип команди. Даний компонент не може виконувати SQL-оператори, що не повертають результуючі набори (оператори DELETE, INSERT й UPDATE). З'єднання з базою даних задається властивостями Connection або ConnectionString. Компонент зв'язується з компонентами відображення даних стандартним способом.
3.4.6 Компонент TADOTable
Компонент TADOTable використовується для доступу до сховищ даних ADO і подання інформації з них у табличному виді. Компонент надає прямий доступ до кожного запису і її полів, успадковуючи властивості й методи класу TCustomADODataSet. Компонент зв'язується з базою даних через властивості Connection або ConnectionString.
Ім'я таблиці вказується у властивості TableName. Властивість TableDirect вказує, яким образом набір даних зв'язується зі сховищем даних. Тому що не всі провайдери підтримують пряме з'єднання з набором даних, то в деяких випадках для зв'язку зі сховищем даних доводиться використати SQL-оператори. При установці властивості значення True компонент використовує фонові SQL-запити для доступу до даних.
Використовуючи властивість Readonly, можна встановити обмеження “тільки для читання” на дану таблицю, заборонивши, таким чином, можливість змінювати дані. У властивості MasterSource вказується компонент TDataSource, використовуваний для створення відносини посилальної цілісності Master-Detail.
Метод GetIndexNames повертає список індексів, доступних компоненту як список.
3.4.7 Компонент TADOQuery
Компонент TADOQuery дозволяє виконувати SQL-запити при роботі з даними через ADO. З'єднання зі сховищем даних здійснюється стандартним методом. Текст запиту втримується у властивості SQL.
Параметри запиту втримуються у властивості Parameters. У випадку, якщо компонент повертає набір даних, його варто відкривати методом Open або привласнити властивості Active значення True. Якщо запит не повинен повертати набір даних (оператори INSERT, UPDATE, DELETE й CREATE TABLE), то запит варто виконувати викликом методу ExecSQL. Метод повертає число оброблених запитом записів.
Властивість RowsAffected містить число записів, які торкнув останній запит, що виконувався.
3.4.8 Компонент TADOStoredProc
Компонент TADOStoredProc дозволяє звертатися до збережених процедур, що втримуються в базах даних. Зв'язок компонента зі сховищем даних здійснюється стандартно, через названі раніше властивості.
Ім'я збереженої процедури визначається властивістю ProcedureName. Під час розробки збережену процедуру можна вибрати зі списку вже існуючих процедур.
Для визначення вхідних і вихідних параметрів процедури використовується властивість Parameters. Через параметри збережена процедура одержує аргументи й повертає результати своєї роботи.
У випадку, якщо збережена процедура буде викликатися безліч разів з тими самими аргументами, рекомендується заздалегідь підготувати її до виконання. СУБД розмістить її в оперативній пам'яті. Для цього властивості Prepared варто привласнити значення True.
4. ОПИС ФУНКЦІОНАЛЬНИХ МОЖЛИВОСТЕЙ ТА ПРОГРАМНОЇ РЕАЛІЗАЦІЇ ПРОЕКТОВАНОЇ СИСТЕМИ
4.1 Функціональне призначення та технологічні особливості розробки
Метою дипломної роботи є розробка гнучкої системи автоматизації розрахунку вартості ремонту приміщень. Користувачем цієї системи може бути менеджер або бригадир фірми, що займається ремонтами приміщень.
Гнучка система автоматизації розрахунку вартості ремонту приміщень була реалізована за допомогою інструментального засобу прискореної розробки програм системи програмування Delphi 2006 Explorer, технології доступу до бази даних ADO та пакету альтернативних компонентів Development Express.
Склад розробленої системи:
Ремонт.exe - виконуємий файл розробленої системи;
baza.mdb - файл бази даних MS Access;
Шаблон.dot - шаблон документу для створення таблиці переліку замовників;
Калькуляція.xlt - шаблон для створення калькуляції вартості ремонтних робіт.
Вимоги до програмного забезпечення:
Робота в середовищі операційних систем Windows 2000/XP/Vista/7;
Додаткове програмне забезпечення: установка пакету MS Office;
4.2 Логіко-функціональна схема роботи системи
В загальному вигляді логіко-функціональну роботи системи можна представити наступним чином (рис. 4.1).
Рис. 4.1 Логіко-функціональна схема роботи системи
4.3 Опис інтерфейсу користувача
Після запуску системи на екрані з'являється головне вікно. Програма має стандартний інтерфейс Windows. Зовнішній вид головної форми системи представлений на рис. 4.2
Рис. 4.2 Зовнішній вигляд головного вікна системи
Як вже було зазначено вище, інтерфейс системи був спроектований за допомогою пакету альтернативних компонентів Development Express. Однією з особливостей використання цього пакету є можливість настроювати зовнішній вигляд панелей інструментів (додавати або видаляти кнопки (рис. 4.3), переміщувати панелі). Головне вікно системи має наступні панелі:
Головна Навігація
Рис. 4.3 Зовнішній вигляд панелей інструментів
Перед початком роботи з системою необхідно сформувати довідники, що містять інформацію про типи ремонтних робіт та розцінки. В лівій частині вікна наведений перелік видів ремонтних робіт, в правій - найменування роботи, що належить до обраної категорії, одиниця виміру, що обирається із випадаючого списку та ціна.
Рис. 4.4 Вікно довідників системи
При натисненні кнопки «Добавить заказ» на головній панелі на екрані з'явиться вікно, зовнішній вид якого наведений на рис. 4.5.
У верхній частині вікна ми вводимо інформацію про замовника, та обираємо за допомогою компонента-календаря дату замовлення. Після цього необхідно натиснути кнопку «Добавить комнату». Тоді компоненти вкладки «Комната 1» стануть доступними для вводу. Якщо в приміщенні декілька кімнат, то автоматично буде створена наступна вкладка - «Комната 2». Всього передбачено можливість додавати до 25 кімнат в приміщенні.
Наступним етапом роботи з інтерфейсом системи є ввід параметрів кімнати. Після натиснення кнопки «Вычислить параметры комнаты» у відповідній області вікна (рис. 4.6) будуть виведені обчислюванні значення параметрів, які при цьому автоматично заносяться до бази даних.
Рис. 4.5 Вигляд робочого вікна системи при додаванні нового замовлення
Рис. 4.6 Фрагмент робочого вікна в режимі обчислення параметрів кімнати
Наступний етап - вибір ремонтних робіт, що будуть проводитись в даній кімнаті. Для цього необхідно натиснути кнопку «Выбрать тип работы». На екрані з'явиться вікно довідника (див. рис. 4.4), де ми обираємо спочатку тип роботи, а потім її найменування.
Об'єм деяких видів робіт можна обчислити автоматично, якщо знати параметри кімнати (для цього треба встановити прапорець «Вычислять автоматически»). Кількість інших треба вводити з клавіатури. В обох випадках вартість виконання роботи формується на основі довідника “ Розцінки”. В системі також є можливість згрупувати дані по виду робіт. Для цього необхідно перетягнути мишею назву поля в відповідну область вікна, що призначена для групування. На рис. 4.7 наведений фрагмент робочого вікна системи в режимі групування полів.
Рис. 4.7 Фрагмент робочого вікна системи в режимі групування полів
Кнопка «Рассчитать стоимость» дозволяє розрахувати вартість виконання робіт з урахуванням всіх кімнат. Кнопка «Экспорт калькуляции» дозволяє сформувати вихідний документ на основі шаблону MS Excel. Приклад калькуляції вартості виконання ремонтних робіт наведений в Додатку А.
Система дозволяє зберігати в базі даних інформацію про усі замовлення. Для того, щоб переглянути або відредагувати інформацію, необхідно натиснути відповідну кнопку головного вікна системи (рис. 4.2). На наступному рисунку наведений приклад вікна системи в режимі редагуванні даних.
Рис. 4.8 Приклад вікна системи в режимі редагуванні даних
Ще однією функцією системи є можливість експортувати данні про замовлення в MS Word. В Додатку А наведений приклад експортованої таблиці.
4.4 Програмна реалізація системи
Розроблена система використовує базу даних в форматі mdb з наступною схемою:
Рис. 4.9 Схема взаємозв'язку таблиць бази даних
Всього в нашій базі даних використовується 5 таблиць. Таблиця «Замовлення» містить інформацію про замовників ремонту, їх координати та загальну вартість. Вона пов'язана з таблицею «Кімнати». Ця таблиця містить розміри ремонтованих приміщень. У системі присутні 2 довідники - це «Довідник видів робіт» і «Розцінки». Таблиця «Роботи» містить інформацію про виконані роботи і їх вартість і пов'язана з таблицею «Кімнати».
Типи та призначення полів відповідних таблиць бази даних наведені на наступних рисунках.
Рис. 4.10 Структура таблиці “Замовники”
Рис. 4.11 Структура таблиці “Кімнати”
Рис. 4.12 Структура таблиці “Довідник видів робіт”
Рис. 4.13 Структура таблиці “ Розцінки”
Рис. 4.14 Структура таблиці “ Роботи”
Програми містить 3 форми, за допомогою яких користувач має змогу заносити, змінювати інформацію у базі даних та застосовуючи надані засоби фільтрування даних вибирати потрібні дані. Всі невізуальні компоненти, що призначені для роботи з базою даних розташовані на DataModule2.
Рис. 4.15 Вікно DataModule2
Інтерфейс системи, зокрема плаваючі панелі інструментів були реалізовані за допомогою компонентів, що входять до пакету Development Express.
Рис. 4.16 Вікно настройки параметрів компоненту dxBarManager
Компонент dxBarManager дозволяє в гнучкому режимі створювати та редагувати набір кнопок, що мають бути розміщені на панелі інструментів.
Рис. 4.17 Вікно, що дозволяє редагувати категорії та набір кнопок
Процедура додавання кімнати:
procedure Tf_nom.BitBtn3Click(Sender: TObject);
begin
DataModule2.ADOTable4.Post;
DataModule2.ADOTable4.Edit;
if flag then // Якщо це перша кімната
begin
PageControl1.Enabled:=true;// Компонент стає доступним для вводу даних
flag:=false; // Ознака того, що 1-ша кімната вже додана
DataModule2.ADOTable5.Insert;// Додавання нового запису
DataModule2.ADOTable5kod_zak.AsInteger:=DataModule2.ADOTable4kod_zakaza.AsInteger;
DataModule2.ADOTable5.Post;
// Фільтрація таблиці „Роботи” по коду кімнати
DataModule2.ADOTable6.Filter:='kod_komn='+inttostr(DataModule2.ADOTable5kom_komn.AsInteger);
DataModule2.ADOTable6.filtered:=true ;
exit;
end;
// Далі розглядається процес додавання інших кімнат
case PageControl1.ActivePageIndex of
// Додавання 2-ї кімнати
0: begin PageControl1.Pages[1].TabVisible:=true;
//Активною стає 2-га вкладка
PageControl1.ActivePage:=PageControl1.Pages[1];
DataModule2.ADOTable5.Insert;
DataModule2.ADOTable5kod_zak.AsInteger:=DataModule2.ADOTable4kod_zakaza.AsInteger;
DataModule2.ADOTable5.Post;
DataModule2.ADOTable6.Filter:='kod_komn='+inttostr(DataModule2.ADOTable5kom_komn.AsInteger);
DataModule2.ADOTable6.filtered:=true ;
end;
// Додавання 3-ї кімнати
1: begin PageControl1.Pages[2].TabVisible:=true;
//Активною стає 3-тя вкладка
PageControl1.ActivePage:=PageControl1.Pages[2];
DataModule2.ADOTable5.Insert;
DataModule2.ADOTable5kod_zak.AsInteger:=DataModule2.ADOTable4kod_zakaza.AsInteger;
DataModule2.ADOTable5.Post;
end;
...
end;
end;
Обчислення параметрів кімнати:
procedure Tf_nom.BitBtn1Click(Sender: TObject);
var pl_dv, pl_bal,pl_st,pl_pol,per_pot,per_pol:real;
begin
// Площа дверей
pl_dv:=DataModule2.ADOTable5w_door.AsFloat*DataModule2.ADOTable5h_door.AsFloat;
// Площа дверей балкону
pl_bal:=DataModule2.ADOTable5w_bal.AsFloat*DataModule2.ADOTable5h_bal.AsFloat;
// Площа стін
pl_st:=DataModule2.ADOTable5length_komn.AsFloat*DataModule2.ADOTable5height_komn.AsFloat*2+DataModule2.ADOTable5width_komn.AsFloat*DataModule2.ADOTable5height_komn.AsFloat*2-pl_dv-pl_bal;
label11.Caption:='Площадь стен - ' +floattostrf(pl_st,fffixed,5,2);
// Площа полу
pl_pol:= DataModule2.ADOTable5length_komn.AsFloat*DataModule2.ADOTable5width_komn.AsFloat;
label12.Caption:= 'Площадь пола - '+ floattostrf(pl_pol,fffixed,5,2);
// Периметр стелі
per_pot:=DataModule2.ADOTable5length_komn.AsFloat*2+DataModule2.ADOTable5width_komn.AsFloat*2;
// Периметр полу
per_pol:=per_pot-DataModule2.ADOTable5w_bal.AsFloat-DataModule2.ADOTable5w_door.AsFloat;
label13.Caption:= 'Периметр пола - ' + floattostrf(per_pol,fffixed,5,2);
label14.Caption:='Периметр потолка - ' + floattostrf(per_pot,fffixed,5,2);
end;
Виклик вікна довідника:
procedure Tf_nom.BitBtn2Click(Sender: TObject);
begin
fl:=true; // Ознака того, що вікно буде викликане в режимі вибору роботи
sprav.ShowModal;
// Таблиця „Роботи” фільтрується по коду кімнати
DataModule2.ADOTable6.Filter:='kod_komn='+inttostr(DataModule2.ADOTable5kom_komn.AsInteger);
DataModule2.ADOTable6.filtered:=true ;
end;
Наступний код виконується при закритті вікна довідника в режимі вибору ремонтної роботи.
procedure Tsprav.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if fl
then
begin
// Вставка нового запису
DataModule2.ADOTable6.Insert;
DataModule2.ADOTable6kod_type.AsInteger:= DataModule2.ADOTable2kod_rab.AsInteger;
DataModule2.ADOTable6kod_rab.AsInteger:=DataModule2.ADOTable3kod_r.AsInteger;
DataModule2.ADOTable6kod_komn.AsInteger:=DataModule2.ADOTable5kom_komn.AsInteger;
DataModule2.ADOTable6.Post
end;
end;
Як вже було згадано вище, система дозволяє зберігати всю інформацію про замовлення. Далі наведений фрагмент коду, що дозволяє цю інформацію редагувати.
procedure Tmain.dxBarButton7Click(Sender: TObject);
begin
// Зміна назви вікна
f_nom.Caption:='Редактировать заказ';
// Вікно зміни параметрів доступне для редагування
f_nom.PageControl1.Enabled:=true;
// Пошук даних по коду замовлення
DataModule2.ADOTable5.Locate('kod_zak',DataModule2.ADOTable4kod_zakaza.AsInteger,[]);
// Фільтрація даних по коду кімнати
DataModule2.ADOTable6.Filter:='kod_komn='+inttostr(DataModule2.ADOTable5kom_komn.AsInteger);
// Активація фільтру
DataModule2.ADOTable6.filtered:=true ;
// Виведення форми редагування на екран
f_nom.showmodal
end;
Розглянемо більш детально процес формування вихідних документів системи. Таблиця переліку замовників створюється на основі шаблону 'Шаблон.dot', що міститься в поточному каталозі системи.
procedure Tmain.dxBarButton5Click(Sender: TObject);
var i,j:integer;
s:string;
begin
// Створення посилання на об'єкт-додаток
w:=createoleobject('word.application');
//створюємо документ MS Word на основі вказаного шаблону
w.documents.add(ExtractFilePath(ParamStr(0)) + 'Шаблон.dot'); myrange:=w.activedocument.range(w.activedocument.range.end-1,w.activedocument.range.end-1);
//створюємо посилання на таблицю, міститься в документі
table:= w.activedocument.tables.item(1);
//Далі ми перебираємо усі записи, що містяться в наборі (і - номер рядка, j - номер стовпчика
for i:=0 to cxGrid1DBTableView1.DataController.RecordCount-1 do
begin
//додаємо до таблиці Word рядок
table.rows.add;
//перебираємо в циклі усі стовпчики
for j:=0 to cxGrid1DBTableView1.ColumnCount-1
do begin
case j of //в залежності від номеру стовпчика здійснюються відповідні операції
0: begin
//перший стовпчик - замовник ремонтних робіт
if cxGrid1DBTableView1.DataController.Values[i,j]<>null //перевірка на відсутність даних в комірці
then
//якщо комірка не є порожньою
s:=cxGrid1DBTableView1.DataController.Values[i,j]
else s:=''; //якщо дані відсутні
//далі сформоване значання заноситься у відповідну комірку таблиці Word
table.cell(i+2,1).range.text:=s;
end;
1: begin //другий стовпчик, що містить дату замовлення та має тип „дата-час”
if cxGrid1DBTableView1.DataController.Values[i,j]<>null then
// якщо комірка не є порожньою, її значення додається до змінної, що містить номер
s:=datetostr(cxGrid1DBTableView1.DataController.Values[i,j]); //перетворення типів
//далі сформоване значення заноситься у відповідну комірку таблиці Word
table.cell(i+2,2).range.text:=s;
end;
2: begin //третій стовпчик - координати клієнта
if cxGrid1DBTableView1.DataController.Values[i,j]<>null then
s:=cxGrid1DBTableView1.DataController.Values[i,j]
else s:='';
table.cell(i+2,3).range.text:=s;
end;
3: begin // четвертий стовпчик - сума замовлення
if cxGrid1DBTableView1.DataController.Values[i,j]<>null then
s:=floattostr(cxGrid1DBTableView1.DataController.Values[i,j])
else;
table.cell(i+2,4).range.text:=s;
end;
end;
end;
end;
w.visible:=true; //візуалізація документу MS Word
end;
Експорт калькуляції в формат MS Excel відбувається подібним чином на основі шаблону Калькуляція.xlt.
При виконанні даної процедури була використана функція FindAndInsert, яка дозволяє знаходити рядок FindText і підставляти на її місце рядок ReplacementText.
function FindAndInsert(FindText,replacementText:string):boolean;
var range:variant;
begin
range:=e.cells.replace(what:=findtext,replacement:=replacementtext);
end;
Далі описаний фрагмент коду, що дозволяє експортувати дані в MS Excel.
GetCurrentDirectory(255,AppPath); //визначаємо директорію, де розташований виконавчий файл
S:=APPPATH; //шлях до здійснимого файлу
E:=CreateOleObject('Excel.Application');
workbook:=e.workbooks.add(s_f+'\ Калькуляція.xlt" '); //створення книги на основі шаблону
findandinsert('##data',datetostr(date)); //пошук і заміна тексту, в даному випадку дати формування документа
Виведення інших даних проводиться аналогічним чином.
5. ЕКОНОМІЧНЕ ОБҐРУНТУВАННЯ ДОЦІЛЬНОСТІ РОЗРОБКИ ПРОГРАМНОГО ПРОДУКТУ
Метою дипломної роботи є створення гнучкої системи автоматизації розрахунку вартості ремонту приміщень. Користувачем цієї системи є менеджер або бригадир фірми, що займається ремонтами приміщень.
Також варто підкреслити, що інструмент розробки програмного забезпечення - Delphi 2006 Explorer є на даний момент безкоштовним, і тому розробка власного програмного забезпечення є економічно доцільним в порівнянні з використанням потужних засобів організації інформаційних потоків.
Важливим чинником, при процесі формування ціни, є ринкова конкуренція, яку необхідно враховувати. Для підвищення конкурентоспроможності продукту часто виникає необхідність зниження ціни продукту на ринку. Підвищенню конкурентоспроможності служить не тільки зниження ціни, але, також, і якість товару, зокрема його вигідні ознаки в порівнянні з аналогічним товаром конкурентів.
Основним моментом для розробника, з економічної точки зору, є процес формування ціни. Програмні продукти є вельми специфічним товаром з безліччю властивих ним особливостей. Багато їх особливостей виявляються і в методах розрахунків ціни на них. При розробці програмного продукту середньої складності потрібні вельми незначні засоби. Але при цьому він може дати економічний ефект, що значно буде значно перевищувати ефект від використання достатньо дорогих систем.
Економічна доцільність розробки полягає в економії трудовитрат в порівнянні з ручною обробкою і отриманні достовірнішої інформації за коротший час.
Для функціонування системи необхідний персональний комп'ютер на базі Intel процесору з частотою не менше 2,4 ГГц, з ОЗУ рівним 512Мб, з SVGA - відеоадаптером і монітором 17 дюймів.
Таблиця 5.1 Вартість устаткування
№п/п |
Найменування |
Марка |
К-ть |
Ціна |
Сума |
|
1 |
ЕОМ (зі встановленою операційною системою Windows XP) |
1 |
3700.15 |
3700.15 |
||
2 |
Джерело безперебійного живлення |
APC Back-Bk500 EI |
1 |
343.00 |
343.00 |
|
Разом: |
4043,15 |
Вартість устаткування збільшується на вартість транспортування - 10% і вартість монтажа- 15%. Разом вартість устаткування складе:
Соб = 4043,15+404,32+606,47=5053,94
Амортизація комп'ютера складає 15% в квартал від залишкової вартості, тобто А = Фост Н, де Фост - залишкова вартість відповідно групи ОФ на початок кварталу. На - норма амортизації.
I квартал 5053,94 х 0.15 = 758,09
II квартал (5053,94 -758,09) х 0.15 = 644,37
III квартал (5053,94 -758,09 - 644,37) х 0.15 = 547,72
IV квартал (5053,94 -758,09 - 644,37 - 547,72) х 0.15 =465,56
Разом річна амортизація складе: 2415,74
Витрати на електроенергію:
Е = N х В х t, де N - споживана об'єктом потужність від мережі (кВт/час)
t - Тариф на електроенергію
B - Регламентований час роботи об'єкту протягом року. ч/год.
В= кількість робочих днів в році х 8 годин =251 х 8 = 2008 (годин)
Е = 0,30 х 2008 х 0,24 = 144,58 грн./год.
Нормативне споживання електроенергії комп'ютером - 300 вт/година або 0,3 квт/час. Вартість 1 кВт електроенергії для підприємства 24 копійки або 0,24 грн.
Розрахунок заробітної плати програміста.
Для розробки, тестування і впровадження системи програмістові необхідно біля одного місяця.
Подобные документы
База даних як складова частина інформаційної системи. Загальні принципи створення контролерів автоматизації MS Office. Розробка гнучкої комп'ютеризованої системи, призначеної для автоматизації розрахунку учбового навантаження. Моделі представлення даних.
дипломная работа [4,7 M], добавлен 26.10.2012Об'єктна модель MS Excel. Загальні принципи створення контролерів автоматизації MS Office. Створення об'єкту Excel. Application, запуск і візуалізація вікна додатку. Загальні характеристики середовища Delphi. Високопродуктивний компілятор у машинний код.
дипломная работа [1,2 M], добавлен 26.10.2012Принципи організації баз даних (БД) при проектуванні клієнт-серверних додатків. Інструментальні засоби створення системи. Різновиди архітектур БД. Функції та програмна реалізація. Економічне обґрунтування доцільності розробки програмного продукту.
дипломная работа [2,1 M], добавлен 22.10.2012Розробка гнучкої довідкової системи, яка дозволяє наочно проілюструвати можливості управління додатками MS Office за допомогою програм, створених у середовищі Delphi. Система базується на використанні технології COM і об'єктних моделей MS Word і MS Excel.
дипломная работа [2,5 M], добавлен 25.10.2012Delphi як візуальне середовище розробки програмного забезпечення. Створення автоматизованої системи відстеження дзвінків з мобільних телефонів працівниками правоохоронних органів. Основи технології ACTIVEX DATA OBJECTS. Функціональні можливості системи.
дипломная работа [5,0 M], добавлен 26.10.2012Приклади рішень від провідних компаній-розробників, що працюють у сфері автоматизації роботи з документами. Основні можливості систем електронного документообігу. Вибір програмного забезпечення для створення програмного продукту. Опис програмної системи.
курсовая работа [45,8 K], добавлен 06.06.2011Дослідження технології com та принципи створення контролерів автоматизації Ms Office і Ms Excel. Розробка програмного забезпечення для збору статистичного ряду показників в умовах неврологічного відділення Криворізького інституту професійних захворювань.
дипломная работа [2,8 M], добавлен 22.10.2012Розробка системи, що виконує функцію автоматизації процесу пропускного пункту підприємства з використанням мов програмування PHP, JavaScript і MySql. Практичні аспекти проектування ГІС із використанням WEB-технологій і баз даних, тестування програми.
дипломная работа [1,5 M], добавлен 25.10.2012Види інформаційних систем. Програмна реалізація гнучкої системи для автоматизованої реєстрації та обліку руху імунобіологічних препаратів в середовищі Delphi 6.0 з використанням технології доступу до баз даних ADO. Розрахунок витрат на розробку програми.
дипломная работа [3,2 M], добавлен 25.10.2012Особливості роботи ресторану та необхідність автоматизації процесів документообігу. Вимоги до продукту, вид інтерфейсу для користувача, додаткові функції при роботі з базою даних та веденням обліку. Вибір операційної системи та її основних компонентів.
курсовая работа [310,6 K], добавлен 18.09.2012