You are on page 1of 40

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

ДЕРЖАВНИЙ ВИЩИЙ НАВЧАЛЬНИЙ ЗАКЛАД


«УЖГОРОДСЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ»
ІНЖЕНЕРНО-ТЕХНІЧНИЙ ФАКУЛЬТЕТ
КАФЕДРА КОМП’ЮТЕРНИХ СИСТЕМ І МЕРЕЖ

КУРСОВА РОБОТА
з дисципліни «Організація баз даних»
на тему:
« Інформаційна система «Будівельна фірма» »

Студента 1-го курсу СТ


спеціальності 123 ―
«Комп’ютерна інженерія»
Мадяра Михайла Михайловича
Керівник: ст. викл. Шпеник Т. Б.

Національна шкала: ______________


К-сть балів:____ Оцінка ECTS:_____

Члени комісії: ________ ст. викл. Шпеник Т. Б.


________ ст. викл. Самусь Є. І.
________ асист. Маріна К. І.

м. Ужгород — 2023 р.
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
ДЕРЖАВНИЙ ВИЩИЙ НАВЧАЛЬНИЙ ЗАКЛАД
«УЖГОРОДСЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ»

Інженерно-технічний факультет
Кафедра комп’ютерних систем та мереж
Спеціальності 123 – «Комп’ютерна інженерія»

Індивідуальне технічне завдання для виконання курсової роботи з


дисципліни «Організація баз даних» студента
Мадяра Михайла Михайловича

Тема: Інформаційна система «Будівельна фірма».


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

● вивід вмісту таблиць за допомогою реалізованого інтерфейсу;

● сортування за певним критерієм;

● пошук даних у БД.

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


середовища phpMyAdmin з використанням СУБД MySQL.
Завдання та вимоги до реалізації: розробити структуру БД (обрати
кількість необхідних таблиць, пов’язати їх відповідними зв’язками).
Реалізувати UI для програмного додатку. Практична реалізація повинна
забезпечити можливість виконання наступних операцій:
2
1. Введення довільної кількості записів.
2. Збереження введених даних у відповідні таблиці.
3. Зчитування та відображення даних.
4. Реалізація сортування, оновлення та видалення даних, використання
агрегатних функцій.
5. Пошук даних, що відповідають заданому критерію, виведення їх на
екран у формі, зручній для перегляду.
Графічна документація: ER-діаграма.

Студент ________________ _______ Мадяр М.М.___________


(підпис) (прізвище, ініціали)

Керівник ________________ _____________________________


(підпис) (прізвище, ініціали)

3
ЗМІСТ

ВСТУП......................................................................................................................5
1 ТЕОРЕТИЧНІ ВІДОМОСТІ................................................................................7
1.1 База даних.......................................................................................................7
1.2 Призначення БД.............................................................................................8
1.3 Розподілені бази даних.................................................................................9
1.4 Система управління базами даних.............................................................10
2 ПРОЕКТУВАННЯ БАЗИ ДАНИХ...................................................................12
2.1 Мовні засоби, використані при створенні бази даних.............................12
2.2 Визначення та опис структури таблиць....................................................14
2.3 Опис роботи програми................................................................................17
2.4 Приведення відношення бази даних до третьої нормальної форми.......19
3 ІНСТРУКЦІЯ КОРИСТУВАЧА........................................................................22
ВИСНОВКИ...........................................................................................................25
СПИСОК ВИКОРИСТАНОЇ ЛІТЕРАТУРИ.......................................................26
ДОДАТКИ..............................................................................................................27
Додаток А. ER-діаграма........................................................................................27
Додаток Б. Лістинг Бази даних............................................................................28
Додаток В. Лістинг коду сторінок “Вхід” і “Реєстрація”..................................36

4
ВСТУП
Вплив баз даних на сучасний світ важко переоцінити. Їх
використовують стало повсемістно повсюди, до такої степені, що можна
навіть сказати що в кожній сфері, так чи інакше використовується та чи інша
форма БД. І це обумовлено не просто якимись трендом, чи іншим
тимчасовим фактором, а вже підтверджену часом, її безумовною
ефективністю, універсальністю і ситуаційністю.
Але що таке База даних (БД)? У базовому розумінні, дані - це факти та
цифри про будь-що. Наприклад, якщо зібрані дані про людину, то ці дані
можуть включати її ім'я, вік, електронну пошту та дату народження. Або дані
можуть бути фактами та цифрами, пов'язаними з покупкою в Інтернеті. Це
може бути номер замовлення, опис, кількість і дата замовлення, і навіть
електронна пошта клієнта.
В нашому світі, дані мають вирішальне значення як для приватних осіб,
так і для організацій. Але де зберігаються всі ці дані? У нашому цифровому
світі дані більше не зберігаються в ручних файлах, чи як в давні часи на
папірусах чи глиняних табличках. Замість цього, їм на заміну, прийшли так
звані бази даних, які активно застосовуються все можливими розробники.
Так, База даних - це форма електронного сховища, в якому дані
організовані систематично. Вона зберігає та маніпулює даними в
електронному вигляді, щоб зробити їх більш керованими, ефективними та
безпечними. Існує багато реальних прикладів використання баз даних.
Виникає питання, а як насправді виглядає база даних? Ну, база даних -
це дані, організовані в систематизованому вигляді. Ця організація зазвичай
виглядає як електронна таблиця або таблиця. Що саме означає термін
"систематично"? Всі дані містять елементи або ознаки та атрибути, за якими
їх можна ідентифікувати. Наприклад, людину можна ідентифікувати за
такими атрибутами, як вік, зріст або колір волосся. Ці дані відокремлюються
і зберігаються в так званих сутностях, які представляють ці елементи.
І так метою даної курсової є створення бази даних для будівельної
компанії, яка б забезпечила зручний та швидкий доступ до даних, базовий
графічний інтерфейс, а також можливість додавання, редагування та
видалення інформації. Для виконання завдання використане наступне
програмне забезпечення: Microsoft Visual Сode, PhpMyAdmin.

