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

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

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

Федеральное агентство по образованию

Белгородский государственный университет

Факультет компьютерных наук и телекоммуникаций

Кафедра математического и программного обеспечения информационных систем





ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

К КУРСОВОЙ РАБОТЕ

по дисциплине: "Базы данных".

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

Студент: Н.Ю. Калашникова

Руководитель курсовой работы: В.М. Михелев







г. Белгород 2009

План

Введение

1. СУБД Firebird

2. Разработка базы данных для ИС "Библиотека"

2.1 Системный анализ

2.2 Инфологическое проектирование

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

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

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

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

4. Создание Web приложения. Web-доступ

Заключение

Список используемых источников

Приложения

Введение


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

Сама база данных содержит шесть таблиц. При помощи приложения и web интерфейса пользователь может просматривать записи в БД и осуществлять все необхидимые действия для ведения базы.

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

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

·        Углубление теоретических и практических знаний в области баз данных и систем управления базами данных;

К задачам курсовой работы можно отнести следующее:

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

·        Создание приложения, основанного на клиент-серверной технологии;

·        Создание веб-приложения.

Курсовая работа написана на 57 листах. Из них 28 листа - основной текст курсовой работы, 29 листов содержат полный код программ и вынесены в приложения. Курсовая работа содержит 15 рисунков, 3 таблицы.

информационная система приложение клиентский

1. СУБД Firebird


Общие сведения

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

Опишем функции которые должны выполнять будущие приложения (Windows и Web): "Магазин строительных материалов"

Windows - приложение:

·        Программа должна быть легка и удобна в использовании

·        Иметь приятный интерфейс

·        Содержать в себе как можно полную информацию об учебных заведениях

·        Функция удаления записей

·        Функция сортировки

·        Функция добавления записи

·        Фильтрация записей

·        Поиск записей

·        Отчеты на основе информации в БД

Web - приложение:

·        Сайт должен быть легок и удобен в использовании

·        Иметь приятный интерфейс

·        Содержать в себе как можно полную информацию о товарах

·        Позволять пользователю заносить дополнительную информацию, а так же удалять и изменять ошибочную информацию об учебных заведениях

2. Разработка базы данных для ИС "Библиотека"


2.1 Системный анализ


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

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

После выполнения системного анализа можно приступать к следующему пункту проектирования - инфологическому проектированию.

 

2.2 Инфологическое проектирование


Для хранения информации в базе данных, нам необходимо разработать структуру БД. Определить какие таблицы (сущности) она в себя будет включать, какие поля (атрибуты) будут включать в себя таблицы. Для логического проектирования БД, мы будем использовать CASE средство ERwin. Цель инфологического моделирования - обеспечение наиболее естественных для человека способов сбора и представления той информации, которую предполагается хранить в создаваемой базе данных. Поэтому инфологическую модель данных пытаются строить по аналогии с естественным языком (последний не может быть использован в чистом виде из-за сложности компьютерной обработки текстов и неоднозначности любого естественного языка). Основными конструктивными элементами инфологических моделей являются сущности, связи между ними и их свойства. Стандартом при инфологическом моделировании БД, является модель "сущность - связь", ER - модель. Основой ER модели служат базовые понятия, соответствующие некоторому классу однотипных объектов. Сущность имеет уникальное имя в пределах моделированной системы, также в системе должны быть ключи. Объект которому соответствует понятие сущность имеет свой набор атрибутов - это характеристики определяющие свойства данной сущности.

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

Рисунок 1. Инфологическая модель БД

Рисунок 2. Физическая модель БД

Получившаяся система является корректной т.к. содержит не избыточную информацию и приведена к 3 нормальной форме.

 

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


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

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

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

 

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


После даталогического проектирования запускаем приложение администрирования баз данных Firebird IBExpert и, используя функции заложенные в этом программном средстве, создаем и регистрируем в системе новую базу данных Firebird "Библиотека". Создание базы данных инсталлирует инфраструктуру, необходимую для начала создания объектов. Первичным объектом для постоянного хранения данных в базе данных является таблица.

Приступая к созданию таблиц, предполагается, что уже выполнен анализ данных и подготовлена модель, а также имеется совершенно четкое представление о структурах главных таблиц и их взаимоотношениях. Исходя из данных, полученных при выполнении инфологического и даталогического проектирования, спроектировал таблицы и поля базы данных. Определяем ключевые поля и поля Not null (см. Таблица 1).

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

Таблица 1. ER - модель БД.

Имя таблицы

Имя поля

Тип

Длина

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

Имя домена

bibliotekor

Nomer_bibliotekorya

SMALLINT



D_INDEXTYPE


Nomer_otdela

SMALLINT



D_INDEXTYPE


Fio_bibliotekorya

VARCHAR

45


D_NAME

chitatel

Nomer_chitatelya

SMALLINT



D_INDEXTYPE


Familiya_4itatelya

VARCHAR

45


D_NAME


Imya_chitatelya

VARCHAR

45


D_NAME


adres

VARCHAR

40


D_ADRES


telefon

VARCHAR

15


D_TEL

Knigi

Nomer_knigi

SMALLINT



D_INDEXTYPE


Nomer_otdela

SMALLINT



D_INDEXTYPE


nazvanie_knigi

VARCHAR

45


D_NAME


kol_vo_stranic

SMALLINT



D_INDEXTYPE


avtor

VARCHAR

45


D_NAME


id

SMALLINT



D_INDEXTYPE

New_table

Nomer_knigi

SMALLINT



D_INDEXTYPE


Nomer_otdela

SMALLINT



D_INDEXTYPE


nazvanie_knigi

VARCHAR

45


D_NAME


kol_vo_stranic

SMALLINT



D_INDEXTYPE


avtor

VARCHAR

45


D_NAME


izmen

VARCHAR

45


D_NAME


data_tr

DATE



D_DATETYPE

otdel_knig

nazvanie_otdela

VARCHAR

45


D_NAME


Nomer_otdela

SMALLINT



D_INDEXTYPE


kol_vo_knig

SMALLINT



D_INDEXTYPE


telefon

VARCHAR



D_TEL


nomer_bibliotekorya

SMALLINT



D_INDEXTYPE

Vida4a_knig

Nomer_zapisi

SMALLINT



D_INDEXTYPE


Nomer_knigi

SMALLINT



D_INDEXTYPE


Nomer_bibliotekorya

SMALLINT



D_INDEXTYPE


Nomer_4itatelya

SMALLINT



D_INDEXTYPE


data_vyda4i_knigi

DATE



D_DATETYPE


data_vozvrata_knigi

DATE



D_DATETYPE


Таблица 2. Список доменов.

Имя домена

Тип

Длинна

Ограничения

D_INDEXTYPE

SMALLINT


VALUE>0

D_NAME

VARCHAR

45


D_ADRES

VARCHAR

40


D_TEL

VARCHAR

15


D_DATETYPE

DATE


VALUE<='TODAY'


Теперь, когда проработаны все теоретические аспекты создания базы данных, можно приступать к программированию доменов и таблиц. Для этого, запустив IBExpert, загружаем SQL редактор и выбираем меню Tools->SQL Editor.

В появившемся окне пишем скрипт для создания домена D_NAME:

CREATE DOMAIN D_NAME AS(45) CHARACTER SET WIN1251 NULL

COLLATE WIN1251

Подобным образом создал домены D_INDEXTYPE, D_ADRES, D_DATETYPE, D_TEL. (см. Приложение 1).

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

Средствами IBExpert создаем таблицу chitatel и указываем ключевые поля, в этой таблице будут храниться данные о типах мебели:

CREATE TABLE CHITATEL (_CHITATELYA D_NAME /* D_NAME = VARCHAR (45) NOT NULL */,_CHITATELYA D_NAME /* D_NAME = VARCHAR (45) NOT NULL */,D_NAME /* D_NAME = VARCHAR (45) NOT NULL */,D_NAME /* D_NAME = VARCHAR (45) NOT NULL */,_DOMA D_INDEXTYPE /* D_INDEXTYPE = INTEGER NOT NULL */,D_TEL /* D_TEL = VARCHAR (15) */,_CHITATELYA D_INDEXTYPE NOT NULL /* D_INDEXTYPE = INTEGER NOT NULL */

);

-Задание первичного ключа

ALTER TABLE CHITATEL ADD PRIMARY KEY (NOMER_CHITATELYA);

Используя комбинацию генератора с триггером, реализуем автоинкрементное поле для таблицы chitatel

-Создание генератора

CREATE GENERATOR GEN_ID_ CHITATEL;

-Создание триггера

CREATE OR ALTER TRIGGER CHITATEL_BI0 FOR CHITATELBEFORE INSERT OR UPDATE POSITION 0(NEW. nomer_chitatelya is null) then. nomer_chitatelya=gen_id (gen_chitatel,1);

Подобным образом создаем остальные таблицы. Задаем для этих таблиц ключевые поля, вторичные ключи, разрабатываем генераторы и триггеры (см. Приложение 1).

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


