Разработка информационной системы 'Компьютерные комплектующие' с использованием клиент-серверной технологии

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    1,11 Мб
  • Опубликовано:
    2013-07-28
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Разработка информационной системы 'Компьютерные комплектующие' с использованием клиент-серверной технологии












Разработка информационной системы "Компьютерные комплектующие" с использованием клиент-серверной технологии

Содержание

Введение

1. Основные характеристики субд Firebird

1.1 Доступ к сети

1.2 Многоверсионная архитектура

1.3 Транзакции

1.4 Хранимые процедуры и триггеры

1.5 Безопасность сервера

2. Проектирование базы данных для информационной системы "Компьютерные комплектующие"

2.1 Системный анализ предметной области

2.2 Инфологическое моделирование

2.3 Даталогическое проектирование

2.4 Физическое проектирование

2.5 Создание базы данных

2.6 Программирование бизнес - логики

3. Разработка Windows-приложения

4. Разработка Web-приложения

Заключение

Список используемой литературы

Приложения

Введение

Реляционные базы данных, являющиеся частью корпоративных информационных систем, обычно построены по принципам клиент-серверной технологии. Суть этой технологии в том, что программный продукт в качестве логических компонентов имеет сервер и несколько клиентов. Клиент работает непосредственно с пользователем, а на сервере (или множестве серверов) хранится информация. По мере необходимости клиент посылает запросы на сервер и принимает request’s (ответы сервера). Принято называть клиентом компонент локальной сети, запрашивающий услуги у некоторого сервера и сервером - компонент локальной сети, оказывающий услуги клиентам.

В первом разделе рассмотрены основные характеристики СУБД FIREBIRD, а именно: доступ к сети, многоверсионная архитектура, транзакции, хранимые процедуры и триггеры, безопасность сервера. Во втором разделе описано проектирование базы данных "Компьютерные комплектующие". В третьем разделе написана разработка WINDOWS - приложения, с помощью которого можно вести базу данных локально. В четвертом разделе описана разработка WEB-приложения, для удаленного ведения базы данных.

Данная курсовая работа была выполнена с использованием языков программирования C++, PHP и SQL, HTML, CSS и PSQL, а так же средства РСУБД Firebird 2. 1, PHP и Borland C++Builder 6. 0.

Целью данной курсовой работы является:

·        Создание информационной системы "Компьютерные комплектующие" с применением клиент-серверной технологии;

Поставленная цель подразумевает решение следующих задач:

·        Проектирование и разработка базы данных в РСУБД Firebird;

·        Проектирование и создание приложения, основанного на клиент-серверной технологии и работающего в операционной системе Windows;

·        Проектирование и создание web-приложения.

Курсовая работа написана на ___ листах. Так же на ___ страницах содержатся код программ, вынесенных в приложение. Курсовая работа содержит 28 рисунков, 5 таблиц и 2 листинга.

база клиент серверный информационный

1. Основные характеристики субд Firebird


Firebird - это мощная, компактная реляционная система управления базами данных (РСУБД) с архитектурой клиент-сервер. Она может выполняться на разнообразных серверных и клиентских платформах, включая Windows, Linux и на некоторых других платформах UNIX, включая FreeBSD и МасOS Х. Это РСУБД промышленного применения, чьи возможности имеют высокий уровень соответствия стандартам SQL, при этом она реализует некоторые мощные расширения языка процедурного программирования конкретного производителя. [1]

 

.1 Доступ к сети


Сервер Firebird, запущенный на любой платформе, принимает ТСР/IР-подключения клиентов с любой клиентской платформы, которая может выполнять Firebird API.

Клиенты не могут подключиться к серверу Firebird через какую-нибудь файловую систему коллективного доступа (NFS, соединение клиентов Samba, общие ресурсы Windows или сетевой диск и т.д.).

Клиент должен подключаться с указанием абсолютного физического пути. Тем не менее в Firebird 1. 5 и выше средство алиасов баз данных позволяет приложениям выполнять "мягкое подключение" с использованием именованных алиасов, абсолютные пути которых указаны специально для каждого сервера.

К серверу Firebird, запушенному на хосте в Windows с сервисами, можно получить доступ от клиентов Windows с помощью сетевого протокола Named Pipes (именованные каналы).

1.2 Многоверсионная архитектура


Модель изоляции и управления работой множества пользователей, принятая в Firebird, является центральной частью архитектуры; она позволяет сохранять в базе данных более одной версии записи одновременно. Множество версий одной записи может существовать одновременно отсюда термин "многоверсионный". Каждая пользовательская задача имеет свой собственный контекстный вид состояния базы данных и записывает свои версии записей на диск сервера. В этот момент новая версия записи (или удаленная запись) недоступна другим задачам пользователей.

Только самая последняя подтвержденная версия записи является видимой за пределами пользовательской задачи, которая успешно сохранила новую версию, и эта запись продолжает оставаться видимой для других задач. Другие задачи будут в курсе того, что что-то произошло с этой записью, поскольку они будут блокированы от изменения или удаления этой записи, пока новая версия не станет "официальной" после подтверждения изменений.

По причине использования многоверсионной архитектуры (называемой также МGА Multi-generational architecture) для Firebird нет необходимости в двухфазной блокировке, используемой другими СУБД для управления многопользовательской работой. [3]

1.3 Транзакции


Все задачи пользователей в Firebird помещаются внутрь транзакций. Задача начинается с оператора START TRANSACTION и завершается, когда выполненная работа подтверждается (commit) или отменяется (rollback), Задача пользователя может выполнять множество запросов к операциям в одной транзакции, включая операции с более чем одной базой данных.

Работа сохраняется в базе данных в два этапа. На первом этапе изменения сохраняются на диске без изменения состояния базы данных. На втором этапе изменения подтверждаются или отменяются клиентским процессом. В версии 1. 5 и выше клиенты могут отменить часть работы, маркируя этапы с помощью точек сохранения (savepoints) и отменяя изменения до точки сохранения без отмены всей транзакции.

Транзакции в Firebird являются атомарными в том смысле, что вся работа в рамках транзакции будет сохранена или вся отменена. Транзакции можно конфигурировать с использованием трех уровней изоляции и множества стратегий тонкой настройки параллельности выполнения и условий чтения/записи.

1.4 Хранимые процедуры и триггеры


Firebird имеет богатый язык процедурных расширений, PSQL, для написания хранимых процедур и триггеров. Это структурированный язык с поддержкой циклов FOR для множеств, условными переходами, обработкой ошибок и пересылкой событий. После создания код PSQL компилируется и сохраняется в двоичном виде.

Триггеры имеют сильную поддержку с фазами До (Before) и После (After) каждого события манипулирования данными. Для каждой фазы/события может существовать множество триггеров, они могут содержать номера, задающие последовательность выполнения. Firebird 1. 5 и выше поддерживает триггеры Before и After, которые обрабатывают все три события манипулирования данными с условными переходами для каждого события. [5]

 


1.5 Безопасность сервера


Firebird обеспечивает безопасность доступа пользователей к серверу с помощью идентификатора пользователя и зашифрованного пароля. Как и любой другой сервер базы данных, Firebird использует соответствующие средства защиты физического, сетевого доступа и файловой системы. Firebird может хранить зашифрованные данные, но за исключением шифрования пароля он не предоставляет средств шифрования самих данных.

2. Проектирование базы данных для информационной системы "Компьютерные комплектующие"


С точки зрения проектирования БД в рамках системного анализа, необходимо осуществить первый этап, т.е. провести подробное словесное описание объектов предметной области и реальных связей, которые присутствуют между описываемыми объектами. В общем случае существуют два подхода к выбору состава и структуры предметной области:

Функциональный подход - он реализует принцип движения "от задач" и применяется тогда, когда заранее известны функции некоторой группы лиц и комплексов задач, для обслуживания информационных потребностей которых создается рассматриваемая БД.

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

 

.1 Системный анализ предметной области


Системный анализ должен заканчиваться подробным описанием информации об объектах предметной области, которая требуется для решения конкретных задач. Эта область должна храниться в БД, формулировкой конкретных задач, которые будут решаться с использованием данной БД с кратким описанием алгоритмов их решения, описанием выходных документов, которые должны генерироваться в системе, описанием входных документов, которые служат основанием для заполнения данными БД. [4]

В базе данных "Компьютерные комплектующие" было выбрано 7 сущностей:

·        "Товар" - содержит информацию о товарах;

·        "Устройства" - содержит сведения об устройствах;

·        "Производитель" - содержит информацию о производителях;

·        "Корзина" - отображает количество приобретаемого товара;

·        "Покупка" - содержит информацию о приобретаемых товарах;

·        "Клиент" - содержит данные о клиентах;

·        "Консультант" - содержит данные о работниках.

Для данных сущностей выбраны следующие связи:

·        связь 1-ко-многим между сущностями Клиент и Покупка;

·        связь 1-ко-многим между сущностями Консультант и Покупка;

·        связь 1-ко-многим между сущностями Устройство и Товар;

·        связь 1-ко-многим между сущностями Производитель и Товар;

·        связь 1-ко-многим между сущностями Товар и Корзина;

·        связь 1-ко-многим между сущностями Корзина и Покупка;

 

.2 Инфологическое моделирование


Инфологическая модель применяется на втором этапе проектирования БД, то есть после словесного описания предметной области. Процесс проектирования длительный, он требует обсуждений с заказчиком, со специалистами в предметной области. Инфологическая модель должна включать такое формализованное описание предметной области, которое легко будет "читаться" не только специалистами по БД. И это описание должно быть настолько ёмким, чтобы можно было оценить глубину и корректность проработки проекта БД и оно не должно быть привязано к конкретной СУБД.

Выбор СУБД - это отдельная задача, для корректного ее решения необходимо иметь проект, который не привязан ни к какой конкретной СУБД.

Инфологическое проектирование, прежде всего, связано с попыткой представления семантики предметной области в модели БД. Реляционная модель данных в силу своей простоты и лаконичности не позволяет отобразить семантику, то есть смысл предметной области. [2]

2.3 Даталогическое проектирование


Важной частью даталогического проектирования является нормализация - разделение групп элементов данных с целью установления основных отношений, уменьшения избыточности и объединения связанных элементов, данных в структуры, которыми можно эффективно манипулировать. Использование ненормализованных БД может привести к нарушению целостности базы данных. Задачей на данном этапе является БД к третьей нормальной форме, так как в этом случае не будет нарушена целостность данных, а дальнейшая нормализация до четвертой нормальной формы, как показывает практика, не является необходимой. Для реализации нормализации БД, необходимо последовательно привести базу данных от первой нормальной формы к третьей. Сначала следует привести БД к первой нормальной форме, делая значения всех атрибутов во всех столбцах атомарными. Далее идет определение первичных ключей и зависящих от них не ключевых полей. Для приведения БД ко второй нормальной форме следует создать отдельную таблицу для каждого первичного ключа и переместить в созданную таблицу соответствующий ключ вместе с зависимыми неключевыми полями. Для приведения БД к третьей нормальной форме необходимо определить зависимые поля и создать новую таблицу для каждого из таких полей. Таким образом, все поля в таблицах, приведенных к третьей нормальной форме, будут независимыми.

 

.5 Создание базы данных


База данных "Компьютерные комплектующие" была создана и зарегистрирована в IB Expert.

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

Таблица 2. 5. 1. Созданные домены.

Имя домена

Тип

Длина

Значение по умолчанию

Ограничения

D_CEN

DECIMAL

10,2


>0

D_DATA

