Курсовая

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

Работа добавлена на сайт bukvasha.net: 2014-07-05

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 27.12.2024


Анотація
У даній курсовій роботі розроблена база даних, яка призначена для автоматизації процесу обліку програмного забезпечення.
Робота виконана на 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).
 SHAPE
Розробник
0.
Зберігання пакетів
Користувач
Інформація від розробника
Інформація для розробника
Інформація для користувача
Інформація від користувача
Рисунок 1 – DF-діаграма нульового рівня репозиторія програмного забезпечення

Визначаємо функції на діаграмі потоків даних 1 рівня (Рисунок 2).
 SHAPE
1.  Реєструвати нові проекти
2.  Приймати зміни до проектів
3.  Надавати інформацію про ПЗ користувачу
4.  Надавати інформацію про дистрибутив користувачу
5.  Надавати звіт користувачу
6. Реєструвати розробника
Ідентифікаційний код
Інформація про проект
Звіт про реєстрацію
Ідентифікаційний код
Зміни
Звіт про зміни
Запит  ПЗ
Інформація про ПЗ
Запит дистрибутиву
Інформація про дистрибутив
Ідентифікаційний код
Список проектів
Розробник
Параметри виборки

 
Рисунок 2 – DF-діаграма першого рівня репозиторія програмного забезпечення
Подпись: Рисунок 2 – DF-діаграма першого рівня репозиторія програмного забезпечення
 

Інформацію про потоки даних заносимо в таблицю  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).
 SHAPE
Розробник
Адреса
Код розробника
Розробив
ФИО
ПЗ
Рік випуску
Версія ПЗ
Версія сумісного дистрибутиву
Ліцензія
Назва ПЗ
Містить
Дистрибутив
Версія
Назва
Рисунок 3 - діаграма «сутність-зв’язок» репозиторія ПЗ
ftp-адреса вихідних файлів ПЗ
ftp-адреса вихідних файлів
1
М
1
N

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). Якщо за даним атрибутом можна впорядкувати інформацію, то цей атрибут є індексним ключом.
                                                                                    ПЗ
Назва   ПЗ    S  PK  IK1
Версія ПЗ    S  PK  IK1
№розробника  N  IK FK
№дистрибутива N   IK  FK
Дата випуску    D Null
Ліцензія      S  
ftp-адреса вихідних
 файлів ПЗ            S        AK
 
Розробник                                                                            
Ф            S  AK   IK1
И            S  AK   IK1
О            S  AK   IK1
Адреса   S   Null
№розробника N IK PK
 
 

                                          ПЗ
 

               
                                                                                 Дистрибутив
         
Назва      S        AK    IK1
Версія     S        AK    IK1
ftp-адреса вихідних файлів  S
№дистрибутива   N  IK  PK
 


                                                                                                    
 

Рисунок 4 – Логічна модель бази даних «Репозиторій ПЗ».
2.4 Розробка алгоритмів і графічних інтерфейсів програмних модулів
Алгоритм програми являє собою блок вибору дії та виклик відповідної підпрограми. Нижче наведено блок-схему алгоритма програми.
 SHAPE  \* MERGEFORMAT
Початок
Кнопка
Додати/ видалити дистрибутив
Додати/ видалити автора
Пошук ПЗ по даті
Додати/ видалити ПЗ
Кнопка:=click()
Пошук ПЗ по назві
Пошук автора по імені
Пошук ПЗ по автору
Звіт
Кінець

 Рисунок 5 – Блок-схема основного алгоритма програми ( головна форма)
 SHAPE  \* MERGEFORMAT
Початок
Кнопка
Кнопка:=click()
Кінець
Отримати з БД таблицю Дистрибутив
Вивести таблицю Дистрибутив
Вести дані про дистрибутив
Записати дані в БД , таблиця Дистрибутив
Обрати дистрибутив з таблиці
Видалити дистрибутив з БД , таблиця Дистрибутив

Рисунок 6 – Алгоритм підпрограми Додати/видалити дистрибутив
 SHAPE  \* MERGEFORMAT
Початок
Кнопка
Кнопка:=click()
Кінець
Отримати з БД таблицю Автор
Вивести таблицю Автор
Вести дані про автора
Записати дані в БД , таблиця Автор
Обрати автора з таблиці
Видалити дистрибутив з БД , таблиця Автор

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

 SHAPE  \* MERGEFORMAT