В курсовом проекте клиентское приложение для информационной системы "Библиотека" будет придерживаться концепции "тонкого клиента". То есть, вся бизнес - логика должна быть реализована на сервере базы данных Firebird. РСУБД предоставляет широкий выбор вариантов программирования бизнес - логики позволяя написать просмотры, хранимые процедуры, триггеры, исключения. Средствами IBExpert создаем все необходимые просмотры (см. Листинг 1). Далее приступаем к созданию хранимых процедур на ввод, изменение и удаление данных для каждой таблицы. Кроме этого необходимо создать хранимые процедуры на выборку данных для составления отчетов.

В IBExpert загрузил SQL редактор, выбрав меню Tools->SQL Editor. В появившемся окне написал скрипт для создания процедур на ввод, изменение и удаление данных таблицы сhitatel:

-Процедура на удаление данных из таблицы chitatel

CREATE OR ALTER PROCEDURE DEL_CHIT (_chitat integer)FROM chitatel(nomer_CHITATELYA =: n_CHITAT);^

Затем создаем процедуру на добавление или изменение записи.

CREATE OR ALTER PROCEDURE ADD_CHIT (varchar (20),varchar (15),varchar (15),varchar (21),_doma smallint,varchar (10))INTO chitatel (chitatel. familiya_chitatelya,chitatel. imya_chitatelya,chitatel. otchestvo,. ulica,chitatel. nomer_doma,chitatel. telefon)(: familiya,: name,: otchestvo,: ulica,: n_doma,: tel);;^OR ALTER PROCEDURE RED_CHITATEL (

familiya varchar (20),

name varchar (10),varchar (14),varchar (20),_doma smallint,varchar (10),_chit integer)chitatelnomer_chitatelya=: n_chit,_doma =: n_doma,_chitatelya =: familiya,_chitatelya =: name,=: otchestvo,=: ulica,=: tel(nomer_chitatelya =: n_chit);sqlcode - 530 dokey_ne_ice;

end^

Полный список хранимых процедур представлен в таблице 3.

Таблица 3. Название и назначение процедур

Название процедуры

Назначение

Add_chit

Добавление записи в таблице читатели

Add_biblio

Добавление записи в таблице библиотекари

Add_vyda4

Добавление записи в таблице выдача книг

Add_otdel

Добавление записи в таблице отделы книг

Add_knig

Добавление записи в таблице книги

Del_chit

Удаление записи в таблице читатели

Del _knig

Удаление записи в таблице книги

Del _otdel

Удаление записи в таблице отделы книг

Del _bibl

Удаление записи в таблице библиотекари

Del _vyda4a

Удаление записи в таблице выдача книг

Red_chitatel

Изменение записи в таблице читатели

Reg _otdel

Изменение записи в таблице отделы книг

Reg _knig

Изменение записи в таблице книги

Reg _bibl

Изменение записи в таблице библиотекари

Reg _vyda4

Изменение записи в таблице выдача книг

 


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


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

.        Выполняем команду File->New->Other и выбираем значок Data Module на вкладке New.

2.      В созданный модуль DB переносим компоненты IBDatabase1 и IBTransaction1.

.        Настраиваем свойства DatabaseName, DefaultTransaction для компонента IBDatabase1 и свойство DefaultDatabase для компонента IBTransaction1.

.        В созданный модуль FBDataModule переносим наборы данных TIBQuery. Формируем запросы ко всем главным таблицам, просмотрам, процедурам настроив свойство Query->SQL.

.        В тот же контейнер переносим компонентs TIBDataSource

.        Связываем источники данных с запросами и таблицами в свойстве DataSet.

.        Добавляем в модуль данных компонент IBStoredProc1 (рис.3) для реализации хранимых процедур, настроив свойства Database и Transaction

Рисунок 3. Наполнение модуля DB.

Данный DataModule не будет являться единственным. Приложение будет состоять из множества форм, к которым соответственно будут подключены различные DataModule.

Следующим этапом является размещение визуальных компонентов с последующею их настройкой и обработкой событий.

.        Переносим на главную форму требуемые компоненты

9.      Перетаскиваем на каждую форму необходимое количество компонентов DBGrid, для представления записей таблиц и свойством DataSource соединяем их с источником данных, а заголовки столбцов таблиц переименовываем в соответствующие названия полей.

.        Перетаскиваем необходимое количество других визуальных компонентов: TButton, TLabel, TEdit,

Рисунок 4. Внешний вид приложения и поиск.

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

17.    Добавление реализуем через созданную ранее хранимую процедуру на добавление: ADD_CHIT, для этого поместим на DataModule2 компонент IBStoredProc3 и настроим у него следующие свойства:

DataBase=IBDatabase1; StoredProcName= ADD_CHIT.

Рисунок.5. Форма для таблицы читатели.

Для реализации фильтрации, поместим на форму два компонента Edit (для задания диапазона фильтрации данных) и компонент Button чтобы подать запрос для фильтрации

.        Для генерации отчетов добавляем на главную форму соответствующие кнопки и пишем необходимый код в обработчике событий (см. Приложение 2).

Для формирования отчетов также будут выделены отдельные формы.

Рисунок 6. отчет

.        Командой Run->Run компилируем, собираем и запускаем приложение.

Полный листинг программы представлен в Приложении 2.

4. Создание Web приложения. Web-доступ


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

Для создания такого приложения будет использован язык программирования PHP - интерпретируемый, скриптовый язык программирования, созданный для генерации HTML-страниц на Web-сервере и работы с базами данных. А так же язык гипертекстовой разметки HTML для создания интерфейса приложения.

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

Остальные страницы будут полностью написаны на PHP: страницы с добавлением данных в таблицы, удалением данных в таблицы и редактированием данных. Также будет реализован поиск по базе данных.

В результате приложение будет иметь следующую карту страниц:

Рисунок 7. Схема созданного Web-приложения

Листинги Web-приложения представлены в приложении "Созданное Web-приложение".

Доступ к приложению: #"784174.files/image008.jpg">

Рисунок 8. Главная страница

Рисунок.9. Таблица Читатели и редактирование

Рисунок.10. Результат редактирования

Рисунок.11. Удаление

Рисунок.12. Результат удаления

Рисунок.13. Поиск

Рисунок.14. Результаты поиска

Рисунок.14. Сортировка

Рисунок.15. Результаты сортировки

Заключение


В результате выполнения курсовой работы нами было создано два клиентских приложения "Библиотека", это Windows и web - приложения. Были достигнуты все поставленные цели и задачи: Углублены теоретические и практические знания в области баз данных и систем управления базами данных. Пользователям предоставляется широкая возможность одновременной работы в обоих приложениях с одной базой данных.

Работа над курсовым проектом позволила приобрести навыки создания информационных систем, основанных на клиент - серверной технологии с использованием РСУБД Firebird. База данных для информационной системы создана в среде РСУБД Firebird и разработана с помощью утилиты IBExpert.

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

Список используемых источников


1.      А.Я. Архангельский, "Программирование в C++ Builder 6". - М.: "БИНОМ", 2003 г.

2.      Бори Х., "FIREBIRD. Руководство разработчика баз данных". - С-Пб.: "БХВ", 2006 г., 2-е издание.

.        Шамис В., "Borland C++ Builder 6.0". - С - Пб.: "Питер", 2005 г.

.        Похомов Б.И. C\C++ и Borland C++ Builder для студента. СПб.: БХВ-Петербург, 2006. - 448с.

.        Хомоненко А.Д., Ададуров С.Е. Работа с базами данных в C++ Builder. - СПб.: БХВ-Петербург, 2006. - 496 с: ил.

6.      <http://www.ibase.ru>

Приложения

 

Приложение 1. SQL код создания БД

Создание таблиц

Читатель

/*** Tables ***/

/************************************************************/

CREATE TABLE CHITATEL (_CHITATELYA D_NAME /* D_NAME = VARCHAR (45) NOT NULL */,_CHITATELYA D_NAME /* D_NAME = VARCHAR (45) NOT NULL */,D_NAME /* D_NAME = VARCHAR (45) NOT NULL */,D_NAME /* D_NAME = VARCHAR (45) NOT NULL */,_DOMA D_INDEXTYPE /* D_INDEXTYPE = INTEGER NOT NULL */,D_TEL /* D_TEL = VARCHAR (15) */,_CHITATELYA D_INDEXTYPE NOT NULL /* D_INDEXTYPE = INTEGER NOT NULL */

);

/************************************************************/

/*** Primary Keys ***/

/************************************************************/TABLE CHITATEL ADD PRIMARY KEY (NOMER_CHITATELYA);

/***********************************************************/

/*** Indices ***/

/************************************************************/

CREATE INDEX FAMILIYA_CHITATELYA ON CHITATEL (FAMILIYA_CHITATELYA);INDEX ULICA ON CHITATEL (ULICA);

/************************************************************/

/************************************************************/

