89603

Інформаційна система туристичної фірми «Сказочный тур»

Дипломная

Информатика, кибернетика и программирование

Програма може зберігатися на будь-якому носії інформації з достатньою для її запису ємністю. Рекомендований тип носія – флешка, жорсткий диск типа вінчестер або CD-ROM. Умови навколишнього середовища повинні відповідати умовам експлуатації цих носіїв, які вказуються в їх технічних характеристиках.

Украинкский

2015-05-15

1.94 MB

0 чел.

Інформаційна система туристичної фірми «Сказочный тур»_____ 

РЕФЕРАТ

Дипломна робота складається з 68 ст., 13 рис., 14 таблиць, 3 діаграм, 2 додатків.

Метою дипломного проекту є створення та супроводження інформаційної системи туристичної фірми "Сказочный тур".

У процесі дипломного проектування була розроблена програма на мовах програмування С# та MySql з використанням технології ADO.NET.

Був проведений аналіз вимог до функціональності програмного продукту, розроблена його архітектура, а також дизайн.

У процесі дипломного проектування був виконан опис алгоритмів та підпрограм, були використані UML- діаграми, проведений аналіз особливостей реалізації баз даних, проведено тестування бази даних.

У процесі виконання дипломного проекту я ознайомився з вимогами, що пред'являються до програмної документації та оформив документацію дипломного проекту згідно з вимогами державних стандартів.

Ключові слова:  C#, ADO.NET, UML, Access.

 ABSTRACT

Diploma consists of 68 pages, 13 pictures, 14 tables, 3 diagrams, 2 supplements.

The aim of the diploma is the creation and maintenance of an information system travel company "Skazochnыy tour".

During the graduate design program has been developed for programming languages C # and MySql using technology ADO.NET.

There was an analysis of the requirements for the functionality of the software developed by its architecture and design.

During graduate design was made description of algorithms and subroutines were used UML- diagram analysis implementation details of databases tested database.

In the course of diploma I have read the requirements imposed on the software and documentation designed the diploma project documentation as required by the state standards.

Keywords : C #, ADO.NET, UML, Access.


ЗМІСТ

Арк.

Вступ

3

1 Підстава для розробки

3

2 Призначення розробки

3

3 Вимоги до програмного виробу

3

3.1 Вимоги до функціональних характеристик

3

3.2 Вимоги до надійності

5

3.3 Умови експлуатації

5

3.4 Вимоги до складу та параметрів технічних засобів

5

3.5 Вимоги до інформаційної та програмної сумісності

5

3.6 Вимоги до програмної документації.

6


ВСТУП

Програма дипломного проекту «Інформаційна система туристичної фірми "Сказочный тур"» розроблена на алгоритмічній мові С# з використанням технології .NET. Тема дипломного проекту актуальна, бо програма буде використовуватись в навчальному процесі.

Створення подібної програми вимагає знань різних наук, таких як алгоритми, математика, фізика.

1 ПІДСТАВА ДЛЯ РОЗРОБКИ

Підставою для розробки програмного продукту є завдання, видане Харківським патентно - комп'ютерним коледжем по замовленню фізичної особи-підприємця Борисової Ірини Володимирівни, під найменуванням «Інформаційна система туристичної фірми "Сказочный тур"».

  1.  ПРИЗНАЧЕННЯ РОЗРОБКИ

Розроблена база даних повинна представляти:

  •  інформацію про "гарячі" тури;
  •  інформацію про існуючі тури;
  •  інформацію про готелі;
  •  інформацію про квитки;
  •  пропозиції щодо екскурсій;
  •  робити можливим додавання, оновлення, видалення та перегляд записів.

3 ВИМОГИ ДО ПРОГРАМНОГО ВИРОБУ

3.1 Вимоги до функціональних можливостей

В базі даних «Інформаційна система туристичної фірми "Сказочный тур"» використовуються такі вхідні дані:

інформація про постачальників;

інформація про тури;

інформація про працівників;

інформація про послуги;

інформація про клієнтів;

інформація про замовлення;

Програма повинна виконувати наступні дії:

  •  додавати дані про постачальників, тури, працівників, послуги, клієнтів та замовлення;
  •  оновлювати інформацію про постачальників, тури, працівників, послуги, клієнтів та замовлення;
  •  вилучати дані про постачальників, тури, працівників, послуги, клієнтів та замовлення;
  •  виконувати SQL-запити до бази даних;
  •  дати можливість ознайомитись з переліком постачальників, турів, працівників, послуг, клієнтів та замовлень;
  •  скористатись фільтром та пошуком.

База даних повинна мати не складний, інтуїтивний інтерфейс користувача.

Меню програми повинно складатись з декількох пунктів:

  •  Форма входу, яка включає в себе ввід паролю.
  •  Форма по роботі з базою даних в форматі Access, яка включає додавання, оновлення, видалення записів про постачальників, тури, працівників, послуги, клієнтів та замовлення. Також форма включає можливість сортування і фільтрації записів та розрахунок обчислюваного стовпця.
  •  Форма по роботі з базою даних в форматі XML, яка включає додавання, оновлення, видалення записів про постачальників, тури, працівників, послуги, клієнтів та замовлення.
  •  Форма запису таблиць в Word та Excel, яка включає в себе елемент відображення інформації про постачальників, тури, працівників, послуги, клієнтів та замовлення та дві кнопки для запису у Word та Excel відповідно.
  •  Форма для SQL-запитів, яка включає в себе поле для вводу запиту і елемент відображення результатів.

3.2 Вимоги до надійності

Програма повинна коректно працювати при стандартних умовах. Необхідно передбачити контроль вхідної інформації, обробку виняткових ситуацій.

3.3 Умови експлуатації

Програма може зберігатися на будь-якому носії інформації з достатньою для її запису ємністю. Рекомендований тип носія – флешка, жорсткий диск типа вінчестер або CD-ROM. Умови навколишнього середовища повинні відповідати умовам експлуатації цих носіїв, які вказуються в їх технічних характеристиках. При їх недотриманні автор програмного продукту не буде нести відповідальності за коректність роботи програми.

3.4 Вимоги до складу та параметрам технічних засобів

Технічні засоби для використання даного програмного продукту повинні включати в себе комп'ютер IBM-PC під управляння операційної системи Windows. Вимоги до складу обладнання комп'ютера пред'являються в описанні вимог до обладнання комп'ютера для використання операційної системи Windows.

3.5 Вимоги до інформаційної та програмної сумісності

Програмний продукт повинен використовувати стандартні елементи управління операційної системи Windows. Комп’ютер повинен мати встановлений .NET Framework версії 4.5 або вище. Вихідні коди повинні писатись на мові програмування C#.

3.6 Вимоги до програмної документації

При роботі над дипломним проектом розроблена програмна та експлуатаційна документація.

До експлуатаційних документів відносяться:

  •  інструкція оператора;
  •  інструкція по супроводженню програмного продукту;

До програмних документів відносяться:

  •  технічне завдання;
  •  пояснювальна записка;
  •  текст програми у роздрукованому виді та на носії інформації;
  •  опис програми;
  •  методика тестування.

Всі документи оформлюються відповідно до існуючих стандартів ЄСПД (Єдиний Стандарт Програмної Документації).


Харківський  патентно-комп’ютерний  коледж

Відділення „Розробка програмного забезпечення”

Предметно-циклова комісія  „Програмування”

___________Інформаційна система туристичної фірми «Сказочный тур»__


Пояснювальна записка

ДП5.05010301.01.14.81

Виконав   

Дерев'янко О.О.

                                                                                (прізвище та ініціали)

Керівник

Борисова І.В.

                                                                                (прізвище та ініціали)

Харків – 2014 року


ЗМІСТ

Арк.

Вступ

3

1 Теоретичний розділ

4

1.1 Аналіз предметної області

4

1.2 Обґрунтування вибору мови програмування

5

1.3 Вибір технології розробки

7

2 Проектний розділ

10

2.1 Алгоритм розв’язання задачі

10

2.1.1 Перелік класів

10

2.1.2 Текстуальний опис алгоритму

12

2.2 Проектування бази даних. Розробка бази даних

14

3 Бізнес-план

15

3.1 Резюме

15

3.2 Оцінка ринку збуту

15

3.3 Конкуренція

16

3.4 Стратегія маркетингу

20

3.5 Фінансовий план

23

4 Охорона праці

26

4.1 Загальні питання охорони праці

26

4.2 Гігієна праці та виробнича санітарія

26

4.3 Організація робочого простору

29

4.4 Електробезпека в приміщеннях з ЕОМ

31

4.5 Пожежна безпека

33

Висновки

35

Перелік посилань

36

ДОДАТОК А. UML-діаграми

37

ДОДАТОК Б. Лістинг програми                                                                    43


ВСТУП

У сучасному світі стрімкими темпами розвиваються інформаційні технології та ті сфери людської діяльності, які з ними пов'язані. Інформатизація стала невід’ємною частиною життя людини. З кожним роком все більший обсяг інформації обробляється за допомогою сучасних персональних комп'ютерів. Це означає, що суспільство стало на шлях інформаційного розвитку.

Торгівельна діяльність є одним з основних напрямів інформатизації в нашій країні. Загальновідомо, що кожний працівник, зайнятий у торгівлі, переобтяжений необхідністю заповнення великої кількості робочої документації. З іншого боку, без використання сучасних технологій важко якісно заповнити необхідні документи, що негативно позначається на цілісності даних. Комп'ютеризація торгівельних закладів передбачає створення баз даних різного призначення та отримання  необхідних даних в автоматичному режимі.

Об'єкт даної дипломної роботи – програма, яка працює з базою даних магазину спортивного харчування. Створення інформаційної системи для працівників такого торгівельного закладу як магазин направлене на вирішення наступних завдань: значно зменшити кількість часу, який працівник витрачає на заповнення відповідної документації, швидко отримати необхідні дані, оновити інформацію, видалити непотрібний запис та інше.

Торгівельні заклади повинні мати інформаційні системи для того, щоб в більш зручній формі зберігати данні, не витрачати час на заповнення та пошук необхідної інформації.

Інформаційна система магазингу спортивного харчування розроблена в середі програмування Visual Studio 2012 на мові програмування С# з використанням бази даних Access.


1 ТЕОРЕТИЧНИЙ РОЗДІЛ

1.1 Аналіз предметної області

Туризм сьогодні - це глобальний комп'ютеризований бізнес, у якому беруть участь найбільші авіакомпанії, готельні ланцюжки та туристичні корпорації всього світу. Сучасний туристичний продукт стає гнучкішим і індивідуальним, більш привабливим і доступним для споживача.

Персональний комп'ютер та Інтернет, їх доступність і надійність, сприяють проникненню в усі сфери суспільства нових інформаційних технологій. Ці технології є, можливо, першими в історії людства, що забезпечують зростання продуктивності у сфері послуг.

Це спостерігається сьогодні і в туризмі. Адже туризм та інформація нероздільні: рішення про поїздку приймається на основі інформації; сам тур в момент покупки - теж тільки інформація; інформацією обмінюються сотні разів на день всі учасники туристичного ринку, отже, потрібно вміти працювати з інформацією, збирати, обробляти і приймати на її основі єдино вірне рішення.

Тому розвиток інформаційних систем в туризмі має бути одним з першочергових.

Постачальниками туристичних послуг використовується ряд комунікаційних технологій, здатних забезпечити пряме супутникове висвітлення міжнародних подій, ведення бізнесу за допомогою телеконференцій з рухливих засобів повідомлення (наприклад, можливість зробити дзвінок в будь-яку частину світу з борту літака). Для отримання інформації про місце перебування, його привабливих особливостях також необхідні різні відео засоби. В результаті застосування інформаційних технологій зростають безпека та якість туристичних послуг, а аж ніяк не відбувається зміна їх явного людського змісту.

Інформаційні технології забезпечують діяльність авіакомпаній. У процесі організації, управління і контролю авіа операцій величезну роль грають електронні системи, що допомагають при плануванні маршрутів та розкладу, контролю та аналізу проходження польотів, управлінні персоналом бухгалтерський облік та перспективному плануванні. Вони включають, наприклад, систему передачі та напрямки повідомлень, супутникову систему збору та передачі інформації для повітряного транспорту, інерційні навігаційні системи, систему контролю за повітряними перевезеннями, систему продажу авіаційних квитків.

Забезпечення високого рівня обслуговування в готелі в сучасних умовах неможливо досягти без застосування нових технологій.

Нова технологія передбачає автоматизацію багатьох готельних процесів, електронне резервування, введення технологій, що сприяють поліпшенню якості обслуговування одночасно при скороченні персоналу. Автоматизовані системи спрямовані на підвищення продуктивності праці, підняття рівня знань у вищих управлінських працівників. Стає все більш звичайним суміщення професій, що тягне за собою зростаючу потребу в більш фундаментальної підготовці персоналу, в навчанні їх декількох професіях.

Комп'ютери широко використовують у центральних інформаційно - обчислювальних центрах готелів. З їх допомогою відбувається управління резервуванням, облік відвідувачів, розподіл кімнат, облік інвентарю і контроль за поставками харчування.

1.2 Обґрунтування вибору мови програмування

Останнім часом С і С++ є найбільш використовуваними мовами для розробки комерційних і бізнес додатків. Ці мови влаштовують багатьох розробників, але насправді не забезпечують належної продуктивності розробки. Наприклад, процес написання програми на С++ часто займає значно більше часу, ніж розробка еквівалентного додатки, скажімо, на Visual Basic. Зараз існують мови, що збільшують продуктивність розробки за рахунок втрати в гнучкості, яка так звична і необхідна програмістам на С/С++. Подібні рішення є досить незручними для розробників і часто пропонуються значно менші можливості. Також ці мови не орієнтовані на взаємодію з з'являються сьогодні системами і дуже часто вони не відповідають існуючій практиці програмування для Web. Багато розробників хотіли б використовувати сучасну мову, яка дозволяла б писати, читати і супроводжувати програми з простотою Visual Basic і в той же час давав би міць і гнучкість C++, забезпечував би доступ до всіх функціональних можливостей системи, взаємодіяв б з існуючими програмами і легко працював б з виникаючими Web стандартами.

Враховуючи всі подібні побажання, Microsoft розробила нову мову - C#. У нього входить багато корисних особливостей - простота, об'єктна орієнтованість, типова захищеність, підтримка сумісності версій і багато іншого. Дані можливості дозволяють швидко і легко розробляти програми, особливо COM + додатки і Web сервіси. При створенні C#, його автори враховували досягнення багатьох інших мов програмування: C++, C, Java, SmallTalk, Delphi, Visual Basic і т.д. Треба зауважити що з причини того, що C # розроблявся з чистого листа, у його авторів була можливість (якої вони явно скористалися ), залишити в минулому всі незручні і неприємні особливості ( існуючі, як правило, для зворотної сумісності), будь-якого з попередніх йому мов. В результаті вийшла дійсно проста, зручна і сучасна мова, за потужністю не поступається С++, але істотно підвищує продуктивність розробок.

C# - мова програмування, синтаксис якого дуже схожий на синтаксис Java ( але не ідентичний йому). Наприклад, в C# (як в Java ) визначення класу складається з одного файлу (*.Cs ), на відміну від C++, де визначення класу розбито на заголовок (*.H ) і реалізацію (*.Cpp ). Однак називати C# клоном Java було б невірно. Як C#, так і Java засновані на синтаксичних конструкціях C++. Якщо Java у багатьох відношеннях можна назвати очищеної версією C++, то C# можна охарактеризувати як очищену версію Java.

Синтаксичні конструкції C# успадковані не тільки від C++, але і від Visual Basic. Наприклад, в C#, як і в Visual Basic, використовуються властивості класів. Як C++, C# дозволяє виробляти перевантаження операторів для створених вами типів ( Java не підтримує ні ту, ні іншу можливість). C# - це фактично гібрид різних мов. При цьому C# синтаксично не менш ( якщо не більш ) чистий, ніж Java, так само простий, як Visual Basic, і володіє практично тією ж потужністю і гнучкістю, що й C++. Підводячи підсумки, ще раз виділимо основні особливості C#.

  •  Покажчики більше не потрібні! У програмах на C#, як правило, немає необхідності в роботі з ними ( однак якщо вам це буде потрібно, будь ласка, - можливості для роботи з вказівниками у вашому розпорядженні).
  •  Управління пам'яттю проводиться автоматично.
  •  У C# передбачені вбудовані синтаксичні конструкції для роботи з перерахуваннями, структурами і властивостями класів.
  •  У C# залишилася можливість перевантажувати оператори, успадковані від C++. При цьому значна частина виникали при цьому складнощів ліквідована.
  •  Передбачена повна підтримка використання програмних інтерфейсів. Однак на відміну від класичного COM застосування інтерфейсів - це не єдиний спосіб роботи з типами, використовуючи різні двійкові модулі. .NET дозволяє передавати об'єкти (як посилання або як значення) через кордони програмних модулів.
  •  Також передбачена повна підтримка аспектно - орієнтованих програмних технологій (таких як атрибути). Це дозволяє привласнювати типам характеристики ( що багато в чому нагадує COM IDL ) для опису в майбутньому поведінки даної суті.

У зв'язку з вище зазначеним, при розробці дипломного проекту, була обрана мова програмування C#.

1.3 Вибір технології розробки

Сьогоднішній століття високих технологій і наукових досягнень диктує високий темп розвитку всіх галузей і наук, що призвело до автоматизації більшості сфер життя сучасної людини. Як у і будь-якого процесу у автоматизації є і позитивні і негативні сторони. З точки зору будь-якого керівника автоматизація зменшує витрати на виробництво і підвищує ефективність працездатності всієї організації в цілому. Але з точки зору людей, які розробляють системи автоматизації ситуація досить складна, тому що в основі будь-якої інформаційної системи лежить база даних, а точніше СУБД. І вибір тієї чи іншої СУБД впливатиме на подальші функціональні можливості інформаційної системи і те, як вона буде спроектована. А на сьогоднішній день налічується близько двох десятків різних СУБД. І перед розробником постає складний вибір, яку СУБД використовувати, бо знати особливості проектування при кожній СУБД непосильне завдання навіть для цілого відділу розробників .

Ситуація ще ускладнюється коли необхідно забезпечити підтримку різних джерел даних. При чому кожен з таких джерел даних може зберігати й обробляти дані по - своєму. Ще необхідно враховувати, що в різних мовах програмування різна підтримка роботи з тією або іншою СУБД.

Тобто, ще виникає проблема не відповідності обробки інформації більшістю СУБД і способом обробки інформації різними мовами програмування .

Рішення висунутих проблем знайдено в новій технології ADO.NET, розробленої компанією Microsoft, і включеної в їх нову платформу .NET Framework.

Всі проектувальники інформаційних систем схильні до однієї великої проблеми: складність вибору СУБД і подальша реалізація взаємодії з нею. У зв'язку з цим, метою даної роботи є спрощення процесу проектування ІС. Для реалізації даної мети поставлено завдання - розробити архітектуру, яка володіє можливістю масштабування, адаптації до будь-якого джерела даних. Архітектура повинна бути проста в розумінні розробникам ІС, і володіти гнучким механізмом використання ресурсів. Для реалізації даної системи пропонується використовувати технологію ADO.NET і платформи .NET.

ADO.NET - це частина Microsoft. NET Framework, тобто набір засобів і верств, що дозволяють додатком легко управляти і взаємодіяти зі своїм файловим або серверним сховищем даних.

У NET Framework бібліотеки ADO.NET знаходиться в просторі імені System.Data. Ці бібліотеки забезпечують підключення до джерел даних, виконанні команд, а також сховище, обробку і вибірку даних.

ADO.NET відрізняється від попередніх технологій доступу до даних тим, що вона дозволяє взаємодіяти з базою даних автономно, з допомогою від бази кеша даних.