5
1 ТЕОРЕТИЧНІ ВІДОМОСТІ
1.1 База даних
База даних — це певний набір даних, які пов'язані між собою
спільною ознакою або властивістю, та впорядковані, наприклад, за
алфавітом.
Об'єднання великої кількості даних в єдину базу дає змогу для
формування безлічі варіації групування інформації — особисті дані
клієнта, історія замовлень, каталог товарів та будь-що інше.
В нас час База даних є просто незамінним інструментом для
зберігання, організації і управління великим обсягом даних.
Вона дозволяє ефективно зберігати дані різного типу, включаючи
текст, числа, зображення, відео та інші формати. Вона може бути
організована у вигляді таблиць, файлів, графів або інших структур,
залежно від потреб і характеру даних.
Одна з основних переваг бази даних полягає у швидкому доступі до
необхідної інформації. СУБД використовують різні оптимізаційні
техніки, такі як індексація та кешування, що дозволяють швидко
виконувати запити і отримувати результати. Це особливо важливо в
сучасному швидкотемповому середовищі, де великі обсяги даних
потребують ефективного управління.
База даних також забезпечує зв'язок між різними елементами
інформації. Зміни в одній частині бази даних можуть вплинути на інші
частини, що дозволяє зберігати цілісність та узгодженість даних.
Наприклад, якщо змінити контактні дані клієнта в базі даних, ці зміни
автоматично відобразяться в усіх пов'язаних записах та звітах.
База даних також дозволяє проводити різноманітний аналіз і
обробку даних. За допомогою запитів і звітів можна отримувати
структуровану інформацію з бази даних, робити аналітичні висновки та
приймати рішення на основі цих даних.

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

1.2 Призначення БД
Бази даних для сайтів дають змогу зберігати інформацію, що
виглядає як зв'язані між собою таблиці. Саме в БД зберігаються вся
необхідна та корисна інформація для функціонування сайту (клієнтські
дані, прайс-лист, список товарів).
Щоб створити запит до бази даних часто використовують Structured
Query Language. SQL дає змогу додавати, редагувати та видаляти
інформацію, що міститься у таблицях. Під час програмування сайтів
використовують різні системи управління БД. До основних СУБД,
відносять:
● об'єктно-реляційна система управління базами даних Oracle
Database;
● вільна система управління базами даних PostgreSQL;

● система керування базами даних Microsoft SQL Сервер;

● вільна система управління базами даних MySQL;

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


запитів, забезпечують надійність, доступність та безпеку БД.
Найбільш популярною системою управління є MySQL, вона дає
зручний доступ для управління БД та підтримує велику кількість таблиць
різних типів.Вона надає зручний доступ для управління базою даних і
7
підтримує велику кількість таблиць різних типів. MySQL володіє
широким спектром функцій і можливостей, таких як транзакції,
індексація, реплікація та підтримка мови SQL.

1.3 Розподілені бази даних


Розподілені бази даних (РБД) — це сукупність логічно пов'язаних
між собою БД, які є розподіленими у комп'ютерній мережі.
РБД мають кілька переваг, які роблять їх привабливими для деяких
сценаріїв:
- Модель РБД відображає інформацію в простій для користувача
формі, що полегшує сприйняття і роботу з даними.
- Вона базується на математичному апараті, який дозволяє з
лаконічністю описати основні операції з даними, спрощуючи їх розробку
і обробку.
- Розподілені бази даних дозволяють створювати мови
маніпулювання даними не процедурного типу, що дає змогу зручно
виконувати операції з даними на високому рівні абстракції.
- Можливість маніпулювання даними на рівні вихідної бази даних і
зміни її структури відкриває широкі можливості для управління та
розширення бази даних.
Проте, РБД також мають свої недоліки, зокрема:
- Доступ до даних у розподілених базах даних може бути
повільним, оскільки дані знаходяться на різних вузлах мережі, і потребує
передачі даних через мережу для виконання операцій.
- Розробка розподілених баз даних може бути складнішою і
трудомісткою у порівнянні з централізованими базами даних, оскільки
потрібно враховувати аспекти розподілу даних, забезпечення
консистентності та реплікації даних між вузлами.
Не зважаючи на ці недоліки, розподілені бази даних є незамінним
інструментом у випадках, коли потрібно обробляти та зберігати великі
8
обсяги даних у розподіленому середовищі, таких як глобальні мережі або
розподілені системи. Вони дозволяють забезпечити доступність,
масштабованість та надійність даних у таких середовищах.

1.4 Системи управління базами даних


СУБД — це програмні засоби, які виступають посередником між
БД та її користувачами. Завдяки сукупності мовних та програмних
засобів, СУБД сприяють створенню, ведення та спільного використання
БД різними користувачами.
Сучасна програма СУБД складаються з ядра, процесору мови БД,
підсистеми підтримки часу виконання та сервісних програм, які надають
додаткові можливості для обслуговування інформаційних систем.
І є важливим компонентом інформаційних систем і має наступні
призначення:
1. Забезпечення зберігання і організації даних: СУБД
використовуються для створення та керування базами даних, де дані
зберігаються у структурованому форматі, такому як таблиці, схеми чи
графи. Вони дозволяють організувати дані у логічні групи, виконувати
операції збереження, оновлення, видалення та отримання даних.
2. Забезпечення доступу до даних: СУБД надають механізми для
ефективного доступу до даних користувачами. Це може включати
створення запитів, які дозволяють отримувати певні дані з бази, а також
забезпечення захисту і контролю доступу до даних для забезпечення
безпеки і конфіденційності.
3. Можливість спільного використання даних: СУБД дозволяють
кільком користувачам одночасно працювати з однією базою даних,
забезпечуючи одночасну обробку та контроль конфліктів. Це робить їх
ідеальними для великих організацій, де багато користувачів потребують
доступу до спільних даних.