Початок
Кнопка
Кнопка:=click()
Кінець
Отримати з БД таблиці  ПЗ, Дистрибутив, Автор
Вивести зведену таблицю Наявне ПЗ
Вести дані про ПЗ
Записати дані в БД , таблиця ПЗ
Обрати ПЗ з таблиці
Видалити ПЗ з БД , таблиця ПЗ

Рисунок 8 – Алгоритм підпрограми Додати/видалити ПЗ
 SHAPE  \* MERGEFORMAT
Початок
click(Нопка_Пошук)
Кінець
Ортимати Дату1, Дату2
Вивести дані про ПЗ
Знайти в БД, таблиця ПЗ, рядки де Дата1<датаПЗ<Дата2

Рисунок 9 – Алгоритм підпрограми Пошук ПЗ з а датою
 SHAPE  \* MERGEFORMAT
Початок
click(Нопка_Пошук)
Кінець
Ортимати Назву
Вивести дані про ПЗ
Знайти в БД, таблиця ПЗ, рядки де Назва_Пз = Назва

Рисунок 10 – Алгоритм підпрограми Пошук ПЗ за назвою
 SHAPE  \* MERGEFORMAT
Початок
click(Нопка_Пошук)
Кінець
Ортимати Прізвище
Вивести дані про ПЗ
Знайти в БД, таблиці ПЗ, Автор, рядки де ПЗ.автор_id =Автор.id AND
Автор.Прізвище=Прізвище

Рисунок 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,[email protected]). Після натискання кнопки “Додати автора” внесені дані з’являються в таблиці нижче. Відповідне звернення фіксується в  журналі бази даних. Повторюємо дану операцію 4 рази для різних авторів. Далі вибираємо будь-якого автора з таблиці нижче та натискаємо кнопку  “Видалити автора”. Вибраний автор зникає з таблиці. Для повернення до форми “Репозиторій ПЗ” натискаємо кнопку “Повернутися на головну сторінку”.
Також у формі “Репозиторій ПЗ” було натиснуто кнопку “Додати/видалити дистрибутив”, після   цього відкрилася форма “Додати/видалити дистрибутив”, де було заповнено поля Назва, Версія, ftp-адреса. Після натискання кнопки “Додати дистрибутив” дані про внесений до бази даних дистрибутив з’являються в таблиці нижче “Наявні дистрибутиви”. Повторюємо вищевказані операції 3 рази. Введені дистрибутиви з’являються в таблиці   “Наявні дистрибутиви”. Вибираємо рядок таблиці та натискаємо кнопку “Видалити дистрибутив”. Вибраний рядок (а отже і дистрибутив) зникає з таблиці. Для повернення до форми “Репозиторій ПЗ” натискаємо кнопку “Повернутися на головну сторінку”. Відкривається форма  “Репозиторій ПЗ”.
Натиснувши в формі “ Репозиторій ПЗ ” кнопку “Додати/видалити ПЗ”, відкрилася форма «Додати/видалити ПЗ», в якій було заповнено поля назву, версію, дату створення, ліцензію та ftp-адресу вихідних файлів програми. Також  обрано автора та дистрибутив із вже наявних у базі даних. Дані про внесене ПЗ з’являються у таблиці “Наявне ПЗ”. Повторюємо операцію 5 разів. Інформація про все ПЗ введене в базу з’являється в таблиці “Наявне ПЗ”. З таблиці вибираємо 2 рядка, які, відповідно, описують два екземпляра ПЗ. Після натискання кнопки “Видалити ПЗ” вибрані рядки зникають з таблиці “Наявне ПЗ”. Для повернення до форми “Репозиторій ПЗ” натискаємо кнопку “Повернутися на головну сторінку”.
  Натиснувши в формі “ Репозиторій ПЗ ” кнопки “Пошук ПЗ за датою”, “Пошук ПЗ за автором”, “Пошук ПЗ за назвою”, “Пошук автора”, “Звіт” було виведено запит за відповідним критерієм. Після введення необхідного критерію з’являвся звіт, у якому було представлено  кортежі бази даних, які задовольняють заданий критерій.