Автономний доступ до даних необхідний, коли неможливо утримувати відкрите фізичне підключення до бази даних кожного окремого користувача або об'єкта.

Важливим елементом автономного доступу до даних є контейнер для табличних даних, яка не знає про СУБД. Такий незнаючий про СУБД автономний контейнер для табличних даних представлений в бібліотеках ADO.NET класом DataSet або DataTable.

Як і будь-яка інша технологія, ADO.NET складається з кількох важливих компонентів. Всі класи .NET групуються в простори імен. Всі функції, які стосуються ADO.NET знаходяться в просторі імен System.Data. Крім того, як і будь-які інші компоненти .NET, ADO.NET працює, не ізольовано і може взаємодіяти з різними іншими компонентами .NET.

Підключаєма частина ADO.Net являє собою набір об'єктів підключень.

Об'єкти підключень розділяються в ADO.NET по конкретних реалізаціям для різних СУБД. Тобто для підключення до бази даних SQL SERVER мається спеціальних клас SqlConnection .

Ці окремі реалізації для конкретних СУБД називаються постачальниками даних .NET.

При наявності широкого вибору доступних джерел даних ADO.NET повинна мати можливість підтримувати безліч джерел даних. Кожен такий джерело даних може мати свої особливості або опцій.

Тому ADO.NET підтримує модель постачальників. Постачальники для конкретного джерела даних можна визначити як сукупність класів в одному просторі імен створених спеціально для даного джерела даних. Ця особливість дещо розмита для джерел даних OleDb, ODBC, так як вони за своєю суттю створені для роботи з будь-якою базою даних сумісних з OLE і ODBC.

Технологія ADO.NET повною мірою здатна надати механізм для доступу до будь-якого джерела даних, тим самим, надаючи розробнику потужний механізм взаємодії з базами даних здатний повною мірою реалізувати всі потреби, що виникають при проектуванні ІС.


2 ПРОЕКТНИЙ РОЗДІЛ

2.1 Алгоритм розв’язання задачі

2.1.1 Перелік класів

Даний програмний продукт, а саме: Інформаційна система туристичної фірми «Сказочный тур» складається з 10 класів, які будуть описані нижче.

Клас ButtonExtensions:

  •  методи: SetFlatButtonColor().

Клас ColorPanel:

  •  поля: _borderColor, _colorBorderEnabled, _displayRectangleColor;
  •  властивості: BorderColor, ColorBorderEnabled, DisplayRectangleColor;
  •  методи: ColorPanel(), OnPaint().

Клас DatabaseForm:

  •  властивості: Instance, InstanceButton;
  •  методи: DatabaseForm(), DatabaseForm_Deactivate(), DatabaseForm_Enter(), DatabaseForm_FormClosed(), DatabaseForm_Load().

Клас FormExtensions:

  •  поля: GWL_EXSTYLE, SWP_FRAMECHANGED, SWP_HIDEWINDOW, SWP_NOACTIVATE, SWP_NOCOPYBITS, SWP_NOMOVE, SWP_NOOWNERZORDER, SWP_NOREDRAW, SWP_NOSENDCHANGING, SWP_NOSIZE, SWP_NOZORDER, SWP_SHOWWINDOW, WS_EX_CLIENTEDGE;
  •  методи: GetMdiClient(), GetWindowLong(), SetBevel(), SetMdiFormBackColor(), SetWindowLong(), SetWindowPos().

Клас InternetForm:

  •  властивості: Instance, InstanceButton;
  •  методи: InternetForm(), InternetForm_Deactivate(), InternetForm_Enter(), InternetForm_FormClosed(), InternetForm_Load(), tsbBackward_Click(), tsbForward_Click(), tsbGo_Click(), tsbHome_Click(), tsbRefresh_Click(), tstxtLink_KeyDown(), webBrowser_DocumentCompleted().

Клас MainForm:

  •  поля: _menuVisible;
  •  властивості: MenuVisible;
  •  методи: btnAbout_Click(), btnAddTour_Click(), btnDatabase_Click(), btnHelp_Click(), btnInternet_Click(), btnMenuVisible_Click(), btnSqlEditor_Click(), MainForm(), MainForm_Load(), MdiClient_Paint().

Клас OleDbPackage:

  •  поля: Adapter, Command, Connection, ConnectionString;
  •  методи: CloseConnection(), ExecuteCommand(), ExecuteScalar(), ExecuteTable(), FillTable(), OleDbPackage(), OpenConnection(), TryConnection(), UpdateTable().

Клас Program:

  •  методи: Main().

Клас QueryForm:

  •  властивості: Instance, InstanceButton;
  •  методи: btnErase_Click(), btnExecute_Click(), btnRedo_Click(), btnUndo_Click(), btnZoomIn_Click(), btnZoomOut_Click(), QueryForm(), QueryForm_Deactivate(), QueryForm_Enter(), QueryForm_FormClosed(), QueryForm_Load(), rtbQueryText_TextChanged().

Клас TurFirmTable:

  •  властивості: FillCommandText, HasChanges, Name, Table;
  •  методи: Clear(), Fill(), GetFilteredView(), OnDataChanged(), SaveChanges(), TurFirmTable(), Update();
  •  події: DataChanged.

UML-діаграми класів програми наведені в додатку А рисунок А.1 [1].

2.1.2 Текстуальний опис алгоритму

Даний програмний продукт, а саме: «Інформаційна система туристичної фірми «Сказочный тур», був розроблений на алгоритмічній мові програмування з використанням технології ADO.NET.

Для запуску програми потрібно два рази натиснути на файл «TurFirm.exe». Після запуску програми на екрані відображається форма MainForm, яка є Mdi-контейнером для всіх інших форм. Ліворуч розташовується панель з головним меню програми, вся інша частина форми – це Mdi-клієнт для дочірніх форм.

Головне меню уявляє собою кнопки-зображення з наступними пунктами: «Оформить тур», «База данных», «Интернет», «Редактор запросов», «Справка», «О программе».

При виборі пункту меню «Оформить тур» викликається метод btnAddTour_Click() классу MainForm та відкривається форма AddTourForm, яка призначена для оформлення туру.

При виборі пункту меню «База данных» викликається метод btnDatabase_Click() класу MainForm  та відкривається форма DatabaseForm, в якій здійснюється робота з таблицями бази даних. Для вибору необхідної таблиці потрібно вибрати вкладку з назвою потрібної таблиці у верхній частині вікна.

При виборі пункту меню «Интернет» викликається метод btnInternet_Click() класу MainForm та відкривається форма InternetForm, яка дає можливість користуватись всесвітнею мережею Інтернет. Після відкриття цієї форми вікно браузера відображається праворуч від панелі з головним меню програми.

При виборі пункту меню «Редактор запросов» викликається метод btnSqlEditor_Click() класу MainForm та відкривається форма QueryForm, в якій користувач має можливість написати та виконати запит до бази даних. Вікно цієї форми поділяється на дві частини. У верхній частині вікна розташовується поле для написання запиту, а в нижній частині виводиться результат запиту. Зверху вікна є панель з кнопками для збільшення зручності написання запиту.

При натисканні на кнопку з зображенням червоної стрілки, яка спрямована ліворуч викликається метод btnUndo_Click() класу QueryForm, який повертає попередній введений текст.

При натисканні на кнопку з зображенням зеленої стрілки, яка спрямована праворуч викликається метод btnRedo_Click() класу QueryForm, який повертає наступний введений текст.

При натисканні на кнопку з зображенням ластику викликається метод btnErase_Click() класу QueryForm, який повністю очищує поле для написання запиту.

При натисканні на кнопку з зображенням лупи зі знаком «+» всередині викликається метод btnZoomIn_Click() класу QueryForm, який збільшує шрифт тексту, який вводиться в поле для написання запиту.

При натисканні на кнопку з зображенням лупи зі знаком «-» всередині викликається метод btnZoomOut_Click() класу QueryForm, який зменшує шрифт тексту, який вводиться в поле для написання запиту.

Для виконання запиту потрібно натиснути на кнопку з зображенням зеленої стрілки, яка спрямована вниз. Після цього викликається метод btnExecute_Click() класу QueryForm, який виконує написаний користувачем запит.

При виборі пункту меню «Справка» викликається метод btnHelp_Click() класу MainForm та відкривається форма HelpForm, яка дає змогу користувачу переглянути довідку про роботу програми.

При виборі пункту меню «О программе» викликається метод btnAbout_Click() класу MainForm та відкривається форма AboutForm, яка дає змогу користувачу переглянути загальну інформацію про програму.

Для того, щоб приховати або знову відобразити панель з головним меню треба натиснути на кнопку з зображенням стрілки, яка спрямована в ту сторону, залежно від того, чи буде панель прихована чи показана. Після натискання на цю кнопку викликається метод btnMenuVisible_Click() класу MainForm та панель з головним меню приховується або показується.

В додатку А рисунок А.2 наведена UML-діаграма прецедентів.

2.2 Проектування бази даних. Розробка бази даних.

Поступово з розвитком програмного забезпечення ЕОМ з'явилися ідеї створення управляючих систем, які дозволяли б накопичувати, зберігати і оновлювати взаємопов'язані дані з цілого комплексу розв'язуваних завдань. Ці ідеї знайшли своє втілення в системах управління базами даних (СКБД). СУБД взаємодіють ні з локальними, а взаємопов'язаними за інформацією масивами, званими базами даних. З появою персональних комп'ютерів СУБД стають найбільш популярним засобом обробки табличної інформації. Вони є інструментальним засобом проектування банків даних при обробці великих обсягів інформації. Саме тому спочатку була почата робота над створенням бази даних, на основі якої буде працювати інформаційна система, яка розробляється в рамках дипломного проекту.

Структура бази даних:

Таблиця "Города" - містить в собі поля: код города, код страны, название города.

Таблиця "Клиенты" - до неї входять: код клиента, ФИО клиента, адрес клиента, телефон клиента.

До таблиці "Отели" входять такі поля: код отеля, код города, название, количество звезд, количество номеров, стоимость номер за сутки та поле працездатності отеля.

Таблиця "Страны" включає поле код страны та название страны.

До таблиці "Услуги" відходить поля: код услуги, код отеля, название услуги, стоимость услуги.

Особливістю таблиці "Туры" є те, що в ній не зберігається, хто поїхав в тур. Тому що в тур може відправитися як 1 клієнт, так і декілька. Один клієнт може побувати в безлічі турів. Один тур може містити безліч клієнтів. Тому потрібна єднальна таблица, якою є - таблиця "Туры-Клиенты".


3 БІЗНЕС-ПЛАН

3.1 Резюме

У цій дипломній роботі розроблений проект Інформаційна система туристичної фірми "Сказочный тур".

Цей програмний продукт не є збитковим, бо він має зручний інтерфейс.

Витрати на розробку складають 20954 грн.

Вартість програмного продукту складає 350 грн.

Прибуток від реалізації даного програмного продукту без врахування ПДВ буде складати 108621 грн.

3.2 Оцінка ринку збуту

Цей продукт дешевше, ніж аналоги конкурентів.

Програмні продукти конкурентів менш конкурентоспроможні, бо мій проект має зручний інтерфейс.

Прогноз обсягів продажу даного програмного продукту наведений у Таблиці 3.1.

Таблиця 3.1 -  Прогноз обсягів продажу програмного продукту

Періоди

Споживачі

Кількість

Перший рік реалізації програмного продукту

Січень

Туристичні фірми України

10

Лютий

10

Березень

10

Квітень

10

Травень

10

Червень

20

Липень

20

Серпень

20


Продовження таблиці 3.1

Періоди

Споживачі

Кількість

Вересень

5

Жовтень

5

Листопад

15

Грудень

15

Всього за рік

150

Другий рік реалізації програмного продукту

1 квартал

Туристичні фірми України

75

2 квартал

50

3 квартал

50

4 квартал

75

Всього за рік

250

Третій рік реалізації програмного продукту

Всього за рік

Туристичні фірми України

200

Всього за 3 роки

600

3.3 Конкуренція

У результаті дослідження товарного ринку було виявлено 4 конкурента та був зроблений аналіз показників їх діяльності. За результатами проведено ранжирування фірм-конкурентів.

Вивчаючи фірми-конкуренти здійснено ранжирування нашого програмного продукту та програмних продуктів-конкурентів. Результати ранжирування наведені в таблиці 3.2.


Таблиця 3.2. – Аналіз фірм-конкурентів.

Ключові фактори успіху

Результати ранжирування фірм-конкурентів

за силою-слабкістю позицій на ринку

1

2

3

4

5

Технічні параметри:

Зручність інтерфейсу

Х4

Х2

Х1

Х3

0

Швидкість реагування

Х2

Х3

0

Х4

Х1

Багатофункціональність

Х3

Х1

Х2

0

Х4

Економічні параметри:

Ціна

Х1

Х2

Х4

0

Х3

Собівартість

Х2

Х3

Х1

0

Х4

слабкість       сила

Що ближче до більшого балу, тим конкурентоздатніша фірма.

Тут  Х1, Х2, Х3, Х4 – Фірми конкуренти;

0 – розробник цього програмного продукту.

Х1 = 3+5+2+1+3 = 13 б.;

Х2 = 2+1+3+2+1 = 9 б.;

Х3 = 4+2+1+5+2 = 13 б.;

Х4 = 1+4+5+3+5= 18 б.;

0 = 5+3+4+4+4= 20 б.

Найбільш конкурентною для розробника цього програмного продукту є фірма-конкурент Х4, яка набрала 18 балів.

Наступним кроком оцінці програмного продукту конкуренту є аналіз технічних та економічних показників – ключових факторів успіху конкуруючих програмних продуктів. Перелік цих показників внесено у таблицю 3.3.


Таблиця 3.3. – Матриця рангів технічних та економічних параметрів.

Параметри

Одиниці виміру

Значення параметру

Вага параметру

aj, bj

Одиничний параметричний показник qj

Одиничний параметричний індекс Іт, Іе

новий виріб

P

аналог. виріб

P

1

2

3

4

5

6

7

Технічні параметри

Зручність інтерфейсу

б

5

3

0,4

1,67

0,67

Швидкість реагування

мс

0,7

0,5

0,4

0,71

0,28

Багатофункціональність

б

4

5

0,2

0,8

0,16

Всього

1

1,11

Економічні параметри

Ціна

грн

300

350

0,5

1,17

0,59

Собівартість

грн

35

27,62

0,5

0,79

0,4

Всього

1

0,99

Таблиця розраховується таким чином.

Відбір технічних та економічних показників, які належить оцінювати називають ключовими факторами успіху. Перелік показників заносимо у стовпчик 1 таблиці.

Далі заповнюються одиниці виміру та значення параметрів на базі експертних оцінок.

Вага технічного () та економічного () параметру (формула 3.1, 3.2).


при                                                     (3.1)

при                                                     (3.2)

де  - кількість параметрів.

Одиничні параметричні показники gj по кожному j-му параметру (як технічних, так економічних) (стовпчик 6) розраховують за такою формулою:

, якщо                                (3.3)

,якщо                                 (3.4)

де PHJ, Pja – величина j-го параметру нового виробу та виробу конкуруючого (аналога) відповідно

Розрахунок одиничних параметричних індексів іtj ;іej (стовпчик 6) здійснюється наступним чином:

                                                                (3.5)

для технічних параметрів

                                                               (3.6)

для економічних параметрів

Зведений параметричний індекс обчислюється за формулою:

                                                            (3.7)

для технічних параметрів,

                                                            (3.8)

для економічних параметрів.

Розрахунок інтегрального показника відносної конкурентоспроможності (К) нового виробу по відношенню до виробу -  конкурента (аналога) обчислюється за формулою:

                                                               (3.9)

Якщо  – новий виріб перевищує виріб конкурента. Якщо – поступається. Якщо – знаходиться на одному рівні.

К > 1, отже запропонований новий програмний продукт переважає програмний продукт конкурентів.

За розрахунками конкурентоспроможності, виявлено, що даний програмний продукт конкурентоздатний.

3.4 Стратегія маркетингу

Для успішного супроводження програмного продукту на ринку та досягнення запланованого об’єму продаж необхідно ретельно спланувати рекламну компанію, котра дала б можливість усім потенційним користувачам дізнатись про існування та переваги розробленого програмного продукту.  Але для початку рекламна компанія обмежиться розсилкою електронних листів потенційним покупцям. В листах буде знаходитись детальна інформація проданий програмний продукт, що досить зручно та вигідно. Також у листі вказується адреса домашнього сайту розробника, де можна буде внести свої пропозиції.

Витрати на розробку наведені у таблиці 3.4.

Таблиця 3.4. Розрахунок трудових витрат

Найменування операції

Кількість годин

Аналіз

30

Проектування

70

Кодування

25

Налагоджування

30

Тестування

25

Супроводження

20

Всього

200

Трудовитрати, які потребують для розробки програмного продукту складають 200 годин.

Розрахуємо час роботи на машині - 70+25+30+25  = 150 годин.

Розрахуємо немашинний час - 20+30 = 50 годин.

Розрахуємо вартість машинного часу (електроенергія)

Велектр.ен. = машинний час* потужність машини* тариф

Велектр.ен.= 150 годин * 0,4 КВтчас* 1,2 грн. = 72 грн.

Розрахуємо заробітну плату розробника програмного продукту. Витрачений час на розробку програмного продукту – 200 годин, тариф за годину роботи – 35 грн., звідси 35 грн. * 200 год. = 7000грн.

Додаткова заробітна плата (20-50% від основної ЗП)

7000 грн. * 0,4 = 2800 грн.

Відрахування на соціальні потреби (38% від ФОП)

(7000 грн. +2800 грн.) * 0,38= 3724 грн.

Накладні витрати (40-100% від ФОП):

9800 грн. * (0,6) = 5880 грн.

Розрахуємо вартість матеріалів (Таблиця 3.5 Витрати на матеріали)

Таблиця 3.5 - Витрати на матеріали

Матеріали

Кількість,

шт.

Ціна за одиницю, грн.

Вартість, грн.

Папір

500

0,30

150,00

Файл

250

0,45

112,50

Папка

1

9,00

9,00

Ручка

5

1,50

7,50

Флешка

2

98,00

196,00

Кофе

1

6,00

6,00

Всього

481

Суму витрат на розробку програмного продукту занесемо в таблицю 3.6.


Таблиця 3.6 -  Витрати на розробку програмного продукту.

Статті витрат

Вартість, грн.

Матеріали

481,00

Вартість електроенергії

72,00

Основна заробітна плата

7000,00

Додаткова заробітна плата (20-50% від ФОП)

2800,00

Соціальні відрахування (38% від ФОП)

3724,00

Накладні витрати (40-100% від ФОП)

5880,00

Виробнича собівартість

19957,00

Невиробничі витрати (5% від виробничої с/в)

997,85

Всього

20954,85

Розрахуємо витрати на адаптацію(накладні витрати програмного продукту, 3-10% від виробничої собівартості ПП)

19957 грн. * (0,05) = 997,85 грн.

Визначимо повну собівартість розробленого програмного продукту.

19957 грн. + 997,85 грн. = 20954,85 грн.

Розрахуємо прибуток (40% від повної собівартості)

20954,85 грн. * 0,4 = 8381,94 грн.

Ціна: 20954,85 грн. + 8381,94 грн. = 29336,79 грн.

Розрахуємо вартість на 1 екземпляр тиражу (Таблиця 3.7)

Таблиця 3.7 Витрати на матеріали на 1 шт.

Матеріали

Кількість,

шт.

Вартість за одиницю, грн.

Вартість, грн.

  1.  Диск

2

3,00

6,00

  1.  Коробка для диска

1

1,00

1,00


Продовження таблиці 3.7

Матеріали