9
4. Забезпечення цілісності та надійності даних: СУБД мають
механізми для забезпечення цілісності даних, таких як унікальність,
цілісність посилань і виконання правил цілісності. Вони також надають
можливості резервного копіювання та відновлення даних для
забезпечення надійності і відновлення після випадку відмови.
5. Забезпечення ефективності обробки даних: СУБД
використовують оптимізацію запитів та інші методи для покращення
продуктивності обробки даних. Вони можуть автоматично
використовувати індекси, кешування та інші техніки для прискорення
виконання запитів і зменшення навантаження на систему.

10
2 ПРОЕКТУВАННЯ БАЗИ ДАНИХ

2.1 Мовні засоби, використані при створенні бази даних


При процесі проектування архітектури бази даних (архітектури
програмного забезпечення для доступу до БД) для створення програмного
додатку, були обрані: мова програмування PHP, мова програмування JS, та
мова структурованих запитів MySQL.
PHP - скриптова мова програмування, була створена для генерації
HTML-сторінок на стороні вебсервера. PHP є однією з найпоширеніших мов,
що використовуються у сфері веброзробок (разом із Java, .NET, JavaScript,
Python, Ruby).
PHP підтримує роботу з базою даних MySQL. Спеціальні вбудовані
функції для роботи з MySQL дозволяють просто та ефективно працювати з
цією СУБД: виконувати будь-які запити, читати та записувати дані,
обробляти помилки.
Сценарій, який підключається до БД, виконує запит і показує
результат, складатиметься лише з кількох рядків. Для роботи з MySQL не
потрібно нічого додатково встановлювати та налаштовувати; все необхідне
вже доступне разом зі стандартним постачанням PHP.
Типовий процес роботи з СУБД у PHP-сценарії складається з кількох
кроків:
1. Встановити підключення до сервера СУБД, передавши необхідні
параметри адресу, логін, пароль.
2. Переконайтеся, що підключення пройшло успішно: сервер СУБД
доступний, логін та пароль вірні і таке інше.
3. Сформувати правильний SQL запит (наприклад, для читання
даних з таблиці).
4. Переконатись, що запит було виконано успішно.
5. Отримати результат від СУБД у вигляді масиву із записів.
6. Використовувати отримані записи у своєму сценарії (наприклад,
показати їх у вигляді таблиці).
PHP було обрано як основну мову програмування, для курсової роботи,
тому що вона як ніяка інша, надає можливість зручної розробки сайтів, і при
цьому дає змогу легко і інтуїтивно працювати з БД.
MySQL - це система управління базами даних, яка використовується
для підтримки реляційних баз даних. Це програмне забезпечення з відкритим
11
кодом, що підтримується корпорацією Oracle. Оскільки це система баз даних
з відкритим кодом, вихідний код можна змінювати відповідно до наших
потреб. MySQL - це масштабована, швидка і надійна система управління
базами даних, яка може працювати на будь-якій платформі, такі як Windows,
Unix, Linux і т.д., і може бути встановлена на робочому столі або будь-якій
серверній машині. Також її відносно дуже легко освоїти порівняно з іншими
системами управління базами даних, існуючими на ринку, такими як
Microsoft SQL Server, Oracle Database і т.д., і PHP. LAMP - це платформа для
веб-розробки, що використовує Linux як операційну систему, веб-сервер
apache, реляційну систему управління базами даних mysql та об'єктно-
орієнтований сценарій PHP.
MySQL безумовно є ядром курсової роботи, будучи легкий і зручний
інструментом для роботи з БД. Будучи при цьому дуже популярною, що
додатково облегшує пошук по ній інформації.
JavaScript (JS) — динамічна, об'єктно-орієнтована прототипна мова
програмування. Реалізація стандарту ECMAScript. Найчастіше
використовується для створення сценаріїв вебсторінок, що надає можливість
на боці клієнта (пристрої кінцевого користувача) взаємодіяти з користувачем,
керувати браузером, асинхронно обмінюватися даними з сервером,
змінювати структуру та зовнішній вигляд вебсторінки.
JavaScript класифікують як прототипну (підмножина об'єктно-
орієнтованої), скриптову мову програмування з динамічною типізацією.
Окрім прототипної, JavaScript також частково підтримує інші парадигми
програмування (імперативну та частково функціональну) і деякі відповідні
архітектурні властивості, зокрема: динамічна та слабка типізація,
автоматичне керування пам'яттю, прототипне наслідування, функції як
об'єкти першого класу.
JavaScript використовувалась як допоміжна мова програмування, в ході
реалізації сайту для курсової роботи, у ряді випадків.

2.2 Визначення та опис структури таблиць


Створена база даних складається із 5 таблиць. Далі же коротко
опишемо призначення кожної із них:

● Adminkey - таблиця, в якій зберігаються ключі працівників.

Використовується в програмному додатку, при реєстрації.

● Buildbrigade – таблиця, в якій зберігаються основні данні про

будівельні бригади. В програмному додатку, використовується в багатьох


цілях, а також передбачено її все можливе редагування.

12
● Customers – таблиця, в якій зберігаються данні клієнта, тобто

його ім’я, ід, пошта, пароль і т.д. В програмному додатку, передбачено її


використовується для реєстрації, входу, та інших дій.

● Employee - таблиця, в якій зберігаються данні працівника, тобто

його ім’я, ід, пошта, пароль, унікальний ключ і т.д. В програмному


додатку, в першу чергу передбачено її використовується для реєстрації,
входу.

● Orders - таблиця, в якій зберігаються дані про замовлення