Для пошуку програмного забезпечення за приблизною датою створення натискаємо в формі “Репозиторій ПЗ” кнопку “Пошук ПЗ за датою”. З’являється форма “Пошук ПЗ за датою” в якій з випадаючих списків вибираємо початкову та кінцеву дату. Після натискання кнопки “Пошук” в таблиці “Звіт ПЗ” нижче з’являється інформація про програмне забезпечення, яке сворене пізніше початкової та раніше кінцевої дати. Для отримання вихідних файлів ПЗ натискаємо на посилання в колонці ftp-адреса та переходимо за відповідною адресою.Для повернення до форми “Репозиторій ПЗ” натискаємо кнопку “Повернутися на головну сторінку”.

Висновки
Підчас розробки проекту бази даних „Репозиторій ПЗ” були проведені обстеження та детальний аналіз предметної області, були створені функціональна, концептуальна, логічна та фізична моделі бази даних. Також були детально проаналізовані усі елементи, з яких складається даний програмний продукт та залежності між ними. Для  розробки даного програмного продукту було використано MySQL та php – відкриті, прозорі, безкоштовні та переносимі рішення.
Створена електронна база даних значно підвищує ефективність праці у процесі обліку програмного забезпечення, оскільки дозволяє швидко реалізувати можливості пошуку ПЗ: за автором, назвою, датою створення; можливість реєстрації дистрибутива, а саме фіксування таких даних, як: назва, версія, ftp-адреса дистрибутива; можливість реєстрації автора, а саме занесення до бази даних такої інформації: ім”я, по-батькові, та прізвише автора, його email-адресу; можливість реєстрації програмного забезпечення, а саме занесення до бази даних такої інформації: назву, версію, дату створення, ліцензію та ftp-адресу вихідних файлів програми,  автора та дистрибутив із вже наявних у базі даних.; можливість редагування інформації про вже зареєстроване програмне забезпечення; можливість переглядати статистичні дані про все наявне програмне забезпечення.
Програма  має зручний інтерфейс та меню користувача, проста у використанні, враховує найважливіші потреби користувача, який працює з великою базою даних, має інструкцію для користувача. Програма максимально переносима оскільки потребує тільки підключення до мережі інтернет та браузер. Програма підтримує використання багатьма користувачами в реальному часі.
Отже, розроблене програмне забезпечення повністю задовольняє поставлені до нього вимоги. Може бути використане за призначенням як примітивний репозиторій та як приклад для інших проектів.
Список використаних джерел
1.                 Гарсиа-Молина, Гектор, Ульман, Джеффи, Д., Уидом, Джениффер. Системы баз данных. Полний курс.: Пер. с англ. – М.: Издательский дом «Вильямс», 2004. -1088 с.
2.                 Кирилов В.В. Основи проектирования реляционних баз даних. Учебное пособие. –СПб.:ИТМО, 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'\"";
          $rollover = " onmouseover=\"this.style.background='#c0c0c0'\" onmouseout=\"this.style.background='#d3d3d3'\"";
          return $style.$rollover.$href;
}
?>
<table align=center border=0 cellpadding=10 cellspacing=10 style="border: 1px solid black">
<tr bgcolor="#c0c0c0">
          <td align="center" colspan=2>=[ Репозиторій ]=</td>
</tr>
<tr bgcolor="#c0c0c0">
          <td align="center">Пошук</td>
          <td align="center">Адміністрування</td>
</tr>
<tr onmouseover="this.style.backgroundcolor=lightgreen";>
          <td align="center" <?php echo myhref("./scripts/sDate.php")        ?> >ПЗ по даті</td>
          <td align="center" <?php echo myhref("./scripts/pz.php")             ?> >ПЗ</td>
</tr>
<tr>
          <td align="center" <?php echo myhref("./scripts/sAuthor.php")     ?> >ПЗ по автору</td>
          <td align="center" <?php echo myhref("./scripts/distr.php")          ?> >Дістр</td>
</tr>
<tr>
          <td align="center" <?php echo myhref("./scripts/sName.php")      ?> >ПЗ по назві</td>
          <td align="center" <?php echo myhref("./scripts/afftar.php")        ?> >Автор</td>
</tr>
<tr>
          <td align="center" <?php echo myhref("./scripts/sAName.php")    ?> >Автора по імені</td>
          <td>&nbsp;</td>
</tr>
<tr>
          <td align="center" <?php echo myhref("./scripts/sAll.php")          ?> >Все!</td>
          <td align=center <div style="cursor:pointer" onclick="location. 'lic.php'">license</a></td>