Кількість,

шт.

Вартість за одиницю, грн.

Вартість, грн.

  1.  Роздрук

1

1,00

1,00

  1.  Вкладиш

1

1,00

1,00

Всього:

9,00

  1.  Матеріальні витрати       9 грн.
  2.  Витрати на електроенергію: 10/60 н/г * 0,4 КВт * 1,20 грн. = 0,10 грн.
  3.  Основна зарплата: 10/60 н/г * 40 грн = 6,70 грн.
  4.  Додаткова зарплата: 6,70 грн.* 0,3 = 2,00 грн.
  5.  Соціальні відрахування: ( 6,70 грн. + 2,00 грн.) * 0,38 = 3,30 грн.
  6.  Накладні витрати: 8,70 грн. * 0,6 = 5,20 грн.

Загальна сума: 26,30 грн.

  1.  Невиробничі витрати: 26,30 грн.*0,05 = 1,32 грн.

Повна собівартість: 26,30 грн. + 1,32 грн. = 27,62 грн.

Мінімальна ціна програмного продукту:

Цmin  = 85 грн.

Максимальна ціна програмного продукту розраховується за формулою:

Цmax = (собівартість + кредит + 1,19 Прибуток) = 50929 грн.

Виходячи з ринкових цін на аналогічні продукти, приймаємо остаточну ціну нового програмного продукту 350 грн.

3.5 Фінансовий план

Цей розділ узагальнює і систематизує всі матеріали попередніх розділів та представляє їх у вартісному вираженні.

З урахуванням раніш визначених витрат на розробку програмного продукту заповнюємо таблицю 3.8.


Таблиця 3.8 – Доходів та витрат

Показники

Витрати до поч. реалізації

1 рік

2 рік

3 рік

Всього

Обсяг продаж (шт.)

150

250

200

600

Доходи від реалізації (грн)

52500

87500

70000

210000

  1.  Постійні витрати

- Матеріали

481

481

- Електроенергія

72

72

- Основна зарплата

7000

7000

- Додаткова зарплата

2800

2800

- Соціальні відрахування

3724

3724

- Накладні витрати

5880

5880

- Кредит

20000

20000

- Відсоток за кредит

4000

4000

Всього постійних витрат:

39957

4000

43957

Змінні витрати

- Тиражування

4143

6905

5524

16572

- Реалізація

1500

2500

2000

6000

Всього змінних витрат:

5643

9405

7524

22572

Всього витрат:

39957

5643

13405

7524

66529

Прибуток:

-39957

46857

74095

62476

143471


Продовження таблиці 3.8

Показники

Витрати до поч. реалізації

1 рік

2 рік

3 рік

Всього

Податок на прибуток

8902

14078

11870

34850

Чистий прибуток:

-39957

37955

60017

50606

108621

Будуємо графік беззбитковості та розраховуємо точку беззбитковості програмного продукту.

  =128 шт.

Рисунок 3.1 – Графік беззбитковості


4 ОХОРОНА ПРАЦІ

4.1 Загальні питання охорони праці

Всесвітня організація охорони здоров'я ще в 1989 р. дійшла висновку, що робота з використанням персональних комп'ютерів (ПЕОМ) супроводжується зоровим і нервово-емоційним напруженням, негативними зрушеннями в кістково-м'язовій системі людини. Слабкі рівні неіонізуючих й іонізуючих випромінювань, що створюються відеодисплейними терміналами (ВДТ) на електронно-променевих трубках, несуть загрозу збільшення онкопатологій, негативного впливу на вагітних і плід. У всіх розвинених країнах, у тому числі в країнах Європейської спільноти, існують сотні документів, які регламентують вимоги не тільки до комп'ютерів, а й до організації робочих місць з їх використанням. Таким чином, безконтрольне використання комп'ютерної техніки може призвести до негативного впливу на здоров'я користувачів комп'ютерів, особливо дітей.

Широкомасштабні заходи, спрямовані на поліпшення здоров'я людей, повинні здійснюватись на кожному підприємстві у встановленому законодавчому порядку. Суворе додержання умов гігієни та фізіології праці є не тільки особистою справою людини, але й колективу, оскільки порушення принципів гігієни позначається не тільки на здоров'ї порушника, але й інших членів колективу.

Особи, допущені до роботи з комп'ютерною технікою зазнають впливу небезпечних і шкідливих виробничих факторів, таких як монотонність, підвищена температура зовнішнього середовища, відсутність або недостатня освітленість робочої зони, електричниї струм, статистична електрика та інших.

Основними питаннями з охороні праці на підприємстві є питання про освітленість, гігієну праці, організацію робочого місця, виробничого середовища, протипожежний захист, електробезпеку.

4.2 Гігієна праці та виробнича санітарія

Робітникові часто доводиться працювати у несприятливих умовах при високій або надто низькій температурі повітря, підвищеній вологості, на протягах, у приміщеннях з підвищеною кількістю пилу або пари отруйних речовин. Усі ці фактори можуть призвести до професійних захворювань дихальних органів, очей, шкіри та й усього організму. Постійні струси (вібрація) і шуми, що виникають у приміщеннях, де працюють робітники, також спричинюють до деяких видів захворювань. Щоб запобігти тимчасовим або хронічним професійним захворюванням, слід додержуватись правил гігієни праці на виробництві.

Санітарія і гігієна праці включає до свого складу частини гігієни праці та санітарної техніки.

Гігієна праці – галузь профілактичної медицини, що вивчає умови збереження здоров'я на робочому місті й заходи, які сприяють цьому. Основні завдання гігієни праці:

  •  Вивчати вплив на людину метеорологічних умов і розробляє засоби і способи забезпечення комфортних умов праці.
  •  Вивчати вплив на організм людини небезпечних і токсичних речовин, що виділяються в навколишнє середовище, і розробляє засоби захисту.
  •  Вивчати вплив шуму, вібрації, іонізуючого випромінювання на організм людини і розробляє засоби захисту від цих чинників.
  •  Займатися питаннями освітлення робочих місць.
  •  Давати обґрунтування санітарним нормам.
  •  Займатися створенням індивідуальних засобів захисту.
  •  Розробляти засоби і методи контролю умов праці.
  •  Організовувати санітарно-побутове забезпечення.

При роботі на комп’ютерах, до складу яких входять відеодисплейні термінали, на працівників можуть діяти наступні шкідливі фізичні та психофізіологічні виробничі фактори. Фізичні:

  •  підвищений рівень шуму ( від вентилятора мікропроцесора  та плат);
  •  високий рівень напруги в електричній мережі, торкання до якої може викликати нещасний випадок;
  •  підвищений рівень статичної електрики;
  •  підвищений рівень електромагнітного випромінювання;
  •  підвищений рівень напруженості електричного поля;
  •  пряма і відбита від екрана бліклість;
  •  несприятливе розподілення яскравості об’єктів в полі зору.

Психофізиологічні:

  •  фізичні перевантаження статичної та динамічної дії;
  •  нервово-психічні перевантаження ( розумове перенапруження, перенапруження зорових аналізаторів, монотонність праці, емоційні перевантаження).

Таблиця 4.1 – Параметри метереологічних умов виробничого середовища

Параметр

Фактичне значення

Значення по СН-245-71 чи державному стандарту

Висновок

1

2

3

4

Шум, дБ

54

38-86

В межах допустимих значень

Освітленість (загальна), Лк

463

300-500

В межах допустимих значень

Значення К.П.О., %

5

1,5-100

В межах допустимих значень

Загазованість (концентрація і вид газу), мг/м3

Азот 4,9

Аміак 11

Озон 0,04

Свинець 0,01

Хлор 0,8

Азот 5

Аміак 20

Озон 0,1

Свинець 0,01

Хлор 1

В межах допустимих значень


Продовження таблиці 4.1

Параметр

Фактичне значення

Значення по СН-245-71 чи державному стандарту

Висновок

Температура повітря, °С

взимку

влітку

21-23

22-24

21-24

22-25

В межах допустимих значень

Відносна вологість, %

40-55

40-60

В межах допустимих значень

Швидкість руху повітря, м/с

0,1-0,15

0,1-0,2

В межах допустимих значень

4.3 Організація робочого простору

В даний час практично кожне робоче місце ІТП оснащене комп'ютерною та іншою технікою, тому особливе значення має правильне розміщення робочого місця працівника, котрий лікує ЕОМ.

При розміщенні робочих місць з ПЕОМ відстань між робочими столами з відеомоніторами (у напрямі тилу поверхні одного відеомонітора і екрану іншого відеомонітора), повинна бути не менше 2,0 м, а відстань між бічними поверхнями відеомоніторів - не менше 1,2 м.

Робочі місця з ПЕОМ в приміщеннях з джерелами шкідливих виробничих факторів повинні розміщуватися в ізольованих кабінах з організованим повітрообміном.

Робочі місця з ПЕОМ при виконанні творчої роботи, що вимагає значного розумового напруження або високої концентрації уваги, рекомендується ізолювати один від одного перегородками висотою 1,5 - 2,0м.

Екран відеомонітора повинен знаходитися від очей користувача на відстані 600-700 мм, але не ближче 500 мм з урахуванням розмірів алфавітно-цифрових знаків і символів.

Розміщення дисплеїв і допоміжних пристроїв на робочому місці має забезпечувати людині можливість приймати оптимальну робочу позу. При цьому слід виходити з положення, що найбільш негативний вплив на організм має не стільки сама поза, скільки час, протягом якого людина в ній знаходиться.

Робочі місця з дисплеями повинні проектуватися таким чином, щоб параметри основного обладнання були регульованими. Робочі місця без регульованої висоти клавіатури, висоти і віддаленості екрану не підходять для тривалої й безперервної роботи. Оптимально, коли можливо регулювати висоту і нахил робочої поверхні, висоту, нахил, поворот і віддаленість дисплея:

  •  висота клавіатури (середній ряд над підлогою) 70-85 см;
  •  центр екрану монітора над підлогою 90-115 см;
  •  нахил екрану назад по відношенню до горизонтальної площини 88-105 градусів;
  •  відстань між екраном і краєм столу 50-75 см. Для зменшення ризику появи відображень на поверхні екрану дисплея вона повинна перебувати під прямим кутом до вікна.

Вікна не повинні розташовуватися ні позаду операторів, ні перед ними. Глибина простору для ніг повинна становити: від краю столу не менше 60 см на рівні колін і 80 см на рівні ступень.

Розташування предметів в виробничому приміщенні повинно відповідати НАОП 0.00-1.31-99 (рисунок 4.1).

Рисунок 4.1 – План виробничого приміщення з комп’ютеризованими робочими місцями: 1 – комп’ютеризоване робоче місце з ПК та ЖК-монітором; 2 – сонцезахисні жалюзі; 3 – шафи для зберігання документації та фахової літератури

4.4 Електробезпека в приміщеннях з ЕОМ

Вимоги електробезпеки і пожежної безпеки у приміщеннях, де встановлені ВДТ ЕОМ і ПЕОМ, відображені у ДНАОП 0.00–1.31–99: ЕОМ і все устаткування для обслуговування, ремонту та налагодження роботи їх, електропроводи і кабелі мають відповідати електробезпеці зони за ПВЕ та мати апаратуру захисту від струму короткого замикання.

Необхідно забезпечити неможливість виникнення джерела загорання внаслідок короткого замикання та перевантаження проводів шляхом переходу на негорючу ізоляцію.

Лінії електромережі ВДТ ЕОМ і ПЕОМ виконуються як окрема групова трипровідна мережа шляхом прокладання фазового, нульового робочого та нульового захисного провідників (заземлення або занулення), причому площі перерізу нульового робочого і нульового захисного провідника повинні бути не меншими за площу перерізу фазового провідника.

При одночасному використанні понад п’яти ПЕОМ на помітному місці встановлюється аварійний резервний вимикач, який в разі небезпеки повністю знеструмлює електричну мережу (крім освітлення). В такому випадку при використанні трипровідникового захищеного проводу або кабелю в оболонці з негорючого або важкогорючого матеріалу дозволено прокладати їх без металевих труб та гнучких металевих рукавів.

Електромережі для під’єднання ВДГ, ЕОМ і ПЕОМ оснащуються справжніми штепсельними з’єднаннями та електророзетками, які, крім контактів фазового і нульового робочого провідників, мають спеціальні контакти для під’єднання нульового захисного провідника, що під’єднаний раніше ніж вони. Порядок роз’єднання при відімкненні мережі має бути зворотним. Заборонено під’єднувати обладнання до звичайної двопровідної електричної мережі, зокрема з використанням перехідних пристроїв. Електромережі штепсельних з’єднань та електричних розеток необхідно виконувати за магістральною схемою, по 3–6 в одному колі. При розташуванні їх уздовж стін провідники прокладають по підлозі в металевих трубах і гнучких металевих рукавах, а при розташуванні їх у центрі приміщення прокладають у каналах або під знімною підлогою в металевих рукавах. При цьому не дозволяється використовувати провід і кабель в ізоляції з вулканізованої гуми та інші матеріали, що містять сірку. Металеві трубки і гнучкі металеві рукави повинні бути заземлені відповідно до ДНАОП 0.001.21–98. Неприпустимо використовувати функціональне заземлення для під’єднання захисного заземлення.

Штепсельні з’єднання або електричні розетки для напруги 12 і 36 В мають бути пофарбовані в колір, що відрізняється від їхнього кольору для напруги 127 і 220 В.

Плити знімної підлоги повинні бути важкогорючими, з межею вогнестійкості не меншою за 30 хв, або негорючими і виконані з матеріалів, які під час горіння не виділяють шкідливих токсичних речовин і газів, що сприяють корозії. Простір під ними розділяють негорючими діафрагмами на відсіки площею не більшою за 250 м2 з межею вогнестійкості не меншою за 45 хв. Простір під підлогою має бути оснащений системою пожежної сигналізації та засобами пожежогасіння відповідно до вимог пожежного захисту з викорис­танням димових пожежних сповіщувачів.

4.5 Пожежна безпека

Пожежна безпека на підприємстві – це один з важливих факторів збереження вашої робочої території і життя персоналу. На жаль, більшість підприємців підходять до цього питання не дуже серйозно. Вішають вогнегасники, пожежні сигналізації, малюють плани евакуації не для того, щоб дійсно захистити себе від можливої майбутньої біди, а для перевірок, щоб ті не дали штраф і по швидше відв’язалися, щоб не заважали робочому процесу. І тільки якщо, дійсно, щось станеться на площах підприємств, тільки тоді власники фірм по-справжньому ставляться до цього серйозніше, не обходять даний момент стороною, але часом це відбувається вже пізно.

Пожежна безпека на підприємстві – це не тільки ряд стандартних вимог. Будь своє або орендоване приміщення, має бути готове до стану бойової готовності, а не покладатися на справа випадку. Збитки від пожеж небезпечні і значні тим, що осередок загоряння не зафіксіруешь відразу без допоміжних засобів і тушкувати розгорівшись полум’я досить складно. У будь-якому приміщенні, не важливо, воно ваше особисте або орендоване, потрібно встановлювати всі потрібні системи пожежогасіння.

Для того, щоб повністю була активною пожежна безпека на підприємстві, потрібно першою справою встановлювати пожежну сигналізацію. Завдання встановленого обладнання – оповістити людей, що працюють на даній території про пожежу або можливому невеликому загорянні. У деяких випадках існує автоматичне гасіння пожежі. Також всі приміщення зобов’язана бути забезпечене вогнегасниками, які повинні розставлятися на вільних видних місцях. До них додається інструкція по користуванню. Бажано, щоб працюючий персонал прочитав правила користування вогнегасником до того моменту, коли доведеться його використовувати в дії, інакше це може призвести до плачевних ситуацій. Важливо знати, що вогнегасник потрібно зберігати в місцях, захищених від прямих сонячних променів. І одне з головних правил – це план евакуації, що включає в себе всі входи і виходи, вікна, розташування вогнегасників на тому чи іншому поверсі, пожежні сходи, електрощитові. Здавалося б, навіщо він потрібний, особливо тим, хто в даному приміщенні вже працює досить довго і пройшов би по ньому із закритими очима.

Але в практиці часто трапляються випадки, коли в знайомому місці при пожежі чоловік не міг зорієнтуватися. Правила пожежної безпеки на підприємстві для всіх однакові і повинні виконуватися відповідно до вимог.

У випадку пожежі треба використовувати план евакуації (рисунок 4.2).

Рисунок 4.2 – План евакуації людей


ВИСНОВКИ

Програма дипломного проекту «Інформаційна система туристичної фірми «Сказочный тур» розроблена на алгоритмічній мові С# з використанням технології .NET.

Программа призначена для:

  •  упорядкування роботи фірми;
  •  збереження значних обсягів інформації;
  •  швидкого та зручного доступу до інформації.

В майбутніх версіях програми можна додати додатковий функціонал. А саме:

  •  запити;
  •  можливість збереження в XML;
  •  роботу с базами MySql.

Розробка програми дозволила мені детальніше ознайомитися з мовою С# та технологією .NET, закріпила навички по тестуванню, створенню UML-діаграм, написанню документації.

При розробці програмного продукту ознайомився з вимогами к програмній домументації. Документи оформлювались відповідно до існуючих стандартів Єдиний Стандарт Програмної Документації (ЄСПД).


ПЕРЕЛІК ПОСИЛАНЬ

1. Буч Г., Рамбо Д., Якобсон И. Язык UML. Руководство пользователя. 2-е изд.: Пер. с англ.. Мухин Н. – М.: ДМК Пресс. – 496 с.: ил.

2. Дж. Рамбо, М. Блаха. UML 2.0. Объектно-ориентированное моделирование и разработка. 2-е изд. – СПб.: Питер, 2007. – 544 с.: ил.

3. Сахил Малик Microsoft ADO.NET 2.0 для профессионалов = Pro ADO.NET 2.0. — М.: «Вильямс», 2006. — С. 560.

4. Джеф Просиз Программирование для Microsoft .NET = Programming Microsoft .NET. — М.: Русская редакция, 2003. — С. 704.

5. Жидецький В. Ц. Основи охорони праці : підручник для студ. вищ. навч. закл.: затв. МОНУ. - К. : Знання, 2010. - 375 с.

6. Лапін В. М. Безпека життєдіяльності: Навч. посіб. — Л., 1998.

7. В. Березуцький, Т. С. Бондаренко, Г. Г. Валенко та ін. Основи охорони праці. Навч. посіб. – 2-ге вид., перероб. і доп. – Х.: Факт, 2007. – 480 с.

8. Вечканов Г. С. Экономическая теория: Учебник для вузов. 2-е изд. – СПб.: Питер, 2009 – 210 c.


ДОДАТОК А

UML-діаграми

  

Рисунок А.1 – UML-діаграма класів

 

Продовження рисунку А.1

  

Продовження рисунку А.1

Продовження рисунку А.1

Рисунок А.2 –UML-діаграма прецедентів

Рисунок А.3 –UML-діаграма діяльності методу btnOk_Click() класу FilterForm

ДОДАТОК Б

Лістинг програми

Файл ButtonExtensions.cs

using System.Drawing;

using System.Windows.Forms;

namespace TurFirm

{

   // Класс расширений для кнопок.

   public static class ButtonExtensions

   {

       // Задаёт цвет кнопки, отвечающей за запуск формы.

       public static void SetFlatButtonColor(this Button button, Color color)

       {

           if (button == null)

               return;

           button.BackColor =

               button.FlatAppearance.CheckedBackColor =

               button.FlatAppearance.MouseDownBackColor = button.FlatAppearance.MouseOverBackColor = color;

       }

   }

}

Файл ColorPanel.cs

using System.Drawing;

using System.Windows.Forms;

namespace TurFirm

{

   // Усовершенствованная панель с цветной рамкой и заливкой внутри.

