Ім'я файлу: Курсова робота (Кравчук А.В_ІПЗм-12).docx
Розширення: docx
Розмір: 427кб.
Дата: 25.03.2021
скачати

Міністерство освіти і науки України Тернопільський національний економічний університет

Факультет комп’ютерних інформаційних технологій

Кафедра комп’ютерних наук


Курсова робота

з дисципліни

«Методи та засоби реінженерії програмного забезпечення»

на тему: «Редокументація програмних засобів для модуля управління даними електронного каталогу бібліотеки»
Студентка групи ІПЗм-12 Кравчук Андрій Васильович

(ПІБ)

Керівник роботи Гончар Людмила Іванівна

(ПІБ)


Тернопіль – 2020

ЗМІСТ ВСТУП 3

РОЗДІЛ 1 ВИЗНАЧЕННЯ СИСТЕМНИХ АРХІТЕКТУР 5

    1. Архітектури програмної системи 5

    2. Структура бази даних 8

РОЗДІЛ 2 ПОБУДОВА ФУНКЦІОНАЛЬНОЇ МОДЕЛІ 13

    1. Визначення акторів і варіантів використання 13

    2. Визначення взаємодій акторів і варіантів використання 14

    3. Побудова навігації екранів 19

    4. Деталізація функціональності 22

    5. Інструкція для адміністратора……………………………………………..23

ВИСНОВКИ 27

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

ДОДАТОК А ВИХІДНИЙ КОД 29

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

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

Практичне значення полягає у тому, що внесення всіх даних про книги в єдиній базі дозволить систематизувати їх, а також спростити користувачеві доступ до необхідної для роботи інформації, а також вносити зміни, що внаслідок тягне за собою заощадження коштів і часу, потрібних для вилучення необхідних відомостей. Все це повинно позитивно позначитися на ефективності роботи крамниці.
РОЗДІЛ 1 ВИЗНАЧЕННЯ СИСТЕМНИХ АРХІТЕКТУР



    1. Архітектури програмної системи



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

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

На рисунку 1.1 зображено загальний вигляд трирівневої архітектури.




Рис 1.1. Трирівнева архітектура

Тепер розглянемо детальніше кожен шар трирівневої архітектури.

Презентаційний рівень (Presentation Layer) – це фронтальний рівень в трирівневій архітектурі, який складається з інтерфейсу користувача. Інтерфейс користувача є графічним і доступним через веб-браузер або веб-додаток, та відображає дані корисні для кінцевого користувача. Цей рівень часто побудований на веб-технологіях, таких як HTML5, JavaScript, CSS і зв’язується з іншими шарами через виклик API.
Рівень додатку (Application Layer) – містить функціональну бізнес-логіку, яка керує основними можливостями програми. Зазвичай цей рівень написаний на Java, .NET, C #, Python, C ++ і т.д.

Рівень даних (Data Layer) – складається з бази даних / системи зберігання даних і рівня доступу до даних. Прикладами таких систем є MySQL, Oracle, PostgreSQL, Microsoft SQL Server, MongoDB тощо. Доступ до даних здійснюється прикладним рівнем через виклики API.

Також для проектування додатку використано Java Server Pages, які є частиною трирівневої архітектури. Сервер (як правило, Application або Web Server) підтримує серверні сторінки Java. Цей сервер буде діяти як посередник між клієнтським браузером і базою даних. На діаграмі (Рис. 1.2) зображено архітектуру JSP.

Рис 1.2 JSP архітектура
Тепер детальніше розглянемо як відбувається потік JSP:

1. Користувач переходить на сторінку JSP і робить запит через у веббраузері.

2. Запит JSP надсилається веб-серверу.

3. Веб-сервер приймає запит .jsp і передає JSP-файл JSP Servlet Engine.

4. Якщо файл JSP був викликаний вперше, то його буде проаналізовано. Наступним кроком є створення сервлету з JSP-файлу. Згенерований сервлет надсилається через Інтернет-форму веб-сервера користувачам веб-браузера.

5. Останнім кроком є відображення HTML результату у веб-браузері користувача.
Сторінка JSP - це ще один спосіб написати сервлет без необхідності бути фахівцем з програмування Java. Сторінка JSP обробляється так само, як звичайний сервлет.
Як ми бачимо з використанням обраного типу архітектури ми підвищуємо надійність і доступність програмного продукту.

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



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

Для цього необхідні дані про книгу Також потрібно вказати адресу (область, місто, вулиця, номер будинку) та контактні дані (номер телефону, e-mail) крамниці, — це дозволить користувачеві за необхідності зв’язатись із працівниками для отримання потрібної інформації. Також необхідно передбачити додавання чи вилучення інформації.

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


Рис 1.4. Логічна модель даних

ER діаграма побудована у стандартній нотації SQL Server 2017. Детальна інформація для відношень, що стосуються обліку книг представлена у таблиці 1.1.

Таблиця 1.1

Таблиця ідентифікаторів



Об’єкт

Властивість

Тип

Ідентифікатор

Книга

Назва

ISBN

Рік видання

Кількість

Ціна

Текст

Число

Число

Число

Число

  • Name

  • ISBN

  • Year_of_publish

  • Number

  • Price

Жанр

Жанр

Текст

  • Genre

Автор

Повне ім’я

Текст

  • Full_name

Крамниця

№ крамниці

Номер телефону

Пошта

Число

Число

Текст

  • №_store

  • Phone_number

  • E-mail

Адреса

Область

Місто

Вулиця

№ вулиці

Текст

Текст

Текст

Число

  • Disctict

  • City

  • Street

  • №_street

Видавництво

Назва

Текст

  • Name



1.3 Модуль імпорту даних

Data Manipulation Language (DML) – це мова, яка використовується в комп'ютерних програмах або користувачами баз даних для отримання, вставки, видалення або зміни даних в базах даних.

В HiveQL мові функція DML визначається за першим словом у запиті: «SELECT» («вибрати»), «INSERT» («вставити»), «UPDATE»

(«оновити»), і «DELETE» («видалити»).

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

«INSERT».
DML-script для заповнення таблиці «book»
INSERT INTO book VALUES

('1', 'Database development', '0-11-345678-9', '2012', '1', '456'),

('2', 'Database design ', '0-12-333433-3', '2015', '2', '347'),

('3', 'Hadoop: the definition guide', '0-123-45678-0', '2015', '3', '589'),

('4', 'C# for beginners', '0-12-345678-9', '2016', '4', '450'),

('5', 'Java tutorial', '0-321-32132-1', '2014', '5', '496'),

('6', 'Pride and prejudice', '0-55-123456-9', '2016', '5', '105.10'),

('7', 'Artur and miniputa', '0-555-55555-9', '2017', '8', '97.25'),

('8','The legend of the angel', '0-91-045678-5', '2016', '7', '125'),

('9','Before you die', '0-91-335678-7', '2015', '9', '98'),

('10', 'Time waves', '0-99-777777-7', '2017', '4', '157'),

('11', 'Harry Potter and the Philosophers Stone', '0-99-999999-9', '2015',

'1', '135'),

('12', 'Harry Potter and the Chamber of Secrets', '1-1111-1111-1', '2015', '4', '135'),

('13', 'Harry Potter and the Prisoner of Azkaban', '1-22-233700-0', '2015', '6', '138'),

('14', 'Harry Potter and the Goblet of Fire', '1-22-233700-3', '2015', '4',

'135'),

('15', 'Harry Potter and the Order of the Phoenix', '1-22-233700-6', '2016', '8', '140'),

('16', 'Harry Potter and the Half-Blood Prince', '1-22-233700-4', '2016', '2',

'140'),

('17', 'Harry Potter and the Deathly Hallows', '1-22-233700-8', '2016', '1',

'145'),

('18', 'South and North', '1-22-233700-5', '2018', '4', '149');

DML-script для заповнення таблиці «author_of_book»

INSERT INTO author_of_book VALUES ('1', '1'),

('2', '8'),

('3', '9'),

('4', '10'),

('5', '11'),

('6', '4'),

('7', '3'),

('8', '2'),

('9', '5'),

('10', '5'),

('11', '6'),

('12', '6'),

('13', '6'),

('14', '6'),

('15', '6'),

('16', '6'),

('17', '6'),

('18', '7');

РОЗДІЛ 2 ПОБУДОВА ФУНКЦІОНАЛЬНОЇ МОДЕЛІ



    1. Визначення акторів і варіантів використання



Діаграма варіантів використання (use case diagram) відображає функціональність, яка реалізована в програмному продукті (Рис. 2.1). Кожен варіант використання це функція у програмному продукті і він вказує на очікувану поведінку системи.


Рис. 2.1. Діаграма варіантів використання системи

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

    1. Визначення взаємодій акторів і варіантів використання.



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

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

Варіант використання «Авторизація»


Контекст використання

Авторизація

Дійові особи

Адміністратор бібліотеки

Передумови

Відкрита початкова сторінка системи

Тригер

Відкриття початкової сторінки

авторизованого користувача

Сценарій

  • відкрити систему

  • ввести коректні логін і пароль на формі

  • підтвердити надсилання форми

Постумова

Перезавантаження сторінки сторінки



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

Варіант використання «Формування звіту»

Контекст використання

Формування звіту

Дійові особи

Адміністратор

Передумови

Відкрита система, користувач

авторизований

Тригер

Вкладка ‘Звітність’

Сценарій

  • натиснути на вкладку ‘Звітність’

  • підтвердити формування звіту

Постумова

Звіт збережено на диску


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

Таблиця 2.3

Варіант використання «Переглянути список книг»


Контекст використання

Переглянути список книг

Дійові особи

Адміністратор

Передумови

Відкрита система, користувач

авторизований

Тригер

Вкладка ‘Книги’

Сценарій

Натиснути на вкладку ‘Книги’

Постумова

Перехід на іншу вкладку


Оскільки асортимент товарів не є сталим, наступний варіант використання дає можливість додавати нові позиції у базу даних. Детальніше варіант використання описаний в таблиці 2.2.

Варіант використання «Додати Книгу»

Контекст використаня

Додати книгу

Дійові особи

Адміністратор

Передумови

Відкрита система, користувач

авторизований, встановлене з’єднання з БД

Тригер

Відкриття вкладки ‘Товари’

Сценарій

  • перейти на вкладку ‘Товари’

  • натиснути кнопку ‘Додати товар’

  • вести усі необхідні дані про товар

  • підтвердити додавання товару.

Постумова

Товар додано у БД і оновлено список

товарів.



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

Таблиця 2.5

Варіант використання «Видалити книгу»


Контекст використаня

Видалити книгу

Дійові особи

Адміністратор

Передумови

Відкрита система, користувач

авторизований, встановлене з’єднання з БД, додана книга

Тригер

Відкриття вкладки ‘Книги’

Сценарій

Натиснути на значок видалення

Постумова

Вилученя даних з БД

Таблиця 2.6

Варіант використання «Відредагувати інформацію»


Контекст використаня

Відредагувати інформацію

Дійові особи

Адміністратор

Передумови

Відкрита система, користувач

авторизований, встановлене з’єднання з БД

Тригер

Відкриття вкладки ‘Книги’

Сценарій

  • Натиснути Редагувати

  • Змінити необхідну інформацію

  • Зберегти зміни

Постумова

Оновлено інформацію про книгу



    1. Побудова навігації екранів



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

На рисунку 2.2 зображено навігацію екранів.


Рис. 2.2 – Навігація екранів

Нижче подано зображення екранів програми та їх опис.

Для авторизації користувача в системі необхідно ввести логін та пароль у відповідні поля та натиснути кнопку «Увійти» (рис. 2.3). Для тестування створено користувача з логіном та паролем admin.

Рис 2.3. Введення логіну та паролю


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



Рисунок 2.4 – Головна сторінка


Сторінка «Обрана книга» зображена на рисунку 2.6. Тут можна переглядати книги за вибраними критеріями.

Для того, щоб перейти в «Вибрану книгу» потрібно виконати наступні кроки:

  1. Переходимо на вкладку «Книги»

  2. Вибираєм книгу за критеріями

  3. Натискаємо кнопку «Ок»

2.5 Інструкція для адміністратора
Створення та розгортання БД

Для роботи з Hadoop потрібно встановити на комп’ютер програму VirtualBox. Скачати її можна на офіційному сайті Oracle.

  • Встановлюємо VirtualBox

  • Скачуємо образ Cloudera 5.13 для Virtual Box на офіційному сайті: https://www.cloudera.com/downloads/quickstart_vms/5-13.html

  • Відкриваємо VirtualBox Імпортуємо образ Cloudera;

  • Перевіряємо чи запущений сервер hive2, якщо ні то запускаємо командою в консолі;

  • Запускаємо команду, що створює базу даних і таблиці: hive -f

/home/cloudera/Desktop/db.sql

  • Заповнюємо даними таблиці за допомгою: LOAD DATA LOCAL INPATH <шлях до файлу.csv> OWERWRITE INTO TABLE < Назва таблиці>

  • Скачуємо Oracle;

  • Встановлюємо Oracle;

  • Виконуємо підключення;

Специфікація DDL/SPL для обраної СУБД

Create/Drop/Alter/Use Database

CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name

[COMMENT database_comment] [LOCATION hdfs_path]

[WITH DBPROPERTIES (property_name=property_value, ...)];
Drop Database

DROP (DATABASE|SCHEMA) [IF EXISTS] database_name [RESTRICT|CASCADE];
Alter Database

ALTER (DATABASE|SCHEMA) database_name SET DBPROPERTIES

(property_name=property_value, ...);

Create/Drop/Truncate Table
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS]

[db_name.]table_name -- (Note: TEMPORARY available in Hive 0.14.0 and later)

[(col_name data_type [COMMENT col_comment], ... [constraint_specification])]

[COMMENT table_comment]

[PARTITIONED BY (col_name data_type [COMMENT col_comment],

...)]

[CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]

[SKEWED BY (col_name, col_name, ...) -- (Note: Available in Hive 0.10.0 and later)]

ON ((col_value, col_value, ...), (col_value, col_value, ...), ...)

ВИСНОВКИ

В результаті виконання курсової роботи було проведено реінженерію модуля управління даними електроного каталогу бібліотеки. В процесі реінженерії було визначено системні архітектури. Визначено акторів, варіанти використання програмного продукту та подано у вигляді UML діаграми. Було описано функціонал існуючої системи, подана навігація екранів та деталізація функціональності у вигляді діаграм діяльності. В роботі подано ER діаграму та DDL код створення відповідних таблиць в базі. Код самої програми подано в додатках даної роботи.

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

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



  1. Ken Schwaber, Jeff Sutherland The Definitive Guide to Scrum: The Rules of the Game. [Електронний ресурс] – Режим доступу: вільний. — https://www.scrumguides.org/docs/scrumguide/v2017/2017-Scrum-Guide- US.pdf#zoom=100 .

  2. Триярусна архітектура. [Електронний ресурс] – Режим доступу: вільний. — https://uk.wikipedia.org/wiki/Триярусна_архітектура.

  3. Channu Kambalyal. 3-Tier Architecture. [Електронний ресурс] – Режим доступу: вільний. — http://channukambalyal.tripod.com/NTierArchitecture.pdf.

  4. Java Web Programming with Eclipse / D. Turner, J. Chae. — December 2009 — 293 p.

  5. Офіційний сайт організації Apache Tomcat . [Електронний ресурс] – Режим доступу: вільний. — http://tomcat.apache.org/.

  6. Servlets Tutorial. [Електронний ресурс] – Режим доступу: вільний. — https://www.tutorialspoint.com/servlets/.

  7. SQL Server Documentation. [Електронний ресурс] – Режим доступу: вільний. — https://docs.microsoft.com/en-ie/sql/ssms/tutorials/connect-query-sql- server?view=sql-server-2017.

  8. Дейт К. Введение в системы баз данных.- К.; М.; СПб.: Изд.дом "Вильямс", 2000.- с.

  9. [Електронний ресурс]. – Режим доступу https://docs.oracle.com/javase/tutorial/jdbc/basics/connecting.html




  1. Microsoft SQL Server 2012 Integration Services: An Expert Cookbook /

  2. R. Rad, P. Perfeito — Birmingham: Packt Publishing Ltd — 2012 — 564 p.


ДОДАТОК А ВИХІДНИЙ КОД РОЗРОБКИ ПРОГРАМИ

DDL-script для Hive

Структура таблиці “book”

CREATE TABLE IF NOT EXISTS book (

id INT,

name STRING, ISBN STRING,

year_of_publish INT, number_ INT,

price DOUBLE

)

COMMENT 'Book details' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS TEXTFILE;

Структура таблиці “author”

CREATE TABLE IF NOT EXISTS author (

id INT,

full_name STRING

)COMMENT 'Author details' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS TEXTFILE;

Структура таблиці “publishing_house”

CREATE TABLE IF NOT EXISTS publishing_house ( id INT,

name STRING

)COMMENT 'Publishing_house details' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS TEXTFILE;

Структура таблиці “store_”

CREATE TABLE IF NOT EXISTS store_ (

id INT, N_store INT,

phone_number STRING, email STRING,

add_ID INT

) COMMENT 'Store details' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS TEXTFILE;

Структура таблиці “address”

CREATE TABLE IF NOT EXISTS address (

id INT,

district STRING, city STRING, street STRING, N_of_street INT

)COMMENT 'Address details' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS TEXTFILE;

Структура таблиці “genre”

CREATE TABLE IF NOT EXISTS genre (

id INT,

genre STRING

)COMMENT 'Genre details' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS TEXTFILE;


Структура таблиці “publisher_of_book”

CREATE TABLE IF NOT EXISTS publisher_of_book ( book_ID INT,

pub_ID INT

)

COMMENT 'Publisher_of_book details' ROW FORMAT DELIMITED

FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS TEXTFILE;


Структура таблиці “genre_of_book”

CREATE TABLE IF NOT EXISTS genre_of_book ( book_ID INT,

genre_ID INT

)

COMMENT 'Genre_of_book details' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS TEXTFILE;




Структура таблиці “author_of_book”

CREATE TABLE IF NOT EXISTS author_of_book ( book_ID INT,

auth_ID INT

)

COMMENT 'Author_of_book details' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS TEXTFILE;

Структура таблиці “availability”

CREATE TABLE IF NOT EXISTS availability ( store_ID INT,

book_ID INT

)

COMMENT 'Availability details' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS TEXTFILE;
DML-script для Hive

INSERT INTO address VALUES

('1', 'Ternopil', 'Ternopil', 'Lvivska', '1'),

('2', 'Ternopil', 'Ternopil', 'Chechova', '8'),

('3', 'Ternopil', 'Ternopil', 'Ruska', '15');


INSERT INTO author VALUES

('1', 'Tom White'),

('2', 'Jamie McGuire'),

('3', 'Luc Besson'),

('4', 'Jane Austen'),

('5', 'Samanta Hayes'),

('6', 'J.K. Rouling'),

('7', 'Elizabeth Haskell'),

('8', 'Mike Boston'),

('9', 'Hugo Boss'),

('10', 'Louis Vuitton'),

('11', 'Dolce Gabbana');


INSERT INTO author_of_book VALUES ('1', '1'),

('2', '8'),

('3', '9'),

('4', '10'),

('5', '11'),

('6', '4'),

('7', '3'),

('8', '2'),

('9', '5'),

('10', '5'),

('11', '6'),

('12', '6'),

('13', '6'),

('14', '6'),

('15', '6'),

('16', '6'),

('17', '6'),

('18', '7');


INSERT INTO availability VALUES ('1', '1'),

('1', '2'),

('1', '3'),

('1', '4'),

('1', '5'),

('1', '6'),

('1', '7'),

('1', '8'),

('1', '11'),

('1', '14'),

('1', '15'),

('1', '16'),

('1', '17'),

('2', '1'),

('2', '2'),

('2', '3'),

('2', '4'),

('2', '5'),

('2', '6'),

('2', '7'),

('2', '8'),

('2', '9'),

('2', '10'),

('2', '11'),

('2', '12'),

('2', '15'),

('2', '17'),

('2', '18'),

('3', '6'),

('3', '7'),

('3', '8'),

('3', '9'),

('3', '10'),

('3', '11'),

('3', '12'),

('3', '13'),

('3', '14'),

('3', '15'),

('3', '16'),

('3', '18');


INSERT INTO book VALUES

('1', 'Database development', '0-11-345678-9', '2012', '1', '456'),

('2', 'Database design ', '0-12-333433-3', '2015', '2', '347'),

('3', 'Hadoop: the definition guide', '0-123-45678-0', '2015', '3', '589'),

('4', 'C# for beginners', '0-12-345678-9', '2016', '4', '450'),

('5', 'Java tutorial', '0-321-32132-1', '2014', '5', '496'),

('6', 'Pride and prejudice', '0-55-123456-9', '2016', '5', '105.10'),

('7', 'Artur and miniputa', '0-555-55555-9', '2017', '8', '97.25'),

('8','The legend of the angel', '0-91-045678-5', '2016', '7', '125'),

('9','Before you die', '0-91-335678-7', '2015', '9', '98'),

('10', 'Time waves', '0-99-777777-7', '2017', '4', '157'),

('11', 'Harry Potter and the Philosophers Stone', '0-99-999999-9', '2015', '1',

'135'),

('12', 'Harry Potter and the Chamber of Secrets', '1-1111-1111-1', '2015', '4',

'135'),

('13', 'Harry Potter and the Prisoner of Azkaban', '1-22-233700-0', '2015', '6',

'138'),

('14', 'Harry Potter and the Goblet of Fire', '1-22-233700-3', '2015', '4', '135'),

('15', 'Harry Potter and the Order of the Phoenix', '1-22-233700-6', '2016', '8',

'140'),

('16', 'Harry Potter and the Half-Blood Prince', '1-22-233700-4', '2016', '2',

'140'),

('17', 'Harry Potter and the Deathly Hallows', '1-22-233700-8', '2016', '1',

'145'),

('18', 'South and North', '1-22-233700-5', '2018', '4', '149');


INSERT INTO genre VALUES

('1', 'Science fiction'),

('2', 'Romance'),

('3', 'Travel'),

('4', 'Children’s'),

('5', 'Science'),

('6', 'Fantasy'),

('7', 'Adventure');

INSERT INTO genre_of_book VALUES ('1', '5'),

('2', '5'),

('3', '5'),

('4', '15'),

('5', '5'),

('6', '2'),

('7', '4'),

('7', '6'),

('8', '2'),

('8', '6'),

('9', '2'),

('10', '2'),

('10', '6'),

('11', '6'),

('12', '6'),

('13', '6'),

('14', '6'),

('15', '6'),

('16', '6'),

('17', '6'),

('18', '2');


INSERT INTO publisher_of_book VALUES ('1', '1'),

('2', '1'),

('3', '1'),

('4', '1'),

('5', '1'),

('6', '3'),

('7', '3'),

('8', '3'),

('9', '3'),

('10', '3'),

('11', '4'),

('12', '4'),

('13', '4'),

('14', '4'),

('15', '4'),

('16', '4'),

('17', '4'),

('18', '2');


INSERT INTO publishing_house VALUES ('1','O’Raily'),

('2','Vivat'),

('3','Dream country'),

('4','Fabula');


INSERT INTO store_ VALUES

('1', '1', '+38(498)707-60-61', 'storchyk@gmail.com', '1'),

('2', '2', '+38(698)707-60-61', 'storchyk@gmail.com', '3'),

('3', '3', '+38(998)707-60-61', 'storchyk@gmail.com', '2');
CLIENT (Report )

package package1;

import java.sql.*;


public class JDBC1 {


try {

Class.forName(driverName);

}catch (ClassNotFoundException e) { System.out.println("Where is your MySQL JDBC Driver?"); e.printStackTrace();

return;

}

System.out.println("MySQL JDBC Driver Registered!"); Connection con = null;
try {

con =

DriverManager.getConnection("jdbc:hive2://localhost:10000/library", "", ""); Statement stmt = con.createStatement();

ResultSet rs;

rs = stmt.executeQuery("SELECT publishing_house.name, book.name, book.ISBN FROM publisher_of_book INNER JOIN publishing_house ON publisher_of_book.pub_ID=publishing_house.id INNER JOIN book ON publisher_of_book.book_ID=book.id WHERE book.price<100");

oracleJDBC conn = new oracleJDBC();

+ ""

+ ""

+ "

Report 1

");

System.out.print(" ");
String publishing = rs.getString("publishing_house.name"); String bookName = rs.getString("book.name");

String ISBN = rs.getString("book.ISBN"); conn.Insert(publishing, bookName, ISBN);

System.out.println(" ");

};

}catch (SQLException e) {

System.out.println("Connection Failed! Check output console"); e.printStackTrace();

return;

}

if (con != null) {

System.out.println("You made it, take control your database now!");

}

}

}

oracleJDBC1 package package1;

import java.sql.*;

public class oracleJDBC1 {

public static void Insert(String publishing, String bookName, String

ISBN) throws SQLException {

System.out.println("-------- Oracle JDBC Connection Testing ");

try {

Class.forName("oracle.jdbc.driver.OracleDriver");

} catch (ClassNotFoundException e) {

System.out.println("Where is your Oracle JDBC Driver?"); e.printStackTrace();

return;

}

System.out.println("Oracle JDBC Driver Registered!"); Connection conn = null;

try {

conn = DriverManager.getConnection( "jdbc:oracle:thin:@192.168.56.1:1521/xe", "system", "9449");
} catch (SQLException e) {

System.out.println("Connection Failed! Check output console"); e.printStackTrace();

return;

}

if (conn != null) {

System.out.println("You made it, take control your database now!");

} else {

System.out.println("Failed to make connection!");

}

Statement stmt = conn.createStatement();

stmt.execute("INSERT INTO REPORT_1 VALUES('"+publishing+"', '"+bookName+"', '"+ISBN+"')");

}

}

CLIENT (Report 2)

package package1; import java.sql.*;


public class JDBC 2{

private static String driverName = "org.apache.hive.jdbc.HiveDriver"; public static void main(String[] args) {

try {

Class.forName(driverName);

}catch (ClassNotFoundException e) { System.out.println("Where is your MySQL JDBC Driver?"); e.printStackTrace();

return;

}

System.out.println("MySQL JDBC Driver Registered!"); Connection con = null;
try {

con =

DriverManager.getConnection("jdbc:hive2://localhost:10000/library", "", ""); Statement stmt = con.createStatement();

ResultSet rs;

rs = stmt.executeQuery("SELECT store_.n_store, address.district, address.city, address.street, (book.number_*book.price) AS cost "

+" FROM address INNER JOIN store_ ON

address.id=store_.id "

+" INNER JOIN availability ON store_.id=availability.store_id "

+" INNER JOIN book ON availability.book_id=book.id"); oracleJDBC conn = new oracleJDBC(); System.out.print(""

+ ""

+ ""

+ "

Report 2

Publish House Book name ISBN
" + publishing + " " + bookName + " " + ISBN + "
"); System.out.print("



"); while ( rs.next() ) {

String n_store = rs.getString("store_.N_store"); String district = rs.getString("address.district"); String city = rs.getString("address.city");
String cost = rs.getString("cost"); conn.Insert(publishing, bookName, ISBN);

System.out.println(" ");

};

}catch (SQLException e) {

System.out.println("Connection Failed! Check output console"); e.printStackTrace();

return;

}

if (con != null) {

System.out.println("You made it, take control your database now!");

}

}

}

Class oracleJDBC

package package1; import java.sql.*;
public class oracleJDBC2 {

public static void Insert(String publishing, String bookName, String ISBN) throws SQLException {
System.out.println("-------- Oracle JDBC Connection Testing ");

try {

Class.forName("oracle.jdbc.driver.OracleDriver");

} catch (ClassNotFoundException e) {

System.out.println("Where is your Oracle JDBC Driver?"); e.printStackTrace();

return;

}

System.out.println("Oracle JDBC Driver Registered!"); Connection conn = null;

try {

conn = DriverManager.getConnection( "jdbc:oracle:thin:@192.168.56.1:1521/xe", "system", "9449");

} catch (SQLException e) {

System.out.println("Connection Failed! Check output console"); e.printStackTrace();

return;

}

if (conn != null) {

System.out.println("You made it, take control your database now!");

} else {

System.out.println("Failed to make connection!");

}

Statement stmt = conn.createStatement();

stmt.execute("INSERT INTO REPORT_1 VALUES('"+publishing+"', '"+bookName+"', '"+ISBN+"')");

}

}


USE master

ДОДАТОК Б

РЕЗУЛЬТАТ ФІЗИЧНОГО ПРОЕКТУВАННЯ БД

IF EXISTS(select * from sys.databases where name='Salon') DROP DATABASE Salon

GO
--create database CREATE DATABASE Salon; GO
USE Salon;

GO
CREATE SCHEMA [Sales] AUTHORIZATION dbo GO

CREATE SCHEMA [Staff] AUTHORIZATION dbo GO

CREATE SCHEMA [Business] AUTHORIZATION dbo GO

CREATE SCHEMA [ADM] AUTHORIZATION dbo GO
CREATE TABLE ADM.Administration ( Username VARCHAR(20) NOT NULL, [Password] VARCHAR(20) NOT NULL

) GO
CREATE TABLE Business.Customers (

CustomerID int not null identity(1,1), FirstName NVARCHAR(50) NOT NULL, LastName NVARCHAR(50) NOT NULL, MiddleName NVARCHAR(50) NOT NULL,

BirthDate DATE NULL,

Phone VARCHAR(10) NOT NULL,

CONSTRAINT PK_CustomerID PRIMARY KEY (CustomerID)

)

GO
CREATE TABLE Staff.Position (

PositionID int not null identity(1,1), Name NVARCHAR(50) NOT NULL,

CONSTRAINT PK_PositionID PRIMARY KEY (PositionID)

)

GO
CREATE TABLE Staff.Employees (

EmployeeID int not null identity(1,1), FirstName NVARCHAR(50) NOT NULL, LastName NVARCHAR(50) NOT NULL, MiddleName NVARCHAR(50) NOT NULL,

BirthDate DATE NOT NULL, HireDate DATE NOT NULL, Phone VARCHAR(10) NOT NULL,

PositionID INT NOT NULL,

CONSTRAINT PK_EmployeeID PRIMARY KEY (EmployeeID),

CONSTRAINT FK_Position_Employees FOREIGN KEY (PositionID) REFERENCES Staff.Position (PositionID)

)

GO
CREATE TABLE Business.ServiceCategory (

ServiceCategoryID int not null identity(1,1), Name NVARCHAR(50) NOT NULL,

CONSTRAINT PK_ServiceCategoryID PRIMARY KEY (ServiceCategoryID)

)

GO
CREATE TABLE [Business].Service (

ServiceID int not null identity(1,1), [Name] NVARCHAR(50) NOT NULL,

ServiceCategoryID INT NOT NULL,

CONSTRAINT PK_PositionID PRIMARY KEY (ServiceID),

CONSTRAINT FK_Service_ServiceCategory FOREIGN KEY (ServiceCategoryID) REFERENCES Business.ServiceCategory (ServiceCategoryID)

)

GO
CREATE TABLE [Business].ServiceDescription ( ServiceDescriptionID int not null identity(1,1), ServiceID INT NOT NULL,

Price DECIMAL(19,2) NOT NULL, HairLength NVARCHAR(50) NULL, Gender NVARCHAR(50) NULL,

Description NVARCHAR(255) NULL,

CONSTRAINT PK_ServiceDescriptionID PRIMARY KEY (ServiceDescriptionID),

CONSTRAINT FK_ServiceDescription_Service FOREIGN KEY (ServiceID) REFERENCES [Business].Service (ServiceID)

)

GO
CREATE TABLE [Sales].ProductCategory ( ProductCategoryID int not null identity(1,1), [Name] NVARCHAR(50) NOT NULL,

CONSTRAINT PK_ProductCategoryID PRIMARY KEY (ProductCategoryID)

)

GO
CREATE TABLE [Sales].Suppliers (

SupplierID int not null identity(1,1), [Name] NVARCHAR(50) NOT NULL,

[Phone] VARCHAR(50) NOT NULL,

CONSTRAINT PK_SupplierID PRIMARY KEY (SupplierID)

)

GO
CREATE TABLE [Sales].Products ( ProductID bigint not null, [Name] NVARCHAR(50) NOT NULL,

ProductCategoryID INT NOT NULL, Description NVARCHAR(255) NULL, SupplierID INT NOT NULL, Amount INT NOT NULL,

PurchasePrice DECIMAL(19,2) NOT NULL, SellingPrice DECIMAL(19,2) NOT NULL,

CONSTRAINT PK_ProductID PRIMARY KEY (ProductID),

CONSTRAINT FK_Product_ProductCategory FOREIGN KEY (ProductCategoryID) REFERENCES [Sales].ProductCategory (ProductCategoryID),

CONSTRAINT FK_Product_Supplier FOREIGN KEY (SupplierID) REFERENCES [Sales].Suppliers (SupplierID)

)

GO
CREATE TABLE [Business].Schedule(

ScheduleID int identity(1,1) not null, [Date] DATE NOT NULL,

EmployeeID INT NOT NULL,

CustomerID INT NOT NULL, ServiceID INT NOT NULL, Price DECIMAL(19,2) NOT NULL,

[Status] NVARCHAR(50) NOT NULL,

Description NVARCHAR(255) NOT NULL,

CONSTRAINT PK_ScheduleID PRIMARY KEY (ScheduleID),

CONSTRAINT FK_Schedule_Employees FOREIGN KEY (EmployeeID) REFERENCES Staff.Employees (EmployeeID),

CONSTRAINT FK_Schedule_Customer FOREIGN KEY (CustomerID) REFERENCES Business.Customers (CustomerID),

CONSTRAINT FK_Schedule_Service FOREIGN KEY (ServiceID) REFERENCES Business.Service (ServiceID)

)

GO
CREATE TABLE [Sales].Purchases(

PurchasesID int identity(1,1) not null, ProductID INT NOT NULL,

Price DECIMAL(19,2) NOT NULL , Number INT NOT NULL,

[Date] DATE NOT NULL DEFAULT (getdate()),

CONSTRAINT PK_PurchasesID PRIMARY KEY (PurchasesID),

CONSTRAINT FK_Purchases_Product FOREIGN KEY (ProductID) REFERENCES Sales.Products (ProductID),

)

GO
CREATE TABLE [Sales].Writeoff(

WriteoffID int identity(1,1) not null, ProductID INT NOT NULL,

Price INT NOT NULL DEFAULT 0 , Number INT NOT NULL,

[Date] DATE NOT NULL DEFAULT (getdate()),

[Description] VARCHAR(255),

CONSTRAINT PK_WriteoffID PRIMARY KEY (WriteoffID),

CONSTRAINT FK_Writeoff_Product FOREIGN KEY (ProductID) REFERENCES Sales.Products (ProductID),

)

GO
N_StoreDistrict City StreetCost_of_all_book
" + n_store + " " + district + " " + city + "" + street +" " + cost +"

скачати

© Усі права захищені
написати до нас