Организация базы данных провайдера
Оглавление
1 Анализ предметной области
1.1 Деловой регламент
Заключается договор провайдера с пользователем.
Интернет-провайдер, иногда просто Провайдер, (англ. Internet Service Provider, ISP, букв. "поставщик Интернет-услуги") — организация, предоставляющая услуги доступа к Интернету и иные связанные с Интернетом услуги.
Пользователь - лицо заключившее договор с провайдером на предоставление каких либо услуг.
Пользователь может заключить только один договор. Срок действия договора год, по истечении срока автоматически продляется.
При Заключении договора пользователь выбирает тарифный план.
Тарифный план это совокупность цен и предоставляемых услуг.
Есть возможность выбрать следующие тарифные планы:
Без лимитный 256 - стоимость 350 руб. Ограничение скорости 256 кбит/сек
Без лимитный 512 - стоимость 500 руб. Ограничение скорости 512 кбит/сек
Без лимитный 768 - стоимость 600 руб. Ограничение скорости 768 кбит/сек
Без лимитный 1000 - стоимость 700 руб. Ограничение скорости 1024 кбит/сек
Без лимитный 2000 - стоимость 1200руб. Ограничение скорости 2048 кбит/сек
Провайдер оставляет за собой право перевести пользователя на другой тарифный план в новом месяце, предварительно уведомив его.
Списание денежных средств по договору происходит в конце месяца.
Трафиком считается объем переданной информации. Трафик делиться на:
- Внешний (входящий, исходящий)
- Локальный (входящий, исходящий)
Локальным трафиком считается весь трафик проходящий в диапазоне IP адресов провайдера.
Локальный трафик не ограничивается в скорости. А так же не тарифицируется (бесплатен).
Внешним трафиком считается весь трафик кроме локального.
Тарифицируется только входящий трафик. Исходящий является бесплатным.
Пополнение баланса выполняется при помощи карт оплаты.
Карта оплаты содержит пароль и уникальный номер. Есть вариации карт оплаты:
- На 100 руб.
- На 200 руб.
- На 500 руб.
Для активации карты следует ввести номер и пароль карты на сайте статистики.
После активации карта становиться не действительной.
Номера и пароли всех карт хранятся на сервере провайдера.
1.2 Функциональная структура
Кратко функции БД изображены на функциональной структуре (рис.1.1)
Как видно из рис.1.1 , БД «Провайдер» имеет возможности:
-Заключение договора
- Просмотр клиентов
- Пополнение баланса
- Редактирование договора
- Статистика оплат
- Активность портов
- Полезная информация
1.3 Диаграмма потоков данных
Функциональная структура системы представляет собой набор диаграмм потоков данных (далее - ДПД), которые описывают смысл операций и ограничений. ДПД отражает функциональные зависимости значений, вычисляемых в системе, включая входные значения, выходные значения и внутренние хранилища данных. ДПД - это граф, на котором показано движение значений данных от их источников через преобразующие их процессы к их потребителям в других объектах. ДПД содержит процессы, которые преобразуют данные. Потоки данных, которые переносят данные. Активные объекты, которые производят и потребляют данные, и хранилища данных, которые пассивно хранят данные.
Процесс преобразует значения данных. Процессы самого нижнего уровня представляют собой функции без побочных эффектов. Процесс может иметь побочные эффекты, если он содержит нефункциональные компоненты, такие как хранилища данных или внешние объекты.
Поток данных соединяет выход объекта (или процесса) со входом другого объекта (или процесса). Он представляет промежуточные данные вычислений. Поток данных изображается в виде стрелки между производителем и потребителем данных, помеченной именами соответствующих данных; примеры стрелок, изображающих потоки данных, представлены на рисунке ДПД.
Хранилище данных - это пассивный объект в составе ДПД, в котором данные сохраняются для последующего доступа. Хранилище данных допускает доступ к хранимым в нем данным в порядке, отличном от того, в котором они были туда помещены. Агрегатные хранилища данных, как например, списки и таблицы, обеспечивают доступ к данным в порядке их поступления, либо по ключам. Диаграмма ПД моего проекта представлена на (рис1.2).
На функциональной диаграмме листовыми будут являться функции:
-Заключение договора
- Просмотр клиентов
- Пополнение баланса
- Редактирование договора
- Статистика оплат (Выводит данные об оплатах, совершенных пользователем)
- Активность портов (Выводит суммарный объем информации принятый на каждый порт)
- Полезная информация (Содержит такую информацию, как использование услуг, объем прибыли и др.)
Рисунок 1.1 Функциональная структура
Рисунок 1.2 Диаграмма потоков данных
1.4 Выделение информационных объектов и их атрибутов
В результате детального анализа предметной области, построения функциональной структуры и схемы потоков данных были выделены следующие объекты:
1. Клиент
1.1Номер
1.2 Ф.И.О.
1.3 Паспорт
1.4 Регистрация
2. Договор
2.1 Номер
2.2 Дата приёма на работу
2.3 Контактный телефон
2.4 Место нахождения
3. Карта
3.1 Номер
3.2 Сумма
3.3 Пароль
3.4 Состояние
4. История оплат
4.1 Дата, время
4.2 Номер карты
4.3 Сумма
5. Дебит
5.1Сумма
5.2Дата время
6. Услуга
6.1 Шифр
6.2 Название
6.3 Стоимость
6.4 Описание
7 IP
7.1 С порта
7.2 На порт
7.3 С адреса
7.4 На адрес
7.5 С интерфейса
7.6 На интерфейс
7.7 Трафик
7.8 Дата, время
2 Концептуальная модель
При построении модели сущность-связь на начальном этапе каждый информационный объект заменяем сущностью, при этом каждое свойство объекта становится атрибутом сущности.
Теперь построим предварительную концептуальную модель и покажем количественное значение мощностей связей Рисунке 2.1.
У данной модели есть следующие связи:
Провайдер – Договор: У одного провайдера может быть много клиентов, А у каждого клиента может быть только один провайдер.
Договор – Дебит: Под дебитом здесь понимается списание средств. И таким образом: по одному договору может быть несколько списаний средств. И одно списание средств может быть только у одного договора.
Договор – Клиент: Клиент может заключить только один договор. И один договор оформляется только на одного клиента.(Но тем не менее в сущность договор идет внешним ключом id из таблицы “Клиент” )
Услуга договор: Одна услуга может предоставляться по нескольким договорам, и один договор может иметь несколько услуг.
Карта оплаты – Провайдер: Провайдер предоставляет множество карт оплат. И одна карта оплаты принадлежит только одному провайдеру.
IP – договор: В сущности IP содержатся единичные записи о трафике проходящем от и до клиента. И тогда одна запись Ip принадлежит только одному договору. А у договора может быть много записей о трафике.
Рисунок 2.1 Предварительная концептуальная модель
3 Логическое моделирование
3.1 Построение логической модели
По концептуальной модели необходимо построить логическую модель. При этом атрибуты добавляются, в сущности, соответственно связям, показанным на концептуальной модели.
Например, в сущность «Oplata» добавляются атрибуты «Useri» (Id клиента – первичный ключ сущности «Useri»). Таким же образом добавляются атрибуты и в другие сущности.
Добавленные, в сущности-потомки, атрибуты являются внешними ключами для сущностей-предков, в которых данные атрибуты являются первичными ключами. Логическая модель приведена на (рис. 3.1).
Рисунок 3.1 Логическая модель
3.3 Целостность данных
3.3.1 Целостность объекта
Ограничения целостности объектов защищают отношения (таблицы-объекты) от неправильного внесения изменений, связанных с удалением существующих картежей и вставкой новых.
Например, в нашей базе данных в отношение «Пользователь» при вставке информации о новом клиенте, необходимо сначала вставить значение в поле, являющееся первичным ключом («id»), а затем уже заносить информацию в остальные поля. Аналогично и с удалением, например, при удалении картежа из таблицы «Dogovor», необходимо сначала удалить информацию из вторичных атрибутов, а затем уже удалять значение первичного ключа. Целостность объекта реализуется самой СУБД, и обычно пользователю нет необходимости об этом беспокоиться.
3.3.2 Целостность приложения
Ограничения целостности приложения определяют отношения, в которые пользователь может вносить изменения, связанные с удалением, обновлением и вставкой. Ведь в базе данных существуют и такие отношения, в которые изменения вноситься не должны (по крайней мере, пользователем) – эти отношения формируются один раз при создании базы данных и далее в течение долгого времени данные в них не меняются. Эти отношения называются «справочниками» (точнее, некоторые из них).
В базе данных «Провайдер» это отношения «Usluga» (хотя, возможность изменения этой таблицы реализована в приложении).
Ограничения ссылочной целостности формируются при проектировании приложения (клиентской части) к базе данных.
3.3.3 Ссылочная целостность
Ссылочная целостность отражает взаимосвязь между значениями атрибутов, входящих в разные таблицы – родительские и дочерние
Ограничения ссылочной целостности предполагают:
Задание пары ключей родительского и внешнего ключей;
Родительский и внешний ключи могут быть простыми, либо составными. Для простых ключей должно совпадать количество атрибутов, входящих в родительский и внешний ключи, а также попарно типы и размеры данных.
Требования к родительскому ключу – уникальность, либо неопределённость, поэтому в качестве родительского ключа выбирается либо первичный ключ, либо потенциальный ключ.
Значения внешнего ключа должны совпадать с одним из значений родительского ключа, либо должны быть неопределёнными. Значения внешнего ключа могут повторяться в различных картежах дочерней таблицы (конечно, если это поле не является первичным ключом для этой таблицы).
Таким образом, значения ссылочной целостности защищают базу данных от ошибок, связанных с вставкой, удалением и обновлением данных.
Например, в нашу базу данных в таблицу «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 10g таблицы, как удобные в работе и распространенные. Таблицы Oracle 10g поддерживают многие приложения, что обеспечивает более высокую универсальность системы.
Таблица 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-запросы, использованные в процессе создания информационной системы.
Рис. 7. Схема данных
Какой номер последнего договора?
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
Какие предоставляются тарифы? Вывести, упорядочив по шифру.
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
Вывести историю оплат заданного пользователя. Например, 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
Найти карту оплаты с заданным номером и паролем.
SELECT *
FROM KARTA
WHERE NOMER = '1' AND PASSWORD_K = '1'
NOMER
SUMMA
SOSTOYANIE
PASSWORD_K
INN
1
500
1
1
7777777777
Установить статус заданной карты в состояние использована.
UPDATE KARTA
SET SOSTOYANIE = 1
WHERE NOMER = ‘nomer’ AND PASSWORD_K = 'password'
Выбрать договор по заданному номеру.
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
Обновить значение средств на счету в заданном контракте.
UPDATE DOGOVOR
SET MONEY = '100'
WHERE NOMER = 'npi001'
Добавить нового пользователя.
INSERT INTO USERI VALUES(14,2345,'Ф. И. О.','Бомж','1234567')
Выбрать все номера договоров упорядочив по возрастанию.
SELECT NOMER
FROM DOGOVOR
ORDER BY NOMER
npi001
npi002
npi003
npi004
npi005
npi006
npi007
npi008
npi009
npi010
npi011
npi012
npi013
Выдать информацию о пользователе, включая информацию по договору.
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
Выдать список услуг с количеством клиентов, которые подключены здесь.
NAME1
NUMBER
Bezlimit 1024
2
Bezlimit 2048
2
Bezlimit 256
3
Bezlimit 768
3
Bezlimit 512
3
limit
13
Какая услуга ни разу не использована?
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
Какая прибыль в этом месяце?
SELECT SUM(MONEY) AS "Profit"
FROM DEBIT
WHERE TO_CHAR(TIME1, 'mm.yyyy') = TO_CHAR(sysdate, 'mm.yyyy')
Результат запроса: 1260.
Максимальное число байт принято от куда?
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
Выдать полную информацию о клиентах.
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
Вывести отчет о списании средств с абонента
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
Сколько и на какие порты принималась информация в сумме?
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
Какой договор истекает в текущем месяце?
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
Какой договор уже истек?
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
От куда и во сколько принималась информация?
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
Сколько пользователи скачали?
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
Какой клиент принес больше всего прибыли?
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
)
MONEY
ID_D
1800
npi001
Какие клиенты еще не принесли прибыли?
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
Какая услуга подключена у каждого пользователя?
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
Какую прибыль планируется получить от услуг в конце месяца?
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
Найти услугу которая принесет наибольшую прибыль в конце месяца.
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
Какие услуги принесут доход ниже среднего?
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 10g был использован модуль 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”
Заключение договора
/*------------------------------------------------------------------------------------------------------*/ $ALTA2 = "(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) (CONNECT_DATA = (SID = ALTA2) (SERVER = DEDICATED) ) )"; if(isset($_REQUEST['next'])) {/*если вход выполнен со страницы регистрации абонента*/ ?> 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"); ?> > > > OCILogoff($db1); }else echo "Не удалось соедениться с базой данных"; ?> /*выбор тарифа*/ 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 " //var_dump($results); //echo ""; echo ""; for($i = 0; $i < $nrows; $i++){ echo "\n"; } echo ""; OCILogoff($db1); }else{ echo "Не удалось соедениться с базой данных"; } ?> Добавить"> } 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 " var_dump($_REQUEST['tarif'][0]); $tempstr = "INSERT INTO USLUGA_DOGOVOR VALUES('{$_REQUEST['tarif'][0]}', '{$Nomer_dogovora}')"; echo "".$tempstr; $stmt = oci_parse($db1,$tempstr); oci_execute($stmt); oci_commit($db1); ?> OCILogoff($db1); }else{ echo "/n } } /*------------------------------------------------------------------------------------------------------*/ ?> Статистика оплат
Логин Дата заключения Пароль Тариф ";
";
Не удалось соедениться с сервером баз данных
/n";
Файл “add_schet.php”
<HTML>
<HEAD>
<TITLE>Сайт статистики::Пополнение балансаTITLE>
<TD align="center">Пополнение балансаTD>
/*------------------------------------------------------------------------------------------------------*/ $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 "\n"; echo " for ($i = 0; $i < $nrows; $i++ ) { echo " } echo ""; OCILogoff($db1); }else echo " Не удалось подключиться к базе"; } if(!isset($_REQUEST['put'])) {/*если вход выполнен не из за нажатия кнопки*/ ?> Номер карты: Пароль: > 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>"; ?> Номер карты: Пароль: > print_karta($_REQUEST['nomer_d']); }else if($results['SOSTOYANIE'][0] == 1){ echo "Эта карта уже использоваласьbr>"; ?> Номер карты: Пароль: > 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 ""; $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); ?> Номер карты: Пароль: > print_karta($_REQUEST['nomer_d']); } }else{echo "br> Нет доступа к базе данных при чтении оплаты";} } /*------------------------------------------------------------------------------------------------------*/ ?> Статистика оплат
";Дата Номер карты Сумма ";" . $results['DATA_VREMYA'][$i] ." " . $results['ID_KARTI'][$i] ." " . $results['SUMMA'][$i] ."