   public class ColorPanel : Panel

   {

       private bool _colorBorderEnabled;   // включена ли цветная рамка

       private Color _borderColor; // цвет рамки

       private Color _displayRectangleColor;   // цвет заливки внутри рамки

       public ColorPanel()

       {

           SetStyle(ControlStyles.ResizeRedraw, true);

           _borderColor = Color.Black;

           _colorBorderEnabled = false;

           _displayRectangleColor = Color.Empty;

       }

       public bool ColorBorderEnabled

       {

           get { return _colorBorderEnabled; }

           set

           {

               if (_colorBorderEnabled == value)

                   return;

               _colorBorderEnabled = value;

               Refresh();

           }

       }

       public Color BorderColor

       {

           get { return _borderColor; }

           set

           {

               if (_borderColor == value)

                   return;

               _borderColor = value;

               Refresh();

           }

       }

       public Color DisplayRectangleColor

       {

           get { return _displayRectangleColor; }

           set

           {

               if (_displayRectangleColor == value)

                   return;

               _displayRectangleColor = value;

               Refresh();

           }

       }

       protected override void OnPaint(PaintEventArgs e)

       {

           base.OnPaint(e);

           if (_displayRectangleColor != Color.Empty)

               using (var brush = new SolidBrush(_displayRectangleColor))

                   e.Graphics.FillRectangle(brush, DisplayRectangle);

           if (!_colorBorderEnabled)

               return;

           ControlPaint.DrawBorder(e.Graphics, DisplayRectangle, _borderColor, ButtonBorderStyle.Solid);

       }

   }

}

Файл DatabaseForm.cs

using System;

using System.Drawing;

using System.Windows.Forms;

namespace TurFirm

{

   // Форма для просмотра и редактирования таблиц баз данных.

   public partial class DatabaseForm : Form

   {

       // Экземпляр формы.

       public static DatabaseForm Instance { get; private set; }

       // Кнопка, которая отвечает за экземпляр формы.

       public static Button InstanceButton { get; private set; }

       public DatabaseForm(Button instanceButton)

       {

           InitializeComponent();

           Instance = this;

           InstanceButton = instanceButton;

       }

       private void DatabaseForm_Load(object sender, EventArgs e)

       {

           ControlBox = false;

           WindowState = FormWindowState.Maximized;

       }

       private void DatabaseForm_Enter(object sender, EventArgs e)

       {

           InstanceButton.SetFlatButtonColor(Color.LightBlue);

       }

       private void DatabaseForm_Deactivate(object sender, EventArgs e)

       {

           InstanceButton.SetFlatButtonColor(Color.Empty);

       }

       private void DatabaseForm_FormClosed(object sender, FormClosedEventArgs e)

       {

           InstanceButton.SetFlatButtonColor(Color.Empty);

           InstanceButton = null;

           Instance = null;

       }

   }

}

Файл DatabaseForm.Designer.cs

namespace TurFirm

{

   partial class DatabaseForm

   {

       /// <summary>

       /// Required designer variable.

       /// </summary>

       private System.ComponentModel.IContainer components = null;

       /// <summary>

       /// Clean up any resources being used.

       /// </summary>

       /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>

       protected override void Dispose(bool disposing)

       {

           if (disposing && (components != null))

           {

               components.Dispose();

           }

           base.Dispose(disposing);

       }

       #region Windows Form Designer generated code

       /// <summary>

       /// Required method for Designer support - do not modify

       /// the contents of this method with the code editor.

       /// </summary>

       private void InitializeComponent()

       {

           this.tabControl = new System.Windows.Forms.TabControl();

           this.tabPageCountries = new System.Windows.Forms.TabPage();

           this.tabPageCities = new System.Windows.Forms.TabPage();

           this.tabPageHotels = new System.Windows.Forms.TabPage();

           this.tabPageServices = new System.Windows.Forms.TabPage();

           this.tabPageTours = new System.Windows.Forms.TabPage();

           this.tabPageClients = new System.Windows.Forms.TabPage();

           this.tabPageToursClients = new System.Windows.Forms.TabPage();

           this.tabControl.SuspendLayout();

           this.SuspendLayout();

           //

           // tabControl

           //

           this.tabControl.Controls.Add(this.tabPageCountries);

           this.tabControl.Controls.Add(this.tabPageCities);

           this.tabControl.Controls.Add(this.tabPageHotels);

           this.tabControl.Controls.Add(this.tabPageServices);

           this.tabControl.Controls.Add(this.tabPageTours);

           this.tabControl.Controls.Add(this.tabPageClients);

           this.tabControl.Controls.Add(this.tabPageToursClients);

           this.tabControl.Dock = System.Windows.Forms.DockStyle.Fill;

           this.tabControl.Font = new System.Drawing.Font("Segoe UI", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));

           this.tabControl.Location = new System.Drawing.Point(0, 0);

           this.tabControl.Name = "tabControl";

           this.tabControl.SelectedIndex = 0;

           this.tabControl.Size = new System.Drawing.Size(651, 333);

           this.tabControl.TabIndex = 1;

           //

           // tabPageCountries

           //

           this.tabPageCountries.BackColor = System.Drawing.Color.WhiteSmoke;

           this.tabPageCountries.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;

           this.tabPageCountries.Location = new System.Drawing.Point(4, 26);

           this.tabPageCountries.Name = "tabPageCountries";

           this.tabPageCountries.Padding = new System.Windows.Forms.Padding(3);

           this.tabPageCountries.Size = new System.Drawing.Size(643, 303);

           this.tabPageCountries.TabIndex = 0;

           this.tabPageCountries.Text = "Страны";

           //

           // tabPageCities

           //

           this.tabPageCities.BackColor = System.Drawing.Color.WhiteSmoke;

           this.tabPageCities.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;

           this.tabPageCities.Location = new System.Drawing.Point(4, 26);

           this.tabPageCities.Name = "tabPageCities";

           this.tabPageCities.Padding = new System.Windows.Forms.Padding(3);

           this.tabPageCities.Size = new System.Drawing.Size(643, 303);

           this.tabPageCities.TabIndex = 1;

           this.tabPageCities.Text = "Города";

           //

           // tabPageHotels

           //

           this.tabPageHotels.BackColor = System.Drawing.Color.WhiteSmoke;

           this.tabPageHotels.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;

           this.tabPageHotels.Location = new System.Drawing.Point(4, 26);

           this.tabPageHotels.Name = "tabPageHotels";

           this.tabPageHotels.Size = new System.Drawing.Size(643, 303);

           this.tabPageHotels.TabIndex = 2;

           this.tabPageHotels.Text = "Отели";

           //

           // tabPageServices

           //

           this.tabPageServices.BackColor = System.Drawing.Color.WhiteSmoke;

           this.tabPageServices.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;

           this.tabPageServices.Location = new System.Drawing.Point(4, 26);

           this.tabPageServices.Name = "tabPageServices";

           this.tabPageServices.Size = new System.Drawing.Size(643, 303);

           this.tabPageServices.TabIndex = 3;

           this.tabPageServices.Text = "Услуги";

           //

           // tabPageTours

           //

           this.tabPageTours.BackColor = System.Drawing.Color.WhiteSmoke;

           this.tabPageTours.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;

           this.tabPageTours.Location = new System.Drawing.Point(4, 26);

           this.tabPageTours.Name = "tabPageTours";

           this.tabPageTours.Size = new System.Drawing.Size(643, 303);

           this.tabPageTours.TabIndex = 4;

           this.tabPageTours.Text = "Туры";

           //

           // tabPageClients

           //

           this.tabPageClients.BackColor = System.Drawing.Color.WhiteSmoke;

           this.tabPageClients.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;

           this.tabPageClients.Location = new System.Drawing.Point(4, 26);

           this.tabPageClients.Name = "tabPageClients";

           this.tabPageClients.Size = new System.Drawing.Size(643, 303);

           this.tabPageClients.TabIndex = 5;

           this.tabPageClients.Text = "Клиенты";

           //

           // tabPageToursClients

           //

           this.tabPageToursClients.BackColor = System.Drawing.Color.WhiteSmoke;

           this.tabPageToursClients.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;

           this.tabPageToursClients.Location = new System.Drawing.Point(4, 26);

           this.tabPageToursClients.Name = "tabPageToursClients";

           this.tabPageToursClients.Size = new System.Drawing.Size(643, 303);

           this.tabPageToursClients.TabIndex = 6;

           this.tabPageToursClients.Text = "Посетители туров";

           //

           // DatabaseForm

           //

           this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);

           this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;

           this.ClientSize = new System.Drawing.Size(651, 333);

           this.Controls.Add(this.tabControl);

           this.Name = "DatabaseForm";

           this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;

           this.Text = "База данных";

           this.Deactivate += new System.EventHandler(this.DatabaseForm_Deactivate);

           this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.DatabaseForm_FormClosed);

           this.Load += new System.EventHandler(this.DatabaseForm_Load);

           this.Enter += new System.EventHandler(this.DatabaseForm_Enter);

           this.tabControl.ResumeLayout(false);

           this.ResumeLayout(false);

       }

       #endregion

       private System.Windows.Forms.TabControl tabControl;

       private System.Windows.Forms.TabPage tabPageCountries;

       private System.Windows.Forms.TabPage tabPageCities;

       private System.Windows.Forms.TabPage tabPageHotels;

       private System.Windows.Forms.TabPage tabPageServices;

       private System.Windows.Forms.TabPage tabPageTours;

       private System.Windows.Forms.TabPage tabPageClients;

       private System.Windows.Forms.TabPage tabPageToursClients;

   }

}

Файл FormExtensions.cs

using System;

using System.Drawing;

using System.Windows.Forms;

using System.Runtime.InteropServices;

namespace TurFirm

{

   // Клас расширений для формы.

   public static class FormExtensions

   {

       [DllImport("user32.dll")]

       private static extern int GetWindowLong(IntPtr hWnd, int nIndex);

       [DllImport("user32.dll")]

       private static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);

       [DllImport("user32.dll", ExactSpelling = true)]

       private static extern int SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, uint uFlags);

       private const int GWL_EXSTYLE = -20;

       private const int WS_EX_CLIENTEDGE = 0x200;

       private const uint SWP_NOSIZE = 0x0001;

       private const uint SWP_NOMOVE = 0x0002;

       private const uint SWP_NOZORDER = 0x0004;

       private const uint SWP_NOREDRAW = 0x0008;

       private const uint SWP_NOACTIVATE = 0x0010;

       private const uint SWP_FRAMECHANGED = 0x0020;

       private const uint SWP_SHOWWINDOW = 0x0040;

       private const uint SWP_HIDEWINDOW = 0x0080;

       private const uint SWP_NOCOPYBITS = 0x0100;

       private const uint SWP_NOOWNERZORDER = 0x0200;

       private const uint SWP_NOSENDCHANGING = 0x0400;

       // Убирает рамку у MdiClient, если второй параметр задан как false.

       public static bool SetBevel(this Form form, bool show)

       {

           var client = form.GetMdiClient();

           if (client == null)

               return false;

           int windowLong = GetWindowLong(client.Handle, GWL_EXSTYLE);

           if (show)

               windowLong |= WS_EX_CLIENTEDGE;

           else

               windowLong &= ~WS_EX_CLIENTEDGE;

           SetWindowLong(client.Handle, GWL_EXSTYLE, windowLong);

           SetWindowPos(client.Handle, IntPtr.Zero, 0, 0, 0, 0,

                           SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER |

                           SWP_NOOWNERZORDER | SWP_FRAMECHANGED);

           return true;

       }

       // Устанавливает цвет фона Mdi-формы.

       public static void SetMdiFormBackColor(this Form form, Color color)

       {

           var client = form.GetMdiClient();

           if (client == null)

               return;

           client.BackColor = color;

       }

       // Возвращает MdiClient формы.

       public static MdiClient GetMdiClient(this Form form)

       {

           foreach (Control c in form.Controls)

           {

               var client = c as MdiClient;

               if (client == null)

                   continue;

               return client;

           }

           return null;

       }

   }

}

Файл TurSearchForm.cs

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

namespace TurFirm

{

   public partial class ProjectSearchForm : Form

   {

       DataTable dataTable;                                    // таблиця, в якій відбувається пошук

       public delegate void SearchButtonClick(int rowIndex);   // rowIndex - індекс шуканого рядка

       public event SearchButtonClick SearchResult;            // подія, яка трапляється при натисканні кнопки пошуку

       public ProjectSearchForm(DataTable _dataTable)

       {

           InitializeComponent();

           this.dataTable = _dataTable;

       }

       private void btnSearch_Click(object sender, EventArgs e)

       {

           DataRow[] dataRows;     // масив знайдених рядків

           DataRow searchRow;      // шуканий рядок

           string searchKey = "";  // ключ пошуку

           bool isOk = true;       // флаг, який вказує, чи виникло виключення під час пошуку

           dataRows = new DataRow[0];  /* цей запис необхідний, щоб середа розробки не видавала помилку

                                        * про використання неініціалізованої змінної */

           if (cbNumber.Checked)

               searchKey += "№ = " + tbNumber.Text;

           if (cbName_Pr.Checked)

           {

               if (searchKey != "")

                   searchKey += " AND ";

               searchKey += "Name_Pr = '" + tbName_Pr.Text + "'";

           }

           if (cbZakazchik.Checked)

           {

               if (searchKey != "")

                   searchKey += " AND ";

               searchKey += "Zakazchik = '" + tbZakazchik.Text + "'";

           }

           if (cbShifr.Checked)

           {

               if (searchKey != "")

                   searchKey += " AND ";

               searchKey += "Shifr = '" + tbShifr.Text + "'";

           }

           if (cbCost_Pr.Checked)

           {

               if (searchKey != "")

                   searchKey += " AND ";

               searchKey += "Cost_Pr = " + tbCost_Pr.Text;

           }

           if (cbN_Otdel.Checked)

           {

               if (searchKey != "")

                   searchKey += " AND ";

               searchKey += "№_Otdel = " + tbN_Otdel.Text;

           }

           if (cbN_Dogovor.Checked)

           {

               if (searchKey != "")

                   searchKey += " AND ";

               searchKey += "№_Dogovor = " + tbN_Dogovor.Text;

           }

           if (cbStatyc.Checked)

           {

               if (searchKey != "")

                   searchKey += " AND ";

               searchKey += "Statyc = '" + tbStatyc.Text + "'";

           }

           if (searchKey == "")

           {

               MessageBox.Show("Задайте умову пошуку і повторіть запит.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

               return;

           }

           try

           {

               dataRows = dataTable.Select(searchKey);

           }

           catch (Exception ex)

           {

               MessageBox.Show(ex.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);

               isOk = false;

           }

           if (!isOk)

               return;

           if (dataRows.Length == 0)       // якщо пошук нічого не знайшов

           {

               MessageBox.Show("Вибачте, але нічого не знайдено.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);

               return;

           }

           searchRow = dataRows[0];        // беремо перший рядок серед знайдених

           for (int i = 0; i < dataTable.Rows.Count; i++)

               if (searchRow == dataTable.Rows[i])

               {

                   SearchResult(i);

                   return;

               }

           SearchResult(-1);

       }

   }

}

Файл InternetForm.cs

using System;

using System.Drawing;

using System.Windows.Forms;

namespace TurFirm

{

   // Форма для выхода в Интернет.

   public partial class InternetForm : Form

   {

       // Экземпляр формы.

       public static InternetForm Instance { get; private set; }

       // Кнопка, которая отвечает за экземпляр формы.

       public static Button InstanceButton { get; private set; }

       public InternetForm(Button instanceButton)

       {

           InitializeComponent();

           Instance = this;

           InstanceButton = instanceButton;

       }

       private void InternetForm_Load(object sender, EventArgs e)

       {

           ControlBox = false;

           WindowState = FormWindowState.Maximized;

           tsbHome.PerformClick();

       }

       private void InternetForm_Enter(object sender, EventArgs e)

       {

           InstanceButton.SetFlatButtonColor(Color.LightBlue);

       }

       private void InternetForm_Deactivate(object sender, EventArgs e)

       {

           InstanceButton.SetFlatButtonColor(Color.Empty);

       }

       private void InternetForm_FormClosed(object sender, FormClosedEventArgs e)

       {

           InstanceButton.SetFlatButtonColor(Color.Empty);

           InstanceButton = null;

           Instance = null;

       }

       private void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)

       {

           tstxtLink.Text = webBrowser.Url.AbsoluteUri;

       }

       // Переходит по указанному веб-адресу.

       private void tsbGo_Click(object sender, EventArgs e)

       {

           webBrowser.Navigate(tstxtLink.Text);

       }

       // Обновляет веб-страницу.

       private void tsbRefresh_Click(object sender, EventArgs e)

       {

           webBrowser.Refresh();

       }

       // Переходит на предыдущую веб-страницу.

       private void tsbBackward_Click(object sender, EventArgs e)

       {

           webBrowser.GoBack();

       }

       // Переходит на следующую веб-страницу.

       private void tsbForward_Click(object sender, EventArgs e)

       {

           webBrowser.GoForward();

       }

       // Переходит на домашнюю веб-страницу.

       private void tsbHome_Click(object sender, EventArgs e)

       {

           webBrowser.GoHome();

       }

       // Вызывает переход по указанному веб-адресу, когда нажимается Enter, если фокус ввода в поле веб-адреса.

       private void tstxtLink_KeyDown(object sender, KeyEventArgs e)

       {

           if (e.KeyData == Keys.Enter)

           {

               tsbGo.PerformClick();

               e.SuppressKeyPress = true;  // нужно для того, чтобы не срабатывал раздражающий системный звук

           }

       }

   }

}

Файл InternetForm.Designer.cs

namespace TurFirm

{

   partial class InternetForm

   {

       /// <summary>

       /// Required designer variable.

       /// </summary>

       private System.ComponentModel.IContainer components = null;

       /// <summary>

       /// Clean up any resources being used.

       /// </summary>

       /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>

       protected override void Dispose(bool disposing)

       {

           if (disposing && (components != null))

           {

               components.Dispose();

           }

           base.Dispose(disposing);

       }

       #region Windows Form Designer generated code

       /// <summary>

       /// Required method for Designer support - do not modify

       /// the contents of this method with the code editor.

       /// </summary>

       private void InitializeComponent()

       {

           this.toolStrip = new System.Windows.Forms.ToolStrip();

           this.tsbBackward = new System.Windows.Forms.ToolStripButton();

           this.tsbForward = new System.Windows.Forms.ToolStripButton();

           this.tsbRefresh = new System.Windows.Forms.ToolStripButton();

           this.tsbHome = new System.Windows.Forms.ToolStripButton();

           this.tstxtLink = new System.Windows.Forms.ToolStripTextBox();

           this.tsbGo = new System.Windows.Forms.ToolStripButton();

           this.webBrowser = new System.Windows.Forms.WebBrowser();

           this.toolStrip.SuspendLayout();

           this.SuspendLayout();

           //

           // toolStrip

           //

           this.toolStrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;

           this.toolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {

           this.tsbBackward,

           this.tsbForward,

           this.tsbRefresh,

           this.tsbHome,

           this.tstxtLink,

           this.tsbGo});

           this.toolStrip.Location = new System.Drawing.Point(0, 0);

           this.toolStrip.Name = "toolStrip";

           this.toolStrip.Padding = new System.Windows.Forms.Padding(3, 0, 1, 0);

           this.toolStrip.Size = new System.Drawing.Size(692, 31);

           this.toolStrip.TabIndex = 0;

           this.toolStrip.Text = "toolStrip1";

           //

           // tsbBackward

           //

           this.tsbBackward.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;

           this.tsbBackward.Image = global::TurFirm.Properties.Resources.Backward_24;

           this.tsbBackward.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;