клієнтів. В програмному додатку, відіграє основну роль, і над нею


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

Рисунок 2.1 - Структура таблиці «Ключ»

Рисунок 2.2 – Індекси таблиці «Ключ»

Рисунок 2.3 - Структура таблиці «Будівельні бригади»

Рисунок 2.4 - Індекси таблиці «Будівельні бригади»

13
Рисунок 2.6 - Структура таблиці «Клієнти»

Рисунок 2.7 - Індекси таблиці «Клієнти»

Рисунок 2.8 - Структура таблиці «Працівники»

Рисунок 2.9 - Індекси таблиці «Працівники»

Рисунок 2.10 - Структура таблиці «Замовлення»

Рисунок 2.11 - Індекси таблиці «Замовлення»

14
Рисунок 2.12 - ER-діаграма

2.3 Опис роботи програми


Дана програма передбачає виконання всіх основних операцій над
базою даних, а саме:

● Вибірка даних з таблиць

● Вставка даних у таблицю

● Оновлення даних у таблиці

● Видалення даних з таблиці

Короткий запис, можливостей програмного додатку:

15
При запуску сайту, першим показується вікно входу у систему, де
потрібно ввести свій логін та пароль і натиснути відповідну кнопку для входу
в систему, незважаючи хто ви працівник, чи клієнт. Або якщо ви ще не
зареєстрований, перейти на сторінку реєстрації, натиснувши відповідну
кнопку.
Якщо перейти на сторінку реєстрації, і вам потрібно зареєструватися,
то для цього потрібно ввести у відповідні поля, своє ім’я, пошту, пароль і
підтвердження паролю. І вже відповідно від того чи є ви працівником чи
клієнтом, вводите або не вводите ключ. За замовчуванням його значення
(NULL), що означає що реєстрацію проходить користувач. Ключ є
унікальним для кожного працівника, тому його можна використати лише 1
раз.
Крім того на сторінці, реєстрації, передбачено різного типу помилки, з
виводом відповідного повідомлення, а також передбачено дві кнопки, одна з
яких безпосередньо закінчує реєстрацію, в той час як інша перекидає вас на
сторінку входу.
В залежності від того чи ви реєструвались чи входили в систему,
будучи клієнтом вас перекидає в кабінет клієнта. Де на вас одразу же чекає
розвернута таблиця будівельних бригад, яких можна при бажанні приховати,
натиснувши на відповідну кнопку. Крім того є ще три кнопки, які дозволяють
відсортувати таблицю по різним критеріям, створити замовлення, чи
подивитись статус своїх замовлень, і при потребі змінити їх. Зверху також є
кнопка вихід, яка перекидає вас знову на сторінку входу.
В залежності від того чи ви реєструвались чи входили в систему,
будучи працівником вас перекидає в кабінет працівника. Де на вас чекають 4
кнопки. Дві з яких дозволяють вивести на екран відповідні таблиці. Інші дві
кнопки дозволяють, змінити статус замовлення, і додати нову бригаду.

16
Рисунок 2.13 - Структурна схема взаємодії сторінок

2.4 Приведення відношення бази даних до третьої нормальної


форми

Рисунок 2.14 - Ненормалізована БД

17
Рисунок 2.15 - Перша нормальна форма (НФ1)

Рисунок 2.16 - Друга нормальна форма (НФ2)

18
Рисунок 2.17 - Третя нормальна форма (НФ3)

19
3 ІНСТРУКЦІЯ КОРИСТУВАЧА

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


будівельної фірми.

Рисунок 3.1 – Сторінка «Вхід»


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

Рисунок 3.2 – Сторінка «Реєстрація»


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

Рисунок 3.3 – Сторінка «Кабінет Клієнта»

Після переходу на сторінку «Кабінет Клієнта», перед вами з’явиться


таблиця з виведеними будівельними бригадами, яку можна приховати
натиснувши відповідну кнопку, або відсортувати натискаючи на назви
стовбців. Крім того на сторінці є ще 3 кнопки, «Фільтр» яка дозволяє
сортувати таблицю по різним критеріям, «Створити замовлення» яка
дозволяє відповідно до її назви, створити замовлення, і кнопка «Список
замовлень», після натиснення якої з’являється поле вводу ід клієнта, після
чого виведеться табличка з усіма замовленнями клієнта, і можливістю їх
відмінити. Крім того в правому верхньому куті, є кнопка «Вихід»,
натиснувши на яку вас перенесе на сторінку входу.

Рисунок 3.4 – Сторінка «Кабінет працівника»

Після переходу на сторінку «Кабінет Працівника», перед вами


з’явиться 4 кнопки «Таблиця замовлень», «Таблиця Бригад», «Статус
замовлення», «Додати Бригаду». Перші 2 кнопки, виводять відповідні їх назві
таблиці, з можливістю їх фільтрування по стовпцям, а також передбачена
21
можливість видалення нового рядка таблиці Бригад, якщо його було
добавлено неправильно. Кнопка «Статус товару» дозволяє змінити статус
замовлення на новий. І нарешті кнопка «Додати Бригаду» надає можливість
додати бригаду. Крім того в правому верхньому куті, є кнопка «Вихід»,
натиснувши на яку вас перенесе на сторінку входу.

ВИСНОВКИ