/* Trigger: CHITATEL_BI0 */OR ALTER TRIGGER CHITATEL_BI0 FOR CHITATELBEFORE INSERT OR UPDATE POSITION 0(NEW. nomer_chitatelya is null) then. nomer_chitatelya=gen_id (gen_chitatel,1);

^

SET TERM; ^

/* Fields descriptions */ON COLUMN CHITATEL. NOMER_DOMA IS

'VALUE>0';

/************************************************************/

/*** Privileges ***/

/************************************************************/

Библиотекарь

CREATE TABLE BIBLIOTEKOR (_BIBLIOTEKORYA D_INDEXTYPE NOT NULL /* D_INDEXTYPE = INTEGER NOT NULL */,_OTDELA D_INDEXTYPE /* D_INDEXTYPE = INTEGER NOT NULL */,_BIBLIOTEKORYA D_NAME /* D_NAME = VARCHAR (45) NOT NULL */,_BIBLIOTEKORYA D_NAME /* D_NAME = VARCHAR (45) NOT NULL */

);

/************************************************************/

/*** Primary Keys ***/

/************************************************************/TABLE BIBLIOTEKOR ADD CONSTRAINT PK_BIBLIOTEKOR PRIMARY KEY (NOMER_BIBLIOTEKORYA);

/************************************************************/

/*** Foreign Keys ***/

/************************************************************/TABLE BIBLIOTEKOR ADD CONSTRAINT FK_BIBLIOTEKOR_1 FOREIGN KEY (NOMER_OTDELA) REFERENCES OTDEL_KNIG (NOMER_OTDELA);

/**********************************************************/

/*** Indices ***/

/************************************************************/INDEX FAM ON BIBLIOTEKOR (FAMILIYA_BIBLIOTEKORYA);

/************************************************************/

/*** Triggers ***/

/************************************************************/

SET TERM ^;

/************************************************************/

/*** Triggers for tables ***/

/***********************************************************/

/* Trigger: BIBLIOTEKOR_BI0 */OR ALTER TRIGGER BIBLIOTEKOR_BI0 FOR BIBLIOTEKORBEFORE INSERT OR UPDATE POSITION 0(NEW. nomer_bibliotekorya is null) then. nomer_bibliotekorya=gen_id (gen_bibliotekar,1);

^

SET TERM; ^

/* Fields descriptions */

COMMENT ON COLUMN BIBLIOTEKOR. NOMER_BIBLIOTEKORYA IS

'VALUE>0';ON COLUMN BIBLIOTEKOR. NOMER_OTDELA IS

'VALUE>0';

КнигиTABLE KNIGI (_KNIGI D_INDEXTYPE NOT NULL /* D_INDEXTYPE = INTEGER NOT NULL */,_OTDELA D_INDEXTYPE /* D_INDEXTYPE = INTEGER NOT NULL */,_KNIGI D_NAME /* D_NAME = VARCHAR (45) NOT NULL */,_VO_STRANIC D_INDEXTYPE /* D_INDEXTYPE = INTEGER NOT NULL */,D_NAME /* D_NAME = VARCHAR (45) NOT NULL */

);

/************************************************************/

/*** Primary Keys ***/

/************************************************************/TABLE KNIGI ADD CONSTRAINT PK_KNIGI PRIMARY KEY (NOMER_KNIGI);

/***********************************************************/

/*** Foreign Keys ***/

/************************************************************/TABLE KNIGI ADD CONSTRAINT FK_KNIGI_1 FOREIGN KEY (NOMER_OTDELA) REFERENCES OTDEL_KNIG (NOMER_OTDELA);

/************************************************************/

/*** Indices ***/

/************************************************************/INDEX "_KNIGA" ON KNIGI (NAZVANIE_KNIGI);

/************************************************************/

/*** Triggers ***/

/************************************************************/

SET TERM ^;

/************************************************************/

/*** Triggers for tables ***/

/************************************************************/

/* Trigger: KNIGI_BI0 */OR ALTER TRIGGER KNIGI_BI0 FOR KNIGIBEFORE INSERT OR UPDATE POSITION 0(NEW. nomer_knigi is null) then. nomer_knigi=gen_id (gen_knigi,1);

^

/* Trigger: KNIGI_HIST_BI0 */OR ALTER TRIGGER KNIGI_HIST_BI0 FOR KNIGI

ACTIVE BEFORE INSERT POSITION 0

ASvariable nomer_knigi_tr smallint;variable nomer_otdela_tr smallint;variable nazvanie_knigi_tr varchar (45);variable kol_vo_stranic_tr smallint;variable avtor_tr varchar (45);variable IZMEN_TR varchar (45);variable DATA_TR date;_TR=current_date;(inserting) then_TR=current_date;_knigi_tr=new. nomer_knigi;_TR='добавление';_otdela_tr=new. nomer_otdela;_knigi_tr=new. nazvanie_knigi;_vo_stranic_tr=new. kol_vo_stranic;_tr=new. avtor;

^

SET TERM; ^

/* Fields descriptions */

COMMENT ON COLUMN KNIGI. NOMER_KNIGI IS

'VALUE>0';ON COLUMN KNIGI. NOMER_OTDELA IS

'VALUE>0';ON COLUMN KNIGI. KOL_VO_STRANIC IS

'VALUE>0';

Исторя

CREATE TABLE NEW_TABLE (SMALLINT NOT NULL,_KNIGI SMALLINT,_OTDELA SMALLINT,_KNIGI VARCHAR (45),_VO_STRANIC SMALLINT,VARCHAR (45),VARCHAR (45),_TR DATE

);

/************************************************************/

/*** Primary Keys ***/

/************************************************************/

ALTER TABLE NEW_TABLE ADD CONSTRAINT PK_NEW_TABLE_1 PRIMARY KEY (ID);

Отдел книг

CREATE TABLE OTDEL_KNIG (_OTDELA D_NAME /* D_NAME = VARCHAR (45) NOT NULL */,_OTDELA D_INDEXTYPE NOT NULL /* D_INDEXTYPE = INTEGER NOT NULL */,_VO_KNIG D_INDEXTYPE /* D_INDEXTYPE = INTEGER NOT NULL */,D_TEL /* D_TEL = VARCHAR (15) */,_BIBLIOTEKORYA D_INDEXTYPE /* D_INDEXTYPE = INTEGER NOT NULL */

);

/************************************************************/

/*** Primary Keys ***/

/************************************************************/TABLE OTDEL_KNIG ADD CONSTRAINT PK_OTDEL_KNIG PRIMARY KEY (NOMER_OTDELA);

/************************************************************/

/*** Indices ***/

/************************************************************/INDEX NAZV ON OTDEL_KNIG (NAZVANIE_OTDELA);

/************************************************************/

/*** Triggers ***/

/*************************************************************TERM ^;

/************************************************************/

/*** Triggers for tables ***/

/************************************************************/

/* Trigger: OTDEL_BI0 */OR ALTER TRIGGER OTDEL_BI0 FOR OTDEL_KNIGBEFORE INSERT OR UPDATE POSITION 0(NEW. nomer_otdela is null) then. nomer_otdela=gen_id (gen_otdel_knig,1);

^

SET TERM; ^

/* Fields descriptions */

COMMENT ON COLUMN OTDEL_KNIG. NOMER_OTDELA IS

'VALUE>0';ON COLUMN OTDEL_KNIG. KOL_VO_KNIG IS

'VALUE>0';ON COLUMN OTDEL_KNIG. NOMER_BIBLIOTEKORYA IS

'VALUE>0';

Выдача книг

CREATE TABLE VIDA4A_KNIG (_ZAPISI D_INDEXTYPE NOT NULL /* D_INDEXTYPE = INTEGER NOT NULL */,_KNIGI D_INDEXTYPE /* D_INDEXTYPE = INTEGER NOT NULL */,_BIBLIOTEKORYA D_INDEXTYPE /* D_INDEXTYPE = INTEGER NOT NULL */,_CHITATELYA D_INDEXTYPE /* D_INDEXTYPE = INTEGER NOT NULL */,_VYDA4I_KNIGI D_DATETYPE /* D_DATETYPE = DATE NOT NULL */,_VOZVRATA_KNIGI D_DATETYPE /* D_DATETYPE = DATE NOT NULL */

);

/************************************************************/

/*** Primary Keys ***/

/************************************************************/TABLE VIDA4A_KNIG ADD CONSTRAINT PK_VIDA4A_KNIG PRIMARY KEY (NOMER_ZAPISI);

/**********************************************************/

/*** Foreign Keys ***/

/************************************************************/

ALTER TABLE VIDA4A_KNIG ADD CONSTRAINT FK_VIDA4A_KNIG_1 FOREIGN KEY (NOMER_KNIGI) REFERENCES KNIGI (NOMER_KNIGI);TABLE VIDA4A_KNIG ADD CONSTRAINT FK_VIDA4A_KNIG_2 FOREIGN KEY (NOMER_BIBLIOTEKORYA) REFERENCES BIBLIOTEKOR (NOMER_BIBLIOTEKORYA);

/************************************************************/

/*** Triggers ***/

/************************************************************/

SET TERM ^;