           this.tsbBackward.ImageTransparentColor = System.Drawing.Color.Magenta;

           this.tsbBackward.Margin = new System.Windows.Forms.Padding(2, 1, 2, 2);

           this.tsbBackward.Name = "tsbBackward";

           this.tsbBackward.Size = new System.Drawing.Size(28, 28);

           this.tsbBackward.Text = "Назад";

           this.tsbBackward.Click += new System.EventHandler(this.tsbBackward_Click);

           //

           // tsbForward

           //

           this.tsbForward.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;

           this.tsbForward.Image = global::TurFirm.Properties.Resources.Forward_24;

           this.tsbForward.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;

           this.tsbForward.ImageTransparentColor = System.Drawing.Color.Magenta;

           this.tsbForward.Margin = new System.Windows.Forms.Padding(2, 1, 2, 2);

           this.tsbForward.Name = "tsbForward";

           this.tsbForward.Size = new System.Drawing.Size(28, 28);

           this.tsbForward.Text = "Вперед";

           this.tsbForward.Click += new System.EventHandler(this.tsbForward_Click);

           //

           // tsbRefresh

           //

           this.tsbRefresh.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;

           this.tsbRefresh.Image = global::TurFirm.Properties.Resources.Refresh_24;

           this.tsbRefresh.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;

           this.tsbRefresh.ImageTransparentColor = System.Drawing.Color.Magenta;

           this.tsbRefresh.Margin = new System.Windows.Forms.Padding(2, 1, 2, 2);

           this.tsbRefresh.Name = "tsbRefresh";

           this.tsbRefresh.Size = new System.Drawing.Size(28, 28);

           this.tsbRefresh.Text = "Обновить";

           this.tsbRefresh.Click += new System.EventHandler(this.tsbRefresh_Click);

           //

           // tsbHome

           //

           this.tsbHome.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;

           this.tsbHome.Image = global::TurFirm.Properties.Resources.Home_20;

           this.tsbHome.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;

           this.tsbHome.ImageTransparentColor = System.Drawing.Color.Magenta;

           this.tsbHome.Margin = new System.Windows.Forms.Padding(2, 1, 2, 2);

           this.tsbHome.Name = "tsbHome";

           this.tsbHome.Size = new System.Drawing.Size(28, 28);

           this.tsbHome.Text = "Домой";

           this.tsbHome.Click += new System.EventHandler(this.tsbHome_Click);

           //

           // tstxtLink

           //

           this.tstxtLink.Name = "tstxtLink";

           this.tstxtLink.Size = new System.Drawing.Size(500, 31);

           this.tstxtLink.KeyDown += new System.Windows.Forms.KeyEventHandler(this.tstxtLink_KeyDown);

           //

           // tsbGo

           //

           this.tsbGo.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;

           this.tsbGo.Image = global::TurFirm.Properties.Resources.Go_24;

           this.tsbGo.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;

           this.tsbGo.ImageTransparentColor = System.Drawing.Color.Magenta;

           this.tsbGo.Name = "tsbGo";

           this.tsbGo.Size = new System.Drawing.Size(28, 28);

           this.tsbGo.Text = "Перейти на страницу";

           this.tsbGo.Click += new System.EventHandler(this.tsbGo_Click);

           //

           // webBrowser

           //

           this.webBrowser.Dock = System.Windows.Forms.DockStyle.Fill;

           this.webBrowser.Location = new System.Drawing.Point(0, 31);

           this.webBrowser.MinimumSize = new System.Drawing.Size(20, 20);

           this.webBrowser.Name = "webBrowser";

           this.webBrowser.Size = new System.Drawing.Size(692, 392);

           this.webBrowser.TabIndex = 1;

           this.webBrowser.DocumentCompleted += new System.Windows.Forms.WebBrowserDocumentCompletedEventHandler(this.webBrowser_DocumentCompleted);

           //

           // InternetForm

           //

           this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);

           this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;

           this.ClientSize = new System.Drawing.Size(692, 423);

           this.Controls.Add(this.webBrowser);

           this.Controls.Add(this.toolStrip);

           this.Name = "InternetForm";

           this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;

           this.Text = "Интернет";

           this.Deactivate += new System.EventHandler(this.InternetForm_Deactivate);

           this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.InternetForm_FormClosed);

           this.Load += new System.EventHandler(this.InternetForm_Load);

           this.Enter += new System.EventHandler(this.InternetForm_Enter);

           this.toolStrip.ResumeLayout(false);

           this.toolStrip.PerformLayout();

           this.ResumeLayout(false);

           this.PerformLayout();

       }

       #endregion

       private System.Windows.Forms.ToolStrip toolStrip;

       private System.Windows.Forms.ToolStripButton tsbBackward;

       private System.Windows.Forms.ToolStripButton tsbForward;

       private System.Windows.Forms.ToolStripButton tsbRefresh;

       private System.Windows.Forms.ToolStripButton tsbHome;

       private System.Windows.Forms.ToolStripTextBox tstxtLink;

       private System.Windows.Forms.ToolStripButton tsbGo;

       private System.Windows.Forms.WebBrowser webBrowser;

   }

}

Файл MainForm.cs

using System;

using System.Drawing;

using System.Windows.Forms;

using TurFirm.Properties;

using Slusser.Components;

namespace TurFirm

{

   // Главная форма программы.

   public partial class MainForm : Form

   {

       private bool _menuVisible;  // видимость панели меню

       private readonly MdiClientController _mdiClientController;

       public MainForm()

       {

           InitializeComponent();

           _menuVisible = true;

           _mdiClientController = new MdiClientController(this)

               {

                   BorderStyle = BorderStyle.None,

                   BackColor = ControlPaint.LightLight(Color.LightGray),

                   Image = Resources.Logo,

                   ImageAlign = ContentAlignment.TopCenter

               };

           _mdiClientController.Paint += MdiClient_Paint;

       }

       // Прячет или скрывает панель меню.

       private bool MenuVisible

       {

           get { return _menuVisible; }

           set

           {

               _menuVisible = value;

               pnlMenu.Visible = value;

               btnMenuVisible.Image = value ? Resources.Left_36 : Resources.Right_36;

               toolTip.SetToolTip(btnMenuVisible, value ? "Скрыть панель меню" : "Открыть панель меню");

               Refresh();

           }

       }

       // Скрывает или делает видимой панель меню.

       private void btnMenuVisible_Click(object sender, EventArgs e)

       {

           MenuVisible = !MenuVisible;

       }

       // Открывает форму для редактирования таблиц базы данных.

       private void btnDatabase_Click(object sender, EventArgs e)

       {

           if (DatabaseForm.Instance == null)

               new DatabaseForm(btnDatabase) {MdiParent = this}.Show();

           else

               DatabaseForm.Instance.Focus();

       }

       // Открывает форму для входа в Интернет.

       private void btnInternet_Click(object sender, EventArgs e)

       {

           if (InternetForm.Instance == null)

               new InternetForm(btnInternet) {MdiParent = this}.Show();

           else

               InternetForm.Instance.Focus();

       }

       // Открывает форму для написания и выполнения запросов к базе данных.

       private void btnSqlEditor_Click(object sender, EventArgs e)

       {

           if (QueryForm.Instance == null)

               new QueryForm(btnSqlEditor) {MdiParent = this}.Show();

           else

               QueryForm.Instance.Focus();

       }

       // Рисует изображения на фоне MdiClient.

       private void MdiClient_Paint(object sender, PaintEventArgs e)

       {

           // Рисуем подсказку.

           if (MenuVisible)

           {

               var introImageRectangle =

                   new Rectangle(new Point(10, DisplayRectangle.Height - Resources.IntroduceText.Height - 30),

                                 Resources.IntroduceText.Size);

               e.Graphics.DrawImageUnscaledAndClipped(Resources.IntroduceText, introImageRectangle);

           }

       }

   }

}

Файл AddTurForm.cs

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using System.Data.OleDb;

namespace TurFirm

{

   public partial class AddProjectForm : Form, IUpdateForm

   {

       private OleDbConnection connection;

       private OleDbCommand command;

       private MainForm mainForm;          // посилання на об'єкт головної форми

       private DataSet dataSet;

       private OleDbDataAdapter dataAdapter;

       public AddProjectForm(OleDbConnection _connection, MainForm _mainForm)

       {

           InitializeComponent();

           this.connection = _connection;

           this.mainForm = _mainForm;

       }

       private void AddProjectForm_Load(object sender, EventArgs e)

       {

           bool isOk = true;       // флаг, чи успішно виконалися запити

           mainForm.OpenedFormCollection.Add(this);

           dataSet = new DataSet();

           command = new OleDbCommand();

           command.Connection = connection;

           dataAdapter = new OleDbDataAdapter();

           dataAdapter.SelectCommand = command;

           try

           {

               connection.Open();

               command.CommandText = "SELECT * FROM Vedomstva";

               dataAdapter.Fill(dataSet, "Vedomstva");

               command.CommandText = "SELECT * FROM Dogovori";

               dataAdapter.Fill(dataSet, "Dogovori");

           }

           catch (Exception ex)

           {

               MessageBox.Show(ex.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);

               isOk = false;

           }

           finally

           {

               if (connection.State == ConnectionState.Open)

                   connection.Close();

           }

           if (!isOk)

               this.Close();            

           cbN_Otdel.DataSource = dataSet.Tables["Vedomstva"];

           cbN_Otdel.DisplayMember = "Name_Otdel";

           cbN_Otdel.ValueMember = "№_Otdel";

           cbN_Otdel.SelectedIndex = 0;

           cbN_Dogovor.DataSource = dataSet.Tables["Dogovori"];

           cbN_Dogovor.DisplayMember = "Nazvanie_dog";

           cbN_Dogovor.ValueMember = "№";

           cbN_Dogovor.SelectedIndex = 0;

       }

       private void AddProjectForm_FormClosed(object sender, FormClosedEventArgs e)

       {

           mainForm.OpenedFormCollection.Remove(this);

       }

       private void btnClose_Click(object sender, EventArgs e)

       {

           this.Close();

       }

       private void btnOK_Click(object sender, EventArgs e)

       {

           bool isOk = true;       // флаг, чи успішно виконався запит

           string commandText;

           commandText = "INSERT INTO Project(№,Name_Pr,Zakazchik,Shifr,Cost_Pr,№_Otdel,№_Dogovor,Statyc) VALUES("

                       + tbNumber.Text + ","

                       + "'" + tbName_Pr.Text + "',"

                       + "'" + tbZakazchik.Text + "',"

                       + "'" + tbShifr.Text + "',"

                       + tbCost_Pr.Text + ","

                       + cbN_Otdel.SelectedValue.ToString() + ","

                       + cbN_Dogovor.SelectedValue.ToString() + ","

                       + "'" + cbStatyc.Text + "')";

           command.CommandText = commandText;

           try

           {

               connection.Open();

               command.ExecuteNonQuery();

           }

           catch (Exception ex)

           {

               MessageBox.Show(ex.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);

               isOk = false;

           }

           finally

           {

               if (connection.State == ConnectionState.Open)

                   connection.Close();

           }

           if (isOk)

           {

               // Очищаємо елементи на формі

               tbNumber.Clear();

               tbName_Pr.Clear();

               tbZakazchik.Clear();

               tbShifr.Clear();

               tbCost_Pr.Clear();

               cbN_Otdel.SelectedIndex = 0;

               cbN_Dogovor.SelectedIndex = 0;

               cbStatyc.Text = "";

           }

           // Оновлюємо дані у формах

           mainForm.OpenedFormCollection.UpdateAll();

       }

       public void UpdateForm()

       {

           bool isOk = true;       // флаг, чи успішно виконалися запити

           int indexN_Otdel = cbN_Otdel.SelectedIndex;     // зберігаємо поточні індекси елементів ComboBox

           int indexN_Dogovor = cbN_Dogovor.SelectedIndex;

           dataSet.Tables["Vedomstva"].Clear();

           dataSet.Tables["Dogovori"].Clear();

           try

           {

               connection.Open();

               command.CommandText = "SELECT * FROM Vedomstva";

               dataAdapter.Fill(dataSet, "Vedomstva");

               command.CommandText = "SELECT * FROM Dogovori";

               dataAdapter.Fill(dataSet, "Dogovori");

           }

           catch (Exception ex)

           {

               MessageBox.Show(ex.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);

               isOk = false;

           }

           finally

           {

               if (connection.State == ConnectionState.Open)

                   connection.Close();

           }

           if (!isOk)

               this.Close();

           if (indexN_Otdel < cbN_Otdel.Items.Count)

               cbN_Otdel.SelectedIndex = indexN_Otdel;

           if (indexN_Dogovor < cbN_Dogovor.Items.Count)

               cbN_Dogovor.SelectedIndex = indexN_Dogovor;

       }

   }

}

Файл MainForm.Designer.cs

namespace TurFirm

{

   partial class MainForm

   {

       /// <summary>

       /// Требуется переменная конструктора.

       /// </summary>

       private System.ComponentModel.IContainer components = null;

       /// <summary>

       /// Освободить все используемые ресурсы.

       /// </summary>

       /// <param name="disposing">истинно, если управляемый ресурс должен быть удален; иначе ложно.</param>

       protected override void Dispose(bool disposing)

       {

           if (disposing && (components != null))

           {

               components.Dispose();

           }

           base.Dispose(disposing);

       }

       #region Код, автоматически созданный конструктором форм Windows

       /// <summary>

       /// Обязательный метод для поддержки конструктора - не изменяйте

       /// содержимое данного метода при помощи редактора кода.

       /// </summary>

       private void InitializeComponent()

       {

           this.components = new System.ComponentModel.Container();

           System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));

           this.pnlMenu = new System.Windows.Forms.Panel();

           this.btnAbout = new System.Windows.Forms.Button();

           this.btnHelp = new System.Windows.Forms.Button();

           this.btnSqlEditor = new System.Windows.Forms.Button();

           this.btnInternet = new System.Windows.Forms.Button();

           this.btnDatabase = new System.Windows.Forms.Button();

           this.btnAddTour = new System.Windows.Forms.Button();

           this.toolTip = new System.Windows.Forms.ToolTip(this.components);

           this.btnMenuVisible = new System.Windows.Forms.Button();

           this.pnlBorder = new System.Windows.Forms.Panel();

           this.pnlMenu.SuspendLayout();

           this.SuspendLayout();

           //

           // pnlMenu

           //

           this.pnlMenu.AutoScroll = true;

           this.pnlMenu.BackColor = System.Drawing.Color.WhiteSmoke;

           this.pnlMenu.Controls.Add(this.btnAbout);

           this.pnlMenu.Controls.Add(this.btnHelp);

           this.pnlMenu.Controls.Add(this.btnSqlEditor);

           this.pnlMenu.Controls.Add(this.btnInternet);

           this.pnlMenu.Controls.Add(this.btnDatabase);

           this.pnlMenu.Controls.Add(this.btnAddTour);

           this.pnlMenu.Dock = System.Windows.Forms.DockStyle.Left;

           this.pnlMenu.Location = new System.Drawing.Point(57, 0);

           this.pnlMenu.Name = "pnlMenu";

           this.pnlMenu.Size = new System.Drawing.Size(131, 390);

           this.pnlMenu.TabIndex = 0;

           //

           // btnAbout

           //

           this.btnAbout.Dock = System.Windows.Forms.DockStyle.Top;

           this.btnAbout.FlatAppearance.BorderSize = 0;

           this.btnAbout.FlatStyle = System.Windows.Forms.FlatStyle.Flat;