За час виконання даної курсової роботи, була створена база даних для
«Будівельної фірми», яка містить в собі інформацію, про користувачів, та їх
замовлення. Також було створено програмний додаток, який надає
користувачу можливість додавати, модифікувати, видаляти та іншими
способами обробляти дані на мові програмування PHP разом з JS. Даний
додаток реалізовує роботу з базою даних за допомогою мови структурованих
запитів SQL, що надає можливість використовувати її на багатьох
користувацьких комп’ютерах одночасно.
При створенні програмного додатку, не обійшлося і без виникнення
безлічі різноманітних проблем, які поступово, в ході виконання, так чи
інакше вирішувались, чи як мінімум знаходились точки компромісу. Що тим
не менш змушувало, знаходити очевидні і не дуже способи вирішення, що
безумовно підвищило моє розуміння, всіх тонкощів і складнощів розробки
сайтів. Так як навіть маленька помилка, яку може бути довжиною у всього
лиш кілька символів, тим не менш, може паралізувати роботу на цілі години.
Але загалом, якщо підсумувати, можна безумовно сказати, що хоча
реалізація програмний додаток із підтримкою БД, це не легка справа, яка
потребує багато часу і сил, не гарантуючи бажаного результату. Але вона все

22
ж таки надає безцінний опит і розширює кругозір, який вже можна
використати і в інших сферах.

23
СПИСОК ВИКОРИСТАНОЇ ЛІТЕРАТУРИ

1. Що таке база даних MySQL - Основні поняття та переваги MySQL


[Електронний ресурс]. — режим доступу:
https://uk.education-wiki.com/2686691-what-is-mysql-database
2. Що таке база даних? [Електронний ресурс]. — режим доступу:
https://apeps.kpi.ua/shco-take-basa-danykh
3. JavaScript [Електронний ресурс]. — режим доступу:
https://uk.wikipedia.org/wiki/JavaScript

24
ДОДАТКИ

Додаток А. ER-діаграма

25
Додаток Б. Лістинг бази даних
-- phpMyAdmin SQL Dump
-- version 5.0.2
-- https://www.phpmyadmin.net/
--
-- Хост: 127.0.0.1:3306
-- Час створення: Чрв 02 2023 р., 00:15
-- Версія сервера: 8.0.19
-- Версія PHP: 7.4.5

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";


START TRANSACTION;
SET time_zone = "+00:00";

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT


*/;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS
*/;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION
*/;
/*!40101 SET NAMES utf8mb4 */;

--
-- База даних: `creatgroop`
--

-- --------------------------------------------------------

--
-- Структура таблиці `adminkey`
--