TIMESTAMP



<='TODAY'

D_NO

SMALLINT



>0

D_VCH

VARCHAR

40


нет


В таблице 2, приведенной ниже, можно рассмотреть все определенные таблицы базы данных с указанием их дополнительных свойств. Кроме того, стоит отметить факт наличия связности данных, реализованный путем задания ограничений по внешнему ключу в процессе создания таблиц в программном средстве IBExpert.

Таблица 2. 5. 2. Созданные таблицы.

Имя таблицы

Имя Поля

Тип

Длина

Десятичная часть

Имя домена

Pokupka

NO_POKUPKI

SMALLINT



D_NO


DATAPRIDAJI

TIMESTAMP



D_DATA


NO_KONS

SMALLINT



D_NO


CENAGLAV

DECIMAL

10

2

D_CEN


NO_KLI

SMALLINT



D_NO


NO_KORZ

SMALLINT



D_NO

Klient

NO_KLI

SMALLINT



D_NO


FAMILIYA

VARCHAR

40


D_VCH


IMYA

VARCHAR

40


D_VCH


OTCHESTVO

VARCHAR

40


D_VCH


TELEFON

VARCHAR

40


E_MAIL

VARCHAR

40


D_VCH


GOROD

VARCHAR

40


D_VCH


ULICA

VARCHAR

40


D_VCH


DOM

VARCHAR

40


D_VCH

Konsultant

NO_KONS

SMALLINT



D_NO


FAMILIYAKONS

VARCHAR

40


D_VCH


IMYAKONS

VARCHAR

40


D_VCH


OTCHESTVOKONS

VARCHAR

40


D_VCH


TELEFONKONS

VARCHAR

40


D_VCH


DATAPRIEMA

VARCHAR

40


D_VCH


GORODKONS

VARCHAR

40


D_VCH


ULICAKONS

VARCHAR

40


D_VCH


DOMKONS

VARCHAR

40


D_VCH

Korzina

NO_KORZ

SMALLINT



D_NO


KOLICHESTVO

VARCHAR

40


D_VCH


NO_TOV

SMALLINT



D_NO

Tovar

NO_TOV

SMALLINT



D_NO


SERIALNO

VARCHAR

40


PERTNO

VARCHAR

40


D_VCH


CENA

DECIMAL

10

2

D_CEN


MODEL

VARCHAR

40


D_VCH


NO_USTR

SMALLINT



D_NO


NO_PROIZ

SMALLINT



D_NO

Ustroistvo

NO_USTR

SMALLINT



D_NO


NAIMENOVANIE

VARCHAR

40


D_VCH

Proizvoditel

NO_PROIZ

SMALLINT



D_NO


NAIMPROIZV

VARCHAR

40


D_VCH


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

После проработки всех теоретических аспектов создания базы данных, можно приступать к процессу программирования доменов и таблиц. Для этого в SQL редактор написали код для 4 доменов:

Таблица 2. 5. 3. Домены.

Домен D_CEN

CREATE DOMAIN D_CEN AS DECIMAL (10,2) NOT NULL CHECK (value>0);

Домен D_DATA

CREATE DOMAIN D_DATA AS TIMESTAMP NOT NULL CHECK (value<='TODAY');

Домен D_NO

CREATE DOMAIN D_NO AS SMALLINT NOT NULL CHECK (value >0);

Домен D_VCH

CREATE DOMAIN D_VCH AS VARCHAR (40) CHARACTER SET WIN1251 NOT NULL COLLATE WIN1251;


После создания доменов, началось создание таблиц. Всего в БД будет создано семь таблиц. Таблицы имеют связи, реализуемые с помощью первичных и вторичных (внешних) ключевых полей. Кроме связей эти поля также влияют на целостность данных.

Для создания таблицы KORZINA был написан следующий SQL код, в котором так же указаны ключевые поля:

Таблица 2. 5. 4. Таблица "Корзина".

SQL Код:

CREATE TABLE KORZINA ( NO_KORZ D_NO NOT NULL /* D_NO = SMALLINT NOT NULL CHECK (value >0) */, KOLICHESTVO D_VCH NOT NULL /* D_VCH = VARCHAR (40) NOT NULL */, NO_TOV D_NO NOT NULL /* D_NO = SMALLINT NOT NULL CHECK (value >0) */ ); ); /*** Primary Keys ***/ ALTER TABLE KORZINA ADD PRIMARY KEY (NO_KORZ);


Так же было создано автоинкрементное поле для таблицы KORZINA:

Таблица 2. 5. 5. Автоинкрементное поле.

SQL Код:

CREATE OR ALTER TRIGGER KORZINA_BI0 FOR KORZINA ACTIVE BEFORE INSERT POSITION 0 AS begin if (NEW. no_korz IS NULL) then NEW. no_korz=GEN_ID (gen_korz_no,1); End


Подобным образом были созданы таблицы KLIENT, KONSULTANT, POKUPKA, TOVAR, USTROIYSTVO, PROIZVODITEL. Для этих таблиц так же были заданы ключевые поля, внешние ключи, и разработаны генераторы для создания автоинкрементных полей.

 

.6 Программирование бизнес - логики


Бизнес-логика - в разработке информационных систем - совокупность правил, принципов, зависимостей поведения объектов предметной области (области человеческой деятельности, которую система поддерживает). Иначе можно сказать, что бизнес-логика - это реализация правил и ограничений автоматизируемых операций.

В фазе бизнес-моделирования и разработки требований бизнес-логика может описываться в виде:

·        текста;

·        концептуальных аналитических моделей предметной области;

·        бизнес-правил;

·        разнообразных алгоритмов;

·        диаграмм деятельности;

·        графов и диаграмм перехода состояний;

·        моделей бизнес-процессов.

РСУБД предоставляет широкий выбор вариантов программирования бизнес - логики позволяя написать просмотры, хранимые процедуры, триггеры, исключения. Для данной БД было создано 8 просмотров, 26 хранимых процедур, 7 триггеров и 2 исключения (см. Приложение 1).

3. Разработка Windows-приложения


Для разработки данного приложения на компонент DataModule2 были помещены не визуальные компоненты, которые показаны на рисунке 3. 1

Рис. 3.1. Компоненты в DataModule2

.        Были настроены все компоненты, в частности IBDatabase1 и IBTransaction1. В свойстве DefaultAction компонента IBTransaction1 было установлено значение TACOMMIT, отвечающее за подтверждение всех действующих транзакций в приложении. Но так как данное действие срабатывает при выходе их приложения, было принято решение подтверждать транзакции как можно раньше после выполнения каждого действия, связанного с изменением состояния базы данных. В коде программы подобные действия обычно реализуются, используя программный код типа "IBTransaction1->Commit ()". Это позволяет сразу увидеть изменения, не выходя их программы.


 

Рис. 3.2. Настройка компонента IBDatabase1

Рис. 3.3. Настройка компонента IBTransaction

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

На главную форму поместила компонент MainMenu, для переключения между формами содержащими отчет и информацию о приобретенных товарах.

Рис. 3. 4. Главное окно программы

Для просмотра содержимого таблицы нужно воспользоваться меню, в котором можно выбрать интересующие нас данные. Для отображения таблицы на экране формы добавила на форму компонент DBGrid, а так же не визуальные компоненты в DataModule2 и настроила их.

 

Рис. 3.5. Настройка компонентов для отображения таблицы.

Результат настройки данных компонентов можно увидеть на рисунке 3. 6.

Рис. 3.6. Форма, на которой отображена таблица "Товары".

Для того, чтобы добавить, изменить или удалить данные из таблицы, добавила на форму компоненты: Button - для подтверждения действия и Edit - для добавления, изменения и удаления данных. Для проверки работоспособности данной программы выполним следующие действия. Выполним ввод данных в таблицу и выберем нужное действие.

Рис. 3.7. Ввод данных в таблицу Товаров.

На рисунке 3. 8 показана таблица Товаров после добавления в нее данных.

Рис. 3.8. Результат добавления данных в таблицу Товары.

Для изменения данных о товаре - введем номер товара и введем нужную информацию.

Рис. 3.9. Изменение данных в таблице Товары

На рисунке 3. 10 показана таблица Товаров после изменения в ней данных.

Рис. 3.10. Результат изменения данных в таблице Товары

Для удаления нужно ввести номер товара, как показано на рисунке 3. 11.

Рис. 3.11. Удаление записи из таблицы Товары

На рисунке 3. 12 показана таблица Товаров после удаления в ней данных.

Рис. 3.12. Результат удаления из таблицы Товары

Для всех этих действий приведен код в листинге 1.

Листинг 1. Обработчик события кнопки Button1 для удаления, изменения или добавления.