           this.btnAbout.Font = new System.Drawing.Font("Segoe UI", 10F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(204)));

           this.btnAbout.ForeColor = System.Drawing.Color.IndianRed;

           this.btnAbout.Image = global::TurFirm.Properties.Resources.Information_70;

           this.btnAbout.Location = new System.Drawing.Point(0, 535);

           this.btnAbout.Name = "btnAbout";

           this.btnAbout.Size = new System.Drawing.Size(114, 107);

           this.btnAbout.TabIndex = 5;

           this.btnAbout.TextAlign = System.Drawing.ContentAlignment.BottomCenter;

           this.toolTip.SetToolTip(this.btnAbout, "О программе");

           this.btnAbout.UseVisualStyleBackColor = true;

           //

           // btnHelp

           //

           this.btnHelp.Dock = System.Windows.Forms.DockStyle.Top;

           this.btnHelp.FlatAppearance.BorderSize = 0;

           this.btnHelp.FlatStyle = System.Windows.Forms.FlatStyle.Flat;

           this.btnHelp.Font = new System.Drawing.Font("Segoe UI", 10F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(204)));

           this.btnHelp.ForeColor = System.Drawing.Color.IndianRed;

           this.btnHelp.Image = global::TurFirm.Properties.Resources.Help_70;

           this.btnHelp.Location = new System.Drawing.Point(0, 428);

           this.btnHelp.Name = "btnHelp";

           this.btnHelp.Size = new System.Drawing.Size(114, 107);

           this.btnHelp.TabIndex = 4;

           this.btnHelp.TextAlign = System.Drawing.ContentAlignment.BottomCenter;

           this.toolTip.SetToolTip(this.btnHelp, "Справка");

           this.btnHelp.UseVisualStyleBackColor = true;

           //

           // btnSqlEditor

           //

           this.btnSqlEditor.Dock = System.Windows.Forms.DockStyle.Top;

           this.btnSqlEditor.FlatAppearance.BorderSize = 0;

           this.btnSqlEditor.FlatStyle = System.Windows.Forms.FlatStyle.Flat;

           this.btnSqlEditor.Font = new System.Drawing.Font("Segoe UI", 10F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(204)));

           this.btnSqlEditor.ForeColor = System.Drawing.Color.IndianRed;

           this.btnSqlEditor.Image = global::TurFirm.Properties.Resources.Sql_70;

           this.btnSqlEditor.Location = new System.Drawing.Point(0, 321);

           this.btnSqlEditor.Name = "btnSqlEditor";

           this.btnSqlEditor.Size = new System.Drawing.Size(114, 107);

           this.btnSqlEditor.TabIndex = 3;

           this.btnSqlEditor.TextAlign = System.Drawing.ContentAlignment.BottomCenter;

           this.toolTip.SetToolTip(this.btnSqlEditor, "Редактор запросов");

           this.btnSqlEditor.UseVisualStyleBackColor = true;

           this.btnSqlEditor.Click += new System.EventHandler(this.btnSqlEditor_Click);

           //

           // btnInternet

           //

           this.btnInternet.Dock = System.Windows.Forms.DockStyle.Top;

           this.btnInternet.FlatAppearance.BorderSize = 0;

           this.btnInternet.FlatStyle = System.Windows.Forms.FlatStyle.Flat;

           this.btnInternet.Font = new System.Drawing.Font("Segoe UI", 10F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(204)));

           this.btnInternet.ForeColor = System.Drawing.Color.IndianRed;

           this.btnInternet.Image = global::TurFirm.Properties.Resources.Earth_70;

           this.btnInternet.Location = new System.Drawing.Point(0, 214);

           this.btnInternet.Name = "btnInternet";

           this.btnInternet.Size = new System.Drawing.Size(114, 107);

           this.btnInternet.TabIndex = 2;

           this.btnInternet.TextAlign = System.Drawing.ContentAlignment.BottomCenter;

           this.toolTip.SetToolTip(this.btnInternet, "Интернет");

           this.btnInternet.UseVisualStyleBackColor = true;

           this.btnInternet.Click += new System.EventHandler(this.btnInternet_Click);

           //

           // btnDatabase

           //

           this.btnDatabase.Dock = System.Windows.Forms.DockStyle.Top;

           this.btnDatabase.FlatAppearance.BorderSize = 0;

           this.btnDatabase.FlatStyle = System.Windows.Forms.FlatStyle.Flat;

           this.btnDatabase.Font = new System.Drawing.Font("Segoe UI", 10F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(204)));

           this.btnDatabase.ForeColor = System.Drawing.Color.IndianRed;

           this.btnDatabase.Image = global::TurFirm.Properties.Resources.Database_73_70;

           this.btnDatabase.Location = new System.Drawing.Point(0, 107);

           this.btnDatabase.Name = "btnDatabase";

           this.btnDatabase.Size = new System.Drawing.Size(114, 107);

           this.btnDatabase.TabIndex = 1;

           this.btnDatabase.TextAlign = System.Drawing.ContentAlignment.BottomCenter;

           this.toolTip.SetToolTip(this.btnDatabase, "База данных");

           this.btnDatabase.UseVisualStyleBackColor = true;

           this.btnDatabase.Click += new System.EventHandler(this.btnDatabase_Click);

           //

           // btnAddTour

           //

           this.btnAddTour.Dock = System.Windows.Forms.DockStyle.Top;

           this.btnAddTour.FlatAppearance.BorderSize = 0;

           this.btnAddTour.FlatStyle = System.Windows.Forms.FlatStyle.Flat;

           this.btnAddTour.Font = new System.Drawing.Font("Segoe UI", 10F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(204)));

           this.btnAddTour.ForeColor = System.Drawing.Color.IndianRed;

           this.btnAddTour.Image = global::TurFirm.Properties.Resources.Beach_78_70;

           this.btnAddTour.Location = new System.Drawing.Point(0, 0);

           this.btnAddTour.Name = "btnAddTour";

           this.btnAddTour.Size = new System.Drawing.Size(114, 107);

           this.btnAddTour.TabIndex = 0;

           this.btnAddTour.TextAlign = System.Drawing.ContentAlignment.BottomCenter;

           this.toolTip.SetToolTip(this.btnAddTour, "Оформить тур");

           this.btnAddTour.UseVisualStyleBackColor = true;

           //

           // btnMenuVisible

           //

           this.btnMenuVisible.BackColor = System.Drawing.Color.WhiteSmoke;

           this.btnMenuVisible.Dock = System.Windows.Forms.DockStyle.Left;

           this.btnMenuVisible.FlatAppearance.BorderSize = 0;

           this.btnMenuVisible.FlatStyle = System.Windows.Forms.FlatStyle.Flat;

           this.btnMenuVisible.Image = global::TurFirm.Properties.Resources.Left_36;

           this.btnMenuVisible.ImageAlign = System.Drawing.ContentAlignment.TopCenter;

           this.btnMenuVisible.Location = new System.Drawing.Point(0, 0);

           this.btnMenuVisible.Name = "btnMenuVisible";

           this.btnMenuVisible.Padding = new System.Windows.Forms.Padding(0, 5, 0, 0);

           this.btnMenuVisible.Size = new System.Drawing.Size(57, 390);

           this.btnMenuVisible.TabIndex = 2;

           this.toolTip.SetToolTip(this.btnMenuVisible, "Скрыть панель меню");

           this.btnMenuVisible.UseVisualStyleBackColor = false;

           this.btnMenuVisible.Click += new System.EventHandler(this.btnMenuVisible_Click);

           //

           // pnlBorder

           //

           this.pnlBorder.BackColor = System.Drawing.Color.LightGray;

           this.pnlBorder.Dock = System.Windows.Forms.DockStyle.Left;

           this.pnlBorder.Location = new System.Drawing.Point(188, 0);

           this.pnlBorder.Name = "pnlBorder";

           this.pnlBorder.Size = new System.Drawing.Size(1, 390);

           this.pnlBorder.TabIndex = 4;

           //

           // MainForm

           //

           this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);

           this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;

           this.ClientSize = new System.Drawing.Size(1058, 701);

           this.Controls.Add(this.pnlBorder);

           this.Controls.Add(this.pnlMenu);

           this.Controls.Add(this.btnMenuVisible);

           this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));

           this.IsMdiContainer = true;

           this.MinimumSize = new System.Drawing.Size(860, 428);

           this.Name = "MainForm";

           this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;

           this.Text = "Сказочный тур";

           this.WindowState = System.Windows.Forms.FormWindowState.Maximized;

           this.Paint += new System.Windows.Forms.PaintEventHandler(this.MdiClient_Paint);

           this.pnlMenu.ResumeLayout(false);

           this.ResumeLayout(false);

       }

       #endregion

       private System.Windows.Forms.Panel pnlMenu;

       private System.Windows.Forms.Button btnMenuVisible;

       private System.Windows.Forms.Button btnAddTour;

       private System.Windows.Forms.Button btnDatabase;

       private System.Windows.Forms.ToolTip toolTip;

       private System.Windows.Forms.Button btnInternet;

       private System.Windows.Forms.Button btnSqlEditor;

       private System.Windows.Forms.Button btnHelp;

       private System.Windows.Forms.Button btnAbout;

       private System.Windows.Forms.Panel pnlBorder;

   }

}

Файл AddVedomstvaForm.cs

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using System.Data.OleDb;

namespace TurFirm

{

   public partial class AddVedomstvaForm : Form

   {

       private OleDbConnection connection;

       private OleDbCommand command;

       private MainForm mainForm;          // посилання на об'єкт головної форми

       public AddVedomstvaForm(OleDbConnection _connection, MainForm _mainForm)

       {

           InitializeComponent();

           this.connection = _connection;

           this.mainForm = _mainForm;

       }

       private void AddVedomstvaForm_Load(object sender, EventArgs e)

       {

           mainForm.OpenedFormCollection.Add(this);

           command = new OleDbCommand();

           command.Connection = connection;

       }

       private void AddVedomstvaForm_FormClosed(object sender, FormClosedEventArgs e)

       {

           mainForm.OpenedFormCollection.Remove(this);

       }

       private void btnClose_Click(object sender, EventArgs e)

       {

           this.Close();

       }

       private void btnOK_Click(object sender, EventArgs e)

       {

           bool isOk = true;

           string commandText;

           commandText = "INSERT INTO Vedomstva(Name_Otdel,Phone) VALUES("

                       + "'" + tbName_Otdel.Text + "',"

                       + "'" + tbPhone.Text + "')";

           command.CommandText = commandText;

           try

           {

               connection.Open();

               command.ExecuteNonQuery();

           }

           catch (Exception ex)

           {

               MessageBox.Show(ex.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);

               isOk = false;

           }

           finally

           {

               if (connection.State == ConnectionState.Open)

                   connection.Close();

           }

           if (isOk)

           {

               // Очищаємо елементи на формі

               tbName_Otdel.Clear();

               tbPhone.Clear();

           }

           // Оновлюємо дані у формах

           mainForm.OpenedFormCollection.UpdateAll();

       }

   }

}

Файл OleDbPackage.cs

using System.Data;

using System.Data.OleDb;

namespace TurFirm

{

   // Необходимые программе инструменты для работы с ADO.NET.

   public static class OleDbPackage

   {

       private static readonly OleDbCommand Command;   // команда для запросов, не возвращающих данных

       private static readonly OleDbDataAdapter Adapter;   // адаптер базы данных

       private static readonly OleDbConnection Connection; // соединение к базе данных

       private const string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=turfirm.mdb"; // строка подключения к базе данных

       static OleDbPackage()

       {

           Connection = new OleDbConnection(ConnectionString);

           Command = Connection.CreateCommand();

           Adapter = new OleDbDataAdapter {SelectCommand = Connection.CreateCommand()};

       }

       // Выполняет команду, которая не возвращает данных.

       public static void ExecuteCommand(string commandText)

       {

           Command.CommandText = commandText;

           try

           {

               OpenConnection();

               Command.ExecuteNonQuery();

           }

           finally

           {

               CloseConnection();

           }

       }

       // Выполняет команду, возвращающую единственное значение.

       public static object ExecuteScalar(string commandText)

       {

           Command.CommandText = commandText;

           try

           {

               OpenConnection();

               return Command.ExecuteScalar();

           }

           finally

           {

               CloseConnection();

           }

       }

       // Возвращает таблицу, построенную на основе переданного запроса.

       public static DataTable ExecuteTable(string commandText)

       {

           var dataTable = new DataTable();

           FillTable(dataTable, commandText);

           return dataTable;

       }

       // Заполняет указанную таблицу, использую переданный текст запроса.

       public static void FillTable(DataTable dataTable, string commandText)

       {

           Adapter.SelectCommand.CommandText = commandText;

           try

           {

               OpenConnection();

               Adapter.Fill(dataTable);

           }

           finally

           {

               CloseConnection();

           }

       }

       // Обновляет базу данных, используя переданную таблицу изменений.

       public static void UpdateTable(DataTable changesTable, string selectCommandText)

       {

           Adapter.SelectCommand.CommandText = selectCommandText;

           try

           {

               OpenConnection();

               var commandBuilder = new OleDbCommandBuilder(Adapter);

               Adapter.Update(changesTable);

           }

           finally

           {

               CloseConnection();

           }

       }

       // Тестирует, возможно ли соединение с базой данных.

       public static bool TryConnection()

       {

           try

           {

               OpenConnection();

               ExecuteCommand("SELECT 1");

               CloseConnection();

               return true;

           }

           catch

           {

               return false;

           }

       }

       // Открывает соединение с базой данных.

       private static void OpenConnection()

       {

           if (Connection.State != ConnectionState.Open)

               Connection.Open();

       }

       // Закрывает соединение с базой данных.

       private static void CloseConnection()

       {

           Connection.Close();

       }

   }

}

Файл Program.cs

using System;

using System.Windows.Forms;

namespace TurFirm

{

   static class Program

   {

       /// <summary>

       /// Главная точка входа для приложения.

       /// </summary>

       [STAThread]

       static void Main()

       {

           Application.EnableVisualStyles();

           Application.SetCompatibleTextRenderingDefault(false);

           if (!OleDbPackage.TryConnection())

           {

               MessageBox.Show(

                   "Соединение с базой данных не установлено. Вероятно, файл с базой данных turfirm.mdb отсутствует в каталоге с программой.",

                   "Сказочный тур", MessageBoxButtons.OK, MessageBoxIcon.Error);

               return;

           }

           Application.Run(new MainForm());

       }

   }

}

Файл QueryForm.cs

using System;

using System.Drawing;

using System.Windows.Forms;

namespace TurFirm

{

   // Форма для написания и выполнения запросов к базе данных.

   public partial class QueryForm : Form

   {

       // Экземпляр формы.

       public static QueryForm Instance { get; private set; }

       // Кнопка, которая отвечает за экземпляр формы.

       public static Button InstanceButton { get; private set; }

       public QueryForm(Button instanceButton)

       {

           InitializeComponent();

           Instance = this;

           InstanceButton = instanceButton;

       }

       private void QueryForm_Load(object sender, EventArgs e)

       {

           ControlBox = false;

           WindowState = FormWindowState.Maximized;

       }

       private void QueryForm_Enter(object sender, EventArgs e)

       {

           InstanceButton.SetFlatButtonColor(Color.LightBlue);

       }

       private void QueryForm_Deactivate(object sender, EventArgs e)

       {

           InstanceButton.SetFlatButtonColor(Color.Empty);

       }

       private void QueryForm_FormClosed(object sender, FormClosedEventArgs e)

       {

           InstanceButton.SetFlatButtonColor(Color.Empty);

           InstanceButton = null;

           Instance = null;

       }

       private void btnUndo_Click(object sender, EventArgs e)

       {

           rtbQueryText.Undo();

       }

       private void btnRedo_Click(object sender, EventArgs e)

       {

           rtbQueryText.Redo();

       }

       private void btnErase_Click(object sender, EventArgs e)

       {

           rtbQueryText.ResetText();

       }

       private void btnZoomIn_Click(object sender, EventArgs e)

       {

           if (rtbQueryText.ZoomFactor < 3f)

               rtbQueryText.ZoomFactor += 0.25f;

       }

       private void btnZoomOut_Click(object sender, EventArgs e)

       {

           if (rtbQueryText.ZoomFactor > 0.75f)

               rtbQueryText.ZoomFactor -= 0.25f;

       }

       private void btnExecute_Click(object sender, EventArgs e)

       {

           try

           {

               dgvQuery.DataSource = OleDbPackage.ExecuteTable(rtbQueryText.Text);

           }

           catch (Exception ex)

           {

               MessageBox.Show(ex.Message, Text, MessageBoxButtons.OK, MessageBoxIcon.Error);

           }

       }

       private void rtbQueryText_TextChanged(object sender, EventArgs e)

       {

           dgvQuery.DataSource = null;

       }

   }

}

Файл ClientsForm.cs

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using System.Data.OleDb;

using System.Reflection;

using Microsoft.Office.Interop;

using Word = Microsoft.Office.Interop.Word;//Необхдимо добавить

using Excel = Microsoft.Office.Interop.Excel;

namespace TurFirm

{

   public partial class ClientsForm : Form, IUpdateForm

   {

       OleDbConnection connection;

       OleDbCommand command;

       MainForm mainForm;          // посилання на об'єкт головної форми

       DataSet dataSet;

       OleDbDataAdapter dataAdapter;

       WorkerSearchForm searchForm;            // форма для пошуку

       public WorkerForm(OleDbConnection _connection, MainForm _mainForm)

       {

           InitializeComponent();

           this.connection = _connection;

           this.mainForm = _mainForm;

       }

       private void ClientsForm_Load(object sender, EventArgs e)

       {

           bool isOk = true;       // флаг, чи успішно виконалися запити

           mainForm.OpenedFormCollection.Add(this);

           dataSet = new DataSet();

           command = new OleDbCommand();

           command.Connection = connection;

           dataAdapter = new OleDbDataAdapter();

           dataAdapter.SelectCommand = command;

           try

           {

               connection.Open();

               command.CommandText = "SELECT * FROM Vedomstva";

               dataAdapter.Fill(dataSet, "Vedomstva");

               command.CommandText = "SELECT * FROM Clients";

               dataAdapter.Fill(dataSet, "Clients");

           }

           catch (Exception ex)

           {

               MessageBox.Show(ex.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);

               isOk = false;

           }

           finally

           {

               if (connection.State == ConnectionState.Open)

                   connection.Close();

           }

           if (!isOk)

               this.Close();

           bindingSource.DataSource = dataSet.Tables["Worker"];            // прив'язуємо BindingSource до таблиці

           dgvWorker.DataSource = bindingSource;                           // прив'язуємо DataGridView до BindingSource

           dgvWorker.Columns[0].ReadOnly = true;                           // перше поле є лічильником, тому його не можна редагувати

           // Прив'язуємо усі елементи, що відповідають осередкам таблиці, до BindingSource

           tbFIO.DataBindings.Add("Text", bindingSource, "FIO");

           dtpBirthday.DataBindings.Add("Text", bindingSource, "Birthday");

           cbPol.DataBindings.Add("Text", bindingSource, "Pol");

           cbOtdel.DataSource = dataSet.Tables["Vedomstva"];

           cbOtdel.DisplayMember = cbOtdel.ValueMember = "№_Otdel";

           cbOtdel.DataBindings.Add("Text", bindingSource, "Otdel");

           cbDolgnost.DataBindings.Add("Text", bindingSource, "Dolgnost");

           tbZarplata.DataBindings.Add("Text", bindingSource, "Zarplata");

           tbPassport.DataBindings.Add("Text", bindingSource, "Passport");

           tbPhone.DataBindings.Add("Text", bindingSource, "Phone");

           tbAdress.DataBindings.Add("Text", bindingSource, "Adress");

           // Даємо полям таблиці українські назви

           dgvWorker.Columns["№"].HeaderText = "Номер працівника";

           dgvWorker.Columns["FIO"].HeaderText = "ПІБ працівника";

           dgvWorker.Columns["Birthday"].HeaderText = "Дата народження";

           dgvWorker.Columns["Pol"].HeaderText = "Стать";

           dgvWorker.Columns["Otdel"].HeaderText = "Номер відділу";

           dgvWorker.Columns["Dolgnost"].HeaderText = "Посада";

           dgvWorker.Columns["Zarplata"].HeaderText = "Зарплата";

           dgvWorker.Columns["Passport"].HeaderText = "Паспорт";

           dgvWorker.Columns["Phone"].HeaderText = "Телефон";

           dgvWorker.Columns["Adress"].HeaderText = "Адреса";

       }

       private void WorkerForm_FormClosed(object sender, FormClosedEventArgs e)

       {

           mainForm.OpenedFormCollection.Remove(this);

           if (searchForm != null)

               searchForm.Close();         // якщо форма для пошуку активована, закриваємо її

       }

       private void tsbSave_Click(object sender, EventArgs e)

       {

           if (!AreThereChanges())

               return;

           SaveChanges();

           // Оновлюємо дані у формах

           mainForm.OpenedFormCollection.UpdateAll();

       }

       private void tsbExcel_Click(object sender, EventArgs e)

       {

           object ms = Missing.Value;

           Excel.Application app = new Excel.Application();

           app.Visible = true;

           //Створення нового документу

           Excel.Workbook book = app.Workbooks.Add();

           Excel.Worksheet sheet = book.Worksheets[1];

           sheet.Range["A1"].Value = "Таблиця <Працывники>";

           //Вывод названий колонок таблицы

           for (int j = 0; j < dataSet.Tables["Worker"].Columns.Count; j++)

           {

               sheet.Cells[3, j + 1] = dataSet.Tables["Worker"].Columns[j].ColumnName.ToString();

           }

           //Вывод содержимого таблицы

           for (int i = 0; i < dataSet.Tables["Worker"].Rows.Count; i++)

           {

               for (int j = 0; j < dataSet.Tables["Worker"].Columns.Count; j++)

               {

                   sheet.Cells[i + 4, j + 1] = dataSet.Tables["Worker"].Rows[i][j].ToString();

               }

           }

           sheet.get_Range("A1:E1").MergeCells = true;//Слияние ячеек

           sheet.get_Range("A1:E1").HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;//Выравнивание

           sheet.get_Range("A1:E1").Font.Size = 24;//Размер

           sheet.get_Range("A1:E1").Font.Color = Color.Red;

       }

       private void tsbWord_Click(object sender, EventArgs e)

       {

           object ms = Missing.Value;

           //Створення додатку Word

           Word.Application app = new Word.Application();

           app.Visible = true;

           //Створення нового документу

           Word.Document doc = app.Documents.Add(ref ms, ref ms, ref ms, ref ms);

           doc.Activate();     //Активація документу

           doc.ActiveWindow.Selection.Font.Color = Word.WdColor.wdColorRed;

           doc.ActiveWindow.Selection.Font.Size = 16;

           doc.ActiveWindow.Selection.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;

           doc.ActiveWindow.Selection.TypeText("Таблиця <Працівники>"); //Додавання тексту до документу

           doc.Application.Selection.TypeParagraph();      //Перехід на новій рядок

           doc.ActiveWindow.Selection.Font.Color = Word.WdColor.wdColorBlack;

           doc.ActiveWindow.Selection.Font.Size = 12;

           Word.Table table = doc.Tables.Add(doc.Application.Selection.Range, dataSet.Tables["Worker"].Rows.Count + 1, dataSet.Tables["Worker"].Columns.Count, ref ms, ref ms);

           //Вывод названий колонок таблицы

           for (int j = 0; j < dataSet.Tables["Worker"].Columns.Count; j++)

           {

               table.Cell(1, j + 1).Range.Text = dataSet.Tables["Worker"].Columns[j].ColumnName.ToString();

           }

           //Вывод записей таблицы

           for (int i = 0; i < dataSet.Tables["Worker"].Rows.Count; i++)

           {

               for (int j = 0; j < dataSet.Tables["Worker"].Columns.Count; j++)

               {

                   table.Cell(i + 2, j + 1).Range.Text = dataSet.Tables["Worker"].Rows[i][j].ToString();

               }

           }

           //Вихід за межи таблиці

           object o1 = Word.WdUnits.wdLine;

           object o2 = 25;

           doc.Application.Selection.MoveDown(ref o1, ref o2, ref ms);

       }