/************************************************************/

/*** Triggers for tables ***/

/************************************************************/

/* Trigger: VYDACHA_KNIG_BI0 */OR ALTER TRIGGER VYDACHA_KNIG_BI0 FOR VIDA4A_KNIGBEFORE INSERT OR UPDATE POSITION 0(NEW. nomer_zapisi is null) then. nomer_zapisi=gen_id (gen_vida4a_knig,1);^TERM; ^

/* Fields descriptions */ON COLUMN VIDA4A_KNIG. NOMER_ZAPISI IS

'VALUE>0';ON COLUMN VIDA4A_KNIG. NOMER_KNIGI IS

'VALUE>0';ON COLUMN VIDA4A_KNIG. NOMER_BIBLIOTEKORYA IS

'VALUE>0';ON COLUMN VIDA4A_KNIG. NOMER_CHITATELYA IS

'VALUE>0';

Представления

/* View: KNIGI_VIEW */VIEW KNIGI_VIEW (_KNIGI,_OTDELA,_KNIGI,_VO_STRANIC,)knigi. nomer_knigi,otdel_knig. nomer_otdela,knigi. nazvanie_knigi,knigi. kol_vo_stranic,knigi. avtorknigi,otdel_knigknigi. nomer_otdela=otdel_knig. nomer_otdela

;

/* View: VOZVRAT_VIEW */VIEW VOZVRAT_VIEW (_CHITATELYA,_CHITATELYA,,_CHITATELYA,_KNIGI,_KNIGI,_VOZVRATA_KNIGI)chitatel. familiya_chitatelya,chitatel. imya_chitatelya,chitatel. otchestvo,a_knig. nomer_chitatelya,vida4a_knig. nomer_knigi,knigi. nazvanie_knigi,a_knig. data_vozvrata_knigichitatel,vida4a_knig,knigichitatel. nomer_chitatelya=vida4a_knig. nomer_chitatelya and knigi. nomer_knigi=vida4a_knig. nomer_knigi

;

Хранимые процедуры Редактирование и удаление данных

beginINTO chitatel (chitatel. familiya_chitatelya,chitatel. imya_chitatelya,chitatel. otchestvo,. ulica,chitatel. nomer_doma,chitatel. telefon)(: familiya,: name,: otchestvo,: ulica,: n_doma,: tel);;INTO bibliotekor (bibliotekor. nomer_otdela,. familiya_bibliotekorya,. name_bibliotekorya)(: n_otdel,: familiya,: name);;

begininto vida4a_knig (nomer_knigi,nomer_chitatelya,_bibliotekorya,data_vyda4i_knigi,data_vozvrata_knigi)(: n_knigi,: n_biblio,: n_4itatelya,: data_vyd,: data_vozv);;into otdel_knig (otdel_knig. nazvanie_otdela,otdel_knig. kol_vo_knig,_knig. TELEFON,otdel_knig. nomer_bibliotekorya)(: nazvanie,: kol_knig,: telefon,: n_biblio);;INTO knigi (knigi. nomer_otdela,knigi. nazvanie_knigi, knigi. kol_vo_stranic,knigi. avtor)(: n_otdela,: new_nazvanie,: kol_vo_stranic,: avtor);;FROM vida4a_knig(nomer_zapisi =: n_zapisi);FROM otdel_knig(nomer_otdela =: n_otdela);FROM knigi(nomer_knigi =: n_knigi);FROM bibliotekor(nomer_bibliotekorya =: n_biblio);FROM chitatel(nomer_CHITATELYA =: n_CHITAT);chitatelnomer_chitatelya=: n_chit,_doma =: n_doma,_chitatelya =: familiya,_chitatelya =: name,=: otchestvo,=: ulica,=: tel(nomer_chitatelya =: n_chit);sqlcode - 530 dokey_ne_ice;bibliotekornomer_bibliotekorya =: n_biblio,_otdela =: n_otdela, familiya_bibliotekorya =: familiya,_bibliotekorya=: name(nomer_bibliotekorya =: n_biblio);vida4a_knignomer_zapisi=: n_zapisi,_knigi =: n_knigi,_chitatelya =: n_chit,_bibliotekorya =: n_biblio,_vyda4i_knigi=: data_vyd,_vozvrata_knigi=: data_vozvr(nomer_zapisi =: n_zapisi);sqlcode - 530 dokey_ne_ice;otdel_knignazvanie_otdela=: name_ot,_otdela =: n_otel,_vo_knig =: kol_knig,_bibliotekorya =: n_biblio,=: tel(nomer_otdela =: n_otel);sqlcode - 530 dokey_ne_ice;(: KOL_VO_STRANIC<=0) then exception stranicy;kniginomer_knigi =: n_knigi,_otdela =: n_otdela, nazvanie_knigi =: new_nazvanie,_vo_stranic =: kol_vo_stranic,=: avtor(nomer_knigi =: N_KNIGI);sqlcode - 530 dokey_ne_ice;

Домены

CREATE DOMAIN D_ADRES AS(40) CHARACTER SET WIN1251NULLWIN1251;DOMAIN D_DATETYPE ASNULL;DOMAIN D_INDEXTYPE ASNULL;ON DOMAIN D_INDEXTYPE IS

'VALUE>0';

CREATE DOMAIN D_NAME AS(45) CHARACTER SET WIN1251NULLWIN1251;DOMAIN D_TEL AS(15) CHARACTER SET WIN1251WIN1251;

Приложение 2. Листинг клиентского приложения

// ---------------------------------------------------------------------------

#include <vcl. h>

#pragma hdrstop

#include "Unit1. h"

#include "Unit2. h"

#include "Unit3. h"

// ---------------------------------------------------------------------------

#pragma package (smart_init)

#pragma resource "*. dfm"*Form1;

// ---------------------------------------------------------------------------

__fastcall TForm1:: TForm1 (TComponent* Owner)

: TForm (Owner)

{

}

// ---------------------------------------------------------------------------__fastcall TForm1:: Edit1Change (TObject *Sender)

{(RadioButton1->Checked==true)

{Set<TLocateOption,0,1> flags;<< loPartialKey;(! DataModule2->IBTable2->IsEmpty ())->IBTable2->Locate ("nomer_knigi", Edit1->Text, flags); }(RadioButton2->Checked==true)

{Set<TLocateOption,0,1> flags;<< loPartialKey;(! DataModule2->IBTable2->IsEmpty ())->IBTable2->Locate ("nazvanie_knigi", Edit1->Text, flags); }(RadioButton3->Checked==true)

{Set<TLocateOption,0,1> flags;<< loPartialKey;(! DataModule2->IBTable2->IsEmpty ())->IBTable2->Locate ("avtor", Edit1->Text, flags); }

}

// ---------------------------------------------------------------------------__fastcall TForm1:: Button1Click (TObject *Sender)

{->IBStoredProc1->ParamByName ("familiya") - >AsString=Edit2->Text;->IBStoredProc1->ParamByName ("name") - >AsString=Edit3->Text;->IBStoredProc1->ParamByName ("otchestvo") - >AsString=Edit4->Text;->IBStoredProc1->ParamByName ("ulica") - >AsString=Edit5->Text;->IBStoredProc1->ParamByName ("n_doma") - >AsString=Edit6->Text;->IBStoredProc1->ParamByName ("tel") - >AsString=Edit7->Text;->IBStoredProc1->ParamByName ("n_chit") - >AsString=Edit10->Text;->IBStoredProc1->Prepare ();->IBStoredProc1->ExecProc ();->IBTable3->Active=false;->IBTable3->Active=true;

}

// ---------------------------------------------------------------------------

void __fastcall TForm1:: Button2Click (TObject *Sender)

{->IBStoredProc2->ParamByName ("familiya") - >AsString=Edit2->Text;->IBStoredProc2->ParamByName ("name") - >AsString=Edit3->Text;->IBStoredProc2->ParamByName ("otchestvo") - >AsString=Edit4->Text;->IBStoredProc2->ParamByName ("ulica") - >AsString=Edit5->Text;->IBStoredProc2->ParamByName ("n_doma") - >AsString=Edit6->Text;->IBStoredProc2->ParamByName ("tel") - >AsString=Edit7->Text;->IBStoredProc2->Prepare ();->IBStoredProc2->ExecProc ();->IBTable3->Active=false;->IBTable3->Active=true;

}

// ---------------------------------------------------------------------------__fastcall TForm1:: Button3Click (TObject *Sender)

{->IBStoredProc3->ParamByName ("n_CHITAT") - >AsString=Edit8->Text;->IBStoredProc3->Prepare ();->IBStoredProc3->ExecProc ();->IBTable3->Active=false;->IBTable3->Active=true;

}

// ---------------------------------------------------------------------------

void __fastcall TForm1:: Button5Click (TObject *Sender)

{->IBTable3->Active=false;->IBTable3->Filtered=false;->IBTable3->Filter="NOMER_CHITATELYA='"+Edit9->Text+"'";->IBTable3->Active=true;->IBTable3->Filtered=true;

}