</tr>
</table>
<?php $printLink=1; include("footer.inc.html"); ?>
header.inc.html
<?php
function myheader( $ "Репозиторій" ) {
                    $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\" \"/styles.css\">\n";
                    $header = $header . "</head>\n\n<body bgcolor=\"#d3d3d3\"\n>";
          return $header;
}
?>
footer.inc.html
<table cellpadding="10" cellspacing="10" border=0 align="center">
<tr valign="middle">
          <td align="center">
          <?php
                    if ( !$printLink == 1 ) echo "<a /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; }
.h1 {
font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
font-size: 16pt;
font-weight: bold;
vertical-align: middle;
}
.h2 {
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 >
<tr>
        <td colspan=2 align="center" автора<br><br></td>
</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 align="center" colspan="2"><input type="submit" name="add" value="Додати автора"></td>
</tr>
</table>
</form>
scripts/afftar.php
<?php include("../header.inc.html"); echo myheader("Автор") ?>
<div align=center>
<?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 автори</div>
<form action=<?php print $PHP_SELF; ?> >
<table style="border: 1px solid black; " cellpadding=3 cellspacing=1 >
<tr bgcolor="#c0c0c0">
          <td>&nbsp</td>
          <td align="center">Ім'я</td>
          <td align="center">По-батькові</td>
          <td align="center">Прізвище</td>
          <td align="center">email</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 \"mailto:$val\">$val</a>";
                             echo "<td bgcolor=\"#dcdcdc\" align=\"center\">".$val."</td>";
                    }
          echo "</tr>";
}
?>
<tr><td colspan="5" align="center"><input type="submit" name="del" value="Видалити автора"></td></tr>
</table>
</form>
</div>
<?php include("../footer.inc.html"); ?>
forms/distr.html
<form action="../scripts/distr.php">
<table >
<tr>
<td colspan=2 align="center" distr<br><br></td>
</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="submit" name="add" value="Додати distr"></td>
<td><input type="submit" name="del" value="Видалити distr"></td>
</tr>
</table>
</form>
scripts/distr.php
<?php include("../header.inc.html"); echo myheader("Дістр") ?>
<div align=center>
<?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 дистрибутиви</div>
<form action=<?php print $PHP_SELF; ?> >
<table style="border: 1px solid black; " cellpadding=3 cellspacing=1 >
<tr bgcolor="#c0c0c0">
          <td align="center">&nbsp;</td>
          <td align="center">Назва</td>
          <td align="center">Версія</td>
          <td align="center">ftp-адреса</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 \"ftp://$val\">$val</a>";
                             echo "<td bgcolor=\"#dcdcdc\" align=\"center\">".$val."</td>\n";
                    }
          echo "</tr>";
}
?>
<tr><td align="center" colspan=4><input type="submit" name="del" value="Видалити відмічені"></td></tr>
</table>
</form>
</div>
<?php include("../footer.inc.html"); ?>
forms/pz.html
<<form action="../scripts/pz.php">
<table >
<tr>
        <td colspan=2 align="center" ПЗ<br><br></td>
</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 align="center"><input type="submit" name="add" value="Додати ПЗ"></td>
       
</tr>
</table>
</form>
scripts/pz.php
<?php include("../header.inc.html"); echo myheader("ПЗ") ?>
<?php
require ("../db.php");
$db = new db();
?>
<div align="center">
<?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 ПЗ</div>
<form action=<?php print $PHP_SELF; ?> >
<table style="border: 1px solid black" cellpadding=3 cellspacing=1 >
<tr bgcolor="#c0c0c0" >
          <td>&nbsp;</td>
          <td align="center">Назва</td>
          <td align="center">Версія</td>
          <td align="center">Датa</td>
          <td align="center">Ліцензія</td>
          <td align="center">ftp-адреса</td>
          <td align="center" colspan=2>Розробник</td>
          <td align="center">Дистрибутив</td>
          <td align="center">ftp-aдреса дистрибутива</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\" align=\"center\">".$val."</td>\n";
                    foreach($arr as $key=>$val){
                             if (($key=='addr') || ($key=='address')) $val = "<a \"ftp://$val\">$val</a>";
                             echo "<td bgcolor=\"#dcdcdc\" align=\"center\">".$val."</td>\n";
                    }
          echo "</tr>";
}
?>
<tr><td colspan=10 align=center><input type="submit" name="del" value="Видалити ПЗ"></td></tr>
</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 >
<tr>
<td colspan=2 align="center" авторa<br><br></td>
</tr>
<tr>
<td>Прізвище автора:</td>
<td><input type="text" name="surname" maxlength="60"></td>
</tr>
<tr>
<td colspan=2 align=center>
<input type="submit" name="search" value="Пошук!">
</td>
</tr>
</table>
</form>
scritps/sAName.php
<?php include("../header.inc.html"); echo myheader("Пошук по автору") ?>
<div align="center">
<?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 >
<tr bgcolor="#c0c0c0">
          <td align="center">Ім'я</td>
          <td align="center">По-батькові</td>
          <td align="center">Прізвище</td>
          <td align="center">Адреса</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 >
<tr>
<td colspan=2 align="center" по автору<br><br></td>
</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 align=center>
<input type="submit" name="add" value="Пошук!">
</td>
</tr>
</table>
</form>
scritps/sAuthor.php
<?php include("../header.inc.html"); echo myheader("Пошук по автору") ?>
<div align="center">
<?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 >
<tr bgcolor="#c0c0c0">
          <td align="center">Ім'я</td>
          <td align="center">Версія</td>
          <td align="center">Датa</td>
          <td align="center">Ліцензія</td>
          <td align="center">ftp-адреса</td>
          <td align="center" colspan=2>Розробник</td>
          <td align="center">Адреса розробника</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 >
<tr>
<td colspan=2 align="center" по даті<br><br></td>
</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="submit" name="add" value="Пошук!">
</td>
</table>
</form>
scritps/sDate.php
<?php include("../header.inc.html"); echo myheader("Пошук по даті") ?>
<div align="center">
<?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 ПЗ  з <?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 >
<tr bgcolor="#c0c0c0">
          <td align="center">Ім'я</td>
          <td align="center">Версія</td>
          <td align="center">Датa</td>
          <td align="center">Ліцензія</td>
          <td align="center">ftp-адреса</td>
          <td align="center" colspan=2>Розробник</td>
          <td align="center">Дістрібутив</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 >
<tr>
<td colspan=2 align="center" по автору<br><br></td>
</tr>
<tr>
<td>Назва ПЗ:</td>
<td><input type="text" name="name" maxlength="60"></td>
</tr>
<tr>
<td colspan=2 align=center>
<input type="submit" name="search" value="Пошук!">
</td>
</tr>
</table>
</form>
scripts/sName.php
<?php include("../header.inc.html"); echo myheader("Пошук по назві") ?>
<div align="center">
<?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 >
<tr bgcolor="#c0c0c0" >
          <td align="center">Ім'я</td>
          <td align="center">Версія</td>
          <td align="center">Датa</td>
          <td align="center">Ліцензія</td>
          <td align="center">ftp-адреса</td>
          <td align="center" colspan=2>Розробник</td>
          <td align="center">Дистрибутив</td>
          <td align="center">ftp-aдреса дистрибутива</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 align="center">
<?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 по базі даних</div><br><br>
<table style="border: 1px solid black; " cellpadding=3 cellspacing=1 >
<tr bgcolor="#c0c0c0">
          <td align="center">Назва програми</td>
          <td align="center">Версія</td>
          <td align="center">Датa</td>
          <td align="center">Ліцензія</td>
          <td align="center">ftp-адреса</td>
          <td align="center" colspan=3>Розробник</td>
          <td align="center">Адреса розробника</td>
          <td align="center">Дістрібутив</td>
          <td align="center">Версія листрибутиву</td>
          <td align="center">ftp-aдреса дистрибутиву</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) ввести  прізвище автора ПЗ та натиснути кнопку «Пошук!» Результати пошуку отримуємо тут же.

1. Реферат на тему Beethoven Essay Research Paper Ludwig van Beethoven
2. Реферат Комплексный экономический анализ прибыли предприятия
3. Реферат на тему Enkidu Friendship Essay Research Paper Friendship with
4. Лабораторная работа на тему Разработка технологической операции выполняемой на токарном станке
5. Реферат Крещение Руси 9
6. Контрольная работа Структура отрасли. Издержки обращения в сфере торговли
7. Курсовая Фирменные сувениры классификация, требования к разработке и применение
8. Реферат Pascal 9
9. Сочинение на тему Гоголь н. в. - Народный характер в
10. Реферат на тему Технологічний процес товстолистового цеху