CREATE TABLE `adminkey` (


`IDKey` int NOT NULL,
`Key` varchar(50) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_0900_ai_ci;

--
-- Дамп даних таблиці `adminkey`
--

INSERT INTO `adminkey` (`IDKey`, `Key`) VALUES


(1, '3a7B9c1D5e2F4g6H'),
(4, 'E3F5G7h9I1j2K4'),
(2, 'J8k0L2m4N6p9Q1r'),
(5, 'M6n8P0q2R4s6T8u'),
26
(3, 'S5t7U9v0W2x4Y6z'),
(6, 'V1w3X5y7Z9a0b2');

-- --------------------------------------------------------

--
-- Структура таблиці `buildbrigade`
--

CREATE TABLE `buildbrigade` (


`IDBrigade` int NOT NULL,
`NameBrigade` varchar(50) DEFAULT NULL,
`Size` int DEFAULT NULL,
`Specialization` varchar(50) DEFAULT NULL,
`PriceHour` decimal(10,2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_0900_ai_ci;

--
-- Дамп даних таблиці `buildbrigade`
--

INSERT INTO `buildbrigade` (`IDBrigade`, `NameBrigade`, `Size`,


`Specialization`, `PriceHour`) VALUES
(1, 'Hammer Force', 5, 'Construction', '25.50'),
(2, 'Brickwork Crew', 3, 'Electrical', '30.00'),
(3, 'Steel Builders', 4, 'Plumbing', '28.75'),
(4, 'Concrete Titans', 2, 'Tiler', '16.75');

-- --------------------------------------------------------

--
-- Структура таблиці `customers`
--

CREATE TABLE `customers` (


`IDCustomers` int NOT NULL,
`Names` varchar(50) CHARACTER SET utf8mb4 COLLATE
utf8mb4_0900_ai_ci DEFAULT NULL,
`Mail` varchar(50) DEFAULT NULL,
`Passwords` varchar(50) CHARACTER SET utf8mb4 COLLATE
utf8mb4_0900_ai_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_0900_ai_ci;

--
-- Дамп даних таблиці `customers`
--

27
INSERT INTO `customers` (`IDCustomers`, `Names`, `Mail`,
`Passwords`) VALUES
(0, 'Rodrig', 'Rodrig@gmail.com', 'Rodrig'),
(1, 'John Smith', 'john@example.com', 'password123'),
(2, 'Jane Doe', 'jane@example.com', 'pass456'),
(3, 'David Johnson', 'david@example.com', 'abc123'),
(4, 'Rodrig1', 'Rodrig1@gmail.com', 'Rodrig1'),
(5, 'Rodrig2', 'Rodrig2@gmail.com', 'Rodrig2'),
(6, 'Rodrig3', 'Rodrig3@gmail.com', 'Rodrig3'),
(7, 'Rodrig5', 'Rodrig5@gmail.com', 'Rodrig5'),
(8, 'Rodrig9', 'Rodrig9@gmail.com', 'Rodrig9');

-- --------------------------------------------------------

--
-- Структура таблиці `employee`
--

CREATE TABLE `employee` (


`IDEmployee` int NOT NULL,
`Names` varchar(50) CHARACTER SET utf8mb4 COLLATE
utf8mb4_0900_ai_ci DEFAULT NULL,
`Mail` varchar(50) DEFAULT NULL,
`Passwords` varchar(50) CHARACTER SET utf8mb4 COLLATE
utf8mb4_0900_ai_ci DEFAULT NULL,
`IdKey` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_0900_ai_ci;

--
-- Дамп даних таблиці `employee`
--

INSERT INTO `employee` (`IDEmployee`, `Names`, `Mail`,


`Passwords`, `IdKey`) VALUES
(1, 'Employee 1', 'emp1@example.com', 'emp1pass', 1),
(2, 'Employee 2', 'emp2@example.com', 'emp2pass', 2),
(3, 'Employee 3', 'emp3@example.com', 'emp3pass', 3),
(4, 'Roberto', 'Roberto@gmail.com', 'Roberto', 5);

-- --------------------------------------------------------

--
-- Структура таблиці `orders`
--

CREATE TABLE `orders` (


`IDOrder` int NOT NULL,
`IDCustomers` int DEFAULT NULL,
28
`IDBrigade` int DEFAULT NULL,
`Time` datetime DEFAULT NULL,
`Address` varchar(100) CHARACTER SET utf8mb4 COLLATE
utf8mb4_0900_ai_ci DEFAULT NULL,
`OrderStatus` varchar(50) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_0900_ai_ci;

--
-- Дамп даних таблиці `orders`
--

INSERT INTO `orders` (`IDOrder`, `IDCustomers`, `IDBrigade`,


`Time`, `Address`, `OrderStatus`) VALUES
(1, 1, 1, '2023-05-28 10:00:00', '123 Main St', 'Cencel'),
(2, 2, 2, '2023-05-29 14:30:00', '456 Elm St', 'Completed'),
(3, 3, 3, '2023-05-30 09:15:00', '789 Oak St', 'un'),
(4, 1, 1, '2023-05-28 10:00:00', 'MyRoom', 'Cencel'),
(5, 3, 1, '2023-05-28 10:00:00', '1', 'Cencel'),
(6, 0, 1, '2023-05-28 10:00:00', '1', 'Not reviewed'),
(7, 0, 3, '2023-05-28 10:00:00', '2', 'Not reviewed'),
(8, 0, 1, '2023-05-28 10:00:00', '2', 'Not reviewed'),
(9, 0, 1, '2023-05-28 10:00:00', '2', 'Not reviewed'),
(10, 0, 3, '2023-05-28 10:00:00', 'MyRoom', 'Not reviewed'),
(11, 0, 1, '2023-05-28 10:00:00', 'MyRoom', 'Not reviewed'),
(12, 4, 3, '2023-05-28 10:00:00', 'MyRoom', 'Not reviewed'),
(13, 4, 3, '2023-05-28 10:00:00', 'MyRoom', 'Cencel'),
(14, 4, 3, '2023-05-28 10:00:00', 'MyRoom', 'Not reviewed'),
(15, 3, 3, '2023-05-28 10:00:00', 'MyRoom', 'Not reviewed');

--
-- Індекси збережених таблиць
--

--
-- Індекси таблиці `adminkey`
--
ALTER TABLE `adminkey`
ADD PRIMARY KEY (`IDKey`),
ADD UNIQUE KEY `Key` (`Key`);

--
-- Індекси таблиці `buildbrigade`
--
ALTER TABLE `buildbrigade`
ADD PRIMARY KEY (`IDBrigade`),
ADD UNIQUE KEY `NameBrigade` (`NameBrigade`);

--
29
-- Індекси таблиці `customers`
--
ALTER TABLE `customers`
ADD PRIMARY KEY (`IDCustomers`),
ADD UNIQUE KEY `Mail` (`Mail`);

--
-- Індекси таблиці `employee`
--
ALTER TABLE `employee`
ADD PRIMARY KEY (`IDEmployee`),
ADD UNIQUE KEY `Mail` (`Mail`),
ADD UNIQUE KEY `IdKey` (`IdKey`);

--
-- Індекси таблиці `orders`
--
ALTER TABLE `orders`
ADD PRIMARY KEY (`IDOrder`),
ADD KEY `IDCustomers` (`IDCustomers`),
ADD KEY `IDBrigade` (`IDBrigade`) USING BTREE;

--
-- Обмеження зовнішнього ключа збережених таблиць
--

--
-- Обмеження зовнішнього ключа таблиці `employee`
--
ALTER TABLE `employee`
ADD CONSTRAINT `employee_ibfk_1` FOREIGN KEY (`IdKey`)
REFERENCES `adminkey` (`IDKey`);

--
-- Обмеження зовнішнього ключа таблиці `orders`
--
ALTER TABLE `orders`
ADD CONSTRAINT `orders_ibfk_1` FOREIGN KEY (`IDCustomers`)
REFERENCES `customers` (`IDCustomers`),
ADD CONSTRAINT `orders_ibfk_2` FOREIGN KEY (`IDBrigade`)
REFERENCES `buildbrigade` (`IDBrigade`);
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;


/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS
*/;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

30
Додаток В. Лістинг PHP коду сторінок «Вхід» і «Реєтрація»
<?php
session_start();

if (isset($_POST['login'])) {
$mail = $_POST['mail'];
$password = $_POST['password'];

// Підключення до бази даних


$servername = 'localhost';
$username = 'root';
$passwor = 'root';
$dbname = 'CreatGroop';

$conn = new mysqli($servername, $username, $passwor,


$dbname);

if ($conn->connect_error) {
die('Помилка підключення до бази даних: ' . $conn-
>connect_error);
}

// Екранування вхідних даних


$mail = $conn->real_escape_string($mail);
$password = $conn->real_escape_string($password);

// Виконання запиту до бази даних


$query = "SELECT * FROM Customers WHERE Mail='$mail' AND
Passwords='$password'";
$result = $conn->query($query);
$row = $result->fetch_assoc();
$id = intval($row['IDCustomers']);
// Перевірка результату запиту
if ($result->num_rows == 1) {
// Автентифікація успішна
$_SESSION['mail'] = $mail;
$_SESSION['role'] = 'customer';

header('Location: customer_cabinet_test.php?id='. $id);


exit();
} else {
$query1 = "SELECT * FROM Employee WHERE Mail='$mail' AND
Passwords='$password'";
$result1 = $conn->query($query1);

$row1 = $result1->fetch_assoc();
$id = intval($row1['IDCustomers']);
if ($result1->num_rows == 1)
31
{
$_SESSION['mail'] = $mail;
$_SESSION['role'] = 'Employee';

header('Location: employee_cabinet_test.php?id='.
$id);
exit();
}
else{
// Помилка автентифікації
$error_message = 'Введений неправильний Mail або
пароль';
}
}

$conn->close();
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset = "">
<meta name = "viewport" content="widtg=device-width,initial-
scale=1.0">
<meta http-equiv = "X-UA-Compatible" content = "ie=edge">
<link rel = "stylesheet" href
="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstra
p.min.css">
<title>Document</title>
<style>
.container {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
height: 50vh;
}

.content1 {
margin: 0 auto;
max-width: 400px;
}

.form-group {
display: flex;
flex-direction: column;
margin-bottom: 10px;
}

32
.form-group label {
margin-bottom: 5px;
}

.form-group input {
padding: 5px;
}

.error {
color: red;
}

</style>
</head>
<body>
<div class="d-flex flex-column flex-md-row align-items-center
pb-3 mb-4 border-bottom">
<a href="/" class="d-flex align-items-center text-dark
text-decoration-none">
<svg xmlns="http://www.w3.org/2000/svg" width="40"
height="32" class="me-2" viewBox="0 0 118 94"
role="img"><title>Bootstrap</title><path fill-rule="evenodd"
clip-rule="evenodd" d="M24.509 0c-6.733 0-11.715 5.893-11.492
12.284.214 6.14-.064 14.092-2.066 20.577C8.943 39.365 5.547
43.485 0 44.014v5.972c5.547.529 8.943 4.649 10.951 11.153 2.002
6.485 2.28 14.437 2.066 20.577C12.794 88.106 17.776 94 24.51
94H93.5c6.733 0 11.714-5.893 11.491-12.284-.214-6.14.064-14.092
2.066-20.577 2.009-6.504 5.396-10.624 10.943-11.153v-5.972c-
5.547-.529-8.934-4.649-10.943-11.153-2.002-6.484-2.28-14.437-
2.066-20.577C105.214 5.894 100.233 0 93.5 0H24.508zM80 57.863C80
66.663 73.436 72 62.543 72H44a2 2 0 01-2-2V24a2 2 0 012-
2h18.437c9.083 0 15.044 4.92 15.044 12.474 0 5.302-4.01 10.049-
9.119 10.88v.277C75.317 46.394 80 51.21 80 57.863zM60.521
28.34H49.948v14.934h8.905c6.884 0 10.68-2.772 10.68-7.727 0-
4.643-3.264-7.207-9.012-7.207zM49.948 49.2v16.458H60.91c7.167 0
10.964-2.876 10.964-8.281 0-5.406-3.903-8.178-11.425-
8.178H49.948z" fill="currentColor"></path></svg>
<span class="fs-4">Курсова робота</span>
</a>

</div>
<div class="card mb-4 rounded-3 shadow-sm content1">
<div class="card-header py-3">
<h2 class="my-0 fw-normal text-center ">Вхід</h2>
</div>
<div class="card-body">
<ul class="list-unstyled mt-3 mb-4">
33
<div class="container">
<?php if (isset($error_message)) { ?>
<p class="error"><?php echo $error_message; ?></p>
<?php } ?>
<form method="post" action="">
<div class="form-group">
<label for="mail">Пошта:</label>
<input type="email" id="mail" name="mail"
required>
</div>
<div class="form-group">
<label for="password">Пароль:</label>
<input type="password" id="password"
name="password" required>
<br>
<input type="submit" name="login" value="Вхід">
<input type="button" value="Реєстрація"
onclick="location.href='registration_test.php';">
</div>

</form>

</div>
</div>
</div>
</body>
</html>

<?php
/*
<div>
<input type="submit" name="login" value="Вхід">
<input type="button" value="Реєстрація"
onclick="location.href='registration.php';">
</div>

<button type="button" ame="login" value="Вхід" class="w-6 btn


btn-lg btn-outline-primary">Вхід</button>
<button type="button" value="Реєстрація"
onclick="location.href='registration.php';" class="w-6 btn btn-
lg btn-outline-primary">Регестрація</button>

*/
?>
34
<?php
session_start();

if (isset($_POST['register'])) {
$name = $_POST['name'];
$mail = $_POST['mail'];
$password = $_POST['password'];
$confirmPassword = $_POST['confirmPassword'];

// Підключення до бази даних


$servername = 'localhost';
$username = 'root';
$passwor = 'root';
$dbname = 'CreatGroop';

try {
$conn = new mysqli($servername, $username, $passwor,
$dbname);

// Перевірка збігу паролів


if ($password !== $confirmPassword) {
$error_message = 'Пароль і Підтвердження пароля не
співпадають';
} else {
// Перевірка наявності електронної пошти в таблицях
Customers та Employee
$query = "SELECT * FROM Customers WHERE
Mail='$mail'";
$result = $conn->query($query);

if ($result->num_rows > 0) {
$error_message = 'Така пошта вже
використовується';
} else {
$query = "SELECT * FROM Employee WHERE
Mail='$mail'";
$result = $conn->query($query);

if ($result->num_rows > 0) {
$error_message = 'Така пошта вже
використовується';
} else {
// Отримання ключа з бази даних
$key = $_POST['key'];
$query = "SELECT * FROM AdminKey WHERE
`Key`='$key'";
$result = $conn->query($query);

if ($key == 'NULL') {
35
//$customerId = $conn->insert_id;
// Вставка нового користувача в таблицю
Customers
$id = mysqli_query($conn, "SELECT
MAX(IDCustomers) FROM Customers");
$row1 = mysqli_fetch_array($id);
$maxId = $row1[0];
// Отримання наступного вільного ID
$nextId = $maxId + 1;
$query = "INSERT INTO Customers
(IDCustomers,Names, Mail, Passwords) VALUES ('$nextId','$name',
'$mail', '$password')";
$conn->query($query);

// Отримання ID користувача
$customerId = $conn->insert_id;

// Перенаправлення на сторінку Кабінету


Користувача
header('Location: customer_cabinet.php?
id='. $nextId);
exit();
}
else {
if ($result->num_rows == 0) {
$error_message = 'Введений
неправильний Ключ';
} else {
$row = $result->fetch_assoc();
$idKey = $row['IDKey'];

// Перевірка наявності IDKey в


таблиці Employee
$query = "SELECT * FROM Employee
WHERE IdKey='$idKey'";
$result = $conn->query($query);

if ($result->num_rows > 0) {
$error_message = 'Користувач з
цим Ключем вже існує';
} else {
// Вставка нового користувача в
таблицю Employee
$id = mysqli_query($conn,
"SELECT MAX(IDEmployee) FROM Employee");
$row1 = mysqli_fetch_array($id);
$maxId = $row1[0];
// Отримання наступного вільного
ID
36
$nextId = $maxId + 1;
$query = "INSERT INTO Employee
(IDEmployee, Names, Mail, Passwords, IdKey) VALUES
('$nextId','$name', '$mail', '$password', '$idKey')";
$conn->query($query);

// Отримання ID користувача
$employeeId = $conn->insert_id;

// Перенаправлення на сторінку
Кабінету Працівника
header('Location:
employee_cabinet.php?id='. $nextId);
exit();
}
}
}
}
}
}
} catch (Exception $e) {
echo 'Помилка підключення до бази даних: ' . $e-
>getMessage();
}

// Закриття з'єднання з базою даних


$conn->close();
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset = "">
<meta name = "viewport" content="widtg=device-width,initial-
scale=1.0">
<meta http-equiv = "X-UA-Compatible" content = "ie=edge">
<link rel = "stylesheet" href
="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstra
p.min.css">
<title>Document</title>
<style>
.content1 {
margin: 0 auto;
max-width: 500px;
}

.container {
display: flex;
flex-direction: column;
37
justify-content: center;
align-items: center;
height: 70vh;
}

.form-group {
display: flex;
flex-direction: column;
margin-bottom: 10px;
}

.form-group label {
margin-bottom: 5px;
}

.form-group input {
padding: 5px;
}

.error {
color: red;
}

</style>

</head>
<body>
<div class="d-flex flex-column flex-md-row align-items-center
pb-3 mb-4 border-bottom">
<a href="/" class="d-flex align-items-center text-dark
text-decoration-none">
<svg xmlns="http://www.w3.org/2000/svg" width="40"
height="32" class="me-2" viewBox="0 0 118 94"
role="img"><title>Bootstrap</title><path fill-rule="evenodd"
clip-rule="evenodd" d="M24.509 0c-6.733 0-11.715 5.893-11.492
12.284.214 6.14-.064 14.092-2.066 20.577C8.943 39.365 5.547
43.485 0 44.014v5.972c5.547.529 8.943 4.649 10.951 11.153 2.002
6.485 2.28 14.437 2.066 20.577C12.794 88.106 17.776 94 24.51
94H93.5c6.733 0 11.714-5.893 11.491-12.284-.214-6.14.064-14.092
2.066-20.577 2.009-6.504 5.396-10.624 10.943-11.153v-5.972c-
5.547-.529-8.934-4.649-10.943-11.153-2.002-6.484-2.28-14.437-
2.066-20.577C105.214 5.894 100.233 0 93.5 0H24.508zM80 57.863C80
66.663 73.436 72 62.543 72H44a2 2 0 01-2-2V24a2 2 0 012-
2h18.437c9.083 0 15.044 4.92 15.044 12.474 0 5.302-4.01 10.049-
9.119 10.88v.277C75.317 46.394 80 51.21 80 57.863zM60.521
28.34H49.948v14.934h8.905c6.884 0 10.68-2.772 10.68-7.727 0-
4.643-3.264-7.207-9.012-7.207zM49.948 49.2v16.458H60.91c7.167 0
10.964-2.876 10.964-8.281 0-5.406-3.903-8.178-11.425-
8.178H49.948z" fill="currentColor"></path></svg>
38
<span class="fs-4">Курсова робота</span>
</a>
<nav class="d-inline-flex mt-2 mt-md-0 ms-md-auto">

</nav>
</div>

</div>
<div class="card mb-4 rounded-3 shadow-sm content1">
<div class="card-header py-3">
<h2 class="my-0 fw-normal
text-center">Реестрація</h2>
</div>
<div class="card-body">
<ul class="list-unstyled mt-3 mb-4">
<div class="container">

<form method="POST" action="registration.php">


<div class="form-group">
<label for="name">Ім'я:</label>
<input type="text" name="name" id="name"
required>
</div>
<div class="form-group">
<label for="mail">Пошта:</label>
<input type="email" name="mail" id="mail"
required>
</div>
<div class="form-group">
<label for="password">Пароль:</label>
<input type="password" name="password"
id="password" required>
</div>
<div class="form-group">
<label for="confirmPassword">Підтвердження
пароля:</label>
<input type="password" name="confirmPassword"
id="confirmPassword" required>
</div>
<div class="form-group">
<label for="key">Ключ:</label>
<input type="text" name="key" id="key" required
value="NULL">
<br>
<input type="submit" name="register"
value="Реєстрація">

39
<input type="button" value="Вхід"
onclick="location.href='Log_test.php';">
</div>
</form>

<?php if (isset($error_message)) { ?>


<p class="error"><?php echo $error_message; ?></p>
<?php } ?>

</body>
</html>

40

You might also like