// ---------------------------------------------------------------------------

void __fastcall TForm1:: Button4Click (TObject *Sender)

{->IBTable3->Filtered=false;

}

// ---------------------------------------------------------------------------

void __fastcall TForm1:: Button6Click (TObject *Sender)

{(RadioButton4->Checked==true)

{DataModule2->IBTable3->IndexName="RDB$PRIMARY1"; }if (RadioButton5->Checked==true)

{DataModule2->IBTable3->IndexName="familiya_chitatelya"; }if (RadioButton6->Checked==true)

{DataModule2->IBTable3->IndexName="ulica"; }

}

// ---------------------------------------------------------------------------__fastcall TForm1:: Button7Click (TObject *Sender)

{->IBStoredProc4->ParamByName ("n_biblio") - >AsString=Edit11->Text;->IBStoredProc4->ParamByName ("n_otdela") - >AsString=Edit12->Text;->IBStoredProc4->ParamByName ("familiya") - >AsString=Edit13->Text;->IBStoredProc4->ParamByName ("name") - >AsString=Edit14->Text;->IBStoredProc4->Prepare ();->IBStoredProc4->ExecProc ();->IBTable4->Active=false;->IBTable4->Active=true;

}

// ---------------------------------------------------------------------------__fastcall TForm1:: Button8Click (TObject *Sender)

{->IBStoredProc5->ParamByName ("n_biblio") - >AsString=Edit11->Text;->IBStoredProc5->ParamByName ("n_otdel") - >AsString=Edit12->Text;->IBStoredProc5->ParamByName ("familiya") - >AsString=Edit13->Text;->IBStoredProc5->ParamByName ("name") - >AsString=Edit14->Text;->IBStoredProc5->Prepare ();->IBStoredProc5->ExecProc ();->IBTable4->Active=false;->IBTable4->Active=true;

}

// ---------------------------------------------------------------------------__fastcall TForm1:: Button9Click (TObject *Sender)

{->IBStoredProc6->ParamByName ("n_biblio") - >AsString=Edit15->Text;->IBStoredProc6->Prepare ();->IBStoredProc6->ExecProc ();->IBTable4->Active=false;->IBTable4->Active=true;

}

// ---------------------------------------------------------------------------__fastcall TForm1:: Button10Click (TObject *Sender)

{->IBTable4->Active=false;->IBTable4->Filtered=false;->IBTable4->Filter="Nomer_BIBLIOtekorya='"+Edit16->Text+"'";->IBTable4->Active=true;->IBTable4->Filtered=true;

}

// ---------------------------------------------------------------------------__fastcall TForm1:: Button12Click (TObject *Sender)

{(RadioButton7->Checked==true)

{DataModule2->IBTable4->IndexName="pk_bibliotekor"; }if (RadioButton8->Checked==true)

{DataModule2->IBTable4->IndexName="fam"; }

}

// ---------------------------------------------------------------------------

void __fastcall TForm1:: Button11Click (TObject *Sender)

{->IBTable4->Filtered=false;

}

// ---------------------------------------------------------------------------

void __fastcall TForm1:: Button13Click (TObject *Sender)

{->IBStoredProc7->ParamByName ("n_knigi") - >AsString=Edit17->Text;->IBStoredProc7->ParamByName ("n_otdela") - >AsString=Edit18->Text;->IBStoredProc7->ParamByName ("new_nazvanie") - >AsString=Edit19->Text;->IBStoredProc7->ParamByName ("kol_vo_stranic") - >AsString=Edit20->Text;->IBStoredProc7->ParamByName ("avtor") - >AsString=Edit21->Text;->IBStoredProc7->Prepare ();->IBStoredProc7->ExecProc ();->IBTable5->Active=false;->IBTable5->Active=true;

}

// ---------------------------------------------------------------------------

void __fastcall TForm1:: Button14Click (TObject *Sender)

{

DataModule2->IBStoredProc8->ParamByName ("n_otdela") - >AsString=Edit18->Text;->IBStoredProc8->ParamByName ("new_nazvanie") - >AsString=Edit19->Text;->IBStoredProc8->ParamByName ("kol_vo_stranic") - >AsString=Edit20->Text;->IBStoredProc8->ParamByName ("avtor") - >AsString=Edit21->Text;->IBStoredProc8->Prepare ();->IBStoredProc8->ExecProc ();->IBTable5->Active=false;->IBTable5->Active=true;

}

// ---------------------------------------------------------------------------

void __fastcall TForm1:: Button15Click (TObject *Sender)

{->IBStoredProc9->ParamByName ("n_knigi") - >AsString=Edit22->Text;->IBStoredProc9->Prepare ();->IBStoredProc9->ExecProc ();->IBTable5->Active=false;->IBTable5->Active=true;

}

// ---------------------------------------------------------------------------

void __fastcall TForm1:: Button16Click (TObject *Sender)

{(RadioButton9->Checked==true)

{DataModule2->IBTable5->IndexName="pk_knigi"; }if (RadioButton10->Checked==true)

{DataModule2->IBTable5->IndexName="_kniga"; }

}

// ---------------------------------------------------------------------------

void __fastcall TForm1:: Button17Click (TObject *Sender)

{->IBStoredProc10->ParamByName ("name_ot") - >AsString=Edit23->Text;->IBStoredProc10->ParamByName ("n_otel") - >AsString=Edit24->Text;->IBStoredProc10->ParamByName ("kol_knig") - >AsString=Edit25->Text;->IBStoredProc10->ParamByName ("tel") - >AsString=Edit26->Text;->IBStoredProc10->ParamByName ("n_biblio") - >AsString=Edit27->Text;->IBStoredProc10->Prepare ();->IBStoredProc10->ExecProc ();->IBTable6->Active=false;->IBTable6->Active=true;

}

// ---------------------------------------------------------------------------

void __fastcall TForm1:: Button20Click (TObject *Sender)

{(RadioButton11->Checked==true)

{DataModule2->IBTable6->IndexName="pk_otdel_knig"; }if (RadioButton12->Checked==true)

{DataModule2->IBTable6->IndexName="nazv"; }

}

// ---------------------------------------------------------------------------

void __fastcall TForm1:: Button18Click (TObject *Sender)

{->IBStoredProc11->ParamByName ("nazvanie") - >AsString=Edit23->Text;->IBStoredProc11->ParamByName ("kol_knig") - >AsString=Edit25->Text;->IBStoredProc11->ParamByName ("telefon") - >AsString=Edit26->Text;->IBStoredProc11->ParamByName ("n_biblio") - >AsString=Edit27->Text;->IBStoredProc11->Prepare ();->IBStoredProc11->ExecProc ();->IBTable6->Active=false;->IBTable6->Active=true;

}

// ---------------------------------------------------------------------------

void __fastcall TForm1:: Button19Click (TObject *Sender)

{->IBStoredProc12->ParamByName ("n_otdela") - >AsString=Edit28->Text;->IBStoredProc12->Prepare ();->IBStoredProc12->ExecProc ();->IBTable6->Active=false;->IBTable6->Active=true;

}

// ---------------------------------------------------------------------------

void __fastcall TForm1:: Button21Click (TObject *Sender)

{->IBStoredProc13->ParamByName ("n_zapisi") - >AsString=Edit29->Text;->IBStoredProc13->ParamByName ("n_knigi") - >AsString=Edit30->Text;->IBStoredProc13->ParamByName ("n_biblio") - >AsString=Edit31->Text;->IBStoredProc13->ParamByName ("n_chit") - >AsString=Edit32->Text;->IBStoredProc13->ParamByName ("data_vyd") - >AsString=Edit33->Text;->IBStoredProc13->ParamByName ("data_vozvr") - >AsString=Edit34->Text;->IBStoredProc13->Prepare ();->IBStoredProc13->ExecProc ();->IBTable7->Active=false;->IBTable7->Active=true;

}

// ---------------------------------------------------------------------------

void __fastcall TForm1:: Button22Click (TObject *Sender)

{->IBStoredProc14->ParamByName ("n_zapisi") - >AsString=Edit29->Text;->IBStoredProc14->ParamByName ("n_knigi") - >AsString=Edit30->Text;->IBStoredProc14->ParamByName ("n_biblio") - >AsString=Edit31->Text;->IBStoredProc14->ParamByName ("n_4itatelya") - >AsString=Edit32->Text;->IBStoredProc14->ParamByName ("data_vyd") - >AsString=Edit33->Text;->IBStoredProc14->ParamByName ("data_vozv") - >AsString=Edit34->Text;->IBStoredProc14->Prepare ();->IBStoredProc14->ExecProc ();->IBTable7->Active=false;->IBTable7->Active=true;

}

// ---------------------------------------------------------------------------

void __fastcall TForm1:: Button23Click (TObject *Sender)

{->IBStoredProc15->ParamByName ("n_zapisi") - >AsString=Edit35->Text;->IBStoredProc15->Prepare ();->IBStoredProc15->ExecProc ();->IBTable7->Active=false;->IBTable7->Active=true;

}