void __fastcall TForm1:: Button1Click (TObject *Sender) {DataModule2->INS_TOV->ParamByName ("NO_TOV") - >AsString=Edit1->Text; DataModule2->INS_TOV->ParamByName ("NO_USTR") - >AsString=Edit2->Text; DataModule2->INS_TOV->ParamByName ("NO_PROIZ") - >AsString=Edit3->Text; DataModule2->INS_TOV->ParamByName ("MODEL") - >AsString=Edit4->Text; DataModule2->INS_TOV->ParamByName ("SERIALNO") - >AsString=Edit5->Text; DataModule2->INS_TOV->ParamByName ("PARTNO") - >AsString=Edit6->Text; DataModule2->INS_TOV->ParamByName ("CENA") - >AsString=Edit7->Text; if ( (Edit1->Text=="") || (Edit2->Text=="") || (Edit3->Text=="") || (Edit4->Text=="") || (Edit5->Text=="") || (Edit6->Text=="") || (Edit7->Text=="")) { ShowMessage ("заполните все поля корректно"); Form1->Repaint (); } else { DataModule2->INS_TOV->Prepare (); // подготовка к выполнению транзакции DataModule2->INS_TOV->ExecProc (); // выполнение транзакции DataModule2->IBTable1->Close (); DataModule2->IBTable1->Open (); // закрываем и открываем таблицу для обновления данных Edit1->Clear (); // очистка полей ввода Edit2->Clear (); // очистка полей ввода Edit3->Clear (); // очистка полей ввода Edit4->Clear (); // очистка полей ввода Edit5->Clear (); // очистка полей ввода Edit6->Clear (); // очистка полей ввода Edit7->Clear (); // очистка полей ввода DataModule2->IBTransaction1->Commit (); DataModule2->IBTable1->Close (); DataModule2->IBTable1->Open (); // закрываем и открываем таблицу для обновления данных ShowMessage ("запись добавлена"); }} // --------------------------------------------------------------------------- void __fastcall TForm1:: Button2Click (TObject *Sender) {DataModule2->UPD_TOV->ParamByName ("NO_TOV") - >AsString=Edit1->Text; DataModule2->UPD_TOV->ParamByName ("NO_USTR") - >AsString=Edit2->Text; DataModule2->UPD_TOV->ParamByName ("NO_PROIZ") - >AsString=Edit3->Text; DataModule2->UPD_TOV->ParamByName ("MODEL") - >AsString=Edit4->Text; DataModule2->UPD_TOV->ParamByName ("SERIALNO") - >AsString=Edit5->Text; DataModule2->UPD_TOV->ParamByName ("PARTNO") - >AsString=Edit6->Text; DataModule2->UPD_TOV->ParamByName ("CENA") - >AsString=Edit7->Text; if ( (Edit1->Text=="") || (Edit2->Text=="") || (Edit3->Text=="") || (Edit4->Text=="") || (Edit5->Text=="") || (Edit6->Text=="") || (Edit7->Text=="")) { ShowMessage ("заполните все поля корректно"); Form1->Repaint (); } else { DataModule2->UPD_TOV->Prepare (); // подготовка к выполнению транзакции DataModule2->UPD_TOV->ExecProc (); // выполнение транзакции DataModule2->IBTable1->Close (); DataModule2->IBTable1->Open (); // закрываем и открываем таблицу для обновления данных Edit1->Clear (); // очистка полей ввода Edit2->Clear (); // очистка полей ввода Edit3->Clear (); // очистка полей ввода Edit4->Clear (); // очистка полей ввода Edit5->Clear (); // очистка полей ввода Edit6->Clear (); // очистка полей ввода Edit7->Clear (); // очистка полей ввода DataModule2->IBTransaction1->Commit (); DataModule2->IBTable1->Close (); DataModule2->IBTable1->Open (); // закрываем и открываем таблицу для обновления данных ShowMessage ("запись изменена"); }} // --------------------------------------------------------------------------- void __fastcall TForm1:: Button3Click (TObject *Sender) {DataModule2->DEL_TOV->ParamByName ("NO_TOV") - >AsString=Edit1->Text; if (Edit1->Text=="") { ShowMessage ("Заполните поле корректно"); Form1->Repaint (); } else { DataModule2->DEL_TOV->Prepare (); DataModule2->DEL_TOV->ExecProc (); DataModule2->IBTable1->Close (); DataModule2->IBTable1->Open (); Edit1->Clear (); DataModule2->IBTransaction1->Commit (); DataModule2->IBTable1->Close (); DataModule2->IBTable1->Open (); // закрываем и открываем таблицу для обновления данных ShowMessage ("Запись удалена"); }}



4. Разработка Web-приложения


Для соединения с базой данных используется метод ibase_connect (). Чтобы создать соединение с БД "Компьютерные комплектующие" был создан код, приведенный на листинге 2. Для запроса к базе данных используется переменная $query, а для получения идентификатора запроса - переменная $result, как показано ниже. Так же в листинге представлен код вывода полученной информации.

Листинг 2.

<html> <head> <title>ПРОСМОТР</title> </head> <body bgcolor="E0FFFF"> <table align="center"> <td> <a href="INDEX.html">НА ГЛАВНУЮ</a><br> <table align=center border="0" cellpadding="0" cellspacing="0">


Программный код, реализующий Web-приложение с использованием РНР и СУБД Firebird приведен в приложении 2.

 


Заключение


В рамках выполнения курсовой работы была разработана информационная система "Компьютерные комплектующие", основанная на клиент-серверной технологии, а так же получены навыки работы с данной технологией.

Были достигнуты поставленные цели и задачи, а именно:

·        создана информационная система "Компьютерные комплектующие" с применением клиент-серверной технологии;

·        разработана базы данных в РСУБД Firebird;

·        создано приложение, основанное на клиент-серверной технологии и работающее в операционной системе Windows;

·        создано web-приложение.

В ходе выполнения поставленных задач и целей были получены навыки работы с базами данных, технологией IBExpert, PHP, а также программирования в среде Borland C++ Builder 6. 0.

Список используемой литературы


1.      Барри Х. FIREBIRD: руководство разработчика баз данных. СПб.: БХВ-Петербург, 2011. - 1104 с. - ISBN 5-94157-609-9

2.      Кузнецов С.Д. Основы баз данных. - 2-е изд. - М.: Интернет-университет информационных технологий; БИНОМ. Лаборатория знаний, 2010. - 484 с. - ISBN 978-5-94774-736-2

.        Джаррод Холингворт, Боб Сворт, Марк Кэшмэн, Поль Густавсон Borland C++ Builder 6. Руководство разработчика = Borland C++ Builder 6 Developer’s Guide. - М.: "Вильямс", 2004. - С. 976. - ISBN 0-672-32480-6

.        Гарсиа-Молина Г., Ульман Дж., Уидом Дж. Системы баз данных. Полный курс = Database Systems: The Complete Book. - Вильямс, 2008. - 1088 с. - ISBN 5-8459-0384-X

.        Коннолли Т., Бегг К. Базы данных. Проектирование, реализация и сопровождение. Теория и практика = Database Systems: A Practical Approach to Design, Implementation, and Management. - 3-е изд. - М.: Вильямс, 2003. - 1436 с. - ISBN 0-201-70857-4

Приложения

 

Приложение 1

 

Windows приложение

 // --------------------------------------------------------------------------- #include <vcl. h> #pragma hdrstop #include "Unit1. h" #include "Unit2. h" #include "Unit3. h" #include "Unit4. h" #include "Unit5. h" #include "Unit6. h" #include "Unit7. h" #include "Unit8. h" // --------------------------------------------------------------------------- #pragma package (smart_init) #pragma resource "*. dfm" TForm1 *Form1; // --------------------------------------------------------------------------- __fastcall TForm1:: TForm1 (TComponent* Owner) : TForm (Owner) {} // --------------------------------------------------------------------------- void __fastcall TForm1:: Button1Click (TObject *Sender) {DataModule2->INS_TOV->ParamByName ("NO_TOV") - >AsString=Edit1->Text; DataModule2->INS_TOV->ParamByName ("NO_USTR") - >AsString=Edit2->Text; DataModule2->INS_TOV->ParamByName ("NO_PROIZ") - >AsString=Edit3->Text; DataModule2->INS_TOV->ParamByName ("MODEL") - >AsString=Edit4->Text; DataModule2->INS_TOV->ParamByName ("SERIALNO") - >AsString=Edit5->Text; DataModule2->INS_TOV->ParamByName ("PARTNO") - >AsString=Edit6->Text; DataModule2->INS_TOV->ParamByName ("CENA") - >AsString=Edit7->Text; if ( (Edit1->Text=="") || (Edit2->Text=="") || (Edit3->Text=="") || (Edit4->Text=="") || (Edit5->Text=="") || (Edit6->Text=="") || (Edit7->Text=="")) { ShowMessage ("заполните все поля корректно"); Form1->Repaint (); } else { DataModule2->INS_TOV->Prepare (); // подготовка к выполнению транзакции DataModule2->INS_TOV->ExecProc (); // выполнение транзакции DataModule2->IBTable1->Close (); DataModule2->IBTable1->Open (); // закрываем и открываем таблицу для обновления данных Edit1->Clear (); // очистка полей ввода Edit2->Clear (); // очистка полей ввода Edit3->Clear (); // очистка полей ввода Edit4->Clear (); // очистка полей ввода Edit5->Clear (); // очистка полей ввода Edit6->Clear (); // очистка полей ввода Edit7->Clear (); // очистка полей ввода DataModule2->IBTransaction1->Commit (); DataModule2->IBTable1->Close (); DataModule2->IBTable1->Open (); // закрываем и открываем таблицу для обновления данных ShowMessage ("запись добавлена"); }} // --------------------------------------------------------------------------- void __fastcall TForm1:: Button2Click (TObject *Sender) {DataModule2->UPD_TOV->ParamByName ("NO_TOV") - >AsString=Edit1->Text; DataModule2->UPD_TOV->ParamByName ("NO_USTR") - >AsString=Edit2->Text; DataModule2->UPD_TOV->ParamByName ("NO_PROIZ") - >AsString=Edit3->Text; DataModule2->UPD_TOV->ParamByName ("MODEL") - >AsString=Edit4->Text; DataModule2->UPD_TOV->ParamByName ("SERIALNO") - >AsString=Edit5->Text; DataModule2->UPD_TOV->ParamByName ("PARTNO") - >AsString=Edit6->Text; DataModule2->UPD_TOV->ParamByName ("CENA") - >AsString=Edit7->Text; if ( (Edit1->Text=="") || (Edit2->Text=="") || (Edit3->Text=="") || (Edit4->Text=="") || (Edit5->Text=="") || (Edit6->Text=="") || (Edit7->Text=="")) { ShowMessage ("заполните все поля корректно"); Form1->Repaint (); } else { DataModule2->UPD_TOV->Prepare (); // подготовка к выполнению транзакции DataModule2->UPD_TOV->ExecProc (); // выполнение транзакции DataModule2->IBTable1->Close (); DataModule2->IBTable1->Open (); // закрываем и открываем таблицу для обновления данных Edit1->Clear (); // очистка полей ввода Edit2->Clear (); // очистка полей ввода Edit3->Clear (); // очистка полей ввода Edit4->Clear (); // очистка полей ввода Edit5->Clear (); // очистка полей ввода Edit6->Clear (); // очистка полей ввода Edit7->Clear (); // очистка полей ввода DataModule2->IBTransaction1->Commit (); DataModule2->IBTable1->Close (); DataModule2->IBTable1->Open (); // закрываем и открываем таблицу для обновления данных ShowMessage ("запись изменена"); }} // --------------------------------------------------------------------------- void __fastcall TForm1:: Button3Click (TObject *Sender) {DataModule2->DEL_TOV->ParamByName ("NO_TOV") - >AsString=Edit1->Text; if (Edit1->Text=="") { ShowMessage ("Заполните поле корректно"); Form1->Repaint (); } else { DataModule2->DEL_TOV->Prepare (); DataModule2->DEL_TOV->ExecProc (); DataModule2->IBTable1->Close (); DataModule2->IBTable1->Open (); Edit1->Clear (); DataModule2->IBTransaction1->Commit (); DataModule2->IBTable1->Close (); DataModule2->IBTable1->Open (); // закрываем и открываем таблицу для обновления данных ShowMessage ("Запись удалена"); }} // --------------------------------------------------------------------------- void __fastcall TForm1:: Edit1Change (TObject *Sender) {TLocateOptions LO; DataModule2->IBTable1->Locate ("NO_TOV", Edit1->Text, LO<<loPartialKey<< loCaseInsensitive); } // --------------------------------------------------------------------------- void __fastcall TForm1:: DBGrid1TitleClick (TColumn *Column) {DataModule2->IBTable1->Active=false; DataModule2->IBTable1->IndexFieldNames=Column->FieldName; DataModule2->IBTable1->Active=true; } // --------------------------------------------------------------------------- void __fastcall TForm1:: Edit8Change (TObject *Sender) { DataModule2->IBTable1->Filtered=true; if (Edit8->Text=="") { DataModule2->IBTable1->Filtered=false; }} // --------------------------------------------------------------------------- void __fastcall TForm1:: N1Click (TObject *Sender) {Form3->QuickRep1->Preview (); } // --------------------------------------------------------------------------- void __fastcall TForm1:: Button4Click (TObject *Sender) {Form4->Show (); } // --------------------------------------------------------------------------- void __fastcall TForm1:: Button5Click (TObject *Sender) {Form5->Show (); } // --------------------------------------------------------------------------- void __fastcall TForm1:: N2Click (TObject *Sender) { Form6->Show (); } // --------------------------------------------------------------------------- void __fastcall TForm1:: Timer1Timer (TObject *Sender) {DataModule2->IBTable1->Close (); DataModule2->IBTable1->Open (); DataModule2->IBTable2->Close (); DataModule2->IBTable2->Open (); DataModule2->IBTable3->Close (); DataModule2->IBTable3->Open (); } // ---------------------------------------------------------------------------


Приложение 2

 

WEB приложение

html

<html> <head> <title>Главная страница </title> <link href="style. css" rel="stylesheet" type="text/css"> </head><body> <table align=center border="0" cellpadding="0" cellspacing="0">

Html добавления

<html> <head> <title>Добавление в таблицу Товар</title> </head> <body bgcolor="#32CD32"> <table align="center"> <td width="200" bgcolor="#7FFFD4"><b> <a href="SELECT_TOV. php">Просмотреть список товаров</a><br> <a href="SEARCH_TOV.html">Осуществить поиск товара по устройству</a><br> <a href="SEARCH_TOV_V.html">Осуществить поиск товара </a><br> <a href="INSERT_TOV.html">Добавить данные о товаре </a><br> <a href="UPD_TOV.html"> Изменить данные о товаре </a><br> <a href="DEL_TOV.html"> Удалить данные о товаре </a><br> <a href="INDEX.html">НА ГЛАВНУЮ</a><br> </td> <td> <table align=center border="0" cellpadding="0" cellspacing="0" >

Php добавления

<? php $NO_TOV=$_POST ['NO_TOV']; $SERIALNO=$_POST ['SERIALNO']; $PARTNO=$_POST ['PARTNO']; $CENA=$_POST ['CENA']; $MODEL=$_POST ['MODEL']; $NO_USTR=$_POST ['NO_USTR']; $NO_PROIZ=$_POST ['NO_PROIZ']; $host='172. 23. 64. 64: // home/ftp/10/1410028/G141001_YUSHCHENKO. FDB'; /*$host='knit-614-01: D: /DB/G141001_YUSHCHENKO. FDB'; */ $dbcharset = 'WIN1251'; $usname = 'sysdba'; $pswrd = 'masterkey'; $db = ibase_pconnect ($host, $usname, $pswrd,$dbcharset); if (! $db) {echo 'Ошибка соединения с базой данных'; exit; } $query1 ="execute procedure INSERT_TOV1 ('". $NO_TOV. "','". $SERIALNO. "','". $PARTNO. "','". $CENA. "','". $MODEL. "','". $NO_USTR. "','". $NO_PROIZ. "')"; $it=ibase_trans (); echo '<br>'; $result=ibase_query ($query1); $ic=ibase_commit (); if ($result) echo '<p style="color: GREEN; ">Запись добавлена в базу данных</p>'; ? >

Html изменения

<html> <head> <title>ИЗМЕНЕНИЕ</title> </head> <body bgcolor="#BA55D3"> <table align="center"> <td width="200" bgcolor="#D8BFD8"><b> <a href="SELECT_TOV. php">Просмотреть список товаров</a><br> <a href="SEARCH_TOV.html">Осуществить поиск товара по устройству</a><br> <a href="SEARCH_TOV_V.html">Осуществить поиск товара </a><br> <a href="INSERT_TOV.html">Добавить данные о товаре </a><br> <a href="UPD_TOV.html"> Изменить данные о товаре </a><br> <a href="DEL_TOV.html"> Удалить данные о товаре </a><br> <a href="INDEX.html">НА ГЛАВНУЮ</a><br> </td> <td> <table align=center border="0" cellpadding="0" cellspacing="0" >

Php изменения

<? php $NO_TOV=$_POST ['NO_TOV']; $SERIALNO=$_POST ['SERIALNO']; $PARTNO=$_POST ['PARTNO']; $CENA=$_POST ['CENA']; $MODEL=$_POST ['MODEL']; $NO_USTR=$_POST ['NO_USTR']; $NO_PROIZ=$_POST ['NO_PROIZ']; $host='172. 23. 64. 64: // home/ftp/10/1410028/G141001_YUSHCHENKO. FDB'; /*$host='knit-614-01: D: /DB/G141001_YUSHCHENKO. FDB'; */ $usname = 'sysdba'; $pswrd = 'masterkey'; $db = ibase_pconnect ($host, $usname, $pswrd); if (! $db) {echo 'Ошибка соединения с базой данных '; exit; } $query1 ="execute procedure UPD_TOV1 ('". $NO_TOV. "','". $SERIALNO. "','". $PARTNO. "','". $CENA. "','". $MODEL. "','". $NO_USTR. "','". $NO_PROIZ. "')"; $it=ibase_trans (); echo '<br>'; $result=ibase_query ($query1); $ic=ibase_commit (); if ($result) echo '<p style="color: lime; ">Запись успешно изменена</p>'; ? >

Html удаления

<html> <head> <title>УДАЛЕНИЕ товара</title> </head> <body bgcolor=#CD5555> <table align="center"> <td width="200" bgcolor="#FFC1C1"><b> <a href="SELECT_TOV. php">Просмотреть список товаров</a><br> <a href="SEARCH_TOV.html">Осуществить поиск товара по устройству</a><br> <a href="SEARCH_TOV_V.html">Осуществить поиск товара </a><br> <a href="INSERT_TOV.html">Добавить данные о товаре </a><br> <a href="UPD_TOV.html"> Изменить данные о товаре </a><br> <a href="DEL_TOV.html"> Удалить данные о товаре </a><br> <a href="INDEX.html">НА ГЛАВНУЮ</a><br> </td> <td> <table align=center border="0" cellpadding="0" cellspacing="0">

<html> <head> <title>УДАЛЕНИЕ</title> </head> <body bgcolor=#CD5555> <table align="center"> <td width="200" bgcolor="CCCCCC"><b> <a href="SELECT_TOV. php">Просмотреть список товаров</a><br> <a href="SEARCH_TOV.html">Осуществить поиск товара по устройству</a><br> <a href="SEARCH_TOV_V.html">Осуществить поиск товара </a><br> <a href="INSERT_TOV.html">Добавить данные о товаре </a><br> <a href="UPD_TOV.html"> Изменить данные о товаре </a><br> <a href="DEL_TOV.html"> Удалить данные о товаре </a><br> <a href="INDEX.html">НА ГЛАВНУЮ</a><br> </td> <td> <table align=center border="0" cellpadding="0" cellspacing="0" >

Html просмотра

<html> <head> <title>ПРОСМОТР товара</title> <META charset=windows-1251> </head> <body bgcolor="E0FFFF"> <table align="center"> <td> <table align=center border="0" cellpadding="0" cellspacing="0">

Php просмотра

<html> <head> <title>ПРОСМОТР</title> </head> <body bgcolor="E0FFFF"> <table align="center"> <td> <a href="INDEX.html">НА ГЛАВНУЮ</a><br> <table align=center border="0" cellpadding="0" cellspacing="0">

Html поиска

<html> <head> <title>ПОИСК ТОВАРА</title> </head> <body bgcolor="black"> <table align="center"> <td width="200" bgcolor="CCCCCC"><b> <a href="SELECT_TOV. php">Просмотреть список товаров</a><br> <a href="SEARCH_TOV.html">Осуществить поиск товара по устройству</a><br> <a href="SEARCH_TOV_V.html">Осуществить поиск товара </a><br> <a href="INSERT_TOV.html">Добавить данные отоваре </a><br> <a href="UPD_TOV.html"> Изменить данные отоваре </a><br> <a href="DEL_TOV.html"> Удалить данные отоваре </a><br> <a href="INDEX.html">НА ГЛАВНУЮ</a><br> </td><td> <table align=center border="0" cellpadding="0" cellspacing="0" >

Php поиска

<? php $host='172. 23. 64. 64: // home/ftp/10/1410028/G141001_YUSHCHENKO. FDB'; /*$host='knit-614-01: D: /DB/G141001_YUSHCHENKO. FDB'; */ $usname = 'sysdba'; $pswrd = 'masterkey'; $db = ibase_pconnect ($host, $usname, $pswrd); if (! $db) {echo 'Ошибка соединения с базой данных '; exit; } $a=$_POST ['NAIMENOVANIE']; if (! $a) {echo '<p style="color: red; ">Вы ввели не всю информацию! </p>'; exit; } $query1 = "select * from XP_VIEW_TOVARV ('". $a. "')"; $result=ibase_query ($query1); echo '<table border=1 width="100%" cellpadding="5">'; echo '<tr><th>ID</th> <th bgcolor = "#CCCCFF">Номер устройства</th> <th bgcolor = "#CCCCFF">Наименование</th> <th bgcolor = "#CCCCFF">Производитель</th> <th bgcolor = "#CCCCFF">Модель</th></tr>'; $i=0; while ($row = ibase_fetch_row ($result)) {$i+=1; echo "<tr> <td>$i</td> <td>$row [0] </td> <td>$row [1] </td> <td>$row [2] </td> <td>$row [3] </td> </tr>"; } echo "</table>"; ibase_free_result ($result); ? >


Приложение 3

 

SQL Код БД

/******************************************************************************/ /*** Generated by IBExpert 2010. 01. 22 28. 05.2013 13: 40: 53 ***/ /******************************************************************************/ SET SQL DIALECT 3; SET NAMES WIN1251; CREATE DATABASE '172. 23. 64. 64: // home/ftp/10/1410028/G141001_YUSHCHENKO. FDB' USER 'SYSDBA' PASSWORD 'masterkey' PAGE_SIZE 16384 DEFAULT CHARACTER SET WIN1251; /******************************************************************************/ /*** Domains ***/ /******************************************************************************/ CREATE DOMAIN D_CEN AS DECIMAL (10,2) NOT NULL CHECK (value>0); CREATE DOMAIN D_DATA AS TIMESTAMP NOT NULL CHECK (value<='TODAY'); CREATE DOMAIN D_NO AS SMALLINT NOT NULL CHECK (value >0); CREATE DOMAIN D_VCH AS VARCHAR (40) NOT NULL; ******************************************************************************/ /*** Generators ***/ /******************************************************************************/ CREATE GENERATOR GEN_KLIENT_NO; SET GENERATOR GEN_KLIENT_NO TO 9; CREATE GENERATOR GEN_KONS_NO; SET GENERATOR GEN_KONS_NO TO 5; CREATE GENERATOR GEN_KORZ_NO; SET GENERATOR GEN_KORZ_NO TO 5; CREATE GENERATOR GEN_POKUP_NO; SET GENERATOR GEN_POKUP_NO TO 6; CREATE GENERATOR GEN_PROIZ_NO; SET GENERATOR GEN_PROIZ_NO TO 5; CREATE GENERATOR GEN_TOVAR_NO; SET GENERATOR GEN_TOVAR_NO TO 5; CREATE GENERATOR GEN_USTR_NO; SET GENERATOR GEN_USTR_NO TO 7; /******************************************************************************/ /*** Exceptions ***/ /******************************************************************************/ CREATE EXCEPTION EXC_NODATA 'не введены числовые данные'; CREATE EXCEPTION EXC_NOTEXT 'не введены текстовые данные'; SET TERM; ^ /******************************************************************************/ /*** Stored Procedures ***/ /******************************************************************************/ CREATE PROCEDURE DEL_KLI ( NO_KLI SMALLINT) AS BEGIN EXIT; END^ CREATE PROCEDURE DEL_KONS ( NO_KONS SMALLINT) AS BEGIN EXIT; END^ CREATE PROCEDURE DEL_KORZ ( NO_KORZ SMALLINT) AS BEGIN EXIT; END^ CREATE PROCEDURE DEL_POKUP ( NO_POKUPKI SMALLINT) AS BEGIN EXIT; END^ CREATE PROCEDURE DEL_PROIZ ( NO_PROIZ SMALLINT) AS BEGIN EXIT; END^ CREATE PROCEDURE DEL_TOV ( NO_TOV SMALLINT) AS BEGIN EXIT; END^ CREATE PROCEDURE DEL_USTR ( NO_USTR SMALLINT) AS BEGIN EXIT; END^ CREATE PROCEDURE INSERT_KLI ( NO_KLI SMALLINT, FAMILIYA VARCHAR (40), IMYA VARCHAR (40), OTCHESTVO VARCHAR (40), TELEFON VARCHAR (40), E_MAIL VARCHAR (40), GOROD VARCHAR (40), ULICA VARCHAR (40), DOM VARCHAR (40)) AS BEGIN EXIT; END^ CREATE PROCEDURE INSERT_KONS ( NO_KONS SMALLINT, FAMILIYAKONS VARCHAR (40), IMYAKONS VARCHAR (40), OTCHESTVOKONS VARCHAR (40), TELEFONKONS VARCHAR (40), GORODKONS VARCHAR (40), ULICAKONS VARCHAR (40), DOMKONS VARCHAR (40), DATAPRIEMA VARCHAR (40)) AS BEGIN EXIT; END^ CREATE PROCEDURE INSERT_KORZ ( NO_KORZ SMALLINT, NO_TOV SMALLINT, KOLICHESTVO VARCHAR (40)) AS BEGIN EXIT; END^ CREATE PROCEDURE INSERT_POKUP ( NO_POKUPKI SMALLINT, NO_KORZ SMALLINT, NO_KLI SMALLINT, NO_KONS SMALLINT, DATAPRIDAJI VARCHAR (40), CENAGLAV DECIMAL (10,2)) AS BEGIN EXIT; END^ CREATE PROCEDURE INSERT_PROIZ ( NO_PROIZ SMALLINT, NAIMPROIZV VARCHAR (40)) AS BEGIN EXIT; END^ CREATE PROCEDURE INSERT_TOV ( NO_TOV SMALLINT, NO_USTR SMALLINT, NO_PROIZ SMALLINT, MODEL VARCHAR (40), SERIALNO VARCHAR (40), PARTNO VARCHAR (40), CENA DECIMAL (10,2)) AS BEGIN EXIT; END^ CREATE PROCEDURE INSERT_TOV1 ( NO_TOV SMALLINT, SERIALNO VARCHAR (40), PARTNO VARCHAR (40), CENA DECIMAL (10,2), MODEL VARCHAR (40), NO_USTR SMALLINT, NO_PROIZ SMALLINT) AS BEGIN EXIT; END^ CREATE PROCEDURE INSERT_USTR ( NO_USTR SMALLINT, NAIMENOVANIE VARCHAR (40)) AS BEGIN EXIT; END^ CREATE PROCEDURE UPD_KLI ( NO_KLI SMALLINT, FAMILIYA VARCHAR (40), IMYA VARCHAR (40), OTCHESTVO VARCHAR (40), TELEFON VARCHAR (40), E_MAIL VARCHAR (40), GOROD VARCHAR (40), ULICA VARCHAR (40), DOM VARCHAR (40)) AS BEGIN EXIT; END^ CREATE PROCEDURE UPD_KONS ( NO_KONS SMALLINT, FAMILIYAKONS VARCHAR (40), IMYAKONS VARCHAR (40), OTCHESTVOKONS VARCHAR (40), TELEFONKONS VARCHAR (40), GORODKONS VARCHAR (40), ULICAKONS VARCHAR (40), DOMKONS VARCHAR (40), DATAPRIEMA VARCHAR (40)) AS BEGIN EXIT; END^ CREATE PROCEDURE UPD_KORZ ( NO_KORZ SMALLINT, NO_TOV SMALLINT, KOLICHESTVO VARCHAR (40)) AS BEGIN EXIT; END^ CREATE PROCEDURE UPD_POKUP ( NO_POKUPKI SMALLINT, NO_KORZ SMALLINT, NO_KLI SMALLINT, NO_KONS SMALLINT, DATAPRIDAJI VARCHAR (40), CENAGLAV DECIMAL (10,2)) AS BEGIN EXIT; END^ CREATE PROCEDURE UPD_PROIZ ( NO_PROIZ SMALLINT, NAIMPROIZV VARCHAR (40)) AS BEGIN EXIT; END^ CREATE PROCEDURE UPD_TOV ( NO_TOV SMALLINT, NO_USTR SMALLINT, NO_PROIZ SMALLINT, MODEL VARCHAR (40), SERIALNO VARCHAR (40), PARTNO VARCHAR (40), CENA DECIMAL (10,2)) AS BEGIN EXIT; END^ CREATE PROCEDURE UPD_TOV1 ( NO_TOV SMALLINT, SERIALNO VARCHAR (40), PARTNO VARCHAR (40), CENA DECIMAL (10,2), MODEL VARCHAR (40), NO_USTR SMALLINT, NO_PROIZ SMALLINT) AS BEGIN EXIT; END^ CREATE PROCEDURE UPD_USTR ( NO_USTR SMALLINT, NAIMENOVANIE VARCHAR (40)) AS BEGIN EXIT; END^ CREATE PROCEDURE XP_VIEW_OBSLUGF ( FAMILIYA VARCHAR (40)) RETURNS ( X_NO_POKUPKI SMALLINT, X_FAMILIYA VARCHAR (40), X_IMYA VARCHAR (40), X_FAMILIYAKONS VARCHAR (40), X_IMYAKONS VARCHAR (40), X_DATAPRIDAJI TIMESTAMP) AS BEGIN SUSPEND; END^ CREATE PROCEDURE XP_VIEW_OBSLUGFK ( FAMILIYAKONS VARCHAR (40)) RETURNS ( X_NO_POKUPKI SMALLINT, X_FAMILIYA VARCHAR (40), X_IMYA VARCHAR (40), X_FAMILIYAKONS VARCHAR (40), X_IMYAKONS VARCHAR (40), X_DATAPRIDAJI TIMESTAMP) AS BEGIN SUSPEND; END^ CREATE PROCEDURE XP_VIEW_PROIZ ( NAIMPROIZV VARCHAR (40)) RETURNS ( X_NO_PROIZ SMALLINT, X_NAIMPROIZV VARCHAR (40)) AS BEGIN SUSPEND; END^ CREATE PROCEDURE XP_VIEW_PROIZNO ( NO_PROIZ SMALLINT) RETURNS ( X_NO_PROIZ SMALLINT, X_NAIMPROIZV VARCHAR (40)) AS BEGIN SUSPEND; END^ CREATE PROCEDURE XP_VIEW_TOVAR1 ( NAIMENOVANIE VARCHAR (20)) RETURNS ( X_NO_TOV SMALLINT, X_NAIMENOVANIE VARCHAR (40), X_NAIMPROIZV VARCHAR (40), X_MODEL VARCHAR (40)) AS BEGIN SUSPEND; END^ CREATE PROCEDURE XP_VIEW_TOVARABC ( NO_TOV SMALLINT) RETURNS ( X_NO_TOV SMALLINT, X_NO_USTR SMALLINT, X_NO_PROIZ SMALLINT, X_MODEL VARCHAR (40), X_SERIALNO VARCHAR (40), X_PARTNO VARCHAR (40), X_CENA DECIMAL (10,2)) AS BEGIN SUSPEND; END^ CREATE PROCEDURE XP_VIEW_TOVARV ( NAIMENOVANIE VARCHAR (20)) RETURNS ( X_NO_TOV SMALLINT, X_NAIMENOVANIE VARCHAR (40), X_NAIMPROIZV VARCHAR (40), X_MODEL VARCHAR (40)) AS BEGIN SUSPEND; END^ CREATE PROCEDURE XP_VIEW_USTR ( NAIMENOVANIE VARCHAR (20)) RETURNS ( X_NO_USTR SMALLINT, X_NAIMENOVANIE VARCHAR (40)) AS BEGIN SUSPEND; END^ SET TERM; ^ /******************************************************************************/ /*** Tables ***/ /******************************************************************************/ CREATE TABLE KLIENT ( NO_KLI D_NO, FAMILIYA D_VCH NOT NULL, IMYA D_VCH NOT NULL, OTCHESTVO D_VCH NOT NULL, TELEFON D_VCH NOT NULL, E_MAIL D_VCH NOT NULL, GOROD D_VCH NOT NULL, ULICA D_VCH NOT NULL, DOM D_VCH NOT NULL); CREATE TABLE KONSULTANT ( NO_KONS D_NO NOT NULL, FAMILIYAKONS D_VCH NOT NULL, DATAPRIEMA D_DATA NOT NULL, TELEFONKONS D_VCH NOT NULL, IMYAKONS D_VCH NOT NULL, OTCHESTVOKONS D_VCH NOT NULL, GORODKONS D_VCH NOT NULL, ULICAKONS D_VCH NOT NULL, DOMKONS D_VCH NOT NULL); CREATE TABLE KORZINA ( NO_KORZ D_NO NOT NULL, KOLICHESTVO D_VCH NOT NULL, NO_TOV D_NO NOT NULL); CREATE TABLE POKUPKA ( NO_POKUPKI D_NO NOT NULL, DATAPRIDAJI D_DATA NOT NULL, NO_KONS D_NO NOT NULL, CENAGLAV D_CEN NOT NULL, NO_KLI D_NO NOT NULL, NO_KORZ D_NO NOT NULL); CREATE TABLE PROIZVODITEL ( NO_PROIZ D_NO NOT NULL, NAIMPROIZV D_VCH NOT NULL); CREATE TABLE TOVAR ( NO_TOV D_NO NOT NULL, SERIALNO D_VCH NOT NULL, PARTNO D_VCH NOT NULL, CENA D_CEN NOT NULL, MODEL D_VCH NOT NULL, NO_USTR D_NO NOT NULL, NO_PROIZ D_NO NOT NULL); CREATE TABLE USTROIYSTVO ( NO_USTR D_NO NOT NULL, NAIMENOVANIE D_VCH NOT NULL); /******************************************************************************/ /*** Views ***/ /******************************************************************************/ /* View: VIEW_KLIENT */ CREATE VIEW VIEW_KLIENT ( FAMILIYA, IMYA, OTCHESTVO, DATAPRIDAJI) AS select klient. familiya, klient. imya, klient. otchestvo, pokupka. datapridaji from klient, pokupka where klient. no_kli=pokupka. no_kli and klient. familiya like 'С%'; /* View: VIEW_KLIENTX */ CREATE VIEW VIEW_KLIENTX ( FAMILIYA, IMYA, OTCHESTVO) AS select klient. familiya, klient. imya, klient. otchestvo from klient where klient. familiya like 'С%'; /* View: VIEW_OBSLUG */ CREATE VIEW VIEW_OBSLUG ( NO_POKUPKI, FAMILIYA, IMYA, FAMILIYAKONS, IMYAKONS, DATAPRIDAJI) AS SELECT pokupka. no_pokupki, klient. familiya, klient. imya, konsultant. familiyakons, konsultant. imyakons, pokupka. datapridaji FROM klient, konsultant, pokupka WHERE klient. no_kli=pokupka. no_kli and konsultant. no_kons=pokupka. no_kons; /* View: VIEW_PROIZ */ CREATE VIEW VIEW_PROIZ ( NO_PROIZ, NAIMPROIZV) AS select proizvoditel. no_proiz, proizvoditel. naimproizv from proizvoditel order BY proizvoditel. naimproizv; /* View: VIEW_TOVAR */ CREATE VIEW VIEW_TOVAR ( NO_TOV, SERIALNO, PARTNO, CENA, MODEL, NO_USTR, NO_PROIZ) AS select * from tovar where tovar. cena > 800; /* View: VIEW_TOVARSUM */ CREATE VIEW VIEW_TOVARSUM ( CENA) AS select SUM (tovar. cena) from Tovar; /* View: VIEW_TOVARV */ CREATE VIEW VIEW_TOVARV ( NO_TOV, NAIMENOVANIE, NAIMPROIZV, MODEL) AS select tovar. no_tov, ustroiystvo. naimenovanie, proizvoditel. naimproizv, tovar. model from tovar, ustroiystvo, proizvoditel where ustroiystvo. no_ustr=tovar. no_ustr and proizvoditel. no_proiz=tovar. no_proiz; /* View: VIEW_TOVARX */ CREATE VIEW VIEW_TOVARX ( NO_TOV, CENA, MODEL, NO_USTR, NO_PROIZ, NAIMENOVANIE) AS select tovar. no_tov, tovar. cena, tovar. model, tovar. no_ustr, tovar. no_proiz, ustroiystvo. naimenovanie from tovar, ustroiystvo where ustroiystvo. no_ustr=tovar. no_ustr and tovar. cena > 800;; INSERT INTO KLIENT (NO_KLI, FAMILIYA, IMYA, OTCHESTVO, TELEFON, E_MAIL, GOROD, ULICA, DOM) VALUES (1, 'Ющенко', 'Елена', 'Васильевна', '8 900 000 00 00', 'yushch@mail.ru', 'Белгород', '1й Ореховый тупик', '60'); INSERT INTO KLIENT (NO_KLI, FAMILIYA, IMYA, OTCHESTVO, TELEFON, E_MAIL, GOROD, ULICA, DOM) VALUES (2, 'Горшков', 'Григорий', 'Георгиевич', '8 900 800 50 60', 'grisha11@maill.ru', 'Белгород', 'Конева', '17'); INSERT INTO KLIENT (NO_KLI, FAMILIYA, IMYA, OTCHESTVO, TELEFON, E_MAIL, GOROD, ULICA, DOM) VALUES (3, 'Седугина', 'Гадя', 'Анатольевна', '8 951 430 53 84', 'bdgn@mail.ru', 'Белгород', 'Шаландина', '20'); INSERT INTO KLIENT (NO_KLI, FAMILIYA, IMYA, OTCHESTVO, TELEFON, E_MAIL, GOROD, ULICA, DOM) VALUES (4, 'Шалестьев', 'Егор', 'Арсеньевич', '8 258 546 46 57', 'sholoh@mail.ru', 'Строитель', 'Маршалкова', '3'); INSERT INTO KLIENT (NO_KLI, FAMILIYA, IMYA, OTCHESTVO, TELEFON, E_MAIL, GOROD, ULICA, DOM) VALUES (5, 'Кобзев', 'Иван', 'васильевич', '8 879 798 76 91', '1va17n@mail.ru', 'Белгород', 'Костюкова', '25'); INSERT INTO KLIENT (NO_KLI, FAMILIYA, IMYA, OTCHESTVO, TELEFON, E_MAIL, GOROD, ULICA, DOM) VALUES (6, 'Семагин', 'Антон', 'Маркович', '8 865 876 79 74', 'evria@mail.ru', 'Валуйки', 'Ленина', '9'); INSERT INTO KLIENT (NO_KLI, FAMILIYA, IMYA, OTCHESTVO, TELEFON, E_MAIL, GOROD, ULICA, DOM) VALUES (7, 'Петров', 'Петор', 'Петрович', '8 913 468 46 58', 'byr76d@ya.ru', 'Шебекино', 'Садовая', '5'); INSERT INTO KLIENT (NO_KLI, FAMILIYA, IMYA, OTCHESTVO, TELEFON, E_MAIL, GOROD, ULICA, DOM) VALUES (8, 'Жданов', 'Сергей', 'Васильевич', '8 965 436 59 56', 'gdanoff@ya.ru', 'Строитель', 'Победы', '85'); INSERT INTO KLIENT (NO_KLI, FAMILIYA, IMYA, OTCHESTVO, TELEFON, E_MAIL, GOROD, ULICA, DOM) VALUES (9, 'Иванов', 'Игорь', 'Иванович', '8 903 265 48 73', 'iva54@bigmir.com', 'Шебекино', 'Строителей', '12'); INSERT INTO KLIENT (NO_KLI, FAMILIYA, IMYA, OTCHESTVO, TELEFON, E_MAIL, GOROD, ULICA, DOM) VALUES (10, 'Мельник', 'Ирина', 'Аркадьевна', '8 912 469 43 26', 'meln1k@ya.ru', 'Валуйки', 'Ленина', '13'); COMMIT WORK; INSERT INTO KONSULTANT (NO_KONS, FAMILIYAKONS, DATAPRIEMA, TELEFONKONS, IMYAKONS, OTCHESTVOKONS, GORODKONS, ULICAKONS, DOMKONS) VALUES (1, 'Сумкин', '2008-02-15 00: 00: 00', '8 910 120 30 25', 'Федор', 'Ионович', 'Белгород', 'Попова', '5'); INSERT INTO KONSULTANT (NO_KONS, FAMILIYAKONS, DATAPRIEMA, TELEFONKONS, IMYAKONS, OTCHESTVOKONS, GORODKONS, ULICAKONS, DOMKONS) VALUES (2, 'Перышкин', '2009-09-03 00: 00: 00', '8 915 176 23 46', 'Святослав', 'Леонидович', 'Белгород', 'Красноармейская', '133'); INSERT INTO KONSULTANT (NO_KONS, FAMILIYAKONS, DATAPRIEMA, TELEFONKONS, IMYAKONS, OTCHESTVOKONS, GORODKONS, ULICAKONS, DOMKONS) VALUES (3, 'Боков', '2008-11-20 00: 00: 00', '8 910 246 46 46', 'Олег', 'Николаевич', 'Белгород', 'Садовая', '28'); INSERT INTO KONSULTANT (NO_KONS, FAMILIYAKONS, DATAPRIEMA, TELEFONKONS, IMYAKONS, OTCHESTVOKONS, GORODKONS, ULICAKONS, DOMKONS) VALUES (4, 'Котов', '2010-08-11 00: 00: 00', '8 920 684 65 56', 'Валерий', 'Олегович', 'Белгород', 'Пугачева', '2'); INSERT INTO KONSULTANT (NO_KONS, FAMILIYAKONS, DATAPRIEMA, TELEFONKONS, IMYAKONS, OTCHESTVOKONS, GORODKONS, ULICAKONS, DOMKONS) VALUES (5, 'Здравин', '2011-05-16 00: 00: 00', '8 913 176 54 69', 'Дмитрий', 'Александрович', 'Белгород', 'Королева', '10'); COMMIT WORK; INSERT INTO PROIZVODITEL (NO_PROIZ, NAIMPROIZV) VALUES (1, 'Benq'); INSERT INTO PROIZVODITEL (NO_PROIZ, NAIMPROIZV) VALUES (2, 'Acer'); INSERT INTO PROIZVODITEL (NO_PROIZ, NAIMPROIZV) VALUES (3, 'Asus'); INSERT INTO PROIZVODITEL (NO_PROIZ, NAIMPROIZV) VALUES (4, 'TopDevice'); INSERT INTO PROIZVODITEL (NO_PROIZ, NAIMPROIZV) VALUES (5, 'SamSang'); INSERT INTO PROIZVODITEL (NO_PROIZ, NAIMPROIZV) VALUES (6, 'HP'); COMMIT WORK; INSERT INTO USTROIYSTVO (NO_USTR, NAIMENOVANIE) VALUES (1, 'Монитор'); INSERT INTO USTROIYSTVO (NO_USTR, NAIMENOVANIE) VALUES (2, 'Сиситемный блок'); INSERT INTO USTROIYSTVO (NO_USTR, NAIMENOVANIE) VALUES (3, 'Клавиатура'); INSERT INTO USTROIYSTVO (NO_USTR, NAIMENOVANIE) VALUES (4, 'Мышь'); INSERT INTO USTROIYSTVO (NO_USTR, NAIMENOVANIE) VALUES (5, 'Kолонки'); INSERT INTO USTROIYSTVO (NO_USTR, NAIMENOVANIE) VALUES (6, 'Монитор'); INSERT INTO USTROIYSTVO (NO_USTR, NAIMENOVANIE) VALUES (7, 'test'); INSERT INTO USTROIYSTVO (NO_USTR, NAIMENOVANIE) VALUES (10, 'Факс'); INSERT INTO USTROIYSTVO (NO_USTR, NAIMENOVANIE) VALUES (8, 'Принтер лазерный'); INSERT INTO USTROIYSTVO (NO_USTR, NAIMENOVANIE) VALUES (9, 'Принтер струйный'); COMMIT WORK; INSERT INTO TOVAR (NO_TOV, SERIALNO, PARTNO, CENA, MODEL, NO_USTR, NO_PROIZ) VALUES (1, 'BX53FBU667', '6327HF1', 5020, 'BN103', 1, 1); INSERT INTO TOVAR (NO_TOV, SERIALNO, PARTNO, CENA, MODEL, NO_USTR, NO_PROIZ) VALUES (2, 'FCH63763NJE639', 'BED7FHEU7', 10000, 'Aspire 1282', 2, 2); INSERT INTO TOVAR (NO_TOV, SERIALNO, PARTNO, CENA, MODEL, NO_USTR, NO_PROIZ) VALUES (3, '34563G', '1527', 700, '2000', 5, 4); INSERT INTO TOVAR (NO_TOV, SERIALNO, PARTNO, CENA, MODEL, NO_USTR, NO_PROIZ) VALUES (4, 'HG22GG37', 'DFJHDF7', 800, '559SE', 3, 5); INSERT INTO TOVAR (NO_TOV, SERIALNO, PARTNO, CENA, MODEL, NO_USTR, NO_PROIZ) VALUES (5, 'GD6', '1252V', 250, 'H12', 4, 2); INSERT INTO TOVAR (NO_TOV, SERIALNO, PARTNO, CENA, MODEL, NO_USTR, NO_PROIZ) VALUES (6, 'BX867RGG', '8763G76F', 2400, 'LJ 1100', 8, 6); INSERT INTO TOVAR (NO_TOV, SERIALNO, PARTNO, CENA, MODEL, NO_USTR, NO_PROIZ) VALUES (7, '5FG4', '54RGF5', 5468, 'FH2', 2, 1); COMMIT WORK; INSERT INTO KORZINA (NO_KORZ, KOLICHESTVO, NO_TOV) VALUES (1, '1', 1); INSERT INTO KORZINA (NO_KORZ, KOLICHESTVO, NO_TOV) VALUES (2, '3', 4); INSERT INTO KORZINA (NO_KORZ, KOLICHESTVO, NO_TOV) VALUES (3, '2', 5); INSERT INTO KORZINA (NO_KORZ, KOLICHESTVO, NO_TOV) VALUES (4, '1', 2); INSERT INTO KORZINA (NO_KORZ, KOLICHESTVO, NO_TOV) VALUES (5, '3', 3); INSERT INTO KORZINA (NO_KORZ, KOLICHESTVO, NO_TOV) VALUES (6, '2', 3); COMMIT WORK; INSERT INTO POKUPKA (NO_POKUPKI, DATAPRIDAJI, NO_KONS, CENAGLAV, NO_KLI, NO_KORZ) VALUES (2, '2009-12-13 00: 00: 00', 4, 1900, 2, 2); INSERT INTO POKUPKA (NO_POKUPKI, DATAPRIDAJI, NO_KONS, CENAGLAV, NO_KLI, NO_KORZ) VALUES (3, '2009-03-20 00: 00: 00', 3, 2400, 2, 2); INSERT INTO POKUPKA (NO_POKUPKI, DATAPRIDAJI, NO_KONS, CENAGLAV, NO_KLI, NO_KORZ) VALUES (4, '2009-02-28 00: 00: 00', 2, 500, 5, 3); INSERT INTO POKUPKA (NO_POKUPKI, DATAPRIDAJI, NO_KONS, CENAGLAV, NO_KLI, NO_KORZ) VALUES (5, '2009-03-23 00: 00: 00', 1, 10000, 6, 4); INSERT INTO POKUPKA (NO_POKUPKI, DATAPRIDAJI, NO_KONS, CENAGLAV, NO_KLI, NO_KORZ) VALUES (6, '2009-04-15 00: 00: 00', 4, 2100, 3, 5); INSERT INTO POKUPKA (NO_POKUPKI, DATAPRIDAJI, NO_KONS, CENAGLAV, NO_KLI, NO_KORZ) VALUES (1, '2013-05-15 11: 39: 56', 2, 15, 2, 2); COMMIT WORK; /******************************************************************************/ /*** Primary Keys ***/ /******************************************************************************/ ALTER TABLE KLIENT ADD PRIMARY KEY (NO_KLI); ALTER TABLE KONSULTANT ADD PRIMARY KEY (NO_KONS); ALTER TABLE KORZINA ADD PRIMARY KEY (NO_KORZ); ALTER TABLE POKUPKA ADD PRIMARY KEY (NO_POKUPKI); ALTER TABLE PROIZVODITEL ADD PRIMARY KEY (NO_PROIZ); ALTER TABLE TOVAR ADD PRIMARY KEY (NO_TOV); ALTER TABLE USTROIYSTVO ADD PRIMARY KEY (NO_USTR); /******************************************************************************/ /*** Foreign Keys ***/ /******************************************************************************/ ALTER TABLE KORZINA ADD FOREIGN KEY (NO_TOV) REFERENCES TOVAR (NO_TOV); ALTER TABLE KORZINA ADD FOREIGN KEY (NO_TOV) REFERENCES TOVAR (NO_TOV); ALTER TABLE POKUPKA ADD FOREIGN KEY (NO_KONS) REFERENCES KONSULTANT (NO_KONS); ALTER TABLE POKUPKA ADD FOREIGN KEY (NO_KONS) REFERENCES KONSULTANT (NO_KONS); ALTER TABLE POKUPKA ADD FOREIGN KEY (NO_KLI) REFERENCES KLIENT (NO_KLI); ALTER TABLE POKUPKA ADD FOREIGN KEY (NO_KORZ) REFERENCES KORZINA (NO_KORZ); ALTER TABLE TOVAR ADD FOREIGN KEY (NO_USTR) REFERENCES USTROIYSTVO (NO_USTR); ALTER TABLE TOVAR ADD FOREIGN KEY (NO_PROIZ) REFERENCES PROIZVODITEL (NO_PROIZ); /******************************************************************************/ /*** Indices ***/ /******************************************************************************/ CREATE INDEX KLIENT_IDXFAM ON KLIENT (FAMILIYA); CREATE INDEX KONSULTANT_IDXDATK ON KONSULTANT (DATAPRIEMA); CREATE INDEX KONSULTANT_IDXFAMK ON KONSULTANT (FAMILIYAKONS); CREATE INDEX PROIZVODITEL_IDXNAIM ON PROIZVODITEL (NAIMPROIZV); CREATE INDEX TOVAR_IDXMOD ON TOVAR (MODEL); /******************************************************************************/ /*** Triggers ***/ /******************************************************************************/ SET TERM ^; /******************************************************************************/ /*** Triggers for tables ***/ /******************************************************************************/ /* Trigger: KLIENT_INS */ CREATE TRIGGER KLIENT_INS FOR KLIENT ACTIVE BEFORE INSERT POSITION 0 AS begin if (NEW. no_kli IS NULL) then NEW. no_kli=GEN_ID (gen_klient_no,1); End ^ /* Trigger: KONSULTANT_INS */ CREATE TRIGGER KONSULTANT_INS FOR KONSULTANT ACTIVE BEFORE INSERT POSITION 0 AS begin if (NEW. no_kons IS NULL) then NEW. no_kons=GEN_ID (gen_kons_no,1); End ^ /* Trigger: KORZINA_INS */ CREATE TRIGGER KORZINA_INS FOR KORZINA ACTIVE BEFORE INSERT POSITION 0 AS begin if (NEW. no_korz IS NULL) then NEW. no_korz=GEN_ID (gen_korz_no,1); End ^ /* Trigger: POKUPKA_INS */ CREATE TRIGGER POKUPKA_INS FOR POKUPKA ACTIVE BEFORE INSERT POSITION 0 AS begin if (NEW. no_pokupki IS NULL) then NEW. no_pokupki=GEN_ID (gen_pokup_no,1); End ^ /* Trigger: PROIZVODITEL_INS */ CREATE TRIGGER PROIZVODITEL_INS FOR PROIZVODITEL ACTIVE BEFORE INSERT POSITION 0 AS begin if (NEW. no_proiz IS NULL) then NEW. no_proiz=GEN_ID (gen_proiz_no,1); End ^ /* Trigger: TOVAR_INS */ CREATE TRIGGER TOVAR_INS FOR TOVAR ACTIVE BEFORE INSERT POSITION 0 AS begin if (NEW. no_tov IS NULL) then NEW. no_tov=GEN_ID (gen_tovar_no,1); End ^ /* Trigger: USTROIYSTVO_INS */ CREATE TRIGGER USTROIYSTVO_INS FOR USTROIYSTVO ACTIVE BEFORE INSERT POSITION 0 AS begin if (NEW. no_ustr IS NULL) then NEW. no_ustr=GEN_ID (gen_ustr_no,1); End ^ SET TERM; ^ /******************************************************************************/ /*** Stored Procedures ***/ /******************************************************************************/ SET TERM ^; ALTER PROCEDURE DEL_KLI ( NO_KLI SMALLINT) AS begin delete from klient where (NO_KLI=: NO_KLI); end^ ALTER PROCEDURE DEL_KONS ( NO_KONS SMALLINT) AS begin delete from konsultant where (NO_KONS=: NO_KONS); end^ ALTER PROCEDURE DEL_KORZ ( NO_KORZ SMALLINT) AS begin delete from korzina where (NO_KORZ=: NO_KORZ); end^ ALTER PROCEDURE DEL_POKUP ( NO_POKUPKI SMALLINT) AS begin delete from pokupka where (NO_POKUPKI=: NO_POKUPKI); end^ ALTER PROCEDURE DEL_PROIZ ( NO_PROIZ SMALLINT) AS begin delete from proizvoditel where (NO_PROIZ=: NO_PROIZ); end^ ALTER PROCEDURE DEL_TOV ( NO_TOV SMALLINT) AS begin delete from tovar where (NO_TOV=: NO_TOV); end^ ALTER PROCEDURE DEL_USTR ( NO_USTR SMALLINT) AS begin delete from ustroiystvo where (NO_USTR=: NO_USTR); end^ ALTER PROCEDURE INSERT_KLI ( NO_KLI SMALLINT, FAMILIYA VARCHAR (40), IMYA VARCHAR (40), OTCHESTVO VARCHAR (40), TELEFON VARCHAR (40), E_MAIL VARCHAR (40), GOROD VARCHAR (40), ULICA VARCHAR (40), DOM VARCHAR (40)) AS begin if (: familiya = '' or: familiya is null) then exception exc_notext; else if (: imya = '' or: imya is null) then exception exc_notext; else if (: otchestvo = '' or: otchestvo is null) then exception exc_notext; else if (: telefon = '' or: telefon is null) then exception exc_nodata; else if (: e_mail = '' or: e_mail is null) then exception exc_notext; else if (: gorod = '' or: gorod is null) then exception exc_notext; else if (: ulica = '' or: ulica is null) then exception exc_notext; else if (: dom = '' or: dom is null) then exception exc_nodata; else begin insert into klient (klient. no_kli, klient. familiya, klient. imya, klient. otchestvo, klient. telefon, klient. e_mail, klient. gorod, klient. ulica, klient. dom) values ( : NO_KLI, : FAMILIYA, : IMYA, : OTCHESTVO, : TELEFON, : E_MAIL, : GOROD, : ULICA, : DOM); end suspend; END^ ALTER PROCEDURE INSERT_KONS ( NO_KONS SMALLINT, FAMILIYAKONS VARCHAR (40), IMYAKONS VARCHAR (40), OTCHESTVOKONS VARCHAR (40), TELEFONKONS VARCHAR (40), GORODKONS VARCHAR (40), ULICAKONS VARCHAR (40), DOMKONS VARCHAR (40), DATAPRIEMA VARCHAR (40)) AS begin if (: familiyakons = '' or: familiyakons is null) then exception exc_notext; else if (: imyakons = '' or: imyakons is null) then exception exc_notext; else if (: otchestvokons = '' or: otchestvokons is null) then exception exc_notext; else if (: telefonkons = '' or: telefonkons is null) then exception exc_nodata; else if (: gorodkons = '' or: gorodkons is null) then exception exc_notext; else if (: ulicakons = '' or: ulicakons is null) then exception exc_notext; else if (: domkons = '' or: domkons is null) then exception exc_nodata; else if (: datapriema = '' or: datapriema is null) then exception exc_nodata; else begin insert into konsultant (konsultant. no_kons, konsultant. familiyakons, konsultant. imyakons, konsultant. otchestvokons, konsultant. telefonkons, konsultant. gorodkons, konsultant. ulicakons, konsultant. domkons, konsultant. datapriema) values ( : NO_KONS, : FAMILIYAKONS, : IMYAKONS, : OTCHESTVOKONS, : TELEFONKONS, : GORODKONS, : ULICAKONS, : DOMKONS, : DATAPRIEMA); end suspend; END^ ALTER PROCEDURE INSERT_KORZ ( NO_KORZ SMALLINT, NO_TOV SMALLINT, KOLICHESTVO VARCHAR (40)) AS begin if (: kolichestvo = '' or: kolichestvo is null) then exception exc_nodata; else begin insert into korzina (korzina. no_korz, korzina. no_tov, korzina. kolichestvo) values ( : NO_KORZ, : NO_TOV, : KOLICHESTVO); end suspend; END^ ALTER PROCEDURE INSERT_POKUP ( NO_POKUPKI SMALLINT, NO_KORZ SMALLINT, NO_KLI SMALLINT, NO_KONS SMALLINT, DATAPRIDAJI VARCHAR (40), CENAGLAV DECIMAL (10,2)) AS begin if (: datapridaji = '' or: datapridaji is null) then exception exc_nodata; else begin insert into pokupka ( pokupka. no_pokupki, pokupka. no_korz, pokupka. no_kli, pokupka. no_kons, pokupka. datapridaji, pokupka. cenaglav) values ( : NO_POKUPKI, : NO_KORZ, : NO_KLI, : NO_KONS, : DATAPRIDAJI, : CENAGLAV); end suspend; end^ ALTER PROCEDURE INSERT_PROIZ ( NO_PROIZ SMALLINT, NAIMPROIZV VARCHAR (40)) AS begin if (: naimproizv = '' or: naimproizv is null) then exception exc_notext; else begin insert into proizvoditel (proizvoditel. no_proiz, proizvoditel. naimproizv) values ( : NO_PROIZ, : NAIMPROIZV); end suspend; END^ ALTER PROCEDURE INSERT_TOV ( NO_TOV SMALLINT, NO_USTR SMALLINT, NO_PROIZ SMALLINT, MODEL VARCHAR (40), SERIALNO VARCHAR (40), PARTNO VARCHAR (40), CENA DECIMAL (10,2)) AS begin if (: model = '' or: model is null) then exception exc_notext; else if (: serialno = '' or: model is null) then exception exc_notext; else if (: partno = '' or: model is null) then exception exc_notext; else begin insert into tovar (tovar. no_tov, tovar. no_ustr, tovar. no_proiz, tovar. model, tovar. serialno, tovar. partno, tovar. cena) values ( : NO_TOV, : NO_USTR, : NO_PROIZ, : MODEL, : SERIALNO, : PARTNO, : CENA); end suspend; END^ ALTER PROCEDURE INSERT_TOV1 ( NO_TOV SMALLINT, SERIALNO VARCHAR (40), PARTNO VARCHAR (40), CENA DECIMAL (10,2), MODEL VARCHAR (40), NO_USTR SMALLINT, NO_PROIZ SMALLINT) AS begin if (: model = '0' or: model is null) then exception exc_notext; else if (: serialno = '0' or: model is null) then exception exc_notext; else if (: partno = '0' or: model is null) then exception exc_notext; else begin insert into tovar (tovar. no_tov, tovar. serialno, tovar. partno, tovar. cena, tovar. model, tovar. no_ustr, tovar. no_proiz) values ( : NO_TOV, : SERIALNO, : PARTNO, : CENA, : MODEL, : NO_USTR, : NO_PROIZ); end suspend; END^ ALTER PROCEDURE INSERT_USTR ( NO_USTR SMALLINT, NAIMENOVANIE VARCHAR (40)) AS begin if (: naimenovanie = '') then exception exc_notext; else begin insert into ustroiystvo (ustroiystvo. no_ustr, ustroiystvo. naimenovanie) values ( : NO_USTR, : NAIMENOVANIE); end suspend; END^ ALTER PROCEDURE UPD_KLI ( NO_KLI SMALLINT, FAMILIYA VARCHAR (40), IMYA VARCHAR (40), OTCHESTVO VARCHAR (40), TELEFON VARCHAR (40), E_MAIL VARCHAR (40), GOROD VARCHAR (40), ULICA VARCHAR (40), DOM VARCHAR (40)) AS begin update klient set NO_KLI=: NO_KLI, FAMILIYA=: FAMILIYA, IMYA=: IMYA, OTCHESTVO=: OTCHESTVO, TELEFON=: TELEFON, E_MAIL=: E_MAIL, GOROD=: GOROD, ULICA=: ULICA, DOM=: DOM where (NO_KLI=: NO_KLI); end^ ALTER PROCEDURE UPD_KONS ( NO_KONS SMALLINT, FAMILIYAKONS VARCHAR (40), IMYAKONS VARCHAR (40), OTCHESTVOKONS VARCHAR (40), TELEFONKONS VARCHAR (40), GORODKONS VARCHAR (40), ULICAKONS VARCHAR (40), DOMKONS VARCHAR (40), DATAPRIEMA VARCHAR (40)) AS begin update konsultant set NO_KONS=: NO_KONS, FAMILIYAKONS=: FAMILIYAKONS, IMYAKONS=: IMYAKONS, OTCHESTVOKONS=: OTCHESTVOKONS, TELEFONKONS=: TELEFONKONS, GORODKONS=: GORODKONS, ULICAKONS=: ULICAKONS, DOMKONS=: DOMKONS, DATAPRIEMA=: DATAPRIEMA where (NO_KONS=: NO_KONS); end^ ALTER PROCEDURE UPD_KORZ ( NO_KORZ SMALLINT, NO_TOV SMALLINT, KOLICHESTVO VARCHAR (40)) AS begin update korzina set NO_KORZ=: NO_KORZ, NO_TOV=: NO_TOV, KOLICHESTVO=: KOLICHESTVO where (NO_KORZ=: NO_KORZ); end^ ALTER PROCEDURE UPD_POKUP ( NO_POKUPKI SMALLINT, NO_KORZ SMALLINT, NO_KLI SMALLINT, NO_KONS SMALLINT, DATAPRIDAJI VARCHAR (40), CENAGLAV DECIMAL (10,2)) AS begin update pokupka set NO_KORZ=: NO_KORZ, NO_KLI=: NO_KLI, NO_KONS=: NO_KONS, DATAPRIDAJI=: DATAPRIDAJI, CENAGLAV=: CENAGLAV where (NO_POKUPKI=: NO_POKUPKI); end^ ALTER PROCEDURE UPD_PROIZ ( NO_PROIZ SMALLINT, NAIMPROIZV VARCHAR (40)) AS begin update proizvoditel set NO_PROIZ=: NO_PROIZ, NAIMPROIZV=: NAIMPROIZV where (NO_PROIZ=: NO_PROIZ); end^ ALTER PROCEDURE UPD_TOV ( NO_TOV SMALLINT, NO_USTR SMALLINT, NO_PROIZ SMALLINT, MODEL VARCHAR (40), SERIALNO VARCHAR (40), PARTNO VARCHAR (40), CENA DECIMAL (10,2)) AS begin update tovar set NO_USTR=: NO_USTR, NO_PROIZ=: NO_PROIZ, MODEL =: MODEL, SERIALNO=: SERIALNO, PARTNO=: PARTNO, CENA=: CENA where (NO_TOV=: NO_TOV); end^ ALTER PROCEDURE UPD_TOV1 ( NO_TOV SMALLINT, SERIALNO VARCHAR (40), PARTNO VARCHAR (40), CENA DECIMAL (10,2), MODEL VARCHAR (40), NO_USTR SMALLINT, NO_PROIZ SMALLINT) AS begin if (: model = '0' or: model is null) then exception exc_notext; else if (: serialno = '0' or: model is null) then exception exc_notext; else if (: partno = '0' or: model is null) then exception exc_notext; else begin update tovar set NO_TOV=: NO_TOV, SERIALNO=: SERIALNO, PARTNO=: PARTNO, CENA=: CENA, MODEL=: MODEL, NO_USTR =: NO_USTR, NO_PROIZ=: NO_PROIZ where (NO_TOV=: NO_TOV); end suspend; END^ ALTER PROCEDURE UPD_USTR ( NO_USTR SMALLINT, NAIMENOVANIE VARCHAR (40)) AS begin update ustroiystvo set NO_USTR=: NO_USTR, NAIMENOVANIE=: NAIMENOVANIE where (NO_USTR=: NO_USTR); end^ ALTER PROCEDURE XP_VIEW_OBSLUGF ( FAMILIYA VARCHAR (40)) RETURNS ( X_NO_POKUPKI SMALLINT, X_FAMILIYA VARCHAR (40), X_IMYA VARCHAR (40), X_FAMILIYAKONS VARCHAR (40), X_IMYAKONS VARCHAR (40), X_DATAPRIDAJI TIMESTAMP) AS begin if (: FAMILIYA = '') then exception exc_notext; else begin for select * FROM VIEW_OBSLUG where VIEW_OBSLUG. familiya=: FAMILIYA into X_NO_POKUPKI, X_FAMILIYA, X_IMYA, X_FAMILIYAKONS, X_IMYAKONS, X_DATAPRIDAJI do suspend; end end^ ALTER PROCEDURE XP_VIEW_OBSLUGFK ( FAMILIYAKONS VARCHAR (40)) RETURNS ( X_NO_POKUPKI SMALLINT, X_FAMILIYA VARCHAR (40), X_IMYA VARCHAR (40), X_FAMILIYAKONS VARCHAR (40), X_IMYAKONS VARCHAR (40), X_DATAPRIDAJI TIMESTAMP) AS begin if (: FAMILIYAKONS = '') then exception exc_notext; else begin for select * FROM VIEW_OBSLUG where VIEW_OBSLUG. familiyakons=: FAMILIYAKONS into X_NO_POKUPKI, X_FAMILIYA, X_IMYA, X_FAMILIYAKONS, X_IMYAKONS, X_DATAPRIDAJI do suspend; end end^ ALTER PROCEDURE XP_VIEW_PROIZ ( NAIMPROIZV VARCHAR (40)) RETURNS ( X_NO_PROIZ SMALLINT, X_NAIMPROIZV VARCHAR (40)) AS begin if (: NAIMPROIZV = '') THEN exception exc_notext; else begin for select * FROM view_proiz where view_proiz. naimproizv like: naimproizv||'%' into X_NO_PROIZ, X_NAIMPROIZV do suspend; end end^ ALTER PROCEDURE XP_VIEW_PROIZNO ( NO_PROIZ SMALLINT) RETURNS ( X_NO_PROIZ SMALLINT, X_NAIMPROIZV VARCHAR (40)) AS begin if (: NO_PROIZ = '') THEN exception exc_nodata; else begin for select * FROM view_proiz where view_proiz. no_proiz like: no_proiz||'%' into X_NO_PROIZ, X_NAIMPROIZV do suspend; end end^ ALTER PROCEDURE XP_VIEW_TOVAR1 ( NAIMENOVANIE VARCHAR (20)) RETURNS ( X_NO_TOV SMALLINT, X_NAIMENOVANIE VARCHAR (40), X_NAIMPROIZV VARCHAR (40), X_MODEL VARCHAR (40)) AS begin if (: NAIMENOVANIE = '0') THEN exception exc_notext; else begin for select * FROM VIEW_TOVARV where view_tovarv. naimenovanie =: naimenovanie into X_NO_TOV, X_NAIMENOVANIE, X_NAIMPROIZV, X_MODEL do suspend; end end^ ALTER PROCEDURE XP_VIEW_TOVARABC ( NO_TOV SMALLINT) RETURNS ( X_NO_TOV SMALLINT, X_NO_USTR SMALLINT, X_NO_PROIZ SMALLINT, X_MODEL VARCHAR (40), X_SERIALNO VARCHAR (40), X_PARTNO VARCHAR (40), X_CENA DECIMAL (10,2)) AS begin if (: NO_TOV = '') THEN exception exc_notext; else begin for select * FROM view_tovar where view_tovar. no_tov =: no_tov into X_NO_TOV, X_NO_USTR, X_NO_PROIZ, X_MODEL, X_SERIALNO, X_PARTNO, X_CENA do suspend; end end^ ALTER PROCEDURE XP_VIEW_TOVARV ( NAIMENOVANIE VARCHAR (20)) RETURNS ( X_NO_TOV SMALLINT, X_NAIMENOVANIE VARCHAR (40), X_NAIMPROIZV VARCHAR (40), X_MODEL VARCHAR (40)) AS begin if (: NAIMENOVANIE = '0') THEN exception exc_notext; else begin for select * FROM VIEW_TOVARV where view_tovarv. naimenovanie like: naimenovanie||'%' into X_NO_TOV, X_NAIMENOVANIE, X_NAIMPROIZV, X_MODEL do suspend; end end^ ALTER PROCEDURE XP_VIEW_USTR ( NAIMENOVANIE VARCHAR (20)) RETURNS ( X_NO_USTR SMALLINT, X_NAIMENOVANIE VARCHAR (40)) AS begin if (: NAIMENOVANIE = '0') THEN exception exc_notext; else begin for select * FROM ustroiystvo where ustroiystvo. naimenovanie like: naimenovanie||'%' into X_NO_USTR, X_NAIMENOVANIE do suspend; end end^ SET TERM; ^


Похожие работы на - Разработка информационной системы 'Компьютерные комплектующие' с использованием клиент-серверной технологии

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!