       private void tsbSearch_Click(object sender, EventArgs e)

       {

           if (searchForm == null)

           {

               searchForm = new WorkerSearchForm(dataSet.Tables["Worker"]);

               searchForm.FormClosed += new FormClosedEventHandler(WorkerSearchForm_FormClosed);       /* присвоюємо обробник на

                                                                                                        * закриття форми пошуку */

               searchForm.SearchResult += new WorkerSearchForm.SearchButtonClick(EndOfSearch);         /* присвоюємо обробник на

                                                                                                        * натискання кнопки пошуку */

               searchForm.MdiParent = mainForm;

               searchForm.Show();

           }

           else

               searchForm.Focus();

       }

       private void WorkerSearchForm_FormClosed(object sender, FormClosedEventArgs e)

       {

           searchForm = null;                              // коли форма пошуку закрилася, посилання searchForm має вказувати на null

       }

       private void EndOfSearch(int rowIndex)              // виділяє шуканий рядок у DataGridView

       {

           if (rowIndex != -1)                             // якщо пошук був вдалим, виділяємо шуканий рядок

           {

               dgvWorker.CurrentCell = dgvWorker.Rows[rowIndex].Cells[0];

               this.Focus();

           }

           else

           {

               MessageBox.Show("Вибачте, але трапилася якась помилка.", searchForm.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);

           }

       }

       private void tsbClose_Click(object sender, EventArgs e)

       {

           this.Close();

       }

       private void btnOK_Click(object sender, EventArgs e)

       {

           bindingSource.EndEdit();        // завершуємо редагування, якщо воно відбувалося

       }

       private bool AreThereChanges()      // повертає true, якщо були внесені зміни

       {

           DataTable dtChanges;            // таблиця, що містить змінені записи

           bindingSource.EndEdit();        // завершуємо редагування, якщо воно відбувалося

           dgvWorker.EndEdit();

           dtChanges = dataSet.Tables["Worker"].GetChanges();

           return dtChanges == null ? false : true;

       }

       private void SaveChanges()          // зберігає внесені зміни

       {

           try

           {

               connection.Open();

               command.CommandText = "SELECT * FROM Worker";

               OleDbCommandBuilder commandBuilder = new OleDbCommandBuilder(dataAdapter);

               dataAdapter.Update(dataSet.Tables["Worker"]);

               dataSet.Tables["Worker"].AcceptChanges();

           }

           catch (Exception ex)

           {

               MessageBox.Show(ex.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);

           }

           finally

           {

               if (connection.State == ConnectionState.Open)

                   connection.Close();

           }

       }

       public void UpdateForm()

       {

           bool isOk = true;       // флаг, чи успішно виконалися запити

           if (AreThereChanges())

           {

               // Якщо є внесені зміни і користувач бажає їх зберегти

               if (MessageBox.Show("Зберегти внесені зміни?", this.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question)

                   == System.Windows.Forms.DialogResult.Yes)

               {

                   SaveChanges();

               }

           }

           // Оновлюємо дані у формі

           dataSet.Tables["Vedomstva"].Clear();

           dataSet.Tables["Worker"].Clear();

           try

           {

               connection.Open();

               command.CommandText = "SELECT * FROM Vedomstva";

               dataAdapter.Fill(dataSet, "Vedomstva");

               command.CommandText = "SELECT * FROM Worker";

               dataAdapter.Fill(dataSet, "Worker");

           }

           catch (Exception ex)

           {

               MessageBox.Show(ex.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);

               isOk = false;

           }

           finally

           {

               if (connection.State == ConnectionState.Open)

                   connection.Close();

           }

           if (!isOk)

               this.Close();

       }

       private void WorkerForm_FormClosing(object sender, FormClosingEventArgs e)

       {

           // Якщо зміни не були внесені, виходимо

           if (!AreThereChanges())

               return;

           // Якщо користувач не бажає зберігати зміни, виходимо

           if (MessageBox.Show("Зберегти внесені зміни?", this.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question)

               == System.Windows.Forms.DialogResult.No)

               return;

           // Зберігаємо внесені зміни

           tsbSave.PerformClick();

       }

   }

}

Файл QueryForm.Designer.cs

namespace TurFirm

{

   partial class QueryForm

   {

       /// <summary>

       /// Required designer variable.

       /// </summary>

       private System.ComponentModel.IContainer components = null;

       /// <summary>

       /// Clean up any resources being used.

       /// </summary>

       /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>

       protected override void Dispose(bool disposing)

       {

           if (disposing && (components != null))

           {

               components.Dispose();

           }

           base.Dispose(disposing);

       }

       #region Windows Form Designer generated code

       /// <summary>

       /// Required method for Designer support - do not modify

       /// the contents of this method with the code editor.

       /// </summary>

       private void InitializeComponent()

       {

           this.components = new System.ComponentModel.Container();

           this.toolTip = new System.Windows.Forms.ToolTip(this.components);

           this.splitter = new System.Windows.Forms.Splitter();

           this.clrpnlQueryView = new TurFirm.ColorPanel();

           this.dgvQuery = new System.Windows.Forms.DataGridView();

           this.clrpnlQueryText = new TurFirm.ColorPanel();

           this.btnExecute = new System.Windows.Forms.Button();

           this.pnlTools = new System.Windows.Forms.Panel();

           this.btnZoomOut = new System.Windows.Forms.Button();

           this.btnZoomIn = new System.Windows.Forms.Button();

           this.btnErase = new System.Windows.Forms.Button();

           this.btnRedo = new System.Windows.Forms.Button();

           this.btnUndo = new System.Windows.Forms.Button();

           this.rtbQueryText = new System.Windows.Forms.RichTextBox();

           this.clrpnlQueryView.SuspendLayout();

           ((System.ComponentModel.ISupportInitialize)(this.dgvQuery)).BeginInit();

           this.clrpnlQueryText.SuspendLayout();

           this.pnlTools.SuspendLayout();

           this.SuspendLayout();

           //

           // splitter

           //

           this.splitter.Cursor = System.Windows.Forms.Cursors.SizeNS;

           this.splitter.Dock = System.Windows.Forms.DockStyle.Top;

           this.splitter.Location = new System.Drawing.Point(0, 274);

           this.splitter.Name = "splitter";

           this.splitter.Size = new System.Drawing.Size(619, 3);

           this.splitter.TabIndex = 1;

           this.splitter.TabStop = false;

           //

           // clrpnlQueryView

           //

           this.clrpnlQueryView.BorderColor = System.Drawing.Color.Silver;

           this.clrpnlQueryView.ColorBorderEnabled = true;

           this.clrpnlQueryView.Controls.Add(this.dgvQuery);

           this.clrpnlQueryView.DisplayRectangleColor = System.Drawing.Color.Empty;

           this.clrpnlQueryView.Dock = System.Windows.Forms.DockStyle.Fill;

           this.clrpnlQueryView.Location = new System.Drawing.Point(0, 277);

           this.clrpnlQueryView.Name = "clrpnlQueryView";

           this.clrpnlQueryView.Padding = new System.Windows.Forms.Padding(2);

           this.clrpnlQueryView.Size = new System.Drawing.Size(619, 139);

           this.clrpnlQueryView.TabIndex = 2;

           //

           // dgvQuery

           //

           this.dgvQuery.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)

           | System.Windows.Forms.AnchorStyles.Left)

           | System.Windows.Forms.AnchorStyles.Right)));

           this.dgvQuery.BackgroundColor = System.Drawing.Color.WhiteSmoke;

           this.dgvQuery.BorderStyle = System.Windows.Forms.BorderStyle.None;

           this.dgvQuery.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;

           this.dgvQuery.Location = new System.Drawing.Point(3, 3);

           this.dgvQuery.Margin = new System.Windows.Forms.Padding(1);

           this.dgvQuery.Name = "dgvQuery";

           this.dgvQuery.Size = new System.Drawing.Size(613, 133);

           this.dgvQuery.TabIndex = 0;

           //

           // clrpnlQueryText

           //

           this.clrpnlQueryText.BorderColor = System.Drawing.Color.Silver;

           this.clrpnlQueryText.ColorBorderEnabled = true;

           this.clrpnlQueryText.Controls.Add(this.btnExecute);

           this.clrpnlQueryText.Controls.Add(this.pnlTools);

           this.clrpnlQueryText.Controls.Add(this.rtbQueryText);

           this.clrpnlQueryText.DisplayRectangleColor = System.Drawing.Color.Empty;

           this.clrpnlQueryText.Dock = System.Windows.Forms.DockStyle.Top;

           this.clrpnlQueryText.Location = new System.Drawing.Point(0, 0);

           this.clrpnlQueryText.Name = "clrpnlQueryText";

           this.clrpnlQueryText.Padding = new System.Windows.Forms.Padding(2);

           this.clrpnlQueryText.Size = new System.Drawing.Size(619, 274);

           this.clrpnlQueryText.TabIndex = 0;

           //

           // btnExecute

           //

           this.btnExecute.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)

           | System.Windows.Forms.AnchorStyles.Right)));

           this.btnExecute.BackColor = System.Drawing.Color.White;

           this.btnExecute.FlatAppearance.BorderSize = 0;

           this.btnExecute.FlatStyle = System.Windows.Forms.FlatStyle.Flat;

           this.btnExecute.Image = global::TurFirm.Properties.Resources.Download_58_45;

           this.btnExecute.Location = new System.Drawing.Point(3, 221);

           this.btnExecute.Margin = new System.Windows.Forms.Padding(1, 0, 1, 1);

           this.btnExecute.Name = "btnExecute";

           this.btnExecute.Size = new System.Drawing.Size(616, 50);

           this.btnExecute.TabIndex = 2;

           this.btnExecute.UseVisualStyleBackColor = false;

           this.btnExecute.Click += new System.EventHandler(this.btnExecute_Click);

           //

           // pnlTools

           //

           this.pnlTools.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)

           | System.Windows.Forms.AnchorStyles.Right)));

           this.pnlTools.BackColor = System.Drawing.Color.White;

           this.pnlTools.Controls.Add(this.btnZoomOut);

           this.pnlTools.Controls.Add(this.btnZoomIn);

           this.pnlTools.Controls.Add(this.btnErase);

           this.pnlTools.Controls.Add(this.btnRedo);

           this.pnlTools.Controls.Add(this.btnUndo);

           this.pnlTools.Location = new System.Drawing.Point(3, 3);

           this.pnlTools.Margin = new System.Windows.Forms.Padding(1, 1, 1, 0);

           this.pnlTools.Name = "pnlTools";

           this.pnlTools.Size = new System.Drawing.Size(613, 28);

           this.pnlTools.TabIndex = 1;

           //

           // btnZoomOut

           //

           this.btnZoomOut.Dock = System.Windows.Forms.DockStyle.Left;

           this.btnZoomOut.FlatAppearance.BorderSize = 0;

           this.btnZoomOut.FlatStyle = System.Windows.Forms.FlatStyle.Flat;

           this.btnZoomOut.Image = global::TurFirm.Properties.Resources.ZoomOut_24;

           this.btnZoomOut.Location = new System.Drawing.Point(112, 0);

           this.btnZoomOut.Name = "btnZoomOut";

           this.btnZoomOut.Size = new System.Drawing.Size(28, 28);

           this.btnZoomOut.TabIndex = 4;

           this.btnZoomOut.UseVisualStyleBackColor = true;

           this.btnZoomOut.Click += new System.EventHandler(this.btnZoomOut_Click);

           //

           // btnZoomIn

           //

           this.btnZoomIn.Dock = System.Windows.Forms.DockStyle.Left;

           this.btnZoomIn.FlatAppearance.BorderSize = 0;

           this.btnZoomIn.FlatStyle = System.Windows.Forms.FlatStyle.Flat;

           this.btnZoomIn.Image = global::TurFirm.Properties.Resources.ZoomIn_24;

           this.btnZoomIn.Location = new System.Drawing.Point(84, 0);

           this.btnZoomIn.Name = "btnZoomIn";

           this.btnZoomIn.Size = new System.Drawing.Size(28, 28);

           this.btnZoomIn.TabIndex = 3;

           this.btnZoomIn.UseVisualStyleBackColor = true;

           this.btnZoomIn.Click += new System.EventHandler(this.btnZoomIn_Click);

           //

           // btnErase

           //

           this.btnErase.Dock = System.Windows.Forms.DockStyle.Left;

           this.btnErase.FlatAppearance.BorderSize = 0;

           this.btnErase.FlatStyle = System.Windows.Forms.FlatStyle.Flat;

           this.btnErase.Image = global::TurFirm.Properties.Resources.Erase_24;

           this.btnErase.Location = new System.Drawing.Point(56, 0);

           this.btnErase.Name = "btnErase";

           this.btnErase.Size = new System.Drawing.Size(28, 28);

           this.btnErase.TabIndex = 2;

           this.btnErase.UseVisualStyleBackColor = true;

           this.btnErase.Click += new System.EventHandler(this.btnErase_Click);

           //

           // btnRedo

           //

           this.btnRedo.Dock = System.Windows.Forms.DockStyle.Left;

           this.btnRedo.FlatAppearance.BorderSize = 0;

           this.btnRedo.FlatStyle = System.Windows.Forms.FlatStyle.Flat;

           this.btnRedo.Image = global::TurFirm.Properties.Resources.Redo_24;

           this.btnRedo.Location = new System.Drawing.Point(28, 0);

           this.btnRedo.Name = "btnRedo";

           this.btnRedo.Size = new System.Drawing.Size(28, 28);

           this.btnRedo.TabIndex = 1;

           this.btnRedo.UseVisualStyleBackColor = true;

           this.btnRedo.Click += new System.EventHandler(this.btnRedo_Click);

           //

           // btnUndo

           //

           this.btnUndo.Dock = System.Windows.Forms.DockStyle.Left;

           this.btnUndo.FlatAppearance.BorderSize = 0;

           this.btnUndo.FlatStyle = System.Windows.Forms.FlatStyle.Flat;

           this.btnUndo.Image = global::TurFirm.Properties.Resources.Undo_24;

           this.btnUndo.Location = new System.Drawing.Point(0, 0);

           this.btnUndo.Name = "btnUndo";

           this.btnUndo.Size = new System.Drawing.Size(28, 28);

           this.btnUndo.TabIndex = 0;

           this.btnUndo.UseVisualStyleBackColor = true;

           this.btnUndo.Click += new System.EventHandler(this.btnUndo_Click);

           //

           // rtbQueryText

           //

           this.rtbQueryText.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)

           | System.Windows.Forms.AnchorStyles.Left)

           | System.Windows.Forms.AnchorStyles.Right)));

           this.rtbQueryText.BackColor = System.Drawing.Color.White;

           this.rtbQueryText.BorderStyle = System.Windows.Forms.BorderStyle.None;

           this.rtbQueryText.Font = new System.Drawing.Font("Consolas", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));

           this.rtbQueryText.Location = new System.Drawing.Point(3, 31);

           this.rtbQueryText.Margin = new System.Windows.Forms.Padding(1, 0, 1, 0);

           this.rtbQueryText.Name = "rtbQueryText";

           this.rtbQueryText.Size = new System.Drawing.Size(613, 190);

           this.rtbQueryText.TabIndex = 0;

           this.rtbQueryText.Text = "";

           this.rtbQueryText.TextChanged += new System.EventHandler(this.rtbQueryText_TextChanged);

           //

           // QueryForm

           //

           this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);

           this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;

           this.ClientSize = new System.Drawing.Size(619, 416);

           this.Controls.Add(this.clrpnlQueryView);

           this.Controls.Add(this.splitter);

           this.Controls.Add(this.clrpnlQueryText);

           this.Name = "QueryForm";

           this.Text = "Редактор запросов";

           this.Deactivate += new System.EventHandler(this.QueryForm_Deactivate);

           this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.QueryForm_FormClosed);

           this.Load += new System.EventHandler(this.QueryForm_Load);

           this.Enter += new System.EventHandler(this.QueryForm_Enter);

           this.clrpnlQueryView.ResumeLayout(false);

           ((System.ComponentModel.ISupportInitialize)(this.dgvQuery)).EndInit();

           this.clrpnlQueryText.ResumeLayout(false);

           this.pnlTools.ResumeLayout(false);

           this.ResumeLayout(false);

       }

       #endregion

       private System.Windows.Forms.ToolTip toolTip;

       private ColorPanel clrpnlQueryText;

       private System.Windows.Forms.Splitter splitter;

       private ColorPanel clrpnlQueryView;

       private System.Windows.Forms.Panel pnlTools;

       private System.Windows.Forms.RichTextBox rtbQueryText;

       private System.Windows.Forms.DataGridView dgvQuery;

       private System.Windows.Forms.Button btnExecute;

       private System.Windows.Forms.Button btnUndo;

       private System.Windows.Forms.Button btnZoomOut;

       private System.Windows.Forms.Button btnZoomIn;

       private System.Windows.Forms.Button btnErase;

       private System.Windows.Forms.Button btnRedo;

   }

}

Файл TurFirmTable.cs

using System;

using System.Data;

namespace TurFirm

{

   public class TurFirmTable

   {

       // Событие, которое происходит после внесения изменений в базу данных.

       public static event Action DataChanged;

       protected TurFirmTable(string tableName)

       {

           Table = new DataTable(tableName);

           Name = tableName;

       }

       // Имя таблицы в базе данных.

       public string Name { get; protected set; }

       public DataTable Table { get; protected set; }

       // Проверяет, есть ли изменения в таблице.

       public virtual bool HasChanges

       {

           get { return Table.GetChanges() != null; }

       }

       // Текст запроса на заполнение таблицы.

       protected string FillCommandText

       {

           get { return String.Format("SELECT * FROM [{0}]", Name); }

       }

       // Сохраняет, внесённые в таблицу изменения, в базу данных.

       public virtual void SaveChanges()

       {

           DataTable changesTable = Table.GetChanges();

           if (changesTable == null)

               return;

           OleDbPackage.UpdateTable(changesTable, FillCommandText);

           Table.AcceptChanges();

           OnDataChanged();

       }

       // Обновляет информацию в таблице.

       public virtual void Update()

       {

           Clear();

           Fill();

       }

       // Заполняет таблицу данными из базы.

       public virtual void Fill()

       {

           OleDbPackage.FillTable(Table, FillCommandText);

       }

       // Возвращает отфильтрованное отображение таблицы.

       public virtual DataView GetFilteredView(string filterString)

       {

           var dataView = new DataView(Table) {RowFilter = filterString};

           return dataView;

       }

       // Очищает таблицу.

       public virtual void Clear()

       {

           Table.Clear();

       }

       // Вызывает событие DataChanged.

       protected static void OnDataChanged()

       {

           if (DataChanged != null)

               DataChanged();

       }

   }

}


Харківський  патентно-комп’ютерний  коледж

Відділення „Розробка програмного забезпечення”

Предметно-циклова комісія  „Програмування”

Інформаційна система туристичної фірми «Сказочный тур»

Програма та методика тестування

ДП5.05010301.01.14.51

Виконав   

Дерев'янко О.О.

                                                                                (прізвище та ініціали)

Керівник

Борисова І.В.

                                                                                (прізвище та ініціали)

Харків – 2014 року


ЗМІСТ

Арк.

Вступ 3
1 Об’єкт тестування 3
2 Мета тестування 3
3 Вимоги до програмного виробу 4
4 Вимоги до програмної документації 5
5 Засоби та порядок тестування 6
6 Методи тестування 6
Перелік посилань 9


ВСТУП