// ---------------------------------------------------------------------------

void __fastcall TForm1:: Edit36Change (TObject *Sender)

{(RadioButton13->Checked==true)

{Set<TLocateOption,0,1> flags;<< loPartialKey;(! DataModule2->IBTable7->IsEmpty ())->IBTable7->Locate ("nomer_zapisi", Edit36->Text, flags); }(RadioButton14->Checked==true)

{Set<TLocateOption,0,1> flags;<< loPartialKey;(! DataModule2->IBTable7->IsEmpty ())->IBTable7->Locate ("nomer_chitatelya", Edit36->Text, flags); }

}

// ---------------------------------------------------------------------------

void __fastcall TForm1:: Button24Click (TObject *Sender)

{(RadioButton15->Checked==true)

{DataModule2->IBTable7->IndexName="pk_vida4a_knig"; }if (RadioButton16->Checked==true)

{DataModule2->IBTable7->IndexName="fk_vida4a_knig_1"; }

}

// ---------------------------------------------------------------------------

void __fastcall TForm1:: Button25Click (TObject *Sender)

{->QuickRep1->Preview ();

}

// -------------------------------------------------------------------

Приложение 3. "Создание Web-приложения"

Листинг 3.1.html-файл index.html

<html>

<head>

<title>Библиотека</title>

</head>

<body background=4. jpg>

<p align=center><b><font size="7" color="indigo"><i><b>Библиотека>>>>> </i></font></b></p>

<p><b><font size="6" color="indigo"><i><b><<<Просмотры</i></font></b>

<td><h2><img src="111. gif"><a href=knigi_view. php target="2">Все книги</h2></a>

<td><h2><img src="211. gif"><a href=vozvrat_view. php target="2">Возврат книг</h2></a>

<td><h2><img src="211. gif"><a href=knigi_hist. php target="2">История книг</h2></a>

</td>

<p><b><font size="6" color="indigo"><i><b><<<<Таблицы</i></font></b>

<td><h2><img src="111. gif"><a href=chitatel. php target="2">Читатели</h2></a>

<h2><img src="211. gif"><a href=bibliotekar. php target="2">Библиотекари</h2></a>

<td><h2><img src="111. gif"><a href=otdel. php target="2">Отделы книг</h2></a>

<td><h2><img src="211. gif"><a href=knigi. php target="2">Книги</h2></a>

<td><h2><img src="111. gif"><a href=vydacha. php target="2">Выдача книг</h2></a>

</td>

</body>

</html>

Листинг 3.2 PHP код страницы vozvrat_view. php

<body background=13. jpg>

<h1 align="center">Просмотр возврвта книг </h1>

<? php

$host='inf612c00: D: \DB\G140604_KALASHNIKOVA. FDB';

$usname='SYSDBA';

$pswrd='masterkey';

$db=ibase_pconnect ($host, $usname, $pswrd); (! $db)

{

echo 'Ошибка соединения с БД';

exit;

}

$query="select * from vozvrat_VIEW";

$result=ibase_query ($query);'<table border=1 align=center>';'<tr><th bgcolor=\"#ccccff\">Фамилия</th>'.

'<th bgcolor=\"#ccccff\">Имя</th>'.

'<th bgcolor=\"#ccccff\">Отчество</th>'.

'<th bgcolor=\"#ccccff\">Номер читателя</th>'.

'<th bgcolor=\"#ccccff\">Номер книги</th>'.

'<th bgcolor=\"#ccccff\">Название</th>'.

'<th bgcolor=\"#ccccff\">Дата возврата</th>'.

'<tr>';

$i=0;($row=ibase_fetch_row ($result))

{$i++;"<tr><td>$row [0] </td>

<td>$row [1] </td>

<td>$row [2] </td>

<td>$row [3] </td>

<td>$row [4] </td>

<td>$row [5] </td>

<td>$row [6] </td>

</tr>";

}"</table>";_free_result ($result);

? ><a href="index.html"><li>На главную</li></a>

</body>

</html>

Листинг 3.3 PHP код страницы knigi_hist. php

<html>

<head>

<title>История книг</title>

</head>

<body background=4. jpg>

<b><font size="7" color="indigo"><i><b>История книг</i></font></b><br>

<? php

$host='inf612c00: D: \DB\G140604_KALASHNIKOVA. FDB';

$usname='SYSDBA';

$pswrd='masterkey';

$db=ibase_pconnect ($host, $usname, $pswrd); (! $db)

{

echo 'Ошибка соединения с БД';

exit;

}

$query="select * from new_table";

$result=ibase_query ($query);'<table border=1 align=center>';'<tr><th bgcolor=\"\">Номер записи</th>'.

'<th bgcolor=\"\">Номер книги</th>'.

'<th bgcolor=\"\">Номер отдела</th>'.

'<th bgcolor=\"\">Название</th>'.

'<th bgcolor=\"\">Кол-во страниц</th>'.

'<th bgcolor=\"\">Автор</th>'.

'<th bgcolor=\"\">Изминение</th>'.

'<th bgcolor=\"\">Дата</th>'.

'<tr>';

$i=0;($row=ibase_fetch_row ($result))

{$i++;"<tr><td>$row [0] </td>

<td>$row [1] </td>

<td>$row [2] </td>

<td>$row [3] </td>

<td>$row [5] </td>

<td>$row [6] </td>

<td>$row [7] </td></tr>";

}"</table>";_free_result ($result);

? >

</body>

</html>

Листинг 3.4 PHP код страницы knigi. php

<html>

<head>

<title>Таблица Книги</title>

<meta http-equiv="Выберите расширение для паковки" content="text/html; charset=windows-1251">

</head>

<body background=13. jpg>

<p><b><font size="7" color="indigo"><i><b>Таблица Книги</i></font></b><br>

<? php

$host='inf612c00: D: \DB\G140604_KALASHNIKOVA. FDB';

$usname='SYSDBA';

$pswrd='masterkey';

$db=ibase_pconnect ($host, $usname, $pswrd); (! $db)

{

echo 'Ошибка соединения с БД';

exit;

}

$query="select * from KNIGI";

$result=ibase_query ($query);'<table border=1 align=center>';'<tr><th bgcolor=\"\">№книги</th>'.

'<th bgcolor=\"\">№ отдела</th>'.

'<th bgcolor=\"\">Название</th>'.

'<th bgcolor=\"\">Кол-во страниц</th>'.

'<th bgcolor=\"\">Автор</th>'.

'<tr>';

$i=0;($row=ibase_fetch_row ($result))

{$i++;"<tr><td>$row [0] </td>

<td>$row [1] </td>

<td>$row [2] </td>

<td>$row [3] </td>

<td>$row [4] </td>

</tr>";

}"</table>";_free_result ($result);

? >

<br><p align="center">

<form action="upd_knigi. php" method="post"><br>

№книги <input type="text" name="n_knigi" size="3">&nbsp;

№ отдела <input type="text" name="n_otdela" size="3">&nbsp;

Название <input type="text" name="new_nazvanie" size="10">&nbsp;

Кол-во страниц <input type="text" name="kol_vo_ctranic" size="10">&nbsp;

Автор <input type="text" name="avtor" size="10">&nbsp;

<br><input type="submit" value="Изменить">

</form></p>

<br><hr>

<p><b><font size="5" color="indigo"><i><b>Операции над таблицей</i></font></b>

<a href="ins_knigi.html"><li>Ввод данных</li></a>

<a href="del_knigi.html"><li>Удаление записей</li></a>

<a href="search_knigi.html"><li>Поиск информации</li></a>

<a href="sort_knigi.html"><li>Сортировка записей</li></a>

<a href="index.html"><li>На главную</li></a>

</body>

</html>

Листинг 3.5 код страницы ins_knigi.html

<html>

<head>

<title>Таблица Книги - форма ввода новой записи</title>

<meta http-equiv="Выберите расширение для паковки" content="text/html; charset=windows-1251">

</head>

<body background=13. jpg>

<p><b><font size="6" color="indigo"><i><b>Добавление новой книги</i></font></b>

<br>

<form action="ins_knigi. php" method="post"><br>

<p><b><font size="5" color="indigo"><i><b>Название </i></font></b><input type="text" name="new_nazvanie"><br>

<p><b><font size="5" color="indigo"><i><b>№отдела </i></font></b><input type="text" name="n_otdela"><br>

<p><b><font size="5" color="indigo"><i><b>Кол-во страниц </i></font></b><input type="text" name="kol_vo_stranic"><br>

<p><b><font size="5" color="indigo"><i><b>Автор </i></font></b><input type="text" name="avtor"><br>

<br>

<input type="submit" value="Добавить">

</form>

</body>

</html>

Листинг 3.6 PHP код страницы ins_knigi. php

<html>

<head>

<title>Таблица Книги - результаты ввода</title>

<meta http-equiv="Выберите расширение для паковки" content="text/html; charset=windows-1251">

</head>

<body background=13. jpg>

<p><b><font size="7" color="indigo"><i><b>Добавление книги</i></font></b><br>

