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

 















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


СОДЕРЖАНИЕ


ВВЕДЕНИЕ

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-ПРИЛОЖЕНИЯ

ЗАКЛЮЧЕНИЕ

СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ

ПРИЛОЖЕНИЕ 1

ПРИЛОЖЕНИЕ 2

ПРИЛОЖЕНИЕ 3


ВВЕДЕНИЕ

база данный приложение транзакция

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

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

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

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

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

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

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

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

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

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



1.ОСНОВНЫЕ ХАРАКТЕРИСТИКИ СУБД FIREBIRD

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


.3 Транзакции


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

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

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


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

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

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


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

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


2. ПРОЕКТИРОВАНИЕ БАЗЫ ДАННЫХ ДЛЯ ИНФОРМАЦИОННОЙ СИСТЕМЫ «Компьютерные комплектующие»


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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


Инфологическая модель применяется на втором этапе проектирования БД, то есть после словесного описания предметной области. Процесс проектирования длительный, он требует обсуждений с заказчиком, со специалистами в предметной области. Инфологическая модель должна включать такое формализованное описание предметной области, которое легко будет «читаться» не только специалистами по БД. И это описание должно быть настолько ёмким, чтобы можно было оценить глубину и корректность проработки проекта БД и оно не должно быть привязано к конкретной СУБД.
Выбор СУБД- это отдельная задача, для корректного ее решения необходимо иметь проект, который не привязан ни к какой конкретной СУБД.
Инфологическое проектирование, прежде всего, связано с попыткой представления семантики предметной области в модели БД. Реляционная модель данных в силу своей простоты и лаконичности не позволяет отобразить семантику, то есть смысл предметной области. [2]

В результате системного анализа разработана инфологическая модель базы данных, отображённая на рисунках 2.2.1 и 2.2.2.


Рис.2.2.1. Логическая модель


Рис.2.2.2. Физическая модель


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


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

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


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


Это выбор эффективного размещения БД на внешних носителях для обеспечения наиболее эффективной работы приложения.
В настоящий момент в качестве физических моделей используют различные методы размещения данных, основанные на файловых структурах: это организация файлов прямого и последовательного доступа, индексных файлов и инвертированных файлов, файлов, использующих различные методы хеширования, взаимосвязанных файлов. Кроме того, современные СУБД широко используют страничную организацию данных. Физические модели данных, основанные на страничной организации, являются наиболее перспективными. [3]

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


База данных «Компьютерные комплектующие» была создана и зарегистрирована в IB Expert. Регистрационную информацию можно увидеть на рисунке 2.5.1.

Рис.2.5.1. Регистрационная информация


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


Таблица 2.5.1. Созданные домены.

Имя доменаТипДлинаЗначение по умолчаниюОграниченияD_CENDECIMAL10,2>0D_DATATIMESTAMP<='TODAY'D_NOSMALLINT>0D_VCHVARCHAR40нет

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


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

Имя таблицыИмя ПоляТипДлинаДесятичная частьИмя доменаPokupkaNO_POKUPKISMALLINTD_NODATAPRIDAJITIMESTAMPD_DATANO_KONSSMALLINTD_NOCENAGLAVDECIMAL102D_CENNO_KLISMALLINTD_NONO_KORZSMALLINTD_NOKlientNO_KLISMALLINTD_NOFAMILIYAVARCHAR40D_VCHIMYAVARCHAR40D_VCHOTCHESTVOVARCHAR40D_VCHTELEFONVARCHAR40D_VCHE_MAILVARCHAR40D_VCHGORODVARCHAR40D_VCHULICAVARCHAR40D_VCHDOMVARCHAR40D_VCHKonsultantNO_KONSSMALLINTD_NOFAMILIYAKONSVARCHAR40D_VCHIMYAKONSVARCHAR40D_VCHOTCHESTVOKONSVARCHAR40D_VCHTELEFONKONSVARCHAR40D_VCHDATAPRIEMAVARCHAR40D_VCHGORODKONSVARCHAR40D_VCHULICAKONSVARCHAR40D_VCHDOMKONSVARCHAR40D_VCHKorzinaNO_KORZSMALLINTD_NOKOLICHESTVOVARCHAR40D_VCHNO_TOVSMALLINTD_NOTovarNO_TOVSMALLINTD_NOSERIALNOVARCHAR40D_VCHPERTNOVARCHAR40D_VCHCENADECIMAL102D_CENMODELVARCHAR40D_VCHNO_USTRSMALLINTD_NONO_PROIZSMALLINTD_NOUstroistvoNO_USTRSMALLINTD_NONAIMENOVANIEVARCHAR40D_VCHProizvoditelNO_PROIZSMALLINTD_NONAIMPROIZVVARCHAR40D_VCH

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

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


Таблица 2.5.3. Домены.

Домен D_CENCREATE DOMAIN D_CEN AS DECIMAL(10,2) NOT NULL CHECK (value>0);Домен D_DATACREATE DOMAIN D_DATA AS TIMESTAMP NOT NULL CHECK (value<='TODAY');Домен D_NOCREATE DOMAIN D_NO AS SMALLINT NOT NULL CHECK (value >0);Домен D_VCHCREATE 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()». Это позволяет сразу увидеть изменения, не выходя их программы.

В свойстве Transaction Editor было установлено Read Committed. Так же были настроены свойства DatabaseName, DefaultTransaction для компонента IBDatabase1 и свойство DefaultDatabase для компонента IBTransaction1. Данные настройки этих компонентов показаны на рисунках ниже.


Рис.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">

Результат данного PHP кода представлен на рисунке 4.1.

Рис.4.1. Просмотр таблицы Товары


Рис.4.2. Стартовая страница приложения

Рис.4.3. Страница манипуляций таблицы Товар.


Для добавления нужно перейти по соответствующей ссылке и ввести нужные данные, как показано на рисунке 4.4.


Рис.4.4. Добавление нового товара


Нажимаем на кнопку Добавить и видим результат, на рисунке 4.5.


Рис.4.5. Результат добавления


Нажимаем на ссылку Просмотр, чтобы убедиться, что данный товар добавлен.

Рис.4.6. Таблица после добавления.


Для изменения возвращаемся назад и переходим по ссылке Изменить и вводим нужные значения, как показано на рисунке 4.7.


Рис.4.7. Изменение данных о товаре


Нажимаем на кнопку Изменить и видим результат, на рисунке 4.8.


Рис.4.8. Результат изменения


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

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


Форма с данными для удаления показана на рисунке 4.10.


Рис.4.10. Удаление товара


Нажимаем Удалить и видим результат, как показано на рисунке 4.11

.

Рис.4.11. Результат удаления


Просматриваем таблицу ещё раз для того, чтобы увидеть, что клиент удален.

Рис.4.12. Таблица после удаления


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


ЗАКЛЮЧЕНИЕ


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

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

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

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

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

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

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

СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ


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

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

Джаррод Холингворт, Боб Сворт, Марк Кэшмэн, Поль Густавсон Borland C++ Builder 6. Руководство разработчика = Borland C++ Builder 6 Developers 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">

ПРИЛОЖЕНИЕ 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', '[email protected]', 'Белгород', '1й Ореховый тупик', '60'); INSERT INTO KLIENT (NO_KLI, FAMILIYA, IMYA, OTCHESTVO, TELEFON, E_MAIL, GOROD, ULICA, DOM) VALUES (2, 'Горшков', 'Григорий', 'Георгиевич', '8 900 800 50 60', '[email protected]', 'Белгород', 'Конева', '17'); INSERT INTO KLIENT (NO_KLI, FAMILIYA, IMYA, OTCHESTVO, TELEFON, E_MAIL, GOROD, ULICA, DOM) VALUES (3, 'Седугина', 'Гадя', 'Анатольевна', '8 951 430 53 84', '[email protected]', 'Белгород', 'Шаландина', '20'); INSERT INTO KLIENT (NO_KLI, FAMILIYA, IMYA, OTCHESTVO, TELEFON, E_MAIL, GOROD, ULICA, DOM) VALUES (4, 'Шалестьев', 'Егор', 'Арсеньевич', '8 258 546 46 57', '[email protected]', 'Строитель', 'Маршалкова', '3'); INSERT INTO KLIENT (NO_KLI, FAMILIYA, IMYA, OTCHESTVO, TELEFON, E_MAIL, GOROD, ULICA, DOM) VALUES (5, 'Кобзев', 'Иван', 'васильевич', '8 879 798 76 91', '[email protected]', 'Белгород', 'Костюкова', '25'); INSERT INTO KLIENT (NO_KLI, FAMILIYA, IMYA, OTCHESTVO, TELEFON, E_MAIL, GOROD, ULICA, DOM) VALUES (6, 'Семагин', 'Антон', 'Маркович', '8 865 876 79 74', '[email protected]', 'Валуйки', 'Ленина', '9'); INSERT INTO KLIENT (NO_KLI, FAMILIYA, IMYA, OTCHESTVO, TELEFON, E_MAIL, GOROD, ULICA, DOM) VALUES (7, 'Петров', 'Петор', 'Петрович', '8 913 468 46 58', '[email protected]', 'Шебекино', 'Садовая', '5'); INSERT INTO KLIENT (NO_KLI, FAMILIYA, IMYA, OTCHESTVO, TELEFON, E_MAIL, GOROD, ULICA, DOM) VALUES (8, 'Жданов', 'Сергей', 'Васильевич', '8 965 436 59 56', '[email protected]', 'Строитель', 'Победы', '85'); INSERT INTO KLIENT (NO_KLI, FAMILIYA, IMYA, OTCHESTVO, TELEFON, E_MAIL, GOROD, ULICA, DOM) VALUES (9, 'Иванов', 'Игорь', 'Иванович', '8 903 265 48 73', '[email protected]', 'Шебекино', 'Строителей', '12'); INSERT INTO KLIENT (NO_KLI, FAMILIYA, IMYA, OTCHESTVO, TELEFON, E_MAIL, GOROD, ULICA, DOM) VALUES (10, 'Мельник', 'Ирина', 'Аркадьевна', '8 912 469 43 26', '[email protected]', 'Валуйки', 'Ленина', '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 ; ^



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

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