Тестування програмного забезпечення — техніка контролю якості, що перевіряє відповідність між реальною і очікуваною поведінкою програми завдяки кінцевому набору тестів, які обираються певним чином.

Якість не є абсолютною, це суб'єктивне поняття. Тому тестування, як процес своєчасного виявлення помилок та дефектів, не може повністю забезпечити коректність програмного забезпечення. Воно тільки порівнює стан і поведінку продукту зі специфікацією. При цьому треба розрізняти тестування програмного забезпечення й забезпечення якості програмного забезпечення, до якого належать всі складові ділового процесу, а не тільки тестування.

На сьогодні тестування програмного забезпечення – один з найбільш дорогих етапів життєвого циклу програмного забезпечення, на нього відводиться від 50% до 65% загальних витрат. У царині кодування ПЗ широкого розповсюдження набули різноманітні CASE-засоби, які дозволяють прискорити процеси створення коду. На жаль, в галузі тестування відчувається нестача таких засобів і більшість зусиль витрачається на ручне тестування.

1 ОБ’ЄКТ ТЕСТУВАННЯ

Найменування програми: Інформаційна система туристичної фірми «Сказочный тур».

Галузь застосування: інформаційні технології.

2 МЕТА ТЕСТУВАННЯ

Тестування необхідно, щоб:

  •   виявити ситуації, в яких поведінка програми є неправильною, небажаною або не відповідає специфікації;
  •   продемонструвати розробникам і замовникам, що програма відповідає вимогам.

Кінцевою метою тестування є забезпечення виконання таких понять, як якість, ефективність, мобільність, функціональність.

3 ВИМОГИ ДО ПРОГРАМНОГО ВИРОБУ

В ході тестування треба перевірити не тільки зібрану програму, але й код, архітектуру, самі тести.

Програма повинна бути послідовною, актуальною, недвозначною, інтуїтивно-зрозумілою.

Вимоги до функціональних можливостей

Програма повинна виконувати наступні дії:

  •  додавати дані про постачальників, тури, працівників, послуги, клієнтів та замовлення;
  •  оновлювати інформацію про постачальників, тури, працівників, послуги, клієнтів та замовлення;
  •  вилучати дані про постачальників, тури, працівників, послуги, клієнтів та замовлення;
  •  виконувати SQL-запити до бази даних;
  •  дати можливість ознайомитись з переліком постачальників, турів, працівників, послуг, клієнтів та замовлень;
  •  скористатись фільтром та пошуком.

База даних повинна мати не складний, інтуїтивний інтерфейс користувача.

Меню програми повинно складатись з декількох пунктів:

  •  Форма входу, яка включає в себе ввід паролю.
  •  Форма по роботі з базою даних в форматі Access, яка включає додавання, оновлення, видалення записів про постачальників, тури, працівників, послуги, клієнтів та замовлення. Також форма включає можливість сортування і фільтрації записів та розрахунок обчислюваного стовпця.
  •  Форма по роботі з базою даних в форматі XML, яка включає додавання, оновлення, видалення записів про постачальників, тури, працівників, послуги, клієнтів та замовлення.
  •  Форма запису таблиць в Word та Excel, яка включає в себе елемент відображення інформації про постачальників, тури, працівників, послуги, клієнтів та замовлення та дві кнопки для запису у Word та Excel відповідно.
  •  Форма для SQL-запитів, яка включає в себе поле для вводу запиту і елемент відображення результатів.

4 ВИМОГИ ДО ПРОГРАМНОЇ ДОКУМЕНТАЦІЇ

При роботі над дипломним проектом розробляється програмна та експлуатаційна документація. Програмними документами користуватимуться розробники програмного продукту, експлуатаційними – замовник.

До експлуатаційних документів відносяться:

  •  інструкція оператора;
  •  інструкція по супроводженню програмного продукту;

До програмних документів відносяться:

  •  технічне завдання;
  •  пояснювальна записка;
  •  текст програми у роздрукованому виді та на носії інформації;
  •  опис програми;
  •  методика тестування.

По закінченню проектування розробник надає замовнику: переліки подій, схем зв'язків, графів, вхідних і вихідних змінних, які беруть участь у роботі підсистеми.

Всі документи оформлюються відповідно до існуючих стандартів ЄСПД (Єдиний Стандарт Програмної Документації).

5 ЗАСОБИ ТА ПОРЯДОК ТЕСТУВАННЯ

Спочатку програмний продукт проходить тестування продуктивності, потім навантажувальне тестування, тестування на стабільність і стресостійкість. Слідом йде регресійне тестування, функціональне тестування і установче тестування.

Регресійне тестування означає перевірку програмного забезпечення на коректність функціональності, випущеної і протестованої в попередній версії. Виконується з регулярною частотою, що задається випуском нової версії програми.

Функціональне тестування проводиться, коли мова йде про перевірку нового функціоналу. Зазвичай , згодом ці тести і використовуються для регресійного тестування.

Установче тестування, виконується для перевірки умов інсталяції (і настройки) продукту з урахуванням тих чи інших вимог до системи від замовника.

Технічні засоби для тестування програмного продукту повинні включати в себе персональний комп’ютер (PC) під управлінням операційної системи Windows, клавіатуру, маніпулятор типу «миша» та монітор.

6 МЕТОДИ ТЕСТУВАННЯ

При тестуванні програмного продукту буде проведено тестування методом білого ящика, а потім – методом чорного ящика [6].

Для тестування програмного коду без його безпосереднього запуску застосовується метод білого ящика. При тестуванні з використанням методу білого ящика тестувальник має доступ до вихідного коду програми і може писати код, який пов'язаний з бібліотеками тестованого продукту. Такі тести засновані на знанні коду програми і його внутрішніх механізмів .

Метод білого ящика часто використовується на стадії, коли програма ще не зібрана воєдино, але необхідно перевірити кожен з його компонентів, модулів, процедур і підпрограм. Цим методом користуються програмісти, які добре розуміють код, або тестувальники, які мають прекрасні знання в області програмування [5].

При використанні методу чорного ящика тестувальник має доступ до програми тільки через ті ж інтерфейси, що і замовник або користувач. Як правило , тестування чорного ящика ведеться з використанням специфікацій або інших документів , що описують вимоги до системи.

Тестувальник тестує програму так, як з нею працюватиме кінцевий користувач, і він нічого не знає про внутрішні механізми і алгоритмах , за якими працює програма. Іншими словами, він запускає додаток на виконання і тестує його функціональність, використовуючи інтерфейс користувача для введення вхідних та отримання вихідних даних. Але як при цьому обробляються вхідні дані, він не знає. Мета даного методу - перевірити роботу всіх функцій програми на відповідність функціональним вимогам [5].

Результати тестування форми додавання нового клієнта наведені в таблиці 6.1.

Таблиця 6.1 - Тестування форми додавання нового клієнта

Вірно заповнено

Не заповнено

Невірно заповнено

Умови

Введення даних в поле

«Фамилия клиента»

+

-

-

Введння даних в поле

«Адрес клиента»

+

-

-

Введення даних в поле

«Телефон клиента»

+

-

-

Дії

Додавання нового клієнта успішне

+

-

-

Повідомлення про помилку

-

+

+

Результати тестування форм додавання даних до всіх інших таблиць аналогічні результатам тестування наведеними в таблиці 6.1.

Процес тестування функціонування програми було розділено на три етапи:

  •  перевірка в нормальних умовах;
  •  перевірка в екстремальних умовах;
  •  перевірка в виняткових умовах.

Результати тестування функціонування програми наведені в таблиці 6.2.

Таблиця 6.2 – Тестування функціонування програми

Вхідні дані

Результат

Тип тесту

1.

Ввід коректних даних

Виконання функцій

нормальний

2.

Не ввести дані

Вивід повідомлення про необхідність вводу даних

граничний

3.

Ввести дані невірного типу

Вивід повідомлення про невірний тип введених даних

граничний

4.

Ввести вже існуючі дані

Вивід повідомлення про помилку

винятковий


ПЕРЕЛІК ПОСИЛАНЬ

  1.  Гленфорд Майерс, Том Баджетт, Кори Сандлер Искусство тестирования программ, 3-е издание = The Art of Software Testing, 3rd Edition. — М.: «Диалектика», 2012. — 272 с.
  2.  Лайза Криспин, Джанет Грегори Гибкое тестирование: практическое руководство для тестировщиков ПО и гибких команд = Agile Testing: A Practical Guide for Testers and Agile Teams. — М.: «Вильямс», 2010. — 464 с. — (Addison-Wesley Signature Series). — 1000 экз.
  3.  Канер Кем, Фолк Джек, Нгуен Енг Кек Тестирование программного обеспечения. Фундаментальные концепции менеджмента бизнес-приложений. — Киев: ДиаСофт, 2001. — 544 с.
  4.  Калбертсон Роберт, Браун Крис, Кобб Гэри Быстрое тестирование. — М.: «Вильямс», 2002. — 374 с.
  5.  Синицын С. В., Налютин Н. Ю. Верификация программного обеспечения. — М.: БИНОМ, 2008. — 368 с.
  6.  Бейзер Б. Тестирование чёрного ящика. Технологии функционального тестирования программного обеспечения и систем. — СПб.: Питер, 2004. — 320 с. 


Харківський  патентно-комп’ютерний  коледж

Відділення „Розробка програмного забезпечення”

Предметно-циклова комісія  „Програмування”

Інформаційна система туристичної фірми «Сказочный тур»

Керівництво оператора

ДП5.05010301.01.14.34

Виконав   

Дерев'янко О.О.

                                                                                (прізвище та ініціали)

Керівник

Борисова І.В.

                                                                                (прізвище та ініціали)

Харків – 2014 року


ЗМІСТ

Арк.

Вступ

3

1 Призначення програми

3

2 Умови виконання програми

4

3 Виконання програми

5

4 Повідомлення оператору

8

Перелік посилань

11


ВСТУП

У даному експлуатаційному документі наведено керівництво оператора щодо застосування та експлуатації програми «Інформаційна система туристичної фірми "Сказочный тур"», яка має представляти інформацію про роботу туристичної фірми.

У даному програмному документі, в розділі «Призначення програми» вказані відомості про призначення програми та інформація, достатня для розуміння функцій програми та її експлуатації.

У розділі «Умови виконання програми» зазначено умови , необхідні для виконання програми (мінімальний склад апаратних і програмних засобів тощо).

У даному програмному документі, в розділі «Виконання програми» вказана послідовність дій оператора, що забезпечують завантаження, запуск, виконання і завершення програми, наведений опис функцій, формату і можливих варіантів команд, за допомогою яких оператор здійснює завантаження і управляє виконанням програми, а також відповіді програми на ці команди.

У розділі «Повідомлення оператору» наведено тексти повідомлень , що видаються в ході виконання програми, опис їх змісту та відповідні дії оператора (дії оператора в разі збою, можливості повторного запуску програми і т.п.).

1 ПРИЗНАЧЕННЯ ПРОГРАМИ

Розроблена база даних має представляти інформацію про роботу туристичної фірми та робити можливим додавання, оновлення, видалення та перегляд записів. База даних виводить дані про постачальників, тури, працівників, послуги, клієнтів та замовлень і дозволяє користувачу швидко знайти необхідну інформацію.

Програма повинна виконувати наступні дії:

  •  додавати дані про постачальників, тури, працівників, послуги, клієнтів та замовлень;
  •  оновлювати інформацію про постачальників, тури, працівників, послуги, клієнтів та замовлень;
  •  вилучати дані про постачальників, тури, працівників, послуги, клієнтів та замовлень;
  •  виконувати SQL-запити до бази даних;
  •  дати можливість ознайомитись з переліком постачальників, турів, працівників, послуг, клієнтів та замовлень;
  •  скористатись фільтром та пошуком.
  •  переглянути інформацію про програмний продукт та про структуру бази даних, яку він використовує.

2 УМОВИ ВИКОНАННЯ ПРОГРАМИ

Технічні засоби для використання даного програмного продукту повинні включати в себе персональний комп’ютер (PC) під управлінням операційної системи Windows не нижче версії XP, клавіатуру, маніпулятор типу «миша» та монітор. Вимоги до складу обладнання комп’ютера пред’являються в описанні вимог до обладнання комп’ютера для використання операційної системи Windows.

Користувач повинен володіти базовими знаннями володіння ПК.


3 ВИКОНАННЯ ПРОГРАМИ

Для запуску програми потрібно два рази натиснути на файл «TurFirm.exe».

Після запуску програми відкривається головне вікно програми (рисунок 3.1).

Рисунок 3.1 – Головне вікно

Ліворуч розташовується панель з головним меню програми, вся інша частина форми – це Mdi-клієнт для дочірніх форм (рисунок 3.2).

Рисунок 3.2 – Панель з головним меню програми

Головне меню уявляє собою кнопки-зображення з наступними пунктами: «Оформить тур», «База данных», «Интернет», «Редактор запросов», «Справка», «О программе».

При виборі кнопки-зображення «Интернет» відкривається браузер (рисунок 3.3).

Рисунок 3.3 – Кнопка-зображення «Интернет»

При виборі пункту меню «Редактор запросов» відкривається форма, в якій користувач має можливість написати та виконати запит до бази даних (рисунок 3.4)

Рисунок 3.4 – Кнопка-зображення «Редактор запросов»

Вікно цієї форми поділяється на дві частини. У верхній частині вікна розташовується поле для написання запиту, а в нижній частині виводиться результат запиту.

Зверху вікна є панель з кнопками для збільшення зручності написання запиту (рисунок 3.5)

Рисунок 3.5 – Панель інструментів

4 ПОВІДОМЛЕННЯ ОПЕРАТОРУ

Програма «TurFirm.exe» може видати різноманітні повідомлення при роботі з нею. Далі будуть наведені всі повідомлення, з якими користувач може зустрітися при роботі з програмою.

Повідомлення при закритті будь-якої таблиці, в яку були внесені зміни, але не було збережено їх внесення. (рисунок 4.1).

Рисунок 4.1 – Повідомлення при закритті будь-якої таблиці, в яку були внесені зміни, але не було збережено їх внесення

Причиною такого повідомлення є те, що користувач не виконав зберігання внесених змін перед виходом з таблиці. Потрібно вибрати один із запропонованих варіантів відповідей та програма продовжить роботу.

Повідомлення при завершенні пошуку (рисунок 4.2).

Рисунок 4.2 – Повідомлення при завершенні пошуку

Таке повідомлення з’являється тоді, коли були знайдені всі записи, які відповідають тексту пошуку.

Якщо пошук не дав жодних результатів, то виводиться відповідне повідомлення (рисунок 4.3).

Рисунок 4.3 – Повідомлення в ситуації, коли пошук не дав результатів

Якщо не було задано текст пошуку, то виводиться відповідне повідомлення (рисунок 4.4).

Рисунок 4.4 – Повідомлення в ситуації, коли не було задано текст пошуку

Повідомлення про помилку у редакторі заитів (рисунок 4.5).

Рисунок 4.5 – Повідомлення в ситуації, коли не було задано текст команди

Подібне повідомлення буде зявлятись, коли у верхній частині вікна не введена команда.

ПЕРЕЛІК ПОСИЛАНЬ

1. Сахил Малик Microsoft ADO.NET 2.0 для профессионалов = Pro ADO.NET 2.0. - М.: «Вильямс», 2006. - С. 560.

2. Дэвид Сепа - Microsoft ADO.NET: "Русская Редакция", 2003. - С. 120.

3. Кристиан Нейгел и др. C# 5.0 и платформа .NET 4.5 для профессионалов = Professional C# 5.0 and .NET 4.5. — М.: «Диалектика», 2013. — 1440 с.

4. Эндрю Троелсен Язык программирования C# 5.0 и платформа .NET 4.5, 6-е издание = Pro C# 5.0 and the .NET 4.5 Framework, 6th edition. — М.: «Вильямс», 2013. — 1312 с. 

5. Джеф Просиз Программирование для Microsoft .NET = Programming Microsoft .NET. — М.: Русская редакция, 2003. — С. 704.


 

А также другие работы, которые могут Вас заинтересовать

82535. Особенности памяти у детей с нарушениями опорно-двигательного аппарата 33 KB
  При обследовании и лечении детей с ДЦП в возрасте от года до 15 лет выявлено что недостаточность ВПФ по типу психического недоразвития и ЗПР отмечена в среднем в 407 случаев. Анализ особенностей памяти у детей с диплегической формой ДЦП показал что ребята лучше запоминали смысловые структуры чем изолированные цифры и слова. При гиперкинетической форме ДЦП у детей выявлены трудности запоминания в слухоречевой модальности.
82536. Особенности памяти у детей с нарушениями интеллекта 28.5 KB
  Замский умственно отсталые дети усваивают новое очень медленно быстро забывают воспринятое не умеют вовремя воспользоваться приобретёнными знаниями и умениями на практике. Ослабление активного внутреннего торможения обусловливающее недостаточную концентрированность очагов возбуждения делает воспроизведение учебного материала многими умственно отсталыми детьми крайне неточным. Чаще всего физиологической основой забывчивости умственно отсталых детей является не угасание условных связей как при обычном забывании а временное внешнее...
82537. Особенности памяти у детей с нарушениями речи 40 KB
  Наиболее специфична следовательно значима для развития речи слуховая память. Без моторной памяти невозможно освоение экспрессивной речи устной и письменной. Зрительная память необходима для освоения письменной речи а также для связи между первой и второй сигнальной системами.
82538. Мышление, его виды и мыслительные операции 35 KB
  В зависимости от характера деятельности и ее конечных целей доминирует тот или иной вид мышления. Однако по степени своей сложности по требованиям которые они предъявляют к интеллектуальным и другим способностям человека все виды мышления не уступают друг другу. Виды мышления: Нагляднодейственное мышление представляет собой совокупность способов и процесс решения практических задач в условиях зрительного наблюдения за ситуацией и выполнения действий с представленными в ней предметами. Необходимые для мышления образы представлены в...
82539. Особенности мышления у детей с нарушениями речи 30 KB
  Одним из самых трудных является вопрос о первичности речи и мышления об оценке структуры мышления у лиц с речевыми расстройствами. Практика и экспериментальные исследования показывают что мышление страдает в наибольшей степени при системных нарушениях речи алалии препятствующей его развитию и афазии затрудняющей его проявление. Важное практическое значение имеют достаточно часто встречающиеся особенно в последнее время сочетания расстройств речи и мышления.
82540. Особенности мышления у детей с ДЦП 32.5 KB
  Зачастую нагляднообразное и словеснологическое мышление начинает развиваться практически без фундамента нагляднодейственного мышления. Недостаточность нагляднодейственного мышления приводит к недостаточности в формировании других более сложных форм мыслительной деятельности. Нагляднообразное мышление обычно формируется на основе нагляднодейственного мышления и чувственного опыта ощущения и восприятие.
82541. Особенности мышления у детей с нарушениями интеллекта 29 KB
  Современные исследования показали что у умственно отсталых имеются довольно грубые нарушения в условно рефлекторной деятельности нарушения взаимодействия процессов возбуждения и торможения а также нарушения взаимодействия сигнальных систем. Для умственно отсталых характерно недоразвитие познавательных интересов которое выражается в том что они меньше чем их нормальные сверстники испытывают потребность в познании. Все эти операции у умственно отсталых недостаточно сформированы и имеют своеобразные черты.
82542. Особенности мышления у детей с нарушениями слуха 33.5 KB
  У глухих детей обнаруживаются значительные индивидуальные различия в развитии их мышления. Около одной четвертой части всех глухих детей имеют уровень развития наглядного мышления соответствующий уровню развития этого вида мышления у слышащих сверстников. Кроме того небольшое число глухих детей около 15 каждой возрастной группе по уровню развития словесно логического мышления приближается к средним показателям слышащих сверстников.