Рисунок 3.1 Логическая модель 3.3 Целостность данных
3.3.1 Целостность объекта
Ограничения целостности объектов защищают отношения (таблицы-объекты) от неправильного внесения изменений, связанных с удалением существующих картежей и вставкой новых. Например, в нашей базе данных в отношение «Пользователь» при вставке информации о новом клиенте, необходимо сначала вставить значение в поле, являющееся первичным ключом («id»), а затем уже заносить информацию в остальные поля. Аналогично и с удалением, например, при удалении картежа из таблицы «Dogovor», необходимо сначала удалить информацию из вторичных атрибутов, а затем уже удалять значение первичного ключа. Целостность объекта реализуется самой СУБД, и обычно пользователю нет необходимости об этом беспокоиться. 3.3.2 Целостность приложения
Ограничения целостности приложения определяют отношения, в которые пользователь может вносить изменения, связанные с удалением, обновлением и вставкой. Ведь в базе данных существуют и такие отношения, в которые изменения вноситься не должны (по крайней мере, пользователем) – эти отношения формируются один раз при создании базы данных и далее в течение долгого времени данные в них не меняются. Эти отношения называются «справочниками» (точнее, некоторые из них). В базе данных «Провайдер» это отношения «Usluga» (хотя, возможность изменения этой таблицы реализована в приложении). Ограничения ссылочной целостности формируются при проектировании приложения (клиентской части) к базе данных. 3.3.3 Ссылочная целостность
Ссылочная целостность отражает взаимосвязь между значениями атрибутов, входящих в разные таблицы – родительские и дочерние Ограничения ссылочной целостности предполагают:
1) Задание пары ключей родительского и внешнего ключей; 2) Родительский и внешний ключи могут быть простыми, либо составными. Для простых ключей должно совпадать количество атрибутов, входящих в родительский и внешний ключи, а также попарно типы и размеры данных. Требования к родительскому ключу – уникальность, либо неопределённость, поэтому в качестве родительского ключа выбирается либо первичный ключ, либо потенциальный ключ. Значения внешнего ключа должны совпадать с одним из значений родительского ключа, либо должны быть неопределёнными. Значения внешнего ключа могут повторяться в различных картежах дочерней таблицы (конечно, если это поле не является первичным ключом для этой таблицы). Таким образом, значения ссылочной целостности защищают базу данных от ошибок, связанных с вставкой, удалением и обновлением данных. Например, в нашу базу данных в таблицу «Dogovor» нельзя занести информацию о новом клиенте без внесения данных об этом клиенте в таблицу «Useri», т.к. отношение «Useri» является родительским для отношения «Dogovor». А в таблицу «Ip» нельзя внести информацию о работнике, которого нет в отношении «Dogovor» (т.е. нельзя указать расходование трафика не указав причины(пользователя)). Такая же ситуация обстоит и с удалением и обновлением картежей в отношениях.
Например, нельзя удалить картеж из отношения «Useri», так как у него имеется потомок – отношение «Dogovor», а если возникает необходимость удаления, то соответствующие картежи необходимо удалить и из всех дочерних отношений. Аналогичная связь прослеживается и в других отношениях.
4 Выбор СУБД
Для реализации базы данных «Провайдер» я выбрал СУБД
Oracle 10g . Это объясняется следующими возможностями данной СУБД:
- Поддержка языка
SQL, который достаточно прост в обращении и позволяет без особых затрат времени извлекать любую информацию из базы данных;
- Real Application Cluster (RAC) обеспечивает работу одного экземпляра базы данных на нескольких узлах grid, позволяя управлять нагрузкой и гибко масштабировать систему в случае необходимости;
- Automatic Storage Management (ASM) позволяет автоматически распределять данные между имеющимися ресурсами систем хранения данных, что повышает отказоустойчивость системы и снижает общую стоимость владения (TCO);
- Производительность. Oracle Database 10g позволяет автоматически управлять уровнями сервиса и тиражировать эталонные конфигурации в рамках всей сети;
- Простые средства разработки. Новый инструмент разработки приложений HTML DB позволяет простым пользователям создавать эффективные приложения для работы с базами данных в короткие сроки;
- Самоуправление. Специальные механизмы Oracle Database 10g позволяют самостоятельно перераспределять нагрузку на систему, оптимизировать и корректировать SQL-запросы, выявлять и прогнозировать ошибки;
- Большие базы данных. Максимальный размер экземпляра базы данных Oracle может достигать 8 экзабайт;
- Недорогие серверные системы. Oracle Database 10g может использовать недорогие однопроцессорные компьютеры или модульные системы из "серверов-лезвий";
- Обеспечение транзакционной целостност, связана с организацией одновременного доступа значительного количества пользователей
к данным размещенным на физическом носителе. Доступ производится в процессе выполнения транзакций представляющей собой логическую связь последовательных запросов и операций манипулирования данных;
- Буферирование.
На обработку первого запроса уходит больше времени, чем на все последующие запросы это характеризуется тем, что их повторное использование позволяет исключить физический ввод данных с дискового устройства
и уменьшает время выполнения запроса, ограничение объема буфера приводит к перманентному вытеснению из него раннее считанных
блоков.
- Ряд вышеперечисленных возможностей, выделяет СУБД
Oracle 10g как наиболее подходящую для реализации нашей базы данных по предоставляемым возможностям.
5 Физическая модель
Физическая модель данных представлена реляционными таблицами, в которых в виде кортежей реляционных отношений хранится информация. Для хранения информации выбраны
Oracle 10
g таблицы, как удобные в работе и распространенные. Таблицы
Oracle 10
g поддерживают многие приложения, что обеспечивает более высокую универсальность системы.
Таблица 5.1 Типы данных Тип | Наименование типа | Размер (байты) | Содержание |
Текстовый | Varchar | каждый символ по 1 | Буквы, цифры, спец. символы(%, &, #) |
Числовой | Integer | 4 | Планируется выполнять арифме тические операции над значениями из этого поля |
Денежный | Integer | 8 | Числовое поле, содержимое которого изображается с дробной частью и денежным символом |
Дата | Date | 8 | Даты до 31 декабря 9999 года. |
Для создания таблиц мы использовали следующие скрипты: -- Create table create table USLUGI ( shifr INTEGER not null, name1 VARCHAR2(250), stoimost FLOAT, type_us VARCHAR2(250) ); -- Create/Recreate primary, unique and foreign key constraints alter table USLUGI add primary key (SHIFR); -- Create table create table USLUGA_DOGOVOR ( shifr INTEGER not null, nomer CHAR(7) not null ) -- Create/Recreate primary, unique and foreign key constraints alter table USLUGA_DOGOVOR add foreign key (SHIFR) references USLUGI (SHIFR); alter table USLUGA_DOGOVOR add foreign key (NOMER) references DOGOVOR (NOMER); -- Create table create table USERI ( id NUMBER not null, pasport NUMBER not null, fio VARCHAR2(250), registration VARCHAR2(250), telephone VARCHAR2(250) ) -- Create/Recreate primary, unique and foreign key constraints alter table USERI add unique (ID); -- Create table create table PROVAIDER ( inn NUMBER not null, nameorg VARCHAR2(250), adress VARCHAR2(250), director VARCHAR2(250), telephone NUMBER ) -- Create/Recreate primary, unique and foreign key constraints alter table PROVAIDER add primary key (INN) -- Create table create table OPLATA ( id_karti NUMBER not null, data_vremya DATE, summa FLOAT, id_d CHAR(7) ) -- Create/Recreate primary, unique and foreign key constraints alter table OPLATA add foreign key (ID_D) references DOGOVOR (NOMER); alter table OPLATA add foreign key (ID_KARTI) references KARTA (NOMER) disable; -- Create table create table KARTA ( nomer NUMBER not null, summa FLOAT, sostoyanie INTEGER, password_k VARCHAR2(250), inn NUMBER ) -- Create/Recreate primary, unique and foreign key constraints alter table KARTA add foreign key (INN) references PROVAIDER (INN); -- Create table create table IP ( time1 TIMESTAMP(6), with_adress VARCHAR2(250), with_port NUMBER, on_adress VARCHAR2(250), on_port VARCHAR2(250), bait NUMBER, with_interfase NUMBER, on_interfase INTEGER, nomer CHAR(7) ) -- Create/Recreate primary, unique and foreign key constraints alter table IP add foreign key (NOMER) references DOGOVOR (NOMER); -- Create table create table DOGOVOR ( nomer CHAR(7) not null, date2 DATE, date3 DATE, inn NUMBER, id_u NUMBER, money FLOAT, pass VARCHAR2(250), status NUMBER ) -- Create/Recreate primary, unique and foreign key constraints alter table DOGOVOR add primary key (NOMER) alter table DOGOVOR add foreign key (INN) references PROVAIDER (INN); alter table DOGOVOR add foreign key (ID_U) references USERI (ID); -- Create table create table DEBIT ( time1 DATE, money FLOAT, why VARCHAR2(255), id_d CHAR(7) ) -- Create/Recreate primary, unique and foreign key constraints alter table DEBIT add foreign key (ID_D) references DOGOVOR (NOMER);
6 Проектирование и реализация информационной системы
6.1 Описание средств, использованных при реализации
Для создания базы данных, сначала создаются таблицы с помощью средств, предлагаемых СУБД Oracle 10g : - Создание таблицы помощью графического инструментального средства конфигурирования Oracle Database Configuration Assistant (DBCA); - Создание таблицы шаблонов баз данных (database templates),; - Создание таблицы путём ввода данных. При создании таблиц был использован 1-й вариант, как наиболее удобный из всех предлагаемых. Сначала создаётся каркас таблицы, отмечаются ключевые поля, устанавливаются типы данных для каждого поля, а уже потом таблицы заполняются макетными данными (приведены в приложении A). После того, как таблицы созданы, необходимо их связать по ключевым полям. Уже на данном этапе можно сформулировать достаточно большое количество запросов, которые понадобятся в дальнейшем при создании форменного приложения. При создании запросов в СУБД Oracle 10g был использован режим SQL . Это объясняется удобством и простотой языка SQL, который представляет достаточно богатый набор средств для формирования запросов. 6.2 Тексты SQL-запросов и результаты их выполнения
Ниже приведены все SQL-запросы, использованные в процессе создания информационной системы. 1. Какой номер последнего договора?
SELECT *
FROM DOGOVOR
WHERE NOMER = (SELECT MAX(NOMER) FROM DOGOVOR)
NOMER | DATE2 | DATE3 | INN | ID_U | MONEY | PASS | STATUS |
npi013 | 17.12.2010 | 17.12.2011 | 7,77778E+11 | 13 | 0 | 5656 | 1 |
2. Какие предоставляются тарифы? Вывести, упорядочив по шифру.
SELECT * FROM USLUGI WHERE type_us = 'tarif' ORDER BY STOIMOST SHIFR | NAME1 | STOIMOST | TYPE_US |
1 | Bezlimit 256 | 350 | tarif |
2 | Bezlimit 512 | 500 | tarif |
3 | Bezlimit 768 | 600 | tarif |
4 | Bezlimit 1024 | 700 | tarif |
5 | Bezlimit 2048 | 1200 | tarif |
6 | Bezlimit 10000 | 10000 | tarif |
3. Вывести историю оплат заданного пользователя. Например, npi001.
SELECT *
FROM
OPLATA
WHERE ID_D = 'npi001'
ID_KARTI | DATA_VREMYA | SUMMA | ID_D |
403827 | 09.12.2010 12:56:58 | 500 | npi001 |
356813 | 14.12.2010 22:02:02 | 100 | npi001 |
81533 | 16.12.2010 1:02:59 | 100 | npi001 |
3 | 03.12.2010 15:48:00 | 100 | npi001 |
4 | 04.12.2010 5:02:00 | 100 | npi001 |
36 | 04.12.2010 5:03:00 | 200 | npi001 |
1 | 03.12.2010 15:47:00 | 500 | npi001 |
2 | 03.12.2010 15:47:00 | 200 | npi001 |
4. Найти карту оплаты с заданным номером и паролем.
SELECT * FROM KARTA WHERE NOMER = '1' AND PASSWORD_K = '1' NOMER | SUMMA | SOSTOYANIE | PASSWORD_K | INN |
1 | 500 | 1 | 1 | 7777777777 |
5. Установить статус заданной карты в состояние использована.
UPDATE KARTA SET SOSTOYANIE = 1 WHERE NOMER = ‘nomer’ AND PASSWORD_K = 'password'6. Выбрать договор по заданному номеру.
SELECT * FROM DOGOVOR WHERE NOMER = 'npi001' NOMER | DATE2 | DATE3 | INN | ID_U | MONEY | PASS | STATUS |
npi001 | 01.11.2010 | 30.04.2013 | 777777777777 | 1 | 1100 | npi001 | 1 |
7. Обновить значение средств на счету в заданном контракте.
UPDATE DOGOVOR SET MONEY = '100' WHERE NOMER = 'npi001'8. Добавить нового пользователя.
INSERT INTO USERI VALUES(14,2345,'Ф
. И
. О
.','Бомж
','1234567')9. Выбрать все номера договоров упорядочив по возрастанию.
SELECT NOMER FROM DOGOVOR ORDER BY NOMER npi001 |
npi002 |
npi003 |
npi004 |
npi005 |
npi006 |
npi007 |
npi008 |
npi009 |
npi010 |
npi011 |
npi012 |
npi013 |
10. Выдать информацию о пользователе, включая информацию по договору.
SELECT * FROM USERI,DOGOVOR WHERE USERI.ID = DOGOVOR.ID_U AND DOGOVOR.NOMER = 'npi001’ TELEPHONE | NOMER | DATE2 | DATE3 | INN | ID_U | MONEY | PASS | ST |
89518477875 | npi001 | 01.11.2010 | 30.04.2013 | 77777777 | 1 | 04.01.1903 | npi001 | 1 |
11. Выдать список услуг с количеством клиентов, которые подключены здесь.
NAME1 | NUMBER |
Bezlimit 1024 | 2 |
Bezlimit 2048 | 2 |
Bezlimit 256 | 3 |
Bezlimit 768 | 3 |
Bezlimit 512 | 3 |
limit | 13 |
12. Какая услуга ни разу не использована?
SELECT SHIFR, NAME1 FROM USLUGI d1 WHERE NOT EXISTS ( SELECT USLUGI.SHIFR FROM USLUGA_DOGOVOR, USLUGI WHERE d1.SHIFR = USLUGA_DOGOVOR.SHIFR) SHIFR | NAME1 |
06.01.1900 | Bezlimit 10000 |
13. Какая прибыль в этом месяце?
SELECT SUM(MONEY) AS "Profit" FROM DEBIT WHERE TO_CHAR(TIME1, 'mm.yyyy') = TO_CHAR(sysdate, 'mm.yyyy') Результат запроса: 1260.
14. Максимальное число байт принято от куда?
SELECT TIME1, WITH_ADRESS, WITH_PORT, BAIT, ip.nomer FROM IP WHERE BAIT = (SELECT MAX(BAIT) FROM IP WHERE IP.WITH_INTERFASE = 5) TIME1 | WITH_ADRESS | WITH_PORT | BAIT | NOMER |
21-NOV-10 10.56.00 | 188.134.7.73 | 30128 | 95655656 | npi007 |
15. Выдать полную информацию о клиентах.
SELECT d1.NOMER, d1.money, d4.name1, d1.DATE2, d1.DATE3, d2.fio, d2.pasport, d2.registration, d2.telephone FROM DOGOVOR d1, USERI d2 , USLUGA_DOGOVOR d3, USLUGI d4 WHERE (d1.id_u = d2.id) AND d3.nomer = d1.nomer AND d4.shifr = d3.shifr AND d4.type_us = 'tarif' NOMER | MO | NAME1 | DATE2 | DATE3 | FIO | PASPOR | REGISTRATI | TELEPHONE |
npi013 | 0 | Bezlimit 512 | 17.12.2010 | 17.12.2011 | sdg | 235456 | dhdfe4 | 3245 |
npi001 | 1100 | Bezlimit 256 | 01.11.2010 | 30.04.2013 | Ivanov Ivan Ivanovich | 705631 | Troickaya 9 | 89518477875 |
npi002 | 0 | Bezlimit 256 | 23.11.2010 | 23.11.2012 | Zlatous Eduard Petrovich | 7056316 | Troickaya 88 | 89518477872 |
npi003 | 0 | Bezlimit 512 | 23.11.2010 | 28.07.2012 | Veri Big Evil | 70563162 | Troickaya 77 | 89518477873 |
npi004 | 0 | Bezlimit 768 | 23.11.2010 | 17.02.2012 | Sv Lol | 70563163 | Troickaya 12 | 89518477877 |
npi005 | 0 | Bezlimit 1024 | 02.11.2010 | 22.10.2011 | Buga ga ga | 70563164 | Troickaya 33 | 89518477877 |
npi006 | 0 | Bezlimit 2048 | 25.11.2010 | 28.07.2012 | F I O | 70563165 | Engelsa 88 | 89518477875 |
npi007 | 0 | Bezlimit 768 | 11.11.2010 | 28.07.2012 | Adolf Gitler | 70563166 | AD 666/2 | 89518477871 |
npi008 | 0 | Bezlimit 1024 | 09.11.2010 | 28.07.2012 | Ktylxy | 70563167 | Engelsa 66 | 89518477879 |
npi009 | 0 | Bezlimit 512 | 04.11.2010 | 28.07.2012 | Chikotilo | 70563167 | AD 666/1 | 89518477810 |
npi010 | 0 | Bezlimit 2048 | 16.11.2010 | 28.07.2012 | Vladimir Vladimirovich Purin | 70563321 | Rai 777 | 89518477812 |
npi011 | 0 | Bezlimit 256 | 06.12.2010 | 06.12.2011 | Spanch Bob | 123123 | Dno Okeana | 1234578 |
npi012 | 0 | Bezlimit 768 | 06.12.2010 | 06.12.2011 | sdjfhgsdf | 123112 | sfsdfsdf | 1231231 |
16. Вывести отчет о списании средств с абонента
SELECT * FROM DEBIT WHERE ID_D = 'npi001 ’ TIME1 | MONEY | WHY | ID_D |
23.12.2010 | 10 | xz | npi001 |
23.12.2010 | 50 | usluga | npi001 |
31.12.2010 | 100 | tarif | npi001 |
17. Сколько и на какие порты принималась информация в сумме?
WITH_PORT | Trafic Mb |
20.03.1900 | 2184,57486820221 |
04.05.2024 | 1826,659935 |
26.06.1982 | 1188,77274 |
5892 | 1152,239972 |
41178 | 746,3213768 |
61468 | 613,3521423 |
63499 | 554,7282238 |
61655 | 465,7722521 |
49977 | 400,795764 |
25090 | 394,2087393 |
20541 | 337,046443 |
35123 | 306,5121174 |
56160 | 294,1754141 |
24978 | 281,4205179 |
52618 | 232,6606636 |
17439 | 216,7222147 |
36701 | 208,5684862 |
18858 | 207,517004 |
17355 | 199,2175474 |
46021 | 169,297472 |
40140 | 168,2296801 |
35691 | 167,8863907 |
54613 | 139,9933538 |
38787 | 131,4555883 |
38512 | 127,1801758 |
64503 | 113,3399925 |
61000 | 103,9505711 |
33713 | 102,8360825 |
37099 | 89,22577858 |
24293 | 88,4114399 |
18. Какой договор истекает в текущем месяце?
SELECT d1.NOMER, d1.DATE2, d1.DATE3, d2.fio, d2.pasport,d2.registration, d2.telephone FROM DOGOVOR d1, USERI d2 WHERE d1.id_u = d2.id AND (MONTHS_BETWEEN(sysdate, date3) < 0) AND ( MONTHS_BETWEEN(sysdate, date3) > -1) NOMER | DATE2 | DATE3 | FIO | PASPORT | REGISTRATION | TELEPHONE |
npi013 | 17.12.2010 | 27.12.2010 | sdg | 235456 | dhdfe4 | 3245 |
19. Какой договор уже истек?
SELECT d1.NOMER, d1.DATE2, d1.DATE3, d2.fio, d2.pasport,d2.registration, d2.telephone FROM DOGOVOR d1, USERI d2 WHERE (d1.id_u = d2.id) AND (MONTHS_BETWEEN(date3, sysdate) < 0) NOMER | DATE2 | DATE3 | FIO | PASPORT | REGISTRATION | TELEPHONE |
npi012 | 06.12.2009 | 09.12.2010 | sdjfhgsdf | 123112 | sfsdfsdf | 1231231 |
20. От куда
и во сколько принималась информация?
SELECT * FROM "IP" WHERE with_interfase=5 TIME1 | WITH_ADRES | W_P | ON_ADRESS | O_P | BAIT | NOMER |
16-NOV-10 01.53. | 205.188.8.238 | 443 | 109.106.195.31 | 7872 | 40 | npi001 |
16-NOV-10 01.54. | 195.239.111.21 | 5222 | 109.106.195.31 | 7883 | 280 | npi001 |
16-NOV-10 01.54. | 205.188.8.238 | 443 | 109.106.195.31 | 7872 | 40 | npi001 |
16-NOV-10 01.55. | 65.55.158.118 | 3544 | 109.106.195.31 | 58497 | 137 | npi001 |
16-NOV-10 01.53. | 109.234.153.37 | 5222 | 109.106.195.31 | 7881 | 190 | npi001 |
16-NOV-10 01.54. | 195.49.206.219 | 55928 | 109.106.195.31 | 44758 | 768 | npi001 |
16-NOV-10 01.54. | 95.139.188.235 | 26871 | 109.106.195.31 | 44758 | 116 | npi001 |
16-NOV-10 01.54. | 65.55.158.118 | 3544 | 109.106.195.31 | 58497 | 137 | npi001 |
16-NOV-10 01.54. | 195.49.206.219 | 63698 | 109.106.195.31 | 44758 | 96 | npi001 |
16-NOV-10 01.54. | 109.234.153.37 | 5222 | 109.106.195.31 | 7881 | 280 | npi001 |
16-NOV-10 01.55. | 205.188.8.238 | 443 | 109.106.195.31 | 7872 | 40 | npi001 |
16-NOV-10 01.55. | 195.239.111.21 | 5222 | 109.106.195.31 | 7883 | 400 | npi001 |
16-NOV-10 01.55. | 65.55.158.118 | 3544 | 109.106.195.31 | 58497 | 137 | npi001 |
16-NOV-10 01.55. | 77.37.171.143 | 64200 | 109.106.195.31 | 44758 | 116 | npi001 |
16-NOV-10 01.56. | 95.139.188.235 | 27309 | 109.106.195.31 | 44758 | 152 | npi001 |
16-NOV-10 01.56. | 195.239.111.21 | 5222 | 109.106.195.31 | 7883 | 320 | npi001 |
16-NOV-10 01.55. | 95.139.188.235 | 26871 | 109.106.195.31 | 44758 | 116 | npi001 |
16-NOV-10 01.56. | 91.209.196.174 | 80 | 109.106.195.31 | 7930 | 140885 | npi001 |
21. Сколько пользователи скачали?
SELECT NOMER, SUM(BAIT)/(1024*1024) AS "Trafic" FROM "IP" WHERE IP.WITH_INTERFASE = 5 GROUP BY NOMER ORDER BY NOMER NOMER | Trafic |
npi001 | 23.03.1900 |
npi002 | 38,4699297 |
npi003 | 17,7961731 |
npi004 | 1215,42658 |
npi005 | 84,3097162 |
npi006 | 1054,26295 |
npi007 | 2785,73673 |
npi008 | 9488,6638 |
npi009 | 472,377748 |
npi010 | 321,522787 |
22. Какой клиент принес больше всего прибыли?
SELECT * FROM (SELECT SUM(SUMMA) AS "MONEY", id_d FROM OPLATA GROUP BY ID_D ORDER BY 1/MONEY) d WHERE MONEY = (SELECT MAX(SUM(SUMMA)) FROM OPLATA GROUP BY ID_D ) 23. Какие клиенты еще не принесли прибыли?
SELECT NOMER, FIO FROM DOGOVOR INNER JOIN USERI ON DOGOVOR.ID_U = USERI.ID WHERE NOMER not in (SELECT id_d FROM OPLATA GROUP BY ID_D) NOMER | FIO |
npi013 | sdg |
npi011 | Spanch Bob |
npi012 | sdjfhgsdf |
24. Какая услуга подключена у каждого пользователя?
SELECT SHIFR, NAME1 , STOIMOST FROM (SELECT COUNT(NOMER) AS "COUNTS", SHIFR AS "ID1" FROM USLUGA_DOGOVOR GROUP BY SHIFR) INNER JOIN USLUGI ON ID1 = USLUGI.SHIFR WHERE COUNTS = (SELECT COUNT(NOMER) FROM DOGOVOR) SHIFR | NAME1 | STOIMOST |
7 | limit | 100 |
25. Какую прибыль планируется получить от услуг в конце месяца?
SELECT MONEY * STOIMOST AS "PROFIT", SHIFR FROM (SELECT COUNT(NOMER) AS "MONEY", USLUGI.SHIFR AS "ID1" FROM USLUGA_DOGOVOR INNER JOIN USLUGI ON USLUGA_DOGOVOR.SHIFR = USLUGI.SHIFR GROUP BY USLUGI.SHIFR) INNER JOIN USLUGI ON USLUGI.SHIFR = "ID1" ORDER BY 1/"PROFIT" PROFIT | SHIFR | NAME1 |
2400 | 5 | Bezlimit 2048 |
1800 | 3 | Bezlimit 768 |
1500 | 2 | Bezlimit 512 |
1400 | 4 | Bezlimit 1024 |
1300 | 7 | limit |
1050 | 1 | Bezlimit 256 |
26. Найти услугу которая принесет наибольшую прибыль в конце месяца.
SELECT PROFIT, SHIFR, NAME1 FROM (SELECT MONEY * STOIMOST AS "PROFIT", SHIFR, NAME1 FROM (SELECT COUNT(NOMER) AS "MONEY", USLUGI.SHIFR AS "ID1" FROM USLUGA_DOGOVOR INNER JOIN USLUGI ON USLUGA_DOGOVOR.SHIFR = USLUGI.SHIFR GROUP BY USLUGI.SHIFR) INNER JOIN USLUGI ON USLUGI.SHIFR = "ID1" ORDER BY 1/"PROFIT") WHERE PROFIT = ( SELECT MAX(MONEY * STOIMOST) AS "PROFIT" FROM (SELECT COUNT(NOMER) AS "MONEY", USLUGI.SHIFR AS "ID1" FROM USLUGA_DOGOVOR INNER JOIN USLUGI ON USLUGA_DOGOVOR.SHIFR = USLUGI.SHIFR GROUP BY USLUGI.SHIFR) INNER JOIN USLUGI ON USLUGI.SHIFR = "ID1") PROFIT | SHIFR | NAME1 |
2400 | 5 | Bezlimit 2048 |
27. Какие услуги принесут доход ниже среднего?
SELECT PROFIT, SHIFR, NAME1 FROM (SELECT MONEY * STOIMOST AS "PROFIT", SHIFR, NAME1 FROM (SELECT COUNT(NOMER) AS "MONEY", USLUGI.SHIFR AS "ID1" FROM USLUGA_DOGOVOR INNER JOIN USLUGI ON USLUGA_DOGOVOR.SHIFR = USLUGI.SHIFR GROUP BY USLUGI.SHIFR) INNER JOIN USLUGI ON USLUGI.SHIFR = "ID1" ORDER BY 1/"PROFIT") WHERE PROFIT < ( SELECT AVG(MONEY * STOIMOST) AS "PROFIT" FROM (SELECT COUNT(NOMER) AS "MONEY", USLUGI.SHIFR AS "ID1" FROM USLUGA_DOGOVOR INNER JOIN USLUGI ON USLUGA_DOGOVOR.SHIFR = USLUGI.SHIFR GROUP BY USLUGI.SHIFR) INNER JOIN USLUGI ON USLUGI.SHIFR = "ID1") ORDER BY PROFIT PROFIT | SHIFR | NAME1 |
1050 | 1 | Bezlimit 256 |
1300 | 7 | limit |
1400 | 4 | Bezlimit 1024 |
1500 | 2 | Bezlimit 512 |
6.3 Клиентская часть
Клиентская часть была реализована в виде сайта на
PHP. В качестве
WEB сервера был использован бесплатный сервер
APACHE.
Почему был выбран
WEB интерфейс? Так как данный проект нацелен на реализацию обслуживания провайдера, то клиентам проще всего получить информацию просто зайдя на сайт статистики, нежели устанавливать специальное ПО.
Apache HTTP-сервер (произносится /ə.ˈpæ.
ʧi/, сокращение от англ. a patchy server) — свободный веб-сервер.
Apache является кроссплатформенным ПО, поддерживает операционные системы
Linux,
BSD,
Mac OS,
Microsoft Windows,
Novell NetWare,
BeOS.
Основными достоинствами Apache считаются надёжность и гибкость конфигурации. Он позволяет подключать внешние модули для предоставления данных, использовать СУБД для аутентификации пользователей, модифицировать сообщения об ошибках и т. д. Поддерживает IPv6.
Ядро Apache включает в себя основные функциональные возможности, такие как обработка конфигурационных файлов, протокол HTTP и система загрузки модулей. Ядро (в отличие от модулей) полностью разрабатывается Apache Software Foundation, без участия сторонних программистов.
Теоретически, ядро apache может функционировать в чистом виде, без использования модулей. Однако, функциональность такого решения крайне ограничена.
Ядро Apache полностью написано на языке программирования C.
Система конфигурации Apache основана на текстовых конфигурационных файлах. Имеет три условных уровня конфигурации:
Конфигурация сервера (httpd.conf).
Конфигурация виртуального хоста (httpd.conf c версии 2.2 extra/httpd-vhosts.conf).
Конфигурация уровня директории (.htaccess).
Имеет собственный язык конфигурационных файлов, основанный на блоках директив. Практически все параметры ядра могут быть изменены через конфигурационные файлы, вплоть до управления MPM. Большая часть модулей имеет собственные параметры.
Часть модулей использует в своей работе конфигурационные файлы операционной системы (например /etc/passwd и /etc/hosts).
Помимо этого, параметры могут быть заданы через ключи командной строки.
Для работы
PHP с
Oracle 10
g был использован модуль
php_
oci8. Он представляет из себя динамическую библиотеку данных
DLL.
В ходе выполнения проекта были выполнены функции представленные на рисунке 6.1.
Условные обозначения представлены в таблице 6.1
Таблица 6.1 Условные обозначения Имя | Описание |
M1 | Статистика оплат (Рисунок 6.2) |
M2 | Добавление клиента (Рисунок 6.3) |
M3 | Список клиентов (Рисунок 6.4) |
M4 | Пополнение баланса (Рисунок 6.5) |
M5 | Изменение данных о клиентах (Рисунок 6.6) |
M6 | Полезная информация (Рисунок 6.7) |
M7 | Активность портов (Рисунок 6.8) |
Рисунок 6.1 Функции клиентской части Рисунок 6.2 Статистика оплат Рисунок 6.3 Добавление клиента Рисунок 6.4 Список клиентов Рисунок 6.5 Пополнение баланса. Рисунок 6.6 Изменение данных о пользователе. Рисунок 6.7 Активность портов Рисунок 6.8 Различная информация
7 Заключение
В результате выполнения курсового проекта была спроектирована информационная система «Провайдер». Была проанализирована предметная область, изучены её функции, описаны смысл операций и ограничений с помощью диаграммы потоков данных. На основе выделенных информационных объектов и их атрибутов построена концептуальная и логическая модель. Для защиты нашей базы данных от неправильного внесения изменений, целостность данных была разграничена на три составляющие: целостность объектов, целостность приложения и ссылочная целостность. Физическая модель данных представлена реляционными таблицами, вся информация которых содержится в базе данных, реализованной на СУБД Oracle 10g. Была спроектирована и реализована информационная система описанная созданием базы и запросов на языке SQL. Так же в процессе выполнения проекта была реализована клиентская часть в виде сайта. Сайт был выполнен в виде шаблона для дальнейшего использования. Т.е в нем минимум дизайна и максимум функциональности. В целом при создании сайта статистики данная модель будет вполне работоспособна.
8 Список литературы
1. Дж. Грофф, П. Вайнберг: «Энциклопедия SQL», Питер, 2004 год; 2. Г.А Черноморов «Базы данных в среде промышленных СУБД» - Новочеркасск : ЮРГТУ, 2006; 3. Дейт К. Введение в системы баз данных. К.; М.; Спб; Издат. Дом «Вильямс». 2000. 4. Г.Хансен, Д. Хансен «Базы данных:разработка и управление» //Пер. с англ. – М.: ЗАО «Издательство БИНОМ», - 2003.-704 с.:ил 5. М.Я. Выгодский: «Проектирование баз данных», Москва, 2005. 6. http://rostow-na-donu.ru/organizacii/dsbw~tours.html
9 Приложения
Приложение A Макетные данные
Таблица 9.A.1 «Debit». 23.12.2010 | 50 | Usluga |
31.12.2010 | 100 | Tarif |
08.12.2010 | 500 | Tarif |
14.12.2010 | 200 | Tarif |
Таблица 9.A.2 «Dogovor». NOMER | DATE2 | DATE3 | INN | ID_U | MONEY | PASS | STATUS |
npi013 | 17.12.2010 | 17.12.2011 | 7,77778E+11 | 13 | 0 | 5656 | 1 |
npi001 | 01.11.2010 | 30.04.2013 | 7,77778E+11 | 1 | 1100 | npi001 | 1 |
npi002 | 23.11.2010 | 23.11.2012 | 7,77778E+11 | 2 | 0 | npi002 | 1 |
npi003 | 23.11.2010 | 28.07.2012 | 7,77778E+11 | 3 | 0 | npi003 | 1 |
npi004 | 23.11.2010 | 17.02.2012 | 7,77778E+11 | 4 | 0 | npi004 | 1 |
npi005 | 02.11.2010 | 22.10.2011 | 7,77778E+11 | 5 | 0 | npi005 | 1 |
npi006 | 25.11.2010 | 28.07.2012 | 7,77778E+11 | 6 | 0 | npi006 | 1 |
npi007 | 11.11.2010 | 28.07.2012 | 7,77778E+11 | 7 | 0 | npi007 | 1 |
npi008 | 09.11.2010 | 28.07.2012 | 7,77778E+11 | 8 | 0 | npi008 | 1 |
npi009 | 04.11.2010 | 28.07.2012 | 7,77778E+11 | 9 | 0 | npi009 | 1 |
Таблица 9.A.3 «Ip» TIME1 | WITH_ADRESS | WITH PORT | ON ADRESS | ON PORT | B
| W I | ON I | NOMER |
16-NOV-10 01.53.00.000000 PM | 205.188.8.238 | 443 | 109.106.195.31 | 7872 | 40 | 5 | 345 | npi001 |
16-NOV-10 01.54.00.000000 PM | 195.239.111.21 | 5222 | 109.106.195.31 | 7883 | 280 | 5 | 345 | npi001 |
16-NOV-10 01.54.00.000000 PM | 205.188.8.238 | 443 | 109.106.195.31 | 7872 | 40 | 5 | 345 | npi001 |
16-NOV-10 01.54.00.000000 PM | 109.106.195.31 | 7872 | 205.188.8.238 | 443 | 46 | 345 | 5 | npi001 |
16-NOV-10 01.55.00.000000 PM | 109.106.195.31 | 58497 | 65.55.158.118 | 3544 | 89 | 345 | 5 | npi001 |
16-NOV-10 01.55.00.000000 PM | 65.55.158.118 | 3544 | 109.106.195.31 | 58497 | 137 | 5 | 345 | npi001 |
16-NOV-10 01.53.00.000000 PM | 109.234.153.37 | 5222 | 109.106.195.31 | 7881 | 280 | 5 | 345 | npi001 |
16-NOV-10 01.53.00.000000 PM | 109.106.195.31 | 7881 | 109.234.153.37 | 5222 | 301 | 345 | 5 | npi001 |
16-NOV-10 01.54.00.000000 PM | 195.49.206.219 | 55928 | 109.106.195.31 | 44758 | 48 | 5 | 345 | npi001 |
16-NOV-10 01.54.00.000000 PM | 95.139.188.235 | 26871 | 109.106.195.31 | 44758 | 116 | 5 | 345 | npi001 |
16-NOV-10 01.54.00.000000 PM | 109.106.195.31 | 58497 | 65.55.158.118 | 3544 | 89 | 345 | 5 | npi001 |
16-NOV-10 01.54.00.000000 PM | 65.55.158.118 | 3544 | 109.106.195.31 | 58497 | 137 | 5 | 345 | npi001 |
16-NOV-10 01.54.00.000000 PM | 195.49.206.219 | 63698 | 109.106.195.31 | 44758 | 96 | 5 | 345 | npi001 |
16-NOV-10 01.54.00.000000 PM | 109.234.153.37 | 5222 | 109.106.195.31 | 7881 | 280 | 5 | 345 | npi001 |
16-NOV-10 01.54.00.000000 PM | 109.106.195.31 | 7881 | 109.234.153.37 | 5222 | 301 | 345 | 5 | npi001 |
16-NOV-10 01.55.00.000000 PM | 205.188.8.238 | 443 | 109.106.195.31 | 7872 | 40 | 5 | 345 | npi001 |
16-NOV-10 01.55.00.000000 PM | 109.106.195.31 | 7872 | 205.188.8.238 | 443 | 46 | 345 | 5 | npi001 |
16-NOV-10 01.55.00.000000 PM | 195.239.111.21 | 5222 | 109.106.195.31 | 7883 | 400 | 5 | 345 | npi001 |
16-NOV-10 01.55.00.000000 PM | 109.106.195.31 | 58497 | 65.55.158.118 | 3544 | 89 | 345 | 5 | npi001 |
16-NOV-10 01.55.00.000000 PM | 65.55.158.118 | 3544 | 109.106.195.31 | 58497 | 137 | 5 | 345 | npi001 |
16-NOV-10 01.55.00.000000 PM | 77.37.171.143 | 64200 | 109.106.195.31 | 44758 | 116 | 5 | 345 | npi001 |
16-NOV-10 01.56.00.000000 PM | 95.139.188.235 | 27309 | 109.106.195.31 | 44758 | 152 | 5 | 345 | npi001 |
16-NOV-10 01.56.00.000000 PM | 195.239.111.21 | 5222 | 109.106.195.31 | 7883 | 320 | 5 | 345 | npi001 |
16-NOV-10 01.56.00.000000 PM | 109.106.195.31 | 7872 | 205.188.8.238 | 443 | 46 | 345 | 5 | npi001 |
16-NOV-10 01.55.00.000000 PM | 95.139.188.235 | 26871 | 109.106.195.31 | 44758 | 116 | 5 | 345 | npi001 |
16-NOV-10 01.56.00.000000 PM | 91.209.196.174 | 80 | 109.106.195.31 | 7930 | 140885 | 5 | 345 | npi001 |
16-NOV-10 01.57.00.000000 PM | 80.239.174.44 | 80 | 109.106.195.31 | 7931 | 132 | 5 | 345 | npi001 |
16-NOV-10 01.57.00.000000 PM | 109.106.195.31 | 7930 | 91.209.196.174 | 80 | 52 | 345 | 5 | npi001 |
16-NOV-10 01.55.00.000000 PM | 195.239.111.21 | 5222 | 109.106.195.31 | 7883 | 160 | 5 | 345 | npi001 |
16-NOV-10 01.55.00.000000 PM | 109.234.153.37 | 5222 | 109.106.195.31 | 7881 | 320 | 5 | 345 | npi001 |
16-NOV-10 01.55.00.000000 PM | 109.106.195.31 | 7881 | 109.234.153.37 | 5222 | 344 | 345 | 5 | npi001 |
16-NOV-10 01.56.00.000000 PM | 109.106.195.31 | 58497 | 65.55.158.118 | 3544 | 89 | 345 | 5 | npi001 |
16-NOV-10 01.56.00.000000 PM | 65.55.158.118 | 3544 | 109.106.195.31 | 58497 | 137 | 5 | 345 | npi001 |
16-NOV-10 01.57.00.000000 PM | 195.239.111.21 | 5222 | 109.106.195.31 | 7883 | 440 | 5 | 345 | npi001 |
16-NOV-10 01.56.00.000000 PM | 77.37.171.143 | 64200 | 109.106.195.31 | 44758 | 116 | 5 | 345 | npi001 |
16-NOV-10 01.57.00.000000 PM | 109.106.195.31 | 7931 | 80.239.174.44 | 80 | 52 | 345 | 5 | npi001 |
16-NOV-10 01.57.00.000000 PM | 109.106.195.31 | 3135 | 109.106.192.3 | 53 | 140 | 345 | 5 | npi001 |
16-NOV-10 01.57.00.000000 PM | 109.106.192.3 | 53 | 109.106.195.31 | 3135 | 424 | 5 | 345 | npi001 |
16-NOV-10 01.57.00.000000 PM | 109.234.153.37 | 5222 | 109.106.195.31 | 7881 | 320 | 5 | 345 | npi001 |
16-NOV-10 01.57.00.000000 PM | 109.106.195.31 | 58497 | 65.55.158.118 | 3544 | 89 | 345 | 5 | npi001 |
16-NOV-10 01.57.00.000000 PM | 109.106.195.31 | 7881 | 109.234.153.37 | 5222 | 344 | 345 | 5 | npi001 |
16-NOV-10 01.56.00.000000 PM | 205.188.8.238 | 443 | 109.106.195.31 | 7872 | 40 | 5 | 345 | npi001 |
16-NOV-10 01.57.00.000000 PM | 91.209.196.174 | 80 | 109.106.195.31 | 7930 | 1532 | 5 | 345 | npi001 |
16-NOV-10 01.57.00.000000 PM | 65.55.158.118 | 3544 | 109.106.195.31 | 58497 | 137 | 5 | 345 | npi001 |
16-NOV-10 01.57.00.000000 PM | 205.188.8.238 | 443 | 109.106.195.31 | 7872 | 40 | 5 | 345 | npi001 |
16-NOV-10 01.57.00.000000 PM | 109.106.195.31 | 7872 | 205.188.8.238 | 443 | 46 | 345 | 5 | npi001 |
16-NOV-10 01.56.00.000000 PM | 109.234.153.37 | 5222 | 109.106.195.31 | 7881 | 280 | 5 | 345 | npi001 |
16-NOV-10 01.56.00.000000 PM | 109.106.195.31 | 7881 | 109.234.153.37 | 5222 | 301 | 345 | 5 | npi001 |
16-NOV-10 01.56.00.000000 PM | 81.19.70.48 | 110 | 109.106.195.31 | 7928 | 5204 | 5 | 345 | npi001 |
16-NOV-10 01.57.00.000000 PM | 109.106.195.31 | 7928 | 81.19.70.48 | 110 | 52 | 345 | 5 | npi001 |
16-NOV-10 01.57.00.000000 PM | 81.19.70.48 | 110 | 109.106.195.31 | 7928 | 40 | 5 | 345 | npi001 |
16-NOV-10 01.58.00.000000 PM | 109.106.195.31 | 7872 | 205.188.8.238 | 443 | 86 | 345 | 5 | npi001 |
16-NOV-10 01.58.00.000000 PM | 195.239.111.21 | 5222 | 109.106.195.31 | 7883 | 160 | 5 | 345 | npi001 |
16-NOV-10 01.58.00.000000 PM | 205.188.8.238 | 443 | 109.106.195.31 | 7872 | 359 | 5 | 345 | npi001 |
Таблица 9.A.4 «Karta». NOMER | SUMMA | SOSTOYANIE | PASSWORD_K |
403827 | 500 | 1 | KERjvR |
356813 | 100 | 1 | O5vO0t |
81533 | 100 | 1 | FiPZ4H |
854964 | 500 | 1 | zWrGMe |
968989 | 200 | 1 | DBHJfa |
28331 | 500 | 1 | S3oBLn |
19614 | 200 | 1 | 3fna9t |
620220 | 500 | 1 | Tqo8Mr |
756448 | 200 | 1 | gNPNXR |
383709 | 200 | 1 | cDrk0b |
200982 | 200 | 1 | F8KzJH |
214786 | 500 | 1 | h5w4uf |
643796 | 100 | 1 | QGQFwX |
181403 | 500 | 1 | vHGsIi |
533330 | 200 | 1 | K4rtWk |
152435 | 100 | 1 | r63T9z |
460901 | 100 | 1 | TBBx30 |
36 | 200 | 1 | 1t |
2 | 200 | 1 | 2 |
1 | 500 | 1 | 1 |
3 | 100 | 1 | 3 |
4 | 100 | 1 | 4 |
742569 | 100 | 0 | YiEppT |
717861 | 200 | 0 | CJCZmp |
284646 | 500 | 0 | ULOY49 |
661971 | 200 | 0 | Tj5r4z |
303795 | 500 | 0 | OEzMMR |
676278 | 500 | 0 | 4HcByF |
117905 | 500 | 0 | gfP3el |
955040 | 100 | 0 | Bjxdbe |
186041 | 100 | 0 | wj5hqf |
694007 | 200 | 0 | 7tEZSh |
222055 | 200 | 0 | Dz1aR9 |
565494 | 500 | 0 | W5pwOk |
401484 | 500 | 0 | Mlz0sv |
505279 | 500 | 0 | IUGKh8 |
121069 | 100 | 0 | 3Vyfoz |
222296 | 500 | 0 | 79bnb7 |
902656 | 500 | 0 | IgYUv0 |
350950 | 200 | 0 | aFmVh2 |
288525 | 100 | 0 | 955l8T |
390588 | 100 | 0 | AY255Z |
916820 | 100 | 0 | iXvixI |
929618 | 500 | 0 | PZV85w |
476008 | 100 | 0 | iXp2yA |
505269 | 100 | 0 | lzIvMd |
473594 | 100 | 0 | XneKCM |
650983 | 500 | 0 | Bhph8Y |
822392 | 500 | 0 | MD09GP |
315538 | 500 | 0 | EMadBn |
635475 | 500 | 0 | BwvuVr |
71127 | 100 | 0 | Qrcia3 |
865125 | 200 | 0 | CUCgaJ |
311289 | 200 | 0 | ZUnMfN |
Таблица 9.A.5 «Oplata» ID_KARTI | DATA_VREMYA | SUMMA | ID_D |
854964 | 22.12.2010 | 500 | npi002 |
968989 | 21.12.2010 | 200 | npi002 |
28331 | 15.12.2010 | 500 | npi003 |
19614 | 13.12.2010 | 200 | npi003 |
620220 | 14.12.2010 | 500 | npi004 |
756448 | 20.12.2010 | 200 | npi005 |
383709 | 07.12.2010 | 200 | npi006 |
200982 | 13.12.2010 | 200 | npi005 |
214786 | 22.12.2010 | 500 | npi006 |
643796 | 28.12.2010 | 100 | npi007 |
181403 | 28.12.2010 | 500 | npi008 |
152435 | 01.12.2010 | 100 | npi009 |
460901 | 28.12.2010 | 100 | npi010 |
403827 | 09.12.2010 12:56:58 | 500 | npi001 |
356813 | 14.12.2010 22:02:02 | 100 | npi001 |
81533 | 16.12.2010 1:02:59 | 100 | npi001 |
3 | 03.12.2010 15:48:00 | 100 | npi001 |
4 | 04.12.2010 5:02:00 | 100 | npi001 |
36 | 04.12.2010 5:03:00 | 200 | npi001 |
1 | 03.12.2010 15:47:00 | 500 | npi001 |
2 | 03.12.2010 15:47:00 | 200 | npi001 |
Таблица 9.A.6 «Provaider». INN | NAMEORG | ADRESS | DIRECTOR | TELEPHONE |
7,77778E+11 | Orbita | Xz | Pupkin | 9821743 |
Таблица 9.A.7 «Useri». ID | PASPORT | FIO | REGISTRATION | TELEPHONE |
13 | 235456 | sdg | dhdfe4 | 3245 |
1 | 705631 | Ivanov Ivan Ivanovich | Troickaya 9 | 89518477875 |
2 | 70563161 | Zlatous Eduard Petrovich | Troickaya 88 | 89518477872 |
3 | 70563162 | Veri Big Evil | Troickaya 77 | 89518477873 |
4 | 70563163 | Sv Lol | Troickaya 12 | 89518477877 |
5 | 70563164 | Buga ga ga | Troickaya 33 | 89518477877 |
6 | 70563165 | F I O | Engelsa 88 | 89518477875 |
7 | 70563166 | Adolf Gitler | AD 666/2 | 89518477871 |
8 | 70563167 | Ktylxy | Engelsa 66 | 89518477879 |
9 | 70563167 | Chikotilo | AD 666/1 | 89518477810 |
10 | 70563321 | Vladimir Vladimirovich Purin | Rai 777 | 89518477812 |
11 | 123123 | Spanch Bob | Dno Okeana | 1234578 |
12 | 123112 | sdjfhgsdf | sfsdfsdf | 1231231 |
Таблица 9.A.8 «USluga_Dogovor». SHIFR | NOMER |
2 | npi013 |
7 | npi001 |
7 | npi002 |
7 | npi003 |
7 | npi004 |
7 | npi005 |
7 | npi006 |
7 | npi007 |
7 | npi008 |
7 | npi009 |
7 | npi010 |
7 | npi011 |
7 | npi012 |
7 | npi013 |
1 | npi001 |
1 | npi002 |
2 | npi003 |
3 | npi004 |
4 | npi005 |
5 | npi006 |
3 | npi007 |
4 | npi008 |
2 | npi009 |
5 | npi010 |
1 | npi011 |
3 | npi012 |
Таблица 9.A.9 «Usluga». SHIFR | NAME1 | STOIMOST | TYPE_US |
2 | Bezlimit 512 | 500 | tarif |
3 | Bezlimit 768 | 600 | tarif |
4 | Bezlimit 1024 | 700 | tarif |
5 | Bezlimit 2048 | 1200 | tarif |
7 | limit | 100 | usluga |
1 | Bezlimit 256 | 350 | tarif |
6 | Bezlimit 10000 | 10000 | tarif |
Приложение B Код клиентской части
Файл “
add_
dogovor.
php”
<HTML>
<HEAD>
<TITLE>Сайт статистики::Заключение договора</TITLE>
</HEAD> <BODY> <TABLE BORDER="1" width="1024" height="865" align="center"> <TR height="169"> <TD ><img src="logotip.jpg"></TD> <TD align="center">Заключение договора</TD>
</TR> <TR height="39"> <TD align="center"><a href="http://winer/statistic.php"> Статистика
оплат
</a></TD> <TD rowspan="7" align="justify" valign=top> <?php /*------------------------------------------------------------------------------------------------------*/ $ALTA2 = "(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) (CONNECT_DATA = (SID = ALTA2) (SERVER = DEDICATED) )
)";
if(isset($_REQUEST['next'])) {/*если вход выполнен со страницы регистрации абонента*/
?> <form action="add_dogovor.php" method = post> <table> <tr><td>Логин
</td><td> <? if($db1=OCILogon("b27", "b27", $ALTA2)) { $stmt = oci_parse($db1," SELECT * FROM DOGOVOR WHERE NOMER =(SELECT MAX(NOMER) FROM DOGOVOR) "); oci_execute($stmt); oci_fetch_all($stmt, $results); $NomerDogovor = $results['NOMER'][0][3] . $results['NOMER'][0][4] . $results['NOMER'][0][5]; $NomerDogovor++; $Nomer_dogovora; if($NomerDogovor < 10) $Nomer_dogovora = "npi00" . $_REQUEST['NomerDogovor']; else if(($NomerDogovor > 10 )&&($NomerDogovor < 100 )) {$Nomer_dogovora = "npi0" . $NomerDogovor;} else if(($NomerDogovor > 100 )&&($NomerDogovor < 1000 )) $Nomer_dogovora = "npi" . $NomerDogovor; echo $Nomer_dogovora; $now_date = date("d.m.Y"); ?> <input type=hidden name=NomerDogovor value=<?echo $Nomer_dogovora;?>> <input type=hidden name=IdUser value=<?echo $_REQUEST['IdUser'];?>> <input type=hidden name=now_date value=<?echo $now_date;?>> <?
OCILogoff($db1);
}else echo "</br>Не удалось соедениться с базой данных";
?>
</td></tr>
<tr><td>Дата заключения</td><td><?echo $now_date?></td></tr>
<tr><td>Пароль
</td><td><input type=text name="password" value="password"></td></tr> <tr><td>Тариф
</td><td> <? /*выбор
тарифа
*/ if($db1=OCILogon("b27", "b27", $ALTA2)) { $stmt = oci_parse($db1," SELECT * FROM USLUGI WHERE type_us = 'tarif' ORDER BY STOIMOST"); oci_execute($stmt); $nrows = oci_fetch_all($stmt, $results); //echo "<pre>"; //var_dump($results); //echo "</pre>"; echo "<select name=tarif size=1>"; for($i = 0; $i < $nrows; $i++){ echo "\n</br><option value={$results['SHIFR'][$i]}>{$results['NAME1'][$i]}</option>"; } echo "</select>"; OCILogoff($db1); }else{ echo "</br>Не удалось соедениться с базой данных";
} ?> </td></tr> <tr><td colspan=2></td></tr> </table> <input type=submit name="Add" value="Добавить
"></br> </form> <? } else{ if($db1=OCILogon("b27", "b27", $ALTA2)) { $Next_date = date("Y") + 1; $Next_date = date("d.m") . "." . $Next_date; $Nomer_dogovora = $_REQUEST['NomerDogovor']; $tempstr = "INSERT INTO DOGOVOR VALUES('{$Nomer_dogovora}', TO_DATE('{$_REQUEST['now_date']}', 'DD.MM.YYYY'), TO_DATE('{$Next_date}','DD.MM.YYYY'), '777777777777',{$_REQUEST['IdUser']}, 0 ,'{$_REQUEST['password']}','1')"; echo $tempstr; $stmt = oci_parse($db1,$tempstr); oci_execute($stmt); oci_commit($db1); echo "<pre>"; var_dump($_REQUEST['tarif'][0]); $tempstr = "INSERT INTO USLUGA_DOGOVOR VALUES('{$_REQUEST['tarif'][0]}', '{$Nomer_dogovora}')"; echo "</pre></br>".$tempstr; $stmt = oci_parse($db1,$tempstr); oci_execute($stmt); oci_commit($db1); ?> <form action="" method = get> </br><input type=submit name="next" value="Next"> </form>
<?
OCILogoff($db1);
}else{
echo "/n</br><h1>Не удалось соедениться с сервером баз данных</h1>/n";
} } /*------------------------------------------------------------------------------------------------------*/ ?></TD> </TR> <TD height=39 align="center"><a href="http://winer/add_user.php">Добавление
клиента
</a></TD> <TR > <TD align="center" height="39"><a href="http://winer/spisok_userov.php">Список
клиентов
</a></br></TD> </TR> <TR> <TD align="center" height="39"><a href="http://winer/add_schet.php?nomer_d=npi001">Пополнение
баланса
</a></br></TD> </TR> <TR> <TD align="center" height="39"><a href="http://winer/alter_user.php"> Изменение
данных
</a></br></TD> </TR> <TR> <TD align="center" height="39"><a href="http://winer/any_information.php"> Некоторая
информация
</a></br></TD> </TR> <TR height="380"> <TD align="center" width="220" valign="top" ><a href="http://winer/summ_port.php">Активность
портов
</a></TD> </TR> </TABLE> </BODY> </HTML>Файл
“add_schet.php” <
HTML>
<
HEAD>
<
TITLE>Сайт статистики::Пополнение баланса</
TITLE>
</HEAD> <BODY> <TABLE BORDER="1" width="1024" height="865" align="center"> <TR height="169"> <TD ><img src="logotip.jpg"></TD> <
TD align="
center">Пополнение баланса</
TD>
</TR> <TR height="39"> <TD align="center"><a href="http://winer/statistic.php"> Статистика оплат</a></TD> <TD rowspan="7" align="justify" valign=top> <?php /*------------------------------------------------------------------------------------------------------*/ $ALTA2 = "(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) (CONNECT_DATA = (SID = ALTA2) (SERVER = DEDICATED) ) )"; function print_karta($nomer_d){ $ALTA2 = "(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) (CONNECT_DATA = (SID = ALTA2) (SERVER = DEDICATED) ) )"; if($db1=OCILogon("b27", "b27", $ALTA2)){ $stmt = oci_parse($db1," SELECT * FROM OPLATA WHERE ID_D = '{$nomer_d}' "); oci_execute($stmt); $nrows = oci_fetch_all($stmt, $results); echo "<table border=1 width='40%'>\n"; echo "<tr><td width=100>Дата</td><td>Номер карты</td><td width=60>Сумма</td></tr>"; for ($i = 0; $i < $nrows; $i++ ) { echo "<tr><td>" . $results['DATA_VREMYA'][$i] ."</td><td>" . $results['ID_KARTI'][$i] ."</td><td>" . $results['SUMMA'][$i] ."</td></tr>"; } echo "</table>"; OCILogoff($db1); }else echo "</br> Не удалось подключиться к базе"; }
if(!
isset($_
REQUEST['
put'])) {/*если вход выполнен не из за нажатия кнопки*/
?> </br> <form action=add_schet.php method=post> Номер карты:<input type=text size=7 name=nomer value=123456> Пароль:<input type=text size=7 name=password value=pass> <input type=hidden name=nomer_d value=<?echo $_REQUEST['nomer_d'];?>> </br><input type=submit name=put value=Положить> </form> <? print_karta($_REQUEST['nomer_d']); }else{ if($db1=OCILogon("b27", "b27", $ALTA2)){ $stmt = oci_parse($db1," SELECT * FROM KARTA WHERE NOMER = '{$_REQUEST['nomer']}' AND PASSWORD_K = '{$_REQUEST['password']}'"); oci_execute($stmt); $nrows = oci_fetch_all($stmt, $results); if($
nrows == 0) {
echo "Неправильно введен номер или пароль</
br>";
?> <form action=add_schet.php method=post> Номер карты:<input type=text size=7 name=nomer value=123456> Пароль:<input type=text size=7 name=password value=pass> <input type=hidden name=nomer_d value=<?echo $_REQUEST['nomer_d'];?>> </br><input type=submit name=put value=Положить> </form> <? print_karta($_REQUEST['nomer_d']); }
else if($
results['
SOSTOYANIE'][0] == 1){
echo "Эта карта уже использовалась</
br>";
?> <form action=add_schet.php method=post> Номер карты:<input type=text size=7 name=nomer value=123456> Пароль:<input type=text size=7 name=password value=pass> <input type=hidden name=nomer_d value=<?echo $_REQUEST['nomer_d'];?>> </br><input type=submit name=put value=Положить> </form> <? print_karta($_REQUEST['nomer_d']); }else{ $dat = date("d.m.Y H:i"); $stmt = oci_parse($db1," UPDATE KARTA SET SOSTOYANIE = 1 WHERE NOMER = '{$_REQUEST['nomer']}' AND PASSWORD_K = '{$_REQUEST['password']}'"); oci_execute($stmt); echo "</pre>"; $tempstr = "INSERT INTO OPLATA VALUES('{$_REQUEST['nomer']}', TO_DATE('{$dat}','dd.mm.yyyy HH24:MI'),'{$results['SUMMA'][0]}', '{$_REQUEST['nomer_d']}')"; $stmt = oci_parse($db1,$tempstr); oci_execute($stmt); $stmt = oci_parse($db1," SELECT * FROM DOGOVOR WHERE NOMER = '{$_REQUEST['nomer_d']}'"); oci_execute($stmt); oci_fetch_all($stmt, $results2); $temp = $results['SUMMA'][0] + $results2['MONEY'][0]; $tempstr ="UPDATE DOGOVOR SET MONEY = '{$temp}' WHERE NOMER = '{$results2['NOMER'][0]}' "; $stmt = oci_parse($db1,$tempstr); oci_execute($stmt); oci_commit($db1); OCILogoff($db1); ?> <form action=add_schet.php method=post> </br> Номер карты:<input type=text size=7 name=nomer value=123456> Пароль:<input type=text size=7 name=password value=pass> <input type=hidden name=nomer_d value=<?echo $_REQUEST['nomer_d'];?>> </br><input type=submit name=put value=Положить> </form> <? print_karta($_REQUEST['nomer_d']); }
}
else{
echo "</
br> Нет доступа к базе данных при чтении оплаты";}
} /*------------------------------------------------------------------------------------------------------*/ ?></TD> </TR> <TD height=39 align="center"><a href="http://winer/add_user.php">Добавление клиента</a></TD> <TR > <TD align="center" height="39"><a href="http://winer/spisok_userov.php">Список клиентов</a></br></TD> </TR> <TR> <TD align="center" height="39"><a href="http://winer/add_schet.php?nomer_d=npi001">Пополнение баланса</a></br></TD> </TR> <TR> <TD align="center" height="39"><a href="http://winer/alter_user.php"> Изменение данных</a></br></TD> </TR> <TR> <TD align="center" height="39"><a href="http://winer/any_information.php"> Некоторая информация</a></br></TD> </TR> <TR height="380"> <TD align="center" width="220" valign="top" ><a href="http://winer/summ_port.php">Активность портов</a></TD> </TR> </TABLE> </BODY> </HTML>Файл
“add_user.php” <
HTML>
<
HEAD>
<
TITLE>Сайт статистики::Добавление пользователя</
TITLE>
</HEAD> <BODY> <TABLE BORDER="1" width="1024" height="865" align="center"> <TR height="169"> <TD ><img src="logotip.jpg"></TD> <
TD align="
center">Добавление пользователя</
TD>
</TR> <TR height="39"> <TD align="center"><a href="http://winer/statistic.php"> Статистика оплат</a></TD> <TD rowspan="7" align="justify" valign=top> <?php /*------------------------------------------------------------------------------------------------------*/ if(!isset($_REQUEST['doGo'])) {?> <form action="add_user.php" method = post> <table> <tr><td>Паспорт: </td><td><input type=text name="pasport" value="Паспорт"></td></tr> <tr><td>Ф. И.О.: </td><td><input type=text name="fio" value="Ф. И. О."></td></tr> <tr><td>Место Регистрации в г. Новочеркасске:</td><td><input type=text name="registration" value="Место Регистрации в г. Новочеркасске:"></td></tr> <tr><td>Номер Телефона</td><td><input type=text name="telephone" value="Телефон"></td></tr> <tr><td colspan=2></td></tr> </table> <input type=submit name=doGo value="Зарегистрировать"></br> </form> <?} else{ $ALTA2 = "(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) (CONNECT_DATA = (SID = ALTA2) (SERVER = DEDICATED) ) )"; if($db1=OCILogon("b27", "b27", $ALTA2)) { $stmt = oci_parse($db1," SELECT * FROM USERI WHERE ID =(SELECT MAX(ID) FROM USERI) "); oci_execute($stmt); $nrows = oci_fetch_all($stmt, $results); $temp = $results['ID'][0] + 1; $tempstr = "INSERT INTO USERI VALUES({$temp},{$_REQUEST['pasport']},'{$_REQUEST['fio']}','{$_REQUEST['registration']}','{$_REQUEST['telephone']}')"; if($stmt = oci_parse($db1,$tempstr)){ oci_execute($stmt); echo "</br><H1>Запись добавлена успешна</H1>"; echo "<br>({$temp},{$_REQUEST['pasport']},'{$_REQUEST['fio']}','{$_REQUEST['registration']}','{$_REQUEST['telephone']}')"; echo "</
br>Для продолжения нажимите кнопку далее";
?> <form action="add_dogovor.php" method = get> </br><input type=hidden name=IdUser value=<?echo $temp;?> </br><input type=submit name="next" value="Далее"> </form> <? OCILogoff($db1); }else{ echo "</br><H1>Ошибка добавления</H1>"; OCILogoff($db1); } } } /*------------------------------------------------------------------------------------------------------*/ ?></TD> </TR> <TD height=39 align="center"><a href="http://winer/add_user.php">Добавление клиента</a></TD> <TR > <TD align="center" height="39"><a href="http://winer/spisok_userov.php">Список клиентов</a></br></TD> </TR> <TR> <TD align="center" height="39"><a href="http://winer/add_schet.php?nomer_d=npi001">Пополнение баланса</a></br></TD> </TR> <TR> <TD align="center" height="39"><a href="http://winer/alter_user.php"> Изменение данных</a></br></TD> </TR> <TR> <TD align="center" height="39"><a href="http://winer/any_information.php"> Некоторая информация</a></br></TD> </TR> <TR height="380"> <TD align="center" width="220" valign="top" ><a href="http://winer/summ_port.php">Активность портов</a></TD> </TR> </TABLE> </BODY> </HTML>Файл
“alter_user.php” <
HTML>
<
HEAD>
<
TITLE>Сайт статистики::Редактирование</
TITLE>
</HEAD> <BODY> <TABLE BORDER="1" width="1024" height="865" align="center"> <TR height="169"> <TD ><img src="logotip.jpg"></TD> <TD align="center">Редактирование</TD> </TR> <TR height="39"> <TD align="center"><a href="http://winer/statistic.php"> Статистика оплат</a></TD> <TD rowspan="7" align="justify" valign=top> <?php /*------------------------------------------------------------------------------------------------------*/$ALTA2 = "(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) (CONNECT_DATA = (SID = ALTA2) (SERVER = DEDICATED) ) )"; ?> <form action="alter_user.php" method = get> <? if($db1=OCILogon("b27", "b27", $ALTA2)) { $stmt = oci_parse($db1," SELECT NOMER FROM DOGOVOR ORDER BY NOMER"); oci_execute($stmt); $nrows = oci_fetch_all($stmt, $results); echo "<select name=dogovor size=1>"; for($i = 0; $i < $nrows; $i++){ echo "\n</br><option value={$results['NOMER'][$i]}>{$results['NOMER'][$i]}</option>"; } echo "</select>"; OCILogoff($db1); }else{ echo "</
br>Не удалось соедениться с базой данных";
} ?> <input type=submit name=Next value=Далее> </form> <? if(isset($_REQUEST['Next'])){ if($db1=OCILogon("b27", "b27", $ALTA2)) { $stmt = oci_parse($db1," SELECT * FROM USERI,DOGOVOR WHERE USERI.ID = DOGOVOR.ID_U AND DOGOVOR.NOMER = '{$_REQUEST['dogovor']}' "); oci_execute($stmt); oci_fetch_all($stmt, $results); ?> <form action="alter_user.php" method = post> <table> <tr><td>Паспорт: </td><td><input type=text name="pasport" value=<?echo $results['PASPORT'][0]?>></td></tr> <tr><td>Ф. И.О.: </td><td><input type=text name="fio" value="<?echo $results['FIO'][0]?>"></td></tr> <tr><td>Место Регистрации в г. Новочеркасске:</td><td><input type=text name="registration" value="<?echo $results['REGISTRATION'][0]?>"></td></tr> <tr><td>Номер Телефона</td><td><input type=text name="telephone" value="<?echo $results['TELEPHONE'][0]?>"></td></tr> </table> <input type=hidden name=nomer value=<?echo $_REQUEST['dogovor']?>> <input type=hidden name=id_u value=<?echo $results['ID_U'][0]?>> <input type=submit name=alter value="Изменить"></br> </form> <? OCILogoff($db1); }else{ echo "</br><H1>Ошибка добавления</H1>"; } } if(isset($_REQUEST['alter'])){ if($db1=OCILogon("b27", "b27", $ALTA2)) { $tempstr = "UPDATE USERI SET FIO = '{$_REQUEST['fio']}', PASPORT = {$_REQUEST['pasport']}, REGISTRATION = '{$_REQUEST['registration']}', TELEPHONE = '{$_REQUEST['telephone']}' WHERE USERI.ID = '{$_REQUEST['id_u']}' "; echo $tempstr; $stmt = oci_parse($db1,$tempstr); oci_execute($stmt); oci_commit($db1); OCILogoff($db1); }else{ echo "</br><H1>Ошибка подключения</H1>"; } } /*------------------------------------------------------------------------------------------------------*/ ?></TD> </TR> <TD height=39 align="center"><a href="http://winer/add_user.php">Добавление клиента</a></TD> <TR > <TD align="center" height="39"><a href="http://winer/spisok_userov.php">Список клиентов</a></br></TD> </TR> <TR> <TD align="center" height="39"><a href="http://winer/add_schet.php?nomer_d=npi001">Пополнение баланса</a></br></TD> </TR> <TR> <TD align="center" height="39"><a href="http://winer/alter_user.php"> Изменение данных</a></br></TD> </TR> <TR> <TD align="center" height="39"><a href="http://winer/any_information.php"> Некоторая информация</a></br></TD> </TR> <TR height="380"> <TD align="center" width="220" valign="top" ><a href="http://winer/summ_port.php">Активность портов</a></TD> </TR> </TABLE> </BODY> </HTML>Файл
“any_information.php” <
HTML>
<
HEAD>
<
TITLE>Сайт статистики::Различная информация</
TITLE>
</HEAD> <BODY> <TABLE BORDER="1" width="1024" height="865" align="center"> <TR height="169"> <TD ><img src="logotip.jpg"></TD> <
TD align="
center">Различная информация</
TD>
</TR> <TR height="39"> <TD align="center"><a href="http://winer/statistic.php"> Статистика оплат</a></TD> <TD rowspan="7" align="justify" valign=top> <
h2>Различная информация:</
h2>
<?
php /*------------------------------------------------------------------------------------------------------*/
$ALTA2 = "(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) (CONNECT_DATA = (SID = ALTA2) (SERVER = DEDICATED) ) ) "; if($db1=OCILogon("b27", "b27", $ALTA2)) { echo "\
n<
h3>Сколько и какие услуги использованы:</
h3>";
$stmt = oci_parse($db1," SELECT USLUGI.NAME1, COUNT(USLUGI.SHIFR) AS \"NUMBER\" FROM USLUGA_DOGOVOR, USLUGI WHERE USLUGI.SHIFR = USLUGA_DOGOVOR.SHIFR GROUP BY USLUGI.NAME1 ORDER BY USLUGI.NAME1"); oci_execute($stmt); $nrows = oci_fetch_all($stmt, $results); echo "<table border = 1>\n"; echo "<tr> <td>Имя услуги </td> <td>COUNT</td></tr>"; for($i = 0; $i < $nrows; $i++){ echo "<tr><td width=100>{$results['NAME1'][$i]}</td><td>{$results['NUMBER'][$i]}</td></tr>\n"; }
echo "</
table>";
echo "\
n<
h3>Какие услуги не использованы</
h3>";
$stmt = oci_parse($db1," SELECT SHIFR, NAME1 FROM USLUGI d1 WHERE NOT EXISTS ( SELECT USLUGI.SHIFR FROM USLUGA_DOGOVOR, USLUGI WHERE d1.SHIFR = USLUGA_DOGOVOR.SHIFR )"); oci_execute($stmt); $nrows = oci_fetch_all($stmt, $results); echo "<table border = 1>\n"; echo "<tr> <td>Код услуги </td> <td>Имя услуги</td></tr>"; for($i = 0; $i < $nrows; $i++){ echo "<tr><td width=100>{$results['SHIFR'][$i]}</td><td>{$results['NAME1'][$i]}</td></tr>\n"; } echo "</table>"; $stmt = oci_parse($db1," SELECT SUM(MONEY) AS \"Profit\" FROM DEBIT WHERE TO_CHAR(TIME1, 'mm.yyyy') = TO_CHAR(sysdate, 'mm.yyyy')"); oci_execute($stmt); oci_fetch_all($stmt, $results); echo "<
h3>Прибыль в текущем месяце состовляет {$
results['
Profit'][0]} руб.</
h3>";
$stmt = oci_parse($db1,"SELECT TIME1, WITH_ADRESS, WITH_PORT, BAIT, ip.nomer FROM IP WHERE BAIT = (SELECT MAX(BAIT) FROM IP WHERE IP.WITH_INTERFASE = 5)"); oci_execute($stmt); $nrows = oci_fetch_all($stmt, $results); echo "<
h3>Максимальное количество байт принято</
h3>";
echo $results['TIME1'][0] . " от " . $results['WITH_ADRESS'][0] . " с порта " . $results['WITH_PORT'][0] . " обьемом в " . $results['BAIT'][0]; OCILogoff($db1); }else { $err = OCIError(); echo "Oracle Connect Error " . $err['message']; } ?></TD> </TR> <TD height=39 align="center"><a href="http://winer/add_user.php">Добавление клиента</a></TD> <TR > <TD align="center" height="39"><a href="http://winer/spisok_userov.php">Список клиентов</a></br></TD> </TR> <TR> <TD align="center" height="39"><a href="http://winer/add_schet.php?nomer_d=npi001">Пополнение баланса</a></br></TD> </TR> <TR> <TD align="center" height="39"><a href="http://winer/alter_user.php"> Изменение данных</a></br></TD> </TR> <TR> <TD align="center" height="39"><a href="http://winer/any_information.php"> Некоторая информация</a></br></TD> </TR> <TR height="380"> <TD align="center" width="220" valign="top" ><a href="http://winer/summ_port.php">Активность портов</a></TD> </TR> </TABLE> </BODY> </HTML>Файл
“index.html” <
HTML>
<
HEAD>
<
TITLE>Сайт статистики::Главная</
TITLE>
</HEAD> <BODY> <TABLE BORDER="1" width="1024" height="865" align="center"> <TR height="169"> <TD ><img src="logotip.jpg"></TD> <TD align="center">ГЛАВНАЯ</TD> </TR> <TR height="39"> <TD align="center"><a href="http://winer/statistic.php"> Статистика оплат</a></TD> <TD rowspan="7" align="justify"> <center><h2>Это главная страница сайта статистики.</h2></center> </TD> </TR> <TD height=39 align="center"><a href="http://winer/add_user.php">Добавление клиента</a></TD> <TR > <TD align="center" height="39"><a href="http://winer/spisok_userov.php">Список клиентов</a></br></TD> </TR> <TR> <TD align="center" height="39"><a href="http://winer/add_schet.php?nomer_d=npi001">Пополнение баланса</a></br></TD> </TR> <TR> <TD align="center" height="39"><a href="http://winer/alter_user.php"> Изменение данных</a></br></TD> </TR> <TR> <TD align="center" height="39"><a href="http://winer/any_information.php"> Некоторая информация</a></br></TD> </TR> <TR height="380"> <TD align="center" width="220" valign="top" ><a href="http://winer/summ_port.php">Активность портов</a></TD> </TR> </TABLE> </BODY> </HTML>Файл
“spisok_userov.php” <
HTML>
<
HEAD>
<
TITLE>Сайт статистики::Заключение договора</
TITLE>
</HEAD> <BODY> <TABLE BORDER="1" width="1024" height="865" align="center"> <TR height="169"> <TD ><img src="logotip.jpg"></TD> <
TD align="
center">Заключение договора</
TD>
</TR> <TR height="39"> <TD align="center"><a href="http://winer/statistic.php"> Статистика оплат</a></TD> <TD rowspan="7" align="justify" valign=top> <?php $numb = 5; $ALTA2 = "(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) (CONNECT_DATA = (SID = ALTA2) (SERVER = DEDICATED) ) ) "; if($db1=OCILogon("b27", "b27", $ALTA2)) { if(!$stmt = oci_parse($db1, "SELECT d1.NOMER, d1.money, d4.name1, d1.DATE2, d1.DATE3, d2.fio, d2.pasport, d2.registration, d2.telephone FROM DOGOVOR d1, USERI d2 , USLUGA_DOGOVOR d3, USLUGI d4 WHERE (d1.id_u = d2.id) AND d3.nomer = d1.nomer AND d4.shifr = d3.shifr AND d4.type_us = 'tarif' "))echo "</br>eror"; oci_execute($stmt); $nrows = oci_fetch_all($stmt, $results); echo "<table border=1 >\n<tr>\n"; echo "<td ><b>#договора</b></td><td >Баланс</td><td width=200>Тариф</td><td>Дата заключения</td><td>Дата истечения</td><td>Ф.И.О.</td><td>Паспорт</td><td>регистрация</td><td>телефон</td></tr>"; for ($i = 0; $i < $nrows; $i++ ) { echo "<tr>\n"; echo "<td>" . $results["NOMER"][$i] . "</td>"; echo "<td>" . $results["MONEY"][$i]. "</td>"; echo "<td>" . $results["NAME1"][$i]. "</td>"; echo "<td>" . $results["DATE2"][$i]. "</td>"; echo "<td>" . $results["DATE3"][$i]. "</td>"; echo "<td>" . $results["FIO"][$i]. "</td>"; echo "<td>" . $results["PASPORT"][$i]. "</td>"; echo "<td>" . $results["REGISTRATION"][$i]. "</td>"; echo "<td>" . $results["TELEPHONE"][$i]. "</td>"; echo "</tr>\n"; } echo "<tr><td colspan='9'> Number of Users: $nrows</td></tr></table>"; echo "<br><em>If you see data, then it works!</em><br></center>\n"; OCILogoff($db1); }else { $err = OCIError(); echo "Oracle Connect Error " . $err['message']; } ?></form></TD> </TR> <TD height=39 align="center"><a href="http://winer/add_user.php">Добавление клиента</a></TD> <TR > <TD align="center" height="39"><a href="http://winer/spisok_userov.php">Список клиентов</a></br></TD> </TR> <TR> <TD align="center" height="39"><a href="http://winer/add_schet.php?nomer_d=npi001">Пополнение баланса</a></br></TD> </TR> <TR> <TD align="center" height="39"><a href="http://winer/alter_user.php"> Изменение данных</a></br></TD> </TR> </TR> <TR> <TD align="center" height="39"><a href="http://winer/any_information.php"> Некоторая информация</a></br></TD> </TR> <TR height="380"> <TD align="center" width="220" valign="top" ><a href="http://winer/summ_port.php">Активность портов</a></TD> </TR> </TABLE> </BODY> </HTML>Файл
“statistic.php” <
HTML>
<
HEAD>
<
TITLE>Сайт статистики::Заключение договора</
TITLE>
</HEAD> <BODY> <TABLE BORDER="1" width="1024" height="865" align="center"> <TR height="169"> <TD ><img src="logotip.jpg"></TD> <TD align="center">Статистика</TD> </TR> <TR height="39"> <TD align="center"><a href="http://winer/statistic.php"> Статистика оплат</a></TD> <TD rowspan="7" align="justify" valign=top> <?php $ALTA2 = "(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) (CONNECT_DATA = (SID = ALTA2) (SERVER = DEDICATED) )
)";
if(!
isset($_
REQUEST['
do'])) {/*если вход выполнен не из за нажатия кнопки*/
if($db1=OCILogon("b27", "b27", $ALTA2)){ $stmt = oci_parse($db1," SELECT * FROM DOGOVOR ORDER BY NOMER"); oci_execute($stmt); $nrows = oci_fetch_all($stmt, $results); echo "\n<form action=\"statistic.php\" method = post>\n"; echo "<select name=NOMER size=1>\n"; for($i = 0; $i < $nrows; $i++){ echo "<option value={$results['NOMER'][$i]}>{$results['NOMER'][$i]}</option>"; } echo "</select>"; echo "</br><input type=submit name=do value=Далее>"; echo "</form>"; OCILogoff($db1); }else echo "</br> Нет доступа к базе данных"; }else{ if($db1=OCILogon("b27", "b27", $ALTA2)){ $stmt = oci_parse($db1," SELECT * FROM DOGOVOR INNER JOIN USERI ON DOGOVOR.ID_U = USERI.ID WHERE DOGOVOR.NOMER = '{$_REQUEST['NOMER']}' "); oci_execute($stmt); oci_fetch_all($stmt, $results); echo "</br>" . $results['NOMER'][0] . " " . $results['FIO'][0]; OCILogoff($
db1);
}
else{
echo "</
br> Нет доступа к базе данных при просмотре информации о абоненте";}
if($db1=OCILogon("b27", "b27", $ALTA2)){
$stmt = oci_parse($db1,"
SELECT *
FROM OPLATA
WHERE ID_D = '{$_REQUEST['NOMER']}'
");
oci_execute($stmt);
$nrows = oci_fetch_all($stmt, $results);
echo "<div width=60% style=\"position:;\">";
echo "<div width=% style=\"position:;background-color:;width:30%;\">";
echo "<table border=1 width='100%'>\n";
echo "<tr><td colspan=3><h3>Приход</h3></td></tr>";
echo "<tr><td width=100>Дата</td><td>Номер карты</td><td width=60>Сумма</td></tr>";
for ($i = 0; $i < $nrows; $i++ ) {
echo "<tr><td>" . $results['DATA_VREMYA'][$i] ."</td><td>" . $results['ID_KARTI'][$i] ."</td><td>" . $results['SUMMA'][$i] ."</td></tr>";
}
echo "</table></div style=\"position:relative;\">";
$stmt = oci_parse($db1,"
SELECT *
FROM DEBIT
WHERE ID_D = '{$_REQUEST['NOMER']}'
");
oci_execute($stmt);
$nrows = oci_fetch_all($stmt, $results);
echo "<div style=\"position:;background-color:;width:30%;\">";
echo "<table border=1 width='100%'>";
echo "<tr><td colspan=3><h3>Расход</h3></td></tr>";
echo "<tr><td width=100>Дата</td><td>Описание</td><td width=60>Сумма</td></tr>";
for ($i = 0; $i < $nrows; $i++ ) {
echo "<tr><td>" . $results['TIME1'][$i] ."</td><td>" . $results['WHY'][$i] ."</td><td>" . $results['MONEY'][$i] ."</td></tr>";
}
echo "</table></div>";
echo "</div>";
OCILogoff($db1);
if($db1=OCILogon("b27", "b27", $ALTA2)){
echo "<div style=\":;\">";
$stmt = oci_parse($db1,"
SELECT *
FROM DOGOVOR
ORDER BY NOMER");
oci_execute($stmt);
$nrows = oci_fetch_all($stmt, $results);
echo "\n<form action=\"statistic.php\" method = post>\n";
echo "<select name=NOMER size=1>\n";
for($i = 0; $i < $nrows; $i++){
echo "<option value={$results['NOMER'][$i]}>{$results['NOMER'][$i]}</option>";
}
echo "</select>";
echo "</br><input type=submit name=do value=Далее>";
echo "</form>";
OCILogoff($db1);
echo" </div>";
}else echo "</br> Нет доступа к базе данных";
}else{echo "</br> Нет доступа к базе данных при чтении оплаты";}
}
?>
</TD>
</TR>
<TD height=39 align="center"><a href="http://winer/add_user.php">Добавление клиента</a></TD>
<TR >
<TD align="center" height="39"><a href="http://winer/spisok_userov.php">Список клиентов</a></br></TD>
</TR>
<TR>
<TD align="center" height="39"><a href="http://winer/add_schet.php?nomer_d=npi001">Пополнение баланса</a></br></TD>
</TR>
<TR>
<TD align="center" height="39"><a href="http://winer/alter_user.php"> Изменение данных</a></br></TD>
</TR>
<TR>
<TD align="center" height="39"><a href="http://winer/any_information.php"> Некоторая информация</a></br></TD>
</TR>
<TR height="380">
<TD align="center" width="220" valign="top" ><a href="http://winer/summ_port.php">Активность портов</a></TD>
</TR>
</TABLE>
</BODY>
</HTML>
Файл “sum_port.php”
<HTML>
<HEAD>
<TITLE>Сайт статистики::Заключение договора</TITLE>
</HEAD>
<BODY>
<TABLE BORDER="1" width="1024" height="865" align="center">
<TR height="169">
<TD ><img src="logotip.jpg"></TD>
<TD align="center">Заключение договора</TD>
</TR>
<TR height="39">
<TD align="center"><a href="http://winer/statistic.php"> Статистика оплат</a></TD>
<TD rowspan="7" align="justify" valign=top>
<?php
$ALTA2 = "(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
(CONNECT_DATA =
(SID = ALTA2)
(SERVER = DEDICATED)
)
)
";
if($db1=OCILogon("b27", "b27", $ALTA2)) {
$stmt = oci_parse($db1,"SELECT WITH_PORT, SUM(BAIT) / (1024*1024)
FROM \"IP\"
WHERE IP.WITH_INTERFASE = 5
GROUP BY WITH_PORT
ORDER BY 1/SUM(BAIT) ");
oci_execute($stmt);
$nrows = oci_fetch_all($stmt, $results);
OCILogoff($db1);
}else {
$err = OCIError();
echo "Oracle Connect Error " . $err['message'];
}
echo "<center><h2>Активность портов</h2><br></center>";
?>
<form action="summ_port.php" method=get>
<input type=submit name="DoGo" value=Next>
<?
if(!isset($_REQUEST['DoGo']) & !isset($_REQUEST['DoGoPrevios'])){
if($nrows <100) $limit = $nrows; else $limit = 100;
echo "\n</br>Выводяться 1 - {$limit}\n";
echo "<table border=1 cellspacing='0' width='50%'>\n<tr>\n";
echo "<td><b>Номер порта</b><td>Обьем полученной информации</td></tr>";
for ($i = 0; $i < $limit; $i++ ) {
echo "<tr>\n";
echo "<td>" . $results["WITH_PORT"][$i] . "</td>";
echo "<td>" . $results["SUM(BAIT)/(1024*1024)"][$i] . "</td>";
echo "</tr>\n";
}
echo "<tr><td colspan='2'> <center>Total $nrows ports</center></td></tr></table>";
?>
<form action="summ_port.php" method=get>
<input type=hidden name="index" value ="<?echo $limit?>">
<input type=submit name="DoGo" value=Next>
</form>
<?
}if(isset($_REQUEST['DoGo']) || isset($_REQUEST['DoGoPrevios'])){
?>
<input type=submit name="DoGoPrevios" value=Previos>
<?
$flag_nrowsMax = false;
$flag_nrowsMin = false;
$flag_Next = false;
$flag_Previos = false;
if(isset($_REQUEST['DoGo'])){
$flag_Next = true;
if(($_REQUEST['index'] + 100) > $nrows) $flag_nrowsMax = true;
}
if(isset($_REQUEST['DoGoPrevios'])){
$flag_Previos = true;
if(($_REQUEST['index'] - 100) < 0 )$flag_nrowsMin = true;
}
if($flag_Previos & $flag_nrowsMin){
$limit = 0;
} else
if ($flag_Previos){$limit = $_REQUEST['index'] - 100;}
if($flag_Next & $flag_nrowsMax){
$limit = $nrows;
} else
if($flag_Next) $limit = $_REQUEST['index'] + 100;
if($_REQUEST['index'] < $limit){
$Start = $_REQUEST['index']; $End = $limit;
}else{
$End = $_REQUEST['index']; $Start = $limit;
}
echo "\n</br>Выводяться {$Start} - {$End}\n";
echo "<table border=1 cellspacing='0' width='50%'>\n<tr>\n";
echo "<td><b>Номер порта</b><td>Обьем полученной информации</td></tr>";
for ($i = $Start; $i < $End; $i++ ) {
echo "<tr>\n";
echo "<td>" . $results["WITH_PORT"][$i] . "</td>";
echo "<td>" . $results["SUM(BAIT)/(1024*1024)"][$i] . "</td>";
echo "</tr>\n";
}
echo "<tr><td colspan='2'> <center>Total $nrows ports</center></td></tr></table>";
?>
<form action="summ_port.php" method=get>
<input type=hidden name="index" value ="<?if($flag_Next)echo $End; else echo $Start;?>">
<input type=submit name="DoGo" value=Next>
<input type=submit name="DoGoPrevios" value=Previos>
</form>
<?
}
?>
</form>
</TD>
</TR>
<TD height=39 align="center"><a href="http://winer/add_user.php">Добавление клиента</a></TD>
<TR >
<TD align="center" height="39"><a href="http://winer/spisok_userov.php">Список клиентов</a></br></TD>
</TR>
<TR>
<TD align="center" height="39"><a href="http://winer/add_schet.php?nomer_d=npi001">Пополнение баланса</a></br></TD>
</TR>
<TR>
<TD align="center" height="39"><a href="http://winer/alter_user.php"> Изменение данных</a></br></TD>
</TR>
<TR>
<TD align="center" height="39"><a href="http://winer/any_information.php"> Некоторая информация</a></br></TD>
</TR>
<TR height="380">
<TD align="center" width="220" valign="top" ><a href="http://winer/summ_port.php">Активность портов</a></TD>
</TR>
</TABLE>
</BODY>
</HTML>
1. Статья Карта взрываемости горных пород и автоматизация проектирования буровзрывных работ на карьерах
2. Реферат на тему Правление Наполеона Бонапарта Первая империя во Франции
3. Курсовая на тему Расч ты с подотч тными лицами
4. Реферат Проблемы современной культуры
5. Реферат на тему Аграрный вопрос
6. Реферат Анализ деятельности предприятия 16
7. Реферат на тему Schuluniform Pro Und Contra Essay Research Paper
8. Реферат на тему Валютный курс 2
9. Реферат Мир, человек, общество в мусульманской картине мира
10. Реферат на тему Пассионарная теория и реклама