Курсовая работа: Автоматизація процесу обліку
Название: Автоматизація процесу обліку Раздел: Рефераты по информатике Тип: курсовая работа | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Анотація У даній курсовій роботі розроблена база даних, яка призначена для автоматизації процесу обліку програмного забезпечення. Робота виконана на 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 Обстеження репозиторія В даній роботі розглянуто функціонування репозиторія программного забезпечення. Репозиторій – місце де зберігаються і підтримуються будь-які дані. Найчастіше данні в репозиторії зберігаються в вигляді файлів, доступних для поширення через мережу. Прикладом репозиторію може бути репозиторій вільного программного забезпечення 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 надходять зміни та виправлення до проекта. Заносяться такі дані: назва проекта, розробники, ліцензія, підпроекти, залежності проекта, версія змін, вихідні файли проекта. Зміни мають відрізнятися номером версії від основного проекта та інших змін. в) Користувач створює запит на отримання программного забезпечення Користувач створює запит який складається з назви та версії проекта. Користувач отримує список залежностей відповідного проекта. Відповідні вихідні файли або їх ftpaдресу. г) Реєстрація розробника Розробник надає дані про себе. Отримує логін та пароль, який дозволяє створювати власні проекти та надсилати зміни до інших. д) Надавати звіт Здійснюється пошук ПЗ за датою створення, тематикою. е) Надавати дистрибутив користувачу Користувач створює запит на отримання дистрибутиву, а не окремого пакету. Отримує ftp-адресу архіва дистрибутиву. Основна функція репозиторія – збереження та розповсюдження однозначного дистрибутива ПЗ. Проблемою предметної області є відсутність цілісності. Інформація зберігається в великій кількості директорій, що сприяє її пошкодженню. База даних гарантує захист та однозначність інформації. Тому найкращою альтернативою для реалізації репозиторія являється створення программного засобу, який дозволив би швидко і ефективно отримувати ПЗ декільком користувачам одночасно, а також забезпечив однозначність зберігаємих даних. Таким програмним засоб є база даних. 1.2Аналіз процесу функціонування репозиторія . Розробка функціональної моделі Бази даних „Репозиторій програмного забезпечення” Для побудови функціональної моделі використовуємо нотація Йордана: - вся інформація по предметній області представляється в вигляді ієрарархії діаграм. - на нульовій діаграмі представляється головна функція предметної області і зовнішні сущності. - інформаційні потоки зображуються в вигляді стрілок, вздовж яких пишеться ім*я потока . - всі рівні діаграм супроводжуються таблицями потоків даних. - остання таблиця є те що треба зберігати в базі даних. Використовуючи дану методологію визначаємо основну функцію репозиторія, а також зовнішні сутності та потоки даних на основі дослідження предметної області (Рисунок 1). Визначаємо функції на діаграмі потоків даних 1 рівня (Рисунок 2). Інформацію про потоки даних заносимо в таблицю 1. Таблица 1 – потоки даних і їх атрибути
1.3 Постановка задачі Мета даної курсової роботи - збільшення ефективності роботи репозиторія шляхом розробки бази даних і програмного забезпечення, для якого висуватимуться наступні вимоги: 1) Наявність простого меню програми, зручного для користувача. 2) Реалізація можливості пошуку програмного забезпечення: · за автором · назвою · датою створення 3) Можливість реєстрації дистрибутива, а саме фіксування таких даних, як: · назва дистрибутива · версія · ftp-адреса вихідних файлів 4) Можливість реєстрації програмного забезпечення, а саме занесення до бази даних такої інформації: · назва програмного забезпечення · версія · дата створення · дистрибутив · автор · ліцензія · ftp-адреса вихідних файлів 5) Можливість реєстрації автора, а саме занесення до бази даних такої інформації: · ім”я · по-батькові · прізвище · email-адреса 6) Можливість редагування інформації про вже зареєстроване програмне забезпечення; 7) Можливість звіт по базі даних в цілому. 8) Мати інструкцію для користувача. База даних, яка відповідатиме всім перерахованим вимогам значно спростить та пришвидшить задачу надання програмного забезпечення, оскільки людині потрібно буде головним чином лише вводити свої запити з клавіатури (або використовуючи мишу), програма автоматично оброблятиме їх і видаватиме всю необхідну інформацію. 2 Розробка проекту Бази Даних „Репозиторій програмного забезпечення” 2.1 Розробка концептуальної моделі Бази Даних „ Репозиторій програмного забезпечення” (ER-Діаграма). Виходячи з наведеної функціональної моделі бази даних репозиторія програмного забезпечення, розробимо концептуальну модель, представлену ER-діаграмою (Рисунок 3). 2.2 Розробка специфікації програмних модулів Програмні модулі будуть розроблені в середовищі MySQL та наведені у додатках (Див. Додаток 1) у вигляді SQL-кодів, а також конструкторів форм, запитів, звітів, таблиць реалізованих, у вигляді html-сторінок, мовою php . Специфікація програмних модулів має наступну структуру (Таблиця 2): Таблиця 2 – Специфікація програмних модулів
2.3 Розробка логічної моделі бази даних “Репозиторый ПЗ” На основі концептуальної моделі розробимо логічну модель даних. В окремі таблиці віднесемо такі сутності як Автор, Дистрибутив, ПЗ. (Модель даних подана на рисунку 6.) У кожній таблиці слід вписати атрибути, які будуть характерні для даної сутності. Кожен атрибут має свій тип, який визначається типом даних, який зберігатиметься у базі даних.Також вкажемо, яким ключем є кожен атрибут. Атрибути, які організують зв”язок між таблицями, є зовнішніми ключами (FK). Кожна сутність повинна мати ключ, який використовується для пошуку – PK – первинний ключ, якщо атрибут є альтернативою для пошуку, то він є альтернативним ключом (AK). Якщо за даним атрибутом можна впорядкувати інформацію, то цей атрибут є індексним ключом. ПЗ
ПЗ Дистрибутив
Рисунок 4 – Логічна модель бази даних «Репозиторій ПЗ». 2.4 Розробка алгоритмів і графічних інтерфейсів програмних модулів Алгоритм програми являє собою блок вибору дії та виклик відповідної підпрограми. Нижче наведено блок-схему алгоритма програми.
Рисунок 5 – Блок-схема основного алгоритма програми ( головна форма)
Рисунок 6 – Алгоритм підпрограми Додати/видалити дистрибутив
Рисунок 7 – Алгоритм підпрограми Додати/видалити автора
Рисунок 8 – Алгоритм підпрограми Додати/видалити ПЗ
Рисунок 9 – Алгоритм підпрограми Пошук ПЗ з а датою
Рисунок 10 – Алгоритм підпрограми Пошук ПЗ за назвою
Рисунок 11 – Алгоритм підпрограми Пошук ПЗ за автором Програма складається з двох частин: бази даних, яку обслуговує сервер MySQL; клієнтської частини, яка надає графічний інтерфейс, реалізованої в вигляді html форм, що обробляються php. Клієнту надаються привілегії на пошук та модифікацію даних але не схем бази даних. Кожному запиту відповідає окрема форма, яка складається з таблиць, полів введення та кнопок. Після натискання кнопки дані з полів ведення передаються php-обробнику. Який, в свою чергу, реалізує запит до бази даних та виводить результати. Після відкриття має з’являтися меню. За допомогою нього можна буде обрати необхідну операцію, а саме, Додати/видалити дистрибутив, Додати/видалити автора, Додати/видалити ПЗ, Пошук ПЗ за датою, Пошук ПЗ за автором, Пошук ПЗ за назвою, Пошук автора, Звіт. Вище перелічені операції можна обрати за допомогою натискання відповідних кнопок в меню. Якщо натиснути кнопку “Додати/видалити дистрибутив”, відкриється форма, в якій необхідно буде заповнити наступні поля: Назва, Версія, ftp-адреса. Можна переглянути наявні дистрибутиви та видалити необхідні, вибравши їх та натиснувши кнопку “Видалити дистрибутив”. З кожної підпорядкованої форми перехід до головного меню здійснюється натисканням на посилання “Повернутися на головну сторінку”Аналогічно можна додавати інформацію про нового автора, натиснувши кнопку “Додати/видалити автора” в головному меню. З’явиться форма реєстрації нового автора, до якої треба буде занести ім”я, по-батькові, та прізвише автора, його email-адресу. Також можна переглянути наявних авторів та видалити необхідні, вибравши їх та натиснувши кнопку “Видалити автора”. Для реєстрації програмного забезпечення потрібно буде натиснути на кнопку «Додати/видалити ПЗ» в головному меню, відкриється форма «Додати/видалити ПЗ», до якої необхідно буде занести назву, версію, дату створення, ліцензію та ftp-адресу вихідних файлів програми. Також потрібно обрати автора та дистрибутив із вже наявних у базі даних. Також можна переглянути наявне програмне забезпечення та видалити необхідне, вибравши його та натиснувши кнопку “Видалити ПЗ”. Ряд форм, які реалізують пошук даних побудовані у вигляді полів введення параметрів пошуку та кнопки “Пошук”. Результати пошуку повертаються у вигляді таблиці. 2.5 Розробка фізичної моделі бази даних «Репозиторій ПЗ»На основі логічної моделі створюємо фізичну модель. Назви таблиць, полів таблиць, а також зв’язки між таблицями в фізичній і логічній моделі повністю співпадають. В таблиці 3 реалізована фізична модель. Пректна частина реалізована в середовищі MySQL. Таблиця 3 – фізична модель БД репозиторію програмного забезпечення
На основі побудованої логічної моделі даних репозиторію побудуємо фізичну модель в середовищі 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 – відкриті, прозорі, безкоштовні та переносимі рішення. Програма має зручний інтерфейс та меню користувача, проста у використанні, враховує найважливіші потреби користувача, який працює з великою базою даних, має інструкцію для користувача. Програма максимально переносима оскільки потребує тільки підключення до мережі інтернет та браузер. Програма підтримує використання багатьма користувачами в реальному часі. Отже, розроблене програмне забезпечення повністю задовольняє поставлені до нього вимоги. Може бути використане за призначенням як примітивний репозиторій та як приклад для інших проектів. 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='$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> <tr> <td align="center" colspan=2>=[ Репозиторій ]=</td> </tr> <tr> <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> </td> </tr> <tr> <td align="center" <?php echo myhref("./scripts/sAll.php") ?> >Все!</td> <td align=center> </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> <tr valign="middle"> <td align="center"> <?php if ( !$printLink == 1 ) echo "<a href=/index.php>= Повернутися на головну сторінку =</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"> </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> <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> <form action=<?php print $PHP_SELF; ?> > <table style="border: 1px solid black; " cellpadding=3 cellspacing=1> <tr bgcolor="#c0c0c0"> <td> </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 href=\"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"> </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> <form action=<?php print $PHP_SELF; ?> > <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">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 href=\"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"> </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> $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"; } ?> </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> <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> <form action=<?php print $PHP_SELF; ?> > <table style="border: 1px solid black" cellpadding=3 cellspacing=1> <tr bgcolor="#c0c0c0"> <td> </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 href=\"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"> </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"> </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"> </tr> <tr> <td>Дата:</td> <td> з <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> по <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> <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['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"> </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> <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) ввести прізвище автора ПЗ та натиснути кнопку «Пошук!» Результати пошуку отримуємо тут же. |