<? php

$n_otdela=$_POST ['n_otdela'];

$new_nazvanie=$_POST ['new_nazvanie'];

$kol_vo_stranic=$_POST ['kol_vo_stranic'];

$avtor=$_POST ['avtor'];(! $new_nazvanie)

{ echo 'Вы ввели не все данные';

exit;

}

$host='inf612c00: D: \DB\G140604_KALASHNIKOVA. FDB';

$usname='SYSDBA';

$pswrd='masterkey';

$db=ibase_pconnect ($host, $usname, $pswrd); (! $db)

{

echo 'Ошибка соединения с БД';

exit;

}

$query="execute procedure ADD_KNIG ('". $n_otdela. "','". $new_nazvanie. "','". $kol_vo_stranic. "','". $avtor. "')";

$it=ibase_trans ();'<br>';

$result=ibase_query ($query);

$ic=ibase_commit (); ($result) {echo'Запись успешно добавлена'; }

? >

<br><br><hr>

<a href="ins_knigi.html"><li>Назад</li></a>

<a href="knigi. php"><li>Просмотр таблицы</li></a>

<a href="index.html>"><li>В начало</li></a>

</body>

</html>

Листинг 3.7 PHP код страницы del_knigi. php

<html>

<head>

<title>Таблица Книги - результаты ввода</title>

<meta http-equiv="Выберите расширение для паковки" content="text/html; charset=windows-1251">

</head>

<body background=13. jpg>

<p><b><font size="7" color="indigo"><i><b>Таблица Книга - результаты ввода</i></font></b><br><br>

<? php

$n_knigi=$_POST ['n_knigi'];

if (! $n_knigi)

{ echo 'Вы ввели не все данные';

exit;

}

$host='inf612c00: D: \DB\G140604_KALASHNIKOVA. FDB';

$usname='SYSDBA';

$pswrd='masterkey';

$db=ibase_pconnect ($host, $usname, $pswrd);

if (! $db)

{'Ошибка соединения с БД';

exit;

}

$query="execute procedure DEL_KNIG ('". $n_knigi. "')";

$it=ibase_trans ();'<br>';

$result=ibase_query ($query);

$ic=ibase_commit ();

if ($result) {echo'Запись успешно удалена'; }

? >

<br><br><hr>

<a href="del_knigi.html"><li>Назад</li></a>

<a href="knigi. php"><li>Просмотр таблицы</li></a>

<a href="index.html"><li>В начало</li></a>

</body>

</html>

Листинг 3.8 код страницы del_knigi.html

<html>

<head>

<title>Удаление книги</title>

<meta http-equiv="Выберите расширение для паковки" content="text/html; charset=windows-1251">

</head>

<body background=13. jpg>

<p><b><font size="6" color="indigo"><i><b>Удаление книги</i></font></b>

<br>

<form action="del_knigi. php" method="post"><br>

<p><b><font size="5" color="indigo"><i><b>№книги </i></font></b><input type="text" name="n_knigi"><br>

<br>

<input type="submit" value="Удалить">

</form>

</body>

</html>

Листинг 3.9 PHP код страницы upd_knigi. php

<html>

<head>

<title>Таблица Книги - результаты редактирования</title>

<meta http-equiv="Выберите расширение для паковки" content="text/html; charset=windows-1251">

</head>

<body background=13. jpg>

<p><b><font size="7" color="indigo"><i><b>Результаты редактирования книги</i></font></b><br>

<? php

$n_knigi=$_POST ['n_knigi'];

$n_otdela=$_POST ['n_otdela'];

$new_nazvanie=$_POST ['new_nazvanie'];

$kol_vo_ctranic=$_POST ['kol_vo_ctranic'];

$avtor=$_POST ['avtor'];(! $n_knigi||! $new_nazvanie||! $avtor)

{ echo 'Вы ввели не все данные';

exit;

}

$host='inf612c00: D: \DB\G140604_KALASHNIKOVA. FDB';

$usname='SYSDBA';

$pswrd='masterkey';

$db=ibase_pconnect ($host, $usname, $pswrd); (! $db)

{

echo 'Ошибка соединения с БД';

exit;

}

$query="execute procedure RED_KNIG ('". $n_knigi. "','". $n_otdela. "','". $new_nazvanie. "','". $kol_vo_ctranic. "','". $avtor. "')";

$it=ibase_trans ();'<br>';

$result=ibase_query ($query);

$ic=ibase_commit (); ($result) {echo'Запись успешно изменена'; }

? >

<br><br><hr>

<a href="knigi. php"><li>Просмотр таблицы</li></a>

<a href="index.html"><li>В начало</li></a>

</body>

</html>

Листинг 3.10. код страницы search_knigi.html

<html>

<head>

<title>поиск книги</title>

<meta http-equiv="Выберите расширение для паковки" content="text/html; charset=windows-1251">

</head>

<body background=13. jpg>

<p><b><font size="6" color="indigo"><i><b>Поиск книги</i></font></b>

<br>

<form action="search_knigi. php" method="post"><br>

<p><b><font size="6" color="indigo"><i><b>Выберите тип поиска: </i></font></b><br>

<select name="search_type">

<option value="nomer_knigi">№книги</option>

<option value="nazvanie_knigi">Название</option>

<option value="avtor">Автор</option>

</select>

<br><br><br>

<p><b><font size="6" color="indigo"><i><b>Введите информацию для поиска: </i></font></b><br>

<input type="text" name="search_term">

<br><br>

<input type="submit" value="Найти">

</form>

</body>

</html>

Листинг 3.11. PHP код страницы search_knigi. php

<html>

<head>

<title>Поиск книги</title>

<meta http-equiv="Выберите расширение для паковки" content="text/html; charset=windows-1251">

</head>

<body background=13. jpg>

<p><b><font size="7" color="indigo"><i><b> Результаты поиска книги</i></font></b><br>

<? php

$searchtype=$_POST ['search_type'];

$searchterm=$_POST ['search_term'];

$searchterm=trim ($searchterm);(! $searchtype||! $searchterm)

{'Вы не ввели параметры поиска';;

}

$host='inf612c00: D: \DB\G140604_KALASHNIKOVA. FDB';

$usname='SYSDBA';

$pswrd='masterkey';

$db=ibase_pconnect ($host, $usname, $pswrd); (! $db)

{

echo 'Ошибка соединения с БД';

exit;

}

$query="select * from knigi where". $searchtype." like '%". $searchterm. "%'";

$result=ibase_query ($query);'<p><H3>Найдено: </h3>';

$i=0;($row=ibase_fetch_row ($result))

{$i++;'<p><strong>'. $i. '. № книги: ';($row [0]);'</strong><br> № отдела: ';($row [1]);'</strong><br> Название: ';($row [2]);'</strong><br> Кол-во страниц: ';($row [3]);'</strong><br> Автор: ';($row [4]);'</p><br>';

};_free_result ($result);

? >

<br><br><hr>

<a href="search_knigi.html"><li>Назад</li></a>

<a href="knigi. php"><li>Просмотр таблицы</li></a>

<a href="index.html"><li>В начало</li></a>

</body>

</html>

Листинг 3.12. PHP код страницы sort_knigi. php

<html>

<head>

<title>Таблица Книги - результаты сортировки</title>

<meta http-equiv="Выберите расширение для паковки" content="text/html; charset=windows-1251">

</head>

<body background=13. jpg>

<p><b><font size="7" color="indigo"><i><b>Результаты сортировки книг</i></font></b><br>

<? php

$sortf=$_POST ['sort_f'];

$sorttype=$_POST ['sort_type'];

$host='inf612c00: D: \DB\G140604_KALASHNIKOVA. FDB';

$usname='SYSDBA';

$pswrd='masterkey';

$db=ibase_pconnect ($host, $usname, $pswrd); (! $db)

{

echo 'Ошибка соединения с БД';

exit;

}

$query="select * from knigi order by". $sortf. "". $sorttype. "";

$result=ibase_query ($query);'<table border=1 align=center>';'<tr><th bgcolor=\"#ccccff\">№книги</th>'.

'<th bgcolor=\"#ccccff\">№ отдела</th>'.

'<th bgcolor=\"#ccccff\">Название</th>'.

'<th bgcolor=\"#ccccff\">Кол-во страниц</th>'.

'<th bgcolor=\"#ccccff\">Автор</th>'.

'<tr>';

$i=0;($row=ibase_fetch_row ($result))

{$i++;"<tr><td>$row [0] </td>

<td>$row [1] </td>

<td>$row [2] </td>

<td>$row [3] </td>

<td>$row [4] </td>

</tr>";

}"</table>";_free_result ($result);

? >

<br><br><hr>

<a href="sort_knigi.html"><li>Назад</li></a>

<a href="knigi. php"><li>Просмотр таблицы</li></a>

<a href="index.html"><li>В начало</li></a>

</body>

</html>

Листинг 3.13. код страницы sort_knigi.html

<html>

<head>

<title>Таблица Книги - сортировка записей</title>

<meta http-equiv="Выберите расширение для паковки" content="text/html; charset=windows-1251">

</head>

<body background=13. jpg>

<p><b><font size="6" color="indigo"><i><b>Сортировка записей книг</h1>

<br>

<form action="sort_knigi. php" method="post"><br>

<p><b><font size="5" color="indigo"><i><b>Выберите поле для сортировки: </i></font></b><br>

<select name="sort_f">

<option value="nomer_knigi">№книги</option>

<option value="nazvanie_knigi">Название</option>

<option value="avtor">Автор</option>

</select>

<br><br><br>

<p><b><font size="5" color="indigo"><i><b>Выберите тип сортировки: </i></font></b><br>

<select name="sort_type">

<option value="asc">По возрастанию</option>

<option value="desc">По убыванию</option>

</select>

<br><br>

<input type="submit" value="Сортировать">

</form>

</body>

</html>

Листинг 3.14. PHP код страницы otdel.html

<html>

<head>

<title>Таблица Отделы книг</title>

</head>

<body background=13. jpg>

<p><b><font size="7" color="indigo"><i><b>Таблица Отделы книг</i></font></b>

<? php

$host='inf612c00: D: \DB\G140604_KALASHNIKOVA. FDB';

$usname='SYSDBA';

$pswrd='masterkey';

$db=ibase_pconnect ($host, $usname, $pswrd); (! $db)

{

echo 'Ошибка соединения с БД';

exit;

}

$query="select * from otdel_knig";

$result=ibase_query ($query);'<table border=1 align=center>';'<tr><th bgcolor=\"\">Название</th>'.

'<th bgcolor=\"\">№ отдела</th>'.

'<th bgcolor=\"\">Кол-во книг</th>'.

'<th bgcolor=\"\">Телефон</th>'.

'<td bgcolor=\"\">№ библиотекаря</th>'.

'</tr>';

$i=0;($row=ibase_fetch_row ($result))

{$i++;"<tr><td>$row [0] </td>

<td>$row [1] </td>

<td>$row [2] </td>

<td>$row [4] </td>

</tr>";

}"</table>";_free_result ($result);

? >

<br><p align="center">

<form action="upd_otdel. php" method="post"><br>

Название <input type="text" name="nazvanie" size="15">&nbsp;

№отдела<input type="text" name="n_otdela"size="10">&nbsp;

Кол-во книг <input type="text" name="kol_knig" size="10">&nbsp;

Телефон <input type="text" name="telefon" size="10">&nbsp;

№библиотекаря <input type="text" name="n_biblio" size="10">&nbsp;

<br><input type="submit" value="Изменить">

</form></p>

<br><hr>

<p><b><font size="7" color="indigo"><i><b>Операции над таблицей</i></font></b>

<a href="ins_otdel.html"><li>Ввод данных</li></a>

<a href="del_otdel.html"><li>Удаление записей</li></a>

<a href="search_otdel.html"><li>Поиск информации</li></a>

<a href="sort_otdel.html"><li>Сортировка записей</li></a>

<a href="index.html"><li>На главную</li></a>

</body>

</html>

Листинг 3.15. PHP код страницы upd_otdel. pxp

<html>

<head>

<title>Таблица Отделы книг - результаты редактирования</title>

<meta http-equiv="Выберите расширение для паковки" content="text/html; charset=windows-1251">

</head>

<body background=13. jpg>

<p><b><font size="7" color="indigo"><i><b>Таблица Отделы книг - результаты редактирования</i></font></b>

<? php

$nazvanie=$_POST ['nazvanie'];

$n_otdela=$_POST ['n_otdela'];

$kol_knig=$_POST ['kol_knig'];

$telefon=$_POST ['telefon'];

$n_biblio=$_POST ['n_biblio'];

if (! $n_otdela||! $nazvanie)

{ echo 'Вы ввели не все данные';;

}

$host='inf612c00: D: \DB\G140604_KALASHNIKOVA. FDB';

$usname='SYSDBA';

$pswrd='masterkey';

$db=ibase_pconnect ($host, $usname, $pswrd);

if (! $db)

{'Ошибка соединения с БД';

exit;

}

$query="execute procedure RED_OTDEL ('". $nazvanie. "','". $n_otdela. "','". $kol_knig. "','". $telefon. "','". $n_biblio. "')";

$it=ibase_trans ();'<br>';

$result=ibase_query ($query);

$ic=ibase_commit ();

if ($result) {echo'Запись успешно изменена'; }

? >

<br><br><hr>

<a href="otdel. php"><li>Просмотр таблицы</li></a>

<a href="index.html"><li>В начало</li></a>

</body>

</html>

Листинг 3.16. PHP код страницы del_otdel. pxp

<html>

<head>

<title>Таблица Отделы книг - результаты ввода</title>

</head>

<body background=13. jpg>

<p><b><font size="7" color="indigo"><i><b>Результаты удаления отдела</i></font></b><br>

<? php

$n_otdela=$_POST ['n_otdela']; (! $n_otdela)

{ echo 'Вы ввели не все данные';

exit;

}

$host='inf612c00: D: \DB\G140604_KALASHNIKOVA. FDB';

$usname='SYSDBA';

$pswrd='masterkey';

$db=ibase_pconnect ($host, $usname, $pswrd); (! $db)

{

echo 'Ошибка соединения с БД';

exit;

}

$query="execute procedure DEL_OTDEL ('". $n_otdela. "')";

$it=ibase_trans ();'<br>';

$result=ibase_query ($query);

$ic=ibase_commit (); ($result) {echo'Запись успешно удалена'; }

? >

<br><br><hr>

<a href="del_otdel.html"><li>Назад</li></a>

<a href="otdel. php"><li>Просмотр таблицы</li></a>

<a href="index.html"><li>В начало</li></a>

</body>

</html>

Листинг 3.17. PHP код страницы search_otdel. pxp

<html>

<head>

<title>Таблица Отдел книг - результаты поиска</title>

<meta http-equiv="Выберите расширение для паковки" content="text/html; charset=windows-1251">

</head>

<body background=13. jpg>

<p><b><font size="7" color="indigo"><i><b>Результаты поиска отдела</i></font></b><br>

<? php

$searchtype=$_POST ['search_type'];

$searchterm=$_POST ['search_term'];

$searchterm=trim ($searchterm);(! $searchtype||! $searchterm)

{'Вы не ввели параметры поиска';;

}

$host='inf612c00: D: \DB\G140604_KALASHNIKOVA. FDB';

$usname='SYSDBA';

$pswrd='masterkey';

$db=ibase_pconnect ($host, $usname, $pswrd); (! $db)

{ echo 'Ошибка соединения с БД';

exit; }

$query="select * from otdel_knig where". $searchtype." like '%". $searchterm. "%'";

$result=ibase_query ($query);'<p><H3>Найдено: </h3>';

$i=0;($row=ibase_fetch_row ($result))

{$i++;'<p><strong>'. $i. '. Название отдела: ';($row [0]);'<p><strong>'. $i. '. № отдела: ';($row [1]);'<p><strong>'. $i. '. Кол-во книг: ';($row [2]);'<p><strong>'. $i. '. Телефон: ';($row [3]);'</strong><br>№библиотекаря: ';($row [4]);'</p><br>';

};_free_result ($result);

? >

<br><br><hr>

<a href="search_otdel.html"><li>Назад</li></a>

<a href="otdel. php"><li>Просмотр таблицы</li></a>

<a href="index.html"><li>В начало</li></a>

</body>

</html>

Листинг 3.18. PHP код страницы ins_otdel. pxp

<html>

<head>

<title>Таблица Отделы книг - результаты ввода</title>

<meta http-equiv="Выберите расширение для паковки" content="text/html; charset=windows-1251">

</head>

<body background=13. jpg>

<p><b><font size="7" color="indigo"><i><b>Таблица Отделы книг - результаты ввода</i></font></b>

<? php

$nazvanie=$_POST ['nazvanie'];

$kol_knig=$_POST ['kol_knig'];

$telefon=$_POST ['telefon'];

$n_biblio=$_POST ['n_biblio']; (! $nazvanie)

{ echo 'Вы ввели не все данные';

exit;

}

$host='inf612c00: D: \DB\G140604_KALASHNIKOVA. FDB';

$usname='SYSDBA';

$pswrd='masterkey';

$db=ibase_pconnect ($host, $usname, $pswrd); (! $db)

{

echo 'Ошибка соединения с БД';

exit; }

$query="execute procedure ADD_OTDEL ('". $nazvanie. "','". $telefon. "','". $kol_knig. "','". $n_biblio. "')";

$it=ibase_trans ();'<br>';

$result=ibase_query ($query);

$ic=ibase_commit (); ($result) {echo'Запись успешно добавлена'; }

? >

<br><br><hr>

<a href="ins_otdel.html"><li>Назад</li></a>

<a href="otdel. php"><li>Просмотр таблицы</li></a>

<a href="index.html"><li>В начало</li></a>

</body>

</html>

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

 

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