Автоматизація процесу обліку

Анотація

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

Робота виконана на 32 сторінках друкованого тексту, містить 12 рисунків, 4 таблиці. Робота має доданок.

Робота виконана українською мовою.

Аннотация

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

Работа выполнена на 32 страницах печатного текста, содержит 12 рисунков, 4 таблиц. Работа имеет приложение.

Работа выполнена на украинском языке.

Зміст

Вступ

1 Обстеження і аналіз репозиторія програмного забезпечення . Постановка задачі

1.1 Обстеження предметної області

1.2 Аналіз репозиторія ПЗ. Розробка функціональної моделі бази даних „Репозиторій ПЗ” (DF-Діаграма)

1.3 Постановка задачі

2. Розробка проекту Бази Даних „Репозиторій ПЗ”

2.1 Розробка концептуальної моделі бази даних „ Репозиторій ПЗ”

2.2 Розробка специфікації програмних модулів

2.3 Розробка логічної моделі бази даних «Репозиторій ПЗ»

2.4 Розробка алгоритмів і графічних інтерфейсів програмних модулів

2.5 Розробка фізичної моделі бази даних «Репозиторій ПЗ»

2.6 Кодування і тестування програмного забезпечення

Висновки

Список використаних джерел

Додаток А – Текст програми

Додаток Б – Інструкція для користувача

Вступ

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

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

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

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

Ціль даної работи – створення ефективного репозиторія ПЗ шляхом розробки бази даних і программного забезпечення, котре повинне мати слідуючі можливості:

а) вводити, видаляти, редагувати информацію про нові проекти

б) вводити, видаляти, редагувати информацію про дистрибутиви

в) створювати звіти про наявні пакети та дистрибутиви

г) надавати вихідні файли окремих пакетів та дистрибутивів

Для досягнення даної цілі використано сервер баз даних MySQL та клієнтський інтерфейс до нього, реалізований на php.

1 Обстеження і аналіз репозиторія . Постановка задачі

1.1 Обстеження репозиторія

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

Прикладом репозиторію може бути репозиторій вільного программного забезпечення Sisyphus ALT Linux.

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

Проект – сукупність вихідних файлів розприділених по підкаталогам проекта.

Розглянемо структуру репозиторія.

/

/trunk

/tags/

/0.0.1

/0.0.2

...

/branches/

/0.0.1

/0.0.2

...

Директорія /trunk — основна гілка розробки проекта. В неї вносяться всі зміни та виправлення помилок.

Директорія /tags містить релізи проекта. Саме з піддерикторій дерикторії /tags

вихідний код виставляється на робочі сервери.

Директорія /branches необхідна для внесення великих змін в код проекта. В зберігаються гілки розробки. Якщо розробник створює нову функцію, то він повинен створити проект доповненя і синхронізувати його з основною версію ПЗ. Після закінчення розробки функції доповнення зливається з основним проектом.

Розглянемо події, які можуть відбутися в репозиторії:

a) Надходять нові пакети

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

б) Надходять зміни до проекта

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

в) Користувач створює запит на отримання программного забезпечення

Користувач створює запит який складається з назви та версії проекта. Користувач отримує список залежностей відповідного проекта. Відповідні вихідні файли або їх ftp aдресу.

г) Реєстрація розробника

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

д) Надавати звіт

Здійснюється пошук ПЗ за датою створення, тематикою.

е) Надавати дистрибутив користувачу

Користувач створює запит на отримання дистрибутиву, а не окремого пакету. Отримує ftp-адресу архіва дистрибутиву.

Основна функція репозиторія – збереження та розповсюдження однозначного дистрибутива ПЗ.

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

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

1.2Аналіз процесу функціонування репозиторія . Розробка функціональної моделі Бази даних „Репозиторій програмного забезпечення”

Для побудови функціональної моделі використовуємо нотація Йордана:

- вся інформація по предметній області представляється в вигляді ієрарархії діаграм.

- на нульовій діаграмі представляється головна функція предметної області і зовнішні сущності.

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

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

- остання таблиця є те що треба зберігати в базі даних.

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

0100090000032a0200000200a20100000000a201000026060f003a03574d464301000000000001007d7a0000000001000000180300000000000018030000010000006c0000000000000000000000350000006f0000000000000000000000e52700004724000020454d4600000100180300001200000002000000000000000000000000000000bf120000121a0000cb0000001a010000000000000000000000000000f8180300904d0400160000000c000000180000000a00000010000000000000000000000009000000100000006d09000090080000250000000c0000000e000080250000000c0000000e000080120000000c00000001000000520000007001000001000000a4ffffff00000000000000000000000090010000000000cc04400022430061006c006900620072006900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100009b110010000000649e1100e49b1100e4506032649e11005c9b110010000000cc9c1100489e11008a4f6032649e11005c9b1100200000006a4555315c9b1100649e110020000000ffffffffec23dc0017465531ffffffffffff0180ffff01800fff0180ffffffff00000000000800000008000030f1110001000000000000005802000025000000372e9001cc00020f0502020204030204ef0200a07b20004000000000000000009f00000000000000430061006c006900620072000000000000000000249c11000dea5431b0d71132849f1100909b11001e504d310600000001000000cc9b1100cc9b11003d524b3106000000f49b1100ec23dc006476000800000000250000000c00000001000000250000000c00000001000000250000000c00000001000000180000000c0000000000000254000000540000000000000000000000350000006f000000010000008d5c8740163687400000000057000000010000004c0000000400000000000000000000006d090000920800005000000020000e003600000046000000280000001c0000004744494302000000ffffffffffffffff6d09000091080000000000004600000014000000080000004744494303000000250000000c0000000e000080250000000c0000000e0000800e000000140000000000000010000000140000000400000003010800050000000b0200000000050000000c024d016d01040000002e0118001c000000fb020200010000000000bc02000000cc0102022253797374656d0000000000000000000000000000000000000000000000000000040000002d010000040000002d01000004000000020101001c000000fb02f2ff0000000000009001000000cc0440002243616c6962726900000000000000000000000000000000000000000000000000040000002d010100040000002d010100040000002d010100050000000902000000020d000000320a0d00000001000400000000006d014c0120cf0800040000002d010000040000002d010000030000000000

Визначаємо функції на діаграмі потоків даних 1 рівня (Рисунок 2).

0100090000032a0200000200a20100000000a201000026060f003a03574d464301000000000001007d7a0000000001000000180300000000000018030000010000006c0000000000000000000000350000006f0000000000000000000000e52700004724000020454d4600000100180300001200000002000000000000000000000000000000bf120000121a0000cb0000001a010000000000000000000000000000f8180300904d0400160000000c000000180000000a00000010000000000000000000000009000000100000006d09000090080000250000000c0000000e000080250000000c0000000e000080120000000c00000001000000520000007001000001000000a4ffffff00000000000000000000000090010000000000cc04400022430061006c006900620072006900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100009b110010000000649e1100e49b1100e4506032649e11005c9b110010000000cc9c1100489e11008a4f6032649e11005c9b1100200000006a4555315c9b1100649e110020000000ffffffffec23dc0017465531ffffffffffff0180ffff01800fff0180ffffffff00000000000800000008000030f1110001000000000000005802000025000000372e9001cc00020f0502020204030204ef0200a07b20004000000000000000009f00000000000000430061006c006900620072000000000000000000249c11000dea5431b0d71132849f1100909b11001e504d310600000001000000cc9b1100cc9b11003d524b3106000000f49b1100ec23dc006476000800000000250000000c00000001000000250000000c00000001000000250000000c00000001000000180000000c0000000000000254000000540000000000000000000000350000006f000000010000008d5c8740163687400000000057000000010000004c0000000400000000000000000000006d090000920800005000000020000e003600000046000000280000001c0000004744494302000000ffffffffffffffff6d09000091080000000000004600000014000000080000004744494303000000250000000c0000000e000080250000000c0000000e0000800e000000140000000000000010000000140000000400000003010800050000000b0200000000050000000c024d016d01040000002e0118001c000000fb020200010000000000bc02000000cc0102022253797374656d0000000000000000000000000000000000000000000000000000040000002d010000040000002d01000004000000020101001c000000fb02f2ff0000000000009001000000cc0440002243616c6962726900000000000000000000000000000000000000000000000000040000002d010100040000002d010100040000002d010100050000000902000000020d000000320a0d00000001000400000000006d014c0120cf0800040000002d010000040000002d010000030000000000


Інформацію про потоки даних заносимо в таблицю 1.

Таблица 1 – потоки даних і їх атрибути

Потоки даних 0 рівня

Потоки даних 1 рівня

Атрибути

Інформація від користувача

Запит ПЗ

Назва ПЗ, версія

Запит дистрибутива

Назва дистрибутиву, версія

Параметри виборки

Дата створення проекта, версія сумісного дистрибутива, назва

Інформація для користувача

Інформація про програмне забезпечення

Назва, версія, розробник, ліцензія, ftp-адреса вихідних файлів ПЗ, версія сумісного дистрибутиву.

Інформація про дистрибутив

ftp-адреса архіву вихідних файлів дистрибутиву

Список проектів

Список назв та версій потрібних проектів

Інформація від розробника

Розробник

Імя розробника, адреса електронної пошти

Ідентифікаційний код

Унікальний логін та пароль розробника, дає право на зміну проектів

Інформація про проект

Назва, версія, тема, ftp-адреса архіву вихідних файлів

Інформація для розробника

Ідентифікаційний код

Унікальний код розробника( дає право на зміну проектів)

Звіт

ftp-адреса вихідних файлів ПЗ, статус проекта( прийнято/не прийнято)

1.3 Постановка задачі

Мета даної курсової роботи - збільшення ефективності роботи репозиторія шляхом розробки бази даних і програмного забезпечення, для якого висуватимуться наступні вимоги:

1) Наявність простого меню програми, зручного для користувача.

2) Реалізація можливості пошуку програмного забезпечення:

    за автором

    назвою

    датою створення

3) Можливість реєстрації дистрибутива, а саме фіксування таких даних, як:

    назва дистрибутива

    версія

    ftp-адреса вихідних файлів

4) Можливість реєстрації програмного забезпечення, а саме занесення до бази даних такої інформації:

    назва програмного забезпечення

    версія

    дата створення

    дистрибутив

    автор

    ліцензія

    ftp-адреса вихідних файлів

5) Можливість реєстрації автора, а саме занесення до бази даних такої інформації:

    ім”я

    по-батькові

    прізвище

    email-адреса

6) Можливість редагування інформації про вже зареєстроване програмне забезпечення;

7) Можливість звіт по базі даних в цілому.

8) Мати інструкцію для користувача.

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

2 Розробка проекту Бази Даних „Репозиторій програмного забезпечення”

2.1 Розробка концептуальної моделі Бази Даних „ Репозиторій програмного забезпечення” (ER-Діаграма).

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

0100090000032a0200000200a20100000000a201000026060f003a03574d464301000000000001007d7a0000000001000000180300000000000018030000010000006c0000000000000000000000350000006f0000000000000000000000e52700004724000020454d4600000100180300001200000002000000000000000000000000000000bf120000121a0000cb0000001a010000000000000000000000000000f8180300904d0400160000000c000000180000000a00000010000000000000000000000009000000100000006d09000090080000250000000c0000000e000080250000000c0000000e000080120000000c00000001000000520000007001000001000000a4ffffff00000000000000000000000090010000000000cc04400022430061006c006900620072006900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100009b110010000000649e1100e49b1100e4506032649e11005c9b110010000000cc9c1100489e11008a4f6032649e11005c9b1100200000006a4555315c9b1100649e110020000000ffffffffec23dc0017465531ffffffffffff0180ffff01800fff0180ffffffff00000000000800000008000030f1110001000000000000005802000025000000372e9001cc00020f0502020204030204ef0200a07b20004000000000000000009f00000000000000430061006c006900620072000000000000000000249c11000dea5431b0d71132849f1100909b11001e504d310600000001000000cc9b1100cc9b11003d524b3106000000f49b1100ec23dc006476000800000000250000000c00000001000000250000000c00000001000000250000000c00000001000000180000000c0000000000000254000000540000000000000000000000350000006f000000010000008d5c8740163687400000000057000000010000004c0000000400000000000000000000006d090000920800005000000020000e003600000046000000280000001c0000004744494302000000ffffffffffffffff6d09000091080000000000004600000014000000080000004744494303000000250000000c0000000e000080250000000c0000000e0000800e000000140000000000000010000000140000000400000003010800050000000b0200000000050000000c024d016d01040000002e0118001c000000fb020200010000000000bc02000000cc0102022253797374656d0000000000000000000000000000000000000000000000000000040000002d010000040000002d01000004000000020101001c000000fb02f2ff0000000000009001000000cc0440002243616c6962726900000000000000000000000000000000000000000000000000040000002d010100040000002d010100040000002d010100050000000902000000020d000000320a0d00000001000400000000006d014c0120cf0800040000002d010000040000002d010000030000000000

2.2 Розробка специфікації програмних модулів

Програмні модулі будуть розроблені в середовищі MySQL та наведені у додатках (Див. Додаток 1) у вигляді SQL-кодів, а також конструкторів форм, запитів, звітів, таблиць реалізованих, у вигляді html-сторінок, мовою php .

Специфікація програмних модулів має наступну структуру (Таблиця 2):

Таблиця 2 – Специфікація програмних модулів

Рівень модуля

Назва модуля

Опис модуля

0

Головна форма

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

1

Додати/видалити дистрибутив

Дає можливість зареєструвати новий дистрибутив/видалити існуючий, шляхом введення даних. Вхідні дані: назва дистрибутива, версія, ftp-адреса вихідних файлів

1

Додати/видалити автора

Дає можливість зареєструвати/видалити автора шляхом введення наступних даних: ім”я автора, по-батькові, прізвище, email-адреса автора

1

Додати/видалити ПЗ

Дає можливість зареєструвати/видалити програмне забезпечення шляхом введення наступних даних: назва, версія, дата створення, дистрибутив, автор, ліцензія,ftp-адреса вихідних файлів

1

Пошук ПЗ за датою

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

1

Пошук ПЗ за автором

Виводить усе програмне забезпечення створене заданим автором. Вхідні дані: імя та прізвише автора. Вихідні дані: назва ПЗ, версія, дата, ліцензія, ftp-адреса, автор, email-адреса автора

1

Пошук ПЗ за назвою

Виводить усе програмне забезпечення з заданою назвою. Вхідні дані: назва ПЗ. Вихідні дані: назва ПЗ, версія, дата, ліцензія, ftp-адреса, автор, дистрибутив, ftp-адреса дистрибутива

1

Пошук автора

Виводить усе програмне забезпечення створене заданим автором. Вхідні дані: прізвише автора. Вихідні дані: ім”я автора, по-батькові, прізвище, email-адреса автора

2.3 Розробка логічної моделі бази даних “Репозиторый ПЗ”

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

В окремі таблиці віднесемо такі сутності як Автор, Дистрибутив, ПЗ. (Модель даних подана на рисунку 6.) У кожній таблиці слід вписати атрибути, які будуть характерні для даної сутності. Кожен атрибут має свій тип, який визначається типом даних, який зберігатиметься у базі даних.Також вкажемо, яким ключем є кожен атрибут. Атрибути, які організують зв”язок між таблицями, є зовнішніми ключами (FK). Кожна сутність повинна мати ключ, який використовується для пошуку – PK – первинний ключ, якщо атрибут є альтернативою для пошуку, то він є альтернативним ключом (AK). Якщо за даним атрибутом можна впорядкувати інформацію, то цей атрибут є індексним ключом.

ПЗ

Розробник


ПЗ


Дистрибутив



Рисунок 4 – Логічна модель бази даних «Репозиторій ПЗ».

2.4 Розробка алгоритмів і графічних інтерфейсів програмних модулів

Алгоритм програми являє собою блок вибору дії та виклик відповідної підпрограми. Нижче наведено блок-схему алгоритма програми.

0100090000032a0200000200a20100000000a201000026060f003a03574d464301000000000001007d7a0000000001000000180300000000000018030000010000006c0000000000000000000000350000006f0000000000000000000000e52700004724000020454d4600000100180300001200000002000000000000000000000000000000bf120000121a0000cb0000001a010000000000000000000000000000f8180300904d0400160000000c000000180000000a00000010000000000000000000000009000000100000006d09000090080000250000000c0000000e000080250000000c0000000e000080120000000c00000001000000520000007001000001000000a4ffffff00000000000000000000000090010000000000cc04400022430061006c006900620072006900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100009b110010000000649e1100e49b1100e4506032649e11005c9b110010000000cc9c1100489e11008a4f6032649e11005c9b1100200000006a4555315c9b1100649e110020000000ffffffffec23dc0017465531ffffffffffff0180ffff01800fff0180ffffffff00000000000800000008000030f1110001000000000000005802000025000000372e9001cc00020f0502020204030204ef0200a07b20004000000000000000009f00000000000000430061006c006900620072000000000000000000249c11000dea5431b0d71132849f1100909b11001e504d310600000001000000cc9b1100cc9b11003d524b3106000000f49b1100ec23dc006476000800000000250000000c00000001000000250000000c00000001000000250000000c00000001000000180000000c0000000000000254000000540000000000000000000000350000006f000000010000008d5c8740163687400000000057000000010000004c0000000400000000000000000000006d090000920800005000000020000e003600000046000000280000001c0000004744494302000000ffffffffffffffff6d09000091080000000000004600000014000000080000004744494303000000250000000c0000000e000080250000000c0000000e0000800e000000140000000000000010000000140000000400000003010800050000000b0200000000050000000c024d016d01040000002e0118001c000000fb020200010000000000bc02000000cc0102022253797374656d0000000000000000000000000000000000000000000000000000040000002d010000040000002d01000004000000020101001c000000fb02f2ff0000000000009001000000cc0440002243616c6962726900000000000000000000000000000000000000000000000000040000002d010100040000002d010100040000002d010100050000000902000000020d000000320a0d00000001000400000000006d014c0120cf0800040000002d010000040000002d010000030000000000

Рисунок 5 – Блок-схема основного алгоритма програми ( головна форма)

0100090000032a0200000200a20100000000a201000026060f003a03574d464301000000000001007d7a0000000001000000180300000000000018030000010000006c0000000000000000000000350000006f0000000000000000000000e52700004724000020454d4600000100180300001200000002000000000000000000000000000000bf120000121a0000cb0000001a010000000000000000000000000000f8180300904d0400160000000c000000180000000a00000010000000000000000000000009000000100000006d09000090080000250000000c0000000e000080250000000c0000000e000080120000000c00000001000000520000007001000001000000a4ffffff00000000000000000000000090010000000000cc04400022430061006c006900620072006900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100009b110010000000649e1100e49b1100e4506032649e11005c9b110010000000cc9c1100489e11008a4f6032649e11005c9b1100200000006a4555315c9b1100649e110020000000ffffffffec23dc0017465531ffffffffffff0180ffff01800fff0180ffffffff00000000000800000008000030f1110001000000000000005802000025000000372e9001cc00020f0502020204030204ef0200a07b20004000000000000000009f00000000000000430061006c006900620072000000000000000000249c11000dea5431b0d71132849f1100909b11001e504d310600000001000000cc9b1100cc9b11003d524b3106000000f49b1100ec23dc006476000800000000250000000c00000001000000250000000c00000001000000250000000c00000001000000180000000c0000000000000254000000540000000000000000000000350000006f000000010000008d5c8740163687400000000057000000010000004c0000000400000000000000000000006d090000920800005000000020000e003600000046000000280000001c0000004744494302000000ffffffffffffffff6d09000091080000000000004600000014000000080000004744494303000000250000000c0000000e000080250000000c0000000e0000800e000000140000000000000010000000140000000400000003010800050000000b0200000000050000000c024d016d01040000002e0118001c000000fb020200010000000000bc02000000cc0102022253797374656d0000000000000000000000000000000000000000000000000000040000002d010000040000002d01000004000000020101001c000000fb02f2ff0000000000009001000000cc0440002243616c6962726900000000000000000000000000000000000000000000000000040000002d010100040000002d010100040000002d010100050000000902000000020d000000320a0d00000001000400000000006d014c0120cf0800040000002d010000040000002d010000030000000000

Рисунок 6 – Алгоритм підпрограми Додати/видалити дистрибутив

0100090000032a0200000200a20100000000a201000026060f003a03574d464301000000000001007d7a0000000001000000180300000000000018030000010000006c0000000000000000000000350000006f0000000000000000000000e52700004724000020454d4600000100180300001200000002000000000000000000000000000000bf120000121a0000cb0000001a010000000000000000000000000000f8180300904d0400160000000c000000180000000a00000010000000000000000000000009000000100000006d09000090080000250000000c0000000e000080250000000c0000000e000080120000000c00000001000000520000007001000001000000a4ffffff00000000000000000000000090010000000000cc04400022430061006c006900620072006900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100009b110010000000649e1100e49b1100e4506032649e11005c9b110010000000cc9c1100489e11008a4f6032649e11005c9b1100200000006a4555315c9b1100649e110020000000ffffffffec23dc0017465531ffffffffffff0180ffff01800fff0180ffffffff00000000000800000008000030f1110001000000000000005802000025000000372e9001cc00020f0502020204030204ef0200a07b20004000000000000000009f00000000000000430061006c006900620072000000000000000000249c11000dea5431b0d71132849f1100909b11001e504d310600000001000000cc9b1100cc9b11003d524b3106000000f49b1100ec23dc006476000800000000250000000c00000001000000250000000c00000001000000250000000c00000001000000180000000c0000000000000254000000540000000000000000000000350000006f000000010000008d5c8740163687400000000057000000010000004c0000000400000000000000000000006d090000920800005000000020000e003600000046000000280000001c0000004744494302000000ffffffffffffffff6d09000091080000000000004600000014000000080000004744494303000000250000000c0000000e000080250000000c0000000e0000800e000000140000000000000010000000140000000400000003010800050000000b0200000000050000000c024d016d01040000002e0118001c000000fb020200010000000000bc02000000cc0102022253797374656d0000000000000000000000000000000000000000000000000000040000002d010000040000002d01000004000000020101001c000000fb02f2ff0000000000009001000000cc0440002243616c6962726900000000000000000000000000000000000000000000000000040000002d010100040000002d010100040000002d010100050000000902000000020d000000320a0d00000001000400000000006d014c0120cf0800040000002d010000040000002d010000030000000000

Рисунок 7 – Алгоритм підпрограми Додати/видалити автора

0100090000032a0200000200a20100000000a201000026060f003a03574d464301000000000001007d7a0000000001000000180300000000000018030000010000006c0000000000000000000000350000006f0000000000000000000000e52700004724000020454d4600000100180300001200000002000000000000000000000000000000bf120000121a0000cb0000001a010000000000000000000000000000f8180300904d0400160000000c000000180000000a00000010000000000000000000000009000000100000006d09000090080000250000000c0000000e000080250000000c0000000e000080120000000c00000001000000520000007001000001000000a4ffffff00000000000000000000000090010000000000cc04400022430061006c006900620072006900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100009b110010000000649e1100e49b1100e4506032649e11005c9b110010000000cc9c1100489e11008a4f6032649e11005c9b1100200000006a4555315c9b1100649e110020000000ffffffffec23dc0017465531ffffffffffff0180ffff01800fff0180ffffffff00000000000800000008000030f1110001000000000000005802000025000000372e9001cc00020f0502020204030204ef0200a07b20004000000000000000009f00000000000000430061006c006900620072000000000000000000249c11000dea5431b0d71132849f1100909b11001e504d310600000001000000cc9b1100cc9b11003d524b3106000000f49b1100ec23dc006476000800000000250000000c00000001000000250000000c00000001000000250000000c00000001000000180000000c0000000000000254000000540000000000000000000000350000006f000000010000008d5c8740163687400000000057000000010000004c0000000400000000000000000000006d090000920800005000000020000e003600000046000000280000001c0000004744494302000000ffffffffffffffff6d09000091080000000000004600000014000000080000004744494303000000250000000c0000000e000080250000000c0000000e0000800e000000140000000000000010000000140000000400000003010800050000000b0200000000050000000c024d016d01040000002e0118001c000000fb020200010000000000bc02000000cc0102022253797374656d0000000000000000000000000000000000000000000000000000040000002d010000040000002d01000004000000020101001c000000fb02f2ff0000000000009001000000cc0440002243616c6962726900000000000000000000000000000000000000000000000000040000002d010100040000002d010100040000002d010100050000000902000000020d000000320a0d00000001000400000000006d014c0120cf0800040000002d010000040000002d010000030000000000

Рисунок 8 – Алгоритм підпрограми Додати/видалити ПЗ

0100090000032a0200000200a20100000000a201000026060f003a03574d464301000000000001007d7a0000000001000000180300000000000018030000010000006c0000000000000000000000350000006f0000000000000000000000e52700004724000020454d4600000100180300001200000002000000000000000000000000000000bf120000121a0000cb0000001a010000000000000000000000000000f8180300904d0400160000000c000000180000000a00000010000000000000000000000009000000100000006d09000090080000250000000c0000000e000080250000000c0000000e000080120000000c00000001000000520000007001000001000000a4ffffff00000000000000000000000090010000000000cc04400022430061006c006900620072006900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100009b110010000000649e1100e49b1100e4506032649e11005c9b110010000000cc9c1100489e11008a4f6032649e11005c9b1100200000006a4555315c9b1100649e110020000000ffffffffec23dc0017465531ffffffffffff0180ffff01800fff0180ffffffff00000000000800000008000030f1110001000000000000005802000025000000372e9001cc00020f0502020204030204ef0200a07b20004000000000000000009f00000000000000430061006c006900620072000000000000000000249c11000dea5431b0d71132849f1100909b11001e504d310600000001000000cc9b1100cc9b11003d524b3106000000f49b1100ec23dc006476000800000000250000000c00000001000000250000000c00000001000000250000000c00000001000000180000000c0000000000000254000000540000000000000000000000350000006f000000010000008d5c8740163687400000000057000000010000004c0000000400000000000000000000006d090000920800005000000020000e003600000046000000280000001c0000004744494302000000ffffffffffffffff6d09000091080000000000004600000014000000080000004744494303000000250000000c0000000e000080250000000c0000000e0000800e000000140000000000000010000000140000000400000003010800050000000b0200000000050000000c024d016d01040000002e0118001c000000fb020200010000000000bc02000000cc0102022253797374656d0000000000000000000000000000000000000000000000000000040000002d010000040000002d01000004000000020101001c000000fb02f2ff0000000000009001000000cc0440002243616c6962726900000000000000000000000000000000000000000000000000040000002d010100040000002d010100040000002d010100050000000902000000020d000000320a0d00000001000400000000006d014c0120cf0800040000002d010000040000002d010000030000000000

Рисунок 9 – Алгоритм підпрограми Пошук ПЗ з а датою

0100090000032a0200000200a20100000000a201000026060f003a03574d464301000000000001007d7a0000000001000000180300000000000018030000010000006c0000000000000000000000350000006f0000000000000000000000e52700004724000020454d4600000100180300001200000002000000000000000000000000000000bf120000121a0000cb0000001a010000000000000000000000000000f8180300904d0400160000000c000000180000000a00000010000000000000000000000009000000100000006d09000090080000250000000c0000000e000080250000000c0000000e000080120000000c00000001000000520000007001000001000000a4ffffff00000000000000000000000090010000000000cc04400022430061006c006900620072006900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100009b110010000000649e1100e49b1100e4506032649e11005c9b110010000000cc9c1100489e11008a4f6032649e11005c9b1100200000006a4555315c9b1100649e110020000000ffffffffec23dc0017465531ffffffffffff0180ffff01800fff0180ffffffff00000000000800000008000030f1110001000000000000005802000025000000372e9001cc00020f0502020204030204ef0200a07b20004000000000000000009f00000000000000430061006c006900620072000000000000000000249c11000dea5431b0d71132849f1100909b11001e504d310600000001000000cc9b1100cc9b11003d524b3106000000f49b1100ec23dc006476000800000000250000000c00000001000000250000000c00000001000000250000000c00000001000000180000000c0000000000000254000000540000000000000000000000350000006f000000010000008d5c8740163687400000000057000000010000004c0000000400000000000000000000006d090000920800005000000020000e003600000046000000280000001c0000004744494302000000ffffffffffffffff6d09000091080000000000004600000014000000080000004744494303000000250000000c0000000e000080250000000c0000000e0000800e000000140000000000000010000000140000000400000003010800050000000b0200000000050000000c024d016d01040000002e0118001c000000fb020200010000000000bc02000000cc0102022253797374656d0000000000000000000000000000000000000000000000000000040000002d010000040000002d01000004000000020101001c000000fb02f2ff0000000000009001000000cc0440002243616c6962726900000000000000000000000000000000000000000000000000040000002d010100040000002d010100040000002d010100050000000902000000020d000000320a0d00000001000400000000006d014c0120cf0800040000002d010000040000002d010000030000000000

Рисунок 10 – Алгоритм підпрограми Пошук ПЗ за назвою

0100090000032a0200000200a20100000000a201000026060f003a03574d464301000000000001007d7a0000000001000000180300000000000018030000010000006c0000000000000000000000350000006f0000000000000000000000e52700004724000020454d4600000100180300001200000002000000000000000000000000000000bf120000121a0000cb0000001a010000000000000000000000000000f8180300904d0400160000000c000000180000000a00000010000000000000000000000009000000100000006d09000090080000250000000c0000000e000080250000000c0000000e000080120000000c00000001000000520000007001000001000000a4ffffff00000000000000000000000090010000000000cc04400022430061006c006900620072006900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100009b110010000000649e1100e49b1100e4506032649e11005c9b110010000000cc9c1100489e11008a4f6032649e11005c9b1100200000006a4555315c9b1100649e110020000000ffffffffec23dc0017465531ffffffffffff0180ffff01800fff0180ffffffff00000000000800000008000030f1110001000000000000005802000025000000372e9001cc00020f0502020204030204ef0200a07b20004000000000000000009f00000000000000430061006c006900620072000000000000000000249c11000dea5431b0d71132849f1100909b11001e504d310600000001000000cc9b1100cc9b11003d524b3106000000f49b1100ec23dc006476000800000000250000000c00000001000000250000000c00000001000000250000000c00000001000000180000000c0000000000000254000000540000000000000000000000350000006f000000010000008d5c8740163687400000000057000000010000004c0000000400000000000000000000006d090000920800005000000020000e003600000046000000280000001c0000004744494302000000ffffffffffffffff6d09000091080000000000004600000014000000080000004744494303000000250000000c0000000e000080250000000c0000000e0000800e000000140000000000000010000000140000000400000003010800050000000b0200000000050000000c024d016d01040000002e0118001c000000fb020200010000000000bc02000000cc0102022253797374656d0000000000000000000000000000000000000000000000000000040000002d010000040000002d01000004000000020101001c000000fb02f2ff0000000000009001000000cc0440002243616c6962726900000000000000000000000000000000000000000000000000040000002d010100040000002d010100040000002d010100050000000902000000020d000000320a0d00000001000400000000006d014c0120cf0800040000002d010000040000002d010000030000000000

Рисунок 11 – Алгоритм підпрограми Пошук ПЗ за автором

Програма складається з двох частин:

бази даних, яку обслуговує сервер MySQL;

клієнтської частини, яка надає графічний інтерфейс, реалізованої в вигляді html форм, що обробляються php.

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

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

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

Якщо натиснути кнопку “Додати/видалити дистрибутив”, відкриється форма, в якій необхідно буде заповнити наступні поля: Назва, Версія, ftp-адреса. Можна переглянути наявні дистрибутиви та видалити необхідні, вибравши їх та натиснувши кнопку “Видалити дистрибутив”. З кожної підпорядкованої форми перехід до головного меню здійснюється натисканням на посилання “Повернутися на головну сторінку”Аналогічно можна додавати інформацію про нового автора, натиснувши кнопку “Додати/видалити автора” в головному меню. З’явиться форма реєстрації нового автора, до якої треба буде занести ім”я, по-батькові, та прізвише автора, його email-адресу. Також можна переглянути наявних авторів та видалити необхідні, вибравши їх та натиснувши кнопку “Видалити автора”. Для реєстрації програмного забезпечення потрібно буде натиснути на кнопку «Додати/видалити ПЗ» в головному меню, відкриється форма «Додати/видалити ПЗ», до якої необхідно буде занести назву, версію, дату створення, ліцензію та ftp-адресу вихідних файлів програми. Також потрібно обрати автора та дистрибутив із вже наявних у базі даних. Також можна переглянути наявне програмне забезпечення та видалити необхідне, вибравши його та натиснувши кнопку “Видалити ПЗ”.

Ряд форм, які реалізують пошук даних побудовані у вигляді полів введення параметрів пошуку та кнопки “Пошук”. Результати пошуку повертаються у вигляді таблиці.

      2.5 Розробка фізичної моделі бази даних «Репозиторій ПЗ»

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

Таблиця 3 – фізична модель БД репозиторію програмного забезпечення

Ім’я фізичної моделі

Тип

Формат поля

Ключ в ЛМ

Індек-сація

Обов. поле

Розробник

Номер розробника

Лічильник

Довге ціле

PK

IK1

Так

Прізвище

Текстовий

20

IK2

Так

Ім’я

Текстовий

20

IK2

Так

Побатькові

Текстовий

20

IK2

Так

Адреса елктронної пошти

Текстовий

50

Ні

ПЗ

Назва ПЗ

Текстовий

20

PK

IK1

Так

Версія ПЗ

Текстовий

10

PK

IK1

Так

Номер розробника

Числовий

Довге ціле

FK1

Так

Номер дистрибутива

Числовий

Довге ціле

FK2

Ні

Дата випуску

Дата/час

Короткий формат дати

Ні

Ліцензія

Текстовий

20

Так

ftp-адреса вихідних файлів ПЗ

Текстовий

50

AK

Так

Дистрибутив

Назва

Текстовий

20

AK1

IK2

Так

Версія

Текстовый

20

AК1

IK2

Так

Номер дистрибутиву

Лічилькик

Довге ціле

PK

IK1

Так

ftp-адреса вихідних файлів

Текстовий

50

AK2

Так

На основі побудованої логічної моделі даних репозиторію побудуємо фізичну модель в середовищі MySQL. Створимо таблиці “ПЗ”, “Дистрибутив”, “Розробник” .

Визначення таблиці “Розробник”:

CREATE TABLE rozrobnuk (

first_name varchar(30) NOT NULL default '',

last_name varchar(30) NOT NULL default '',

surname varchar(30) NOT NULL default '',

id int(11) NOT NULL auto_increment,

addr varchar(30) default NULL,

PRIMARY KEY (id),

UNIQUE KEY (first_name,last_name,surname)

) ;

Визначення таблиці “Дистрибутив”:

CREATE TABLE distr (

name varchar(30) NOT NULL default '',

version varchar(30) NOT NULL default '',

id int(11) NOT NULL auto_increment,

addr varchar(30) NOT NULL default '',

PRIMARY KEY (id),

UNIQUE KEY (name,version)

) ;

Визначення таблиці “ПЗ”:

CREATE TABLE PZ (

name varchar(30) NOT NULL default '',

version varchar(10) NOT NULL default '',

dev_id int(11) default 0,

distr_id int(11) default 0,

date date default NULL,

licence varchar(30) default NULL,

addr varchar(30) NOT NULL default '' UNIQUE,

PRIMARY KEY (name,version),

FOREIGN KEY (dev_id) REFERENCES dev(id)

ON DELETE SET NULL

ON UPDATE CASCADE,

FOREIGN KEY (distr_id) REFERENCES distr(id)

ON DELETE SET NULL

ON UPDATE CASCADE

) ;

Додаємо індекси:

CREATE INDEX pib ON dev(first_name,last_name,surname);

CREATE INDEX pzindex1 ON PZ(name,version);

CREATE INDEX distrindex1 ON distr(name,version);

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

Після створення фізичної моделі даних можна зробити наступні висновки:

    схема зв’язку фізичної та логічної моделі ідентичні;

    в ході роботи була досягнута третя нормальна форма;

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

2.6 Кодування і тестування програмного забезпечення

База даних “Репозиторій ПЗ” була розроблена у середовищі MySQL + php. Вона реалізована за допомогою таблиць, форм, запитів та звітів. Також для нормального функціонування бази даних було написано програмний код, який представлено у Додатку А.

При тестуванні бази даних “Репозиторій ПЗ ” не було виявлено помилок в роботі. Для запуску бази даних , використовуючи браузер mozilla, заходимо на адресу http://217.77.222.218. При запуску бази даних відкрилася форма “Репозиторій ПЗ”, в якій було натиснуто кнопку “Додати/видалити автора”, потім відкрилася форма “Додати/видалити автора”, в якій було заповнено поля ім”я, по-батькові, та прізвише автора, його email-адресу значеннями (імя1,побатькові1,прізвище1,name1@mail.ru). Після натискання кнопки “Додати автора” внесені дані з’являються в таблиці нижче. Відповідне звернення фіксується в журналі бази даних. Повторюємо дану операцію 4 рази для різних авторів. Далі вибираємо будь-якого автора з таблиці нижче та натискаємо кнопку “Видалити автора”. Вибраний автор зникає з таблиці. Для повернення до форми “Репозиторій ПЗ” натискаємо кнопку “Повернутися на головну сторінку”.

Також у формі “Репозиторій ПЗ” було натиснуто кнопку “Додати/видалити дистрибутив”, після цього відкрилася форма “Додати/видалити дистрибутив”, де було заповнено поля Назва, Версія, ftp-адреса. Після натискання кнопки “Додати дистрибутив” дані про внесений до бази даних дистрибутив з’являються в таблиці нижче “Наявні дистрибутиви”. Повторюємо вищевказані операції 3 рази. Введені дистрибутиви з’являються в таблиці “Наявні дистрибутиви”. Вибираємо рядок таблиці та натискаємо кнопку “Видалити дистрибутив”. Вибраний рядок (а отже і дистрибутив) зникає з таблиці. Для повернення до форми “Репозиторій ПЗ” натискаємо кнопку “Повернутися на головну сторінку”. Відкривається форма “Репозиторій ПЗ”.

Натиснувши в формі “ Репозиторій ПЗ ” кнопку “Додати/видалити ПЗ”, відкрилася форма «Додати/видалити ПЗ», в якій було заповнено поля назву, версію, дату створення, ліцензію та ftp-адресу вихідних файлів програми. Також обрано автора та дистрибутив із вже наявних у базі даних. Дані про внесене ПЗ з’являються у таблиці “Наявне ПЗ”. Повторюємо операцію 5 разів. Інформація про все ПЗ введене в базу з’являється в таблиці “Наявне ПЗ”. З таблиці вибираємо 2 рядка, які, відповідно, описують два екземпляра ПЗ. Після натискання кнопки “Видалити ПЗ” вибрані рядки зникають з таблиці “Наявне ПЗ”. Для повернення до форми “Репозиторій ПЗ” натискаємо кнопку “Повернутися на головну сторінку”.

Натиснувши в формі “ Репозиторій ПЗ ” кнопки “Пошук ПЗ за датою”, “Пошук ПЗ за автором”, “Пошук ПЗ за назвою”, “Пошук автора”, “Звіт” було виведено запит за відповідним критерієм. Після введення необхідного критерію з’являвся звіт, у якому було представлено кортежі бази даних, які задовольняють заданий критерій.

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

Висновки

Підчас розробки проекту бази даних „Репозиторій ПЗ” були проведені обстеження та детальний аналіз предметної області, були створені функціональна, концептуальна, логічна та фізична моделі бази даних. Також були детально проаналізовані усі елементи, з яких складається даний програмний продукт та залежності між ними. Для розробки даного програмного продукту було використано MySQL та php – відкриті, прозорі, безкоштовні та переносимі рішення.

Створена електронна база даних значно підвищує ефективність праці у процесі обліку програмного забезпечення, оскільки дозволяє швидко реалізувати можливості пошуку ПЗ: за автором, назвою, датою створення; можливість реєстрації дистрибутива, а саме фіксування таких даних, як: назва, версія, ftp-адреса дистрибутива; можливість реєстрації автора, а саме занесення до бази даних такої інформації: ім”я, по-батькові, та прізвише автора, його email-адресу; можливість реєстрації програмного забезпечення, а саме занесення до бази даних такої інформації: назву, версію, дату створення, ліцензію та ftp-адресу вихідних файлів програми, автора та дистрибутив із вже наявних у базі даних.; можливість редагування інформації про вже зареєстроване програмне забезпечення; можливість переглядати статистичні дані про все наявне програмне забезпечення.

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

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

Список використаних джерел

    Гарсиа-Молина, Гектор, Ульман, Джеффи, Д., Уидом, Джениффер. Системы баз данных. Полний курс.: Пер. с англ. – М.: Издательский дом «Вильямс», 2004. -1088 с.

    Кирилов В.В. Основи проектирования реляционних баз даних. Учебное пособие. –СПб.:ИТМО, 1994. – 90 с.

Додаток А – Текст програми

index.php

<?php include ("header.inc.html"); echo myheader(); ?>

<?php

function myhref($href) {

$style = " style=\"border: 1px solid black; cursor:pointer\"";

$href = " onclick=\"location.href='$href'\"";

$rollover = " onmouseover=\"this.style.background='#c0c0c0'\" onmouseout=\"this.style.background='#d3d3d3'\"";

return $style.$rollover.$href;

}

?>

<table>

<tr class=H2 bgcolor="#c0c0c0">

<td>Репозиторій ]=</td>

</tr>

<tr class="H3" bgcolor="#c0c0c0">

<td>Пошук</td>

<td align="center">Адміністрування</td>

</tr>

<tr onmouseover="this.style.backgroundcolor=lightgreen";>

<td>ПЗ по даті</td>

<td>ПЗ</td>

</tr>

<tr>

<td>ПЗ по автору</td>

<td>Дістр</td>

</tr>

<tr>

<td>ПЗ по назві</td>

<td>Автор</td>

</tr>

<tr>

<td>Автора по імені</td>

<td>&nbsp;</td>

</tr>

<tr>

<td>Все!</td>

<td>

</tr>

</table>

<?php $printLink=1; include("footer.inc.html"); ?>

header.inc.html

<?php

function myheader( $title="Репозиторій" ) {

$header = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n";

$header = $header . "<html>\n<head>\n<title>".$title."</title>\n";

$header = $header . "<link rel=\"stylesheet\" type=\"text/css\" href=\"/styles.css\">\n";

$header = $header . "</head>\n\n<body bgcolor=\"#d3d3d3\"\n>";

return $header;

}

?>

footer.inc.html

<table cellpadding="10" cellspacing="10" border=0 class=foo>

<tr valign="middle">

<td>

<?php

if ( !$printLink == 1 ) echo "<a href=/index.php>=&nbsp;Повернутися на головну сторінку&nbsp;=</a><br><br><br>";

?>

[ June, 03..04, 2007 (c) ]

</td>

</tr>

</table>

</body>

</html>

styles.css

a {

font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;

color: Navy;

font-size: 9pt;

text-decoration: none;

}

a:hover { color: #ff0000; }

.H2 {

font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;

font-size: 16pt;

font-weight: bold;

vertical-align: middle;

}

.H3 {

font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;

font-size: 12pt;

font-weight: bold;

vertical-align: middle;

}

.text {

font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;

font-size: 10pt;

}

.foo {

font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;

font-size: 8pt;

color: #A9A9A9;

}

db.php

<?php

class db {

var $dbl;

var $res;

function db($host="localhost",$user="lus",$pass="1")

{

$this->dbl = mysql_pconnect($host,$user,$pass);

mysql_select_db("lus", $this->dbl);

}

function query($q)

{

$this->res = mysql_query($q, $this->dbl);

return $this->res;

}

function num_rows()

{

return mysql_num_rows($this->res);

}

function fetch_row()

{

return mysql_fetch_row($this->res);

}

function fetch_array()

{

return mysql_fetch_array($this->res,MYSQL_ASSOC);

}

function fetch_object()

{

return mysql_fetch_object($this->res);

}

function insert_id()

{

return mysql_insert_id($this->dbl);

}

function is_result()

{

return $this->res ? 1 : 0;

}

}

?>

forms/afftar.html

<form action="../scripts/afftar.php"> <table class=text> <tr> <td colspan=2> </tr> <tr> <td>Ім'я</td> <td><input type="text" name="fname" size="15" maxlength="30"></td> </tr> <tr> <td>По-батькові:</td> <td><input type="text" name="lname" size="15" maxlength="30"></td> </tr> <tr> <td>Прізвище:</td> <td><input type="text" name="sname" size="15" maxlength="30"></td> </tr> <tr> <td>email:</td> <td><input type="text" name="address" size="15" maxlength="30"></td> </tr> <tr> <td> </tr> </table> </form>

scripts/afftar.php

<?php include("../header.inc.html"); echo myheader("Автор") ?> <div> <?php require "../db.php"; include "../forms/afftar.html"; $db = new db(); if(isset($_GET['add'])) { $fn = $_GET['fname']; $ln = $_GET['lname']; $sn = $_GET['sname']; $a = $_GET['address']; $db->query("INSERT INTO dev(first_name, last_name, surname, addr) VALUES ('$fn','$ln','$sn','$a') "); } elseif(isset($_GET['del'])) { foreach($_GET['delarr'] as $arr){ $db->query("DELETE FROM dev WHERE id = $arr "); } } ?> <div class=H3>Зареєстровані автори</div> <form action=<?php print $PHP_SELF; ?> > <table style="border: 1px solid black; " cellpadding=3 cellspacing=1 class=text> <tr bgcolor="#c0c0c0"> <td>&nbsp</td> <td> <td> <td> <td> </tr> <?php $db->query("SELECT id, first_name,last_name,surname,addr FROM dev"); while($arr=$db->fetch_array()){ echo "<tr>"; foreach($arr as $key=>$val){ if($key=='id') $val = "<input type=checkbox name=delarr[] value=$val>"; if ($key=='addr') $val = "<a href=\"mailto:$val\">$val</a>"; echo "<td bgcolor=\"#dcdcdc\"> } echo "</tr>"; } ?> <tr><td colspan="5"> </table> </form> </div> <?php include("../footer.inc.html"); ?>

forms/distr.html

<form action="../scripts/distr.php">

<table class=text>

<tr>

<td colspan=2>

</tr>

<tr>

<td>Ім'я</td>

<td><input type="text" name="name" size="15" maxlength="30"></td>

</tr>

<tr>

<td>Версія:</td>

<td><input type="text" name="version" size="15" maxlength="30"></td>

</tr>

<tr>

<td>Адрес:</td>

<td><input type="text" name="address" size="15" maxlength="30"></td>

</tr>

<tr>

<td><input type="sub>mit" name="add" value="Додати distr"></td>

<td><input type="sub>mit" name="del" value="Видалити distr"></td>

</tr>

</table>

</form>

scripts/distr.php

<?php include("../header.inc.html"); echo myheader("Дістр") ?> <div> <?php include "../forms/distr.html"; require ("../db.php"); $db = new db(); if(isset($_GET['add'])) { $n = $_GET['name']; $v = $_GET['version']; $a = $_GET['address']; $db->query("INSERT INTO distr(name, version, addr) VALUES ('$n','$v','$a') "); } elseif(isset($_GET['del'])) { foreach($_GET['delarr'] as $arr){ $db->query("DELETE FROM distr WHERE id = $arr "); } } ?> <div class=H3>Наявні дистрибутиви</div> <form action=<?php print $PHP_SELF; ?> > <table style="border: 1px solid black; " cellpadding=3 cellspacing=1 class=text> <tr bgcolor="#c0c0c0"> <td> <td> <td> <td> </tr> <?php $db->query("SELECT id,name,version,addr FROM distr"); while($arr=$db->fetch_array()){ echo "<tr>"; foreach($arr as $key=>$val) { if ($key=='id') $val = "<input type=checkbox name=delarr[] value=$val>"; if ($key=='addr') $val = "<a href=\"ftp://$val\">$val</a>"; echo "<td bgcolor=\"#dcdcdc\"> } echo "</tr>"; } ?> <tr><td> </table> </form> </div> <?php include("../footer.inc.html"); ?>

forms/pz.html

<<form action="../scripts/pz.php">

<table class=text> <tr> <td colspan=2> </tr> <tr> <td>Назва</td> <td><input type="text" name="name" size="15" maxlength="30"></td> </tr> <tr> <td>Версія:</td> <td><input type="text" name="version" size="15" maxlength="30"></td> </tr> <tr> <td>Дата:</td> <td><input type="text" name="date" size="15" maxlength="30"></td> </tr> <tr> <td>Дистрибутив:</td> <td> <select name=distr> <?php $db->query("SELECT id,name,version FROM distr"); while ( $arr = $db->fetch_array() ) { $tmp = $arr['id']; $tmpname = $arr['name']." - ".$arr['version']; echo "<option value=$tmp>$tmpname"; } ?> </select> </td> </tr> <tr> <td>Автор:</td> <td> <select name=author> <?php $db->query("SELECT id,first_name,surname FROM dev"); while($arr=$db->fetch_array()) { $tmp = $arr['id']; $tmpname = $arr['first_name']." ".$arr['surname']; echo "<option value=$tmp>$tmpname"; } ?> </select> </td> </tr> <tr> <td>Ліцензія:</td> <td><input type="text" name="licence" size="15" maxlength="30"></td> </tr> <tr> <td>ftp-адреса:</td> <td><input type="text" name="address" size="15" maxlength="30"></td> </tr> <tr> <td colspan=2> </tr> </table> </form>

scripts/pz.php

<?php include("../header.inc.html"); echo myheader("ПЗ") ?> <?php require ("../db.php"); $db = new db(); ?> <div> <?php include "../forms/pz.html"; if(isset($_GET['add'])) { $n = $_GET['name']; $v = $_GET['version']; $d = $_GET['date']; $l = $_GET['licence']; $n_d=$_GET['distr']; $n_a=$_GET['author']; $a = $_GET['address']; $db->query("INSERT INTO pz(name, version, dev_id, distr_id, date, licence, addr) VALUES ('$n','$v', '$n_a', '$n_d', DATE '$d', '$l', '$a') "); } elseif(isset($_GET['del'])) { foreach($_GET['delarr'] as $arr){ $tmp = explode (":",$arr); $db->query("DELETE FROM pz WHERE name = '$tmp[0]' AND version = '$tmp[1]' "); } } ?> <div class=H3>Наявне ПЗ</div> <form action=<?php print $PHP_SELF; ?> > <table style="border: 1px solid black" cellpadding=3 cellspacing=1 class=text> <tr bgcolor="#c0c0c0" class=> <td>&nbsp;</td> <td> <td> <td> <td> <td> <td> <td> <td> </tr> <?php $db->query("SELECT pz.name, pz.version,pz.date,pz.licence,pz.addr, dev.first_name, dev.surname,distr.name AS name1, distr.addr AS address FROM pz,dev, distr WHERE (pz.dev_id=dev.id AND pz.distr_id=distr.id )"); while($arr=$db->fetch_array()){ echo "<tr>"; $tmp=$arr['name'].":".$arr['version']; $val = "<input type=checkbox name=delarr[] value=\"$tmp\">"; echo "<td bgcolor=\"#dcdcdc\"> foreach($arr as $key=>$val){ if (($key=='addr') || ($key=='address')) $val = "<a href=\"ftp://$val\">$val</a>"; echo "<td bgcolor=\"#dcdcdc\"> } echo "</tr>"; } ?> <tr><td colspan=10> </table> </form> </div> <?php include("../footer.inc.html"); ?>

if(isset($_GET['add'])) {

$n = $_GET['name'];

$v = $_GET['version'];

$d = $_GET['date'];

$l = $_GET['licence'];

$n_d=$_GET['distr'];

$n_a=$_GET['author'];

$a = $_GET['address'];

$db->query("INSERT INTO pz(name, version, dev_id, distr_id, date, licence, addr)

VALUES ('$n','$v', '$n_a', '$n_d', DATE '$d', '$l', '$a') ");

} elseif(isset($_GET['del'])) {

$db->query("DELETE FROM distr

WHERE name = '$n'

AND version = '$v' ");

}

?>

</div>

<?php include("../footer.inc.html"); ?>

forms/sAName.html

<form action="../scripts/sAName.php">

<table class=text>

<tr>

<td colspan=2>

</tr>

<tr>

<td>Прізвище автора:</td>

<td><input type="text" name="surname" maxlength="60"></td>

</tr>

<tr>

<td colspan=2>

<input type="sub>mit" name="search" value="Пошук!">

</td>

</tr>

</table>

</form>

scritps/sAName.php

<?php include("../header.inc.html"); echo myheader("Пошук по автору") ?>

<div>

<?php

include "../forms/sAName.html";

$name = $_GET['surname'];

require ("../db.php");

$db =new db();

##########

$db->query("SELECT dev.first_name, dev.last_name, dev.surname,dev.addr

FROM dev

WHERE dev.surname = \"$name\" ");

?>

<table style="border: 1px solid black; " cellpadding=3 cellspacing=1 class=text>

<tr bgcolor="#c0c0c0">

<td>

<td>

<td>

<td>

</tr>

<?php

while($arr=$db->fetch_array()){

echo "<tr>";

foreach($arr as $key=>$val)

echo "<td bgcolor=\"#dcdcdc\" align=\"center\">".$val."</td>";

echo "</tr>";

}

?>

</table>

</div>

<?php include("../footer.inc.html"); ?>

forms/sAuthor.html

<form action="../scripts/sAuthor.php">

<table class=text>

<tr>

<td colspan=2>

</tr>

<tr>

<td>Ім'я:</td>

<td><input type="text" name="first_name" maxlength="60"></td>

</tr>

<tr>

<td>Прізвище:</td>

<td><input type="text" name="surname" maxlength="60"></td>

</tr>

<tr>

<td colspan=2>

<input type="sub>mit" name="add" value="Пошук!">

</td>

</tr>

</table>

</form>

scritps/sAuthor.php

<?php include("../header.inc.html"); echo myheader("Пошук по автору") ?>

<div>

<?php

include "../forms/sAuthor.html";

$firstname = $_GET['first_name'];

$surname = $_GET['surname'];

require ("../db.php");

$db =new db();

##########

$db->query("SELECT pz.name, pz.version,pz.date,pz.licence,pz.addr, dev.first_name, dev.surname,dev.addr AS address

FROM pz,dev

WHERE (pz.dev_id=dev.id )

AND (dev.first_name = \"$firstname\")

AND (dev.surname = \"$surname\") ");

?>

<table style="border: 1px solid black; " cellpadding=3 cellspacing=1 class=text>

<tr bgcolor="#c0c0c0">

<td>

<td>

<td>

<td>

<td>

<td>

<td>

</tr>

<?php

while($arr=$db->fetch_array()){

echo "<tr>";

foreach($arr as $key=>$val)

echo "<td bgcolor=\"#dcdcdc\" align=\"center\">".$val."</td>";

echo "</tr>";

}

?>

</table>

</div>

<?php include("../footer.inc.html"); ?>

forms/sDate.html

<form action="../scripts/sDate.php">

<table class=text>

<tr>

<td colspan=2>

</tr>

<tr>

<td>Дата:</td>

<td>

&nbsp;&nbsp;&nbsp; з

<select name=from_day>

<?php

echo "<option selected value=01>01\n";

for ($i=2; $i<=31; $i++) {

echo "<option value=";

if ($i<10)

echo "0".$i.">"."0".$i;

else

echo $i.">".$i;

echo "\n";

}

?>

</select>

<select name=from_month>

<option selected value=01>січень

<option value=02>лютий

<option value=03>березень

<option value=04>квітень

<option value=05>травень

<option value=06>червень

<option value=07>липень

<option value=08>серпень

<option value=09>вересень

<option value=10>жовтень

<option value=11>листопад

<option value=12>грудень

</select>

<select name=from_year>

<?php

echo "<option selected value=1970>1970\n";

for ($i=1971; $i<=2010; $i++) {

echo "<option value=".$i.">".$i."\n";

}

?>

</select>

&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp; по

<select name=to_day>

<?php

echo "<option selected value=01>01\n";

for ($i=2; $i<=31; $i++) {

echo "<option value=";

if ($i<10)

echo "0".$i.">"."0".$i;

else

echo $i.">".$i;

echo "\n";

}

?>

</select>

<select name=to_month>

<option selected value=01>січень

<option value=02>лютий

<option value=03>березень

<option value=04>квітень

<option value=05>травень

<option value=06>червень

<option value=07>липень

<option value=08>серпень

<option value=09>вересень

<option value=10>жовтень

<option value=11>листопад

<option value=12>грудень

</select>

<select name=to_year>

<?php

echo "<option selected value=1970>1970\n";

for ($i=1971; $i<=2010; $i++) {

echo "<option value=".$i.">".$i."\n";

}

?>

</select>

&nbsp;&nbsp;&nbsp;

<input type="sub>mit" name="add" value="Пошук!">

</td>

</table>

</form>

scritps/sDate.php

<?php include("../header.inc.html"); echo myheader("Пошук по даті") ?>

<div>

<?php

include "../forms/sDate.html";

require ("../db.php");

$db =new db();

$fromDate = $_GET['from_year'].'-'.$_GET['from_month'].'-'.$_GET['from_day'];

$toDate = $_GET['to_year'].'-'.$_GET['to_month'].'-'.$_GET['to_day'];

$db->query("SELECT pz.name, pz.version,pz.date,pz.licence,pz.addr, dev.first_name, dev.surname,distr.name AS distr

FROM pz,dev,distr

WHERE (pz.dev_id=dev.id AND pz.distr_id=distr.id)

AND (pz.date > DATE \"$fromDate\")

AND (pz.date < DATE \"$toDate\") ");

?>

<div class=H3>Звіт ПЗ з <?php echo $_GET['from_day'].'.'.$_GET['from_month'].'.'.$_GET['from_year'].'р.'; ?>

по <?php echo $_GET['to_day'].'.'.$_GET['to_month'].'.'.$_GET['to_year'].'р.'; ?>:</div>

<table style="border: 1px solid black; " cellpadding=3 cellspacing=1 class=text>

<tr bgcolor="#c0c0c0">

<td>

<td>

<td>

<td>

<td>

<td>

<td>

</tr>

<?php

while($arr=$db->fetch_array()){

echo "<tr>";

foreach($arr as $key=>$val)

echo "<td bgcolor=\"#dcdcdc\" align=\"center\">".$val."</td>";

echo "</tr>";

}

?>

</table>

</div>

<?php include("../footer.inc.html"); ?>

forms/sName.html

<form action="../scripts/sName.php">

<table class="text">

<tr>

<td colspan=2>

</tr>

<tr>

<td>Назва ПЗ:</td>

<td><input type="text" name="name" maxlength="60"></td>

</tr>

<tr>

<td colspan=2>

<input type="sub>mit" name="search" value="Пошук!">

</td>

</tr>

</table>

</form>

scripts/sName.php

<?php include("../header.inc.html"); echo myheader("Пошук по назві") ?>

<div>

<?php

include "../forms/sName.html";

$name = $_GET['name'];

require ("../db.php");

$db =new db();

##########

$db->query("SELECT pz.name, pz.version,pz.date,pz.licence,pz.addr, dev.first_name,

dev.surname,distr.name AS name1, distr.addr AS address

FROM pz,dev, distr

WHERE (pz.dev_id=dev.id AND pz.distr_id=distr.id )

AND (pz.name = \"$name\") ");

?>

<table style="border: 1px solid black" cellpadding=3 cellspacing=1 class=text>

<tr bgcolor="#c0c0c0" class=>

<td>

<td>

<td>

<td>

<td>

<td>

<td>

<td>

</tr>

<?php

while($arr=$db->fetch_array()){

echo "<tr>";

foreach($arr as $key=>$val)

echo "<td bgcolor=\"#dcdcdc\" align=\"center\">".$val."</td>";

echo "</tr>";

}

?>

</table>

</div>

<?php include("../footer.inc.html"); ?>

scripts/sAll.php

<?php include("../header.inc.html"); echo myheader("Все!") ?>

<div>

<?php

require ("../db.php");

$db =new db();

$db->query("SELECT pz.name, pz.version,pz.date,pz.licence,pz.addr, dev.first_name,

dev.last_name, dev.surname,dev.addr AS address, distr.name AS distr,

distr.version AS vers, distr.addr AS distr_addr

FROM pz,dev,distr

WHERE pz.dev_id=dev.id AND pz.distr_id=distr.id ");

?>

<div class=H2>Звіт по базі даних</div><br><br>

<table style="border: 1px solid black; " cellpadding=3 cellspacing=1 class=text>

<tr bgcolor="#c0c0c0">

<td>

<td>

<td>

<td>

<td>

<td>

<td>

<td>

<td>

<td>

</tr>

<?php

while($arr=$db->fetch_array()){

echo "<tr>";

foreach($arr as $key=>$val)

echo "<td bgcolor=\"#dcdcdc\" align=\"center\">".$val."</td>";

echo "</tr>";

}

?>

</table>

</div>

<?php include("../footer.inc.html"); ?>

Додаток Б – Інструкція для користувача

Базу даних “Репозиторій ПЗ” реалізовано в вигляді web-додатку.Відкрити базу даних можна скориставшись посиланням http://217.77.222.218 . Після відкриття бази даних з’явиться меню(рис. 5):


Рисунок 5 – Головна форма бази даних «Репозиторій ПЗ»

За допомогою меню можна обирати необхідні операції: “Додати/видалити ПЗ”, “Додати/видалити дистрибутив”, “Додати/видалити автора”, “Пошук ПЗ за датою”, “Пошук ПЗ за автором”, “Пошук ПЗ за назвою”, “Пошук автора”, “Звіт”

Якщо потрібно додати до бази інформацію про новий дистрибутив потрібно натиснути в меню кнопку “Додати/видалити дистрибутив”, після цього зявиться вікно вказане на

рисунку 6:


Рисунок 6 –форма «Додати/видалити дистрибутив»

У вище приведеному вікні потрібно заповнити поля “Назва ”, “Версія”, “ftp-адреса”. Та натиснути кнопку “Додати дистрибутив” для додавання. Або вибрати мишкою дистрибутив з таблиці “Наявні дистрибутиви” та натиснути кнопку “Видалити відмічені” для видалення.

Якщо потрібно додати до бази інформацію про нове програмне забезпечення потрібно натиснути в меню кнопку “Додати/видалити ПЗ”, після цього зявиться вікно вказане на рисунку 7:

Рисунок 7 – форма «Додати/видалити ПЗ»

У вище приведеному вікні потрібно заповнити поля “Назва ”, “Версія”, “ftp-адреса”, “Дата”,”Ліцензія” та обрати значення з випадаючих списків “Дистрибутив” та “Автор”. Та натиснути кнопку “Додати ПЗ” для додавання. Або вибрати мишкою ПЗ з таблиці “Наявне ПЗ” та натиснути кнопку “Видалити відмічені” для видалення.

Для отримання загальної інформації по базі даних треба натиснути кнопку “Звіт” в головному меню (рис. 8)

Рисунок 8– форма «Звіт»

Для пошуку програмного забезпечення за назвою потрібно натиснути кнопку «Пошук ПЗ по назві» в головному меню. Виведеній формі (рис. 9) ввести назву ПЗ та натиснути кнопку «Пошук!» Результати пошуку отримуємо тут же.


Рисунок 9– форма «Пошук ПЗ по назві»

Для пошуку програмного забезпечення за датою потрібно натиснути кнопку «Пошук ПЗ по даті» в головному меню. Виведеній формі (рис. 10) вибрати початкову та кінцеву дату написання ПЗ, та натиснути кнопку «Пошук!» Результати пошуку отримуємо тут же.


Рисунок 10– форма «Пошук ПЗ по даті»

Для пошуку програмного забезпечення за автором потрібно натиснути кнопку «Пошук ПЗ по автору» в головному меню. Виведеній формі (рис. 11) ввести ім»я та прізвище автора ПЗ та натиснути кнопку «Пошук!» Результати пошуку отримуємо тут же.


Рисунок 11– форма «Пошук ПЗ по автору»


Рисунок12– форма «Пошук автора»

Для отримання даних про автора потрібно натиснути кнопку «Пошук автора» в головному меню. Виведеній формі (рис. 12) ввести прізвище автора ПЗ та натиснути кнопку «Пошук!» Результати пошуку отримуємо тут же.