Создание автоматизированных информационных систем

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

Создание автоматизированных информационных систем

Содержание

Введение

. Техническое задание

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

.2 Модели вариантов использования

.3 Требования к информационному и программному обеспечению

. Технический проект

.1 Модели локальных представлений

.2 Инфологическая модель предметной области

.3 Физическая модель базы данных

.4 Основные запросы к базе данных

.5 Хранимые процедуры

.6 Архитектура информационной системы

. Рабочий проект

.1 SQL-скрипт создания базы данных

.2 SQL-скрипт хранимых процедур

.3 Текст программы

.4 Руководство пользователя

Заключение

Список источников

Приложения

Введение

библиотека программа информационный

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

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

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

1. Техническое задание


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

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

Данные о читателях хранятся в картотеке. Каждый читатель может одновременно держать на руках не более пяти библиотечных книг и не более одного экземпляра каждой книги.

.2 Модели вариантов использования

Читатель должен иметь возможность:

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

-       после выбора книги, при наличии свободного экземпляра, получить его номер и расположение; в противном случае, иметь возможность узнать о ближайшем времени возврата экземпляра.

Библиотекарь должен:

-       регистрировать новые книги в каталоге, распределяя их по разделам;

-       сохранять месторасположение каждого экземпляра;

-       списывать не пользующиеся спросом книги;

-       выдавать читателю книги, с фиксированием номера выданного экземпляра и срока возврата книги;

-       принимать книги, возвращаемые читателем, с проверкой соответствия возвращаемого номера книги выданному номеру;

-       проводить списание утерянных книг или регистрацию замены.

Администрация библиотеки должна:

-       иметь возможность получать сведения о должниках;

-       получать сведения о популярных и непопулярных среди читателей книгах, исходя из количества взятых экземпляров;

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

.3 Требования к информационному и программному обеспечению

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

Программные модули реализуются в виде приложения C# Windows Forms на платформе.NET Framework 4.5. Для генерации и отображения отчетов используется интегрированный в.NET Framework компонент Report Viewer.

Для управления базой данных используется СУБД Oracle 11g Express Edition.

Используемая операционная система - Windows 7.

2. Технический проект

.1 Модели локальных представлений

Пользователями информационной системы являются читатели, библиотекари и администрация библиотеки. Локальные ER-диаграммы для указанных групп пользователей приведены на рисунках 1, 2 и 3 соответственно.

Рисунок 1. Локальная ER-диаграмма читателя

Рисунок 2. Локальная ER-диаграмма библиотекаря

Рисунок 3. Локальная ER-диаграмма администрации

Основные запросы

Запросы для пользователей группы «Администрация»:

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

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

-       получить цену утерянных книг.

Запросы для пользователей группы «Библиотекари»:

-       получить список книг, находящихся на руках у читателя;

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

Запросы для пользователей группы «Читатели»:

-       получить номер свободного экземпляра и место расположения выбранной книги;

-       при отсутствии свободного экземпляра получить ближайшую дату ожидаемого возврата.

.2 Инфологическая модель предметной области

диаграмма инфологической модели представлена на рисунке 4.

Рисунок 4. Обобщенная ER-диаграмма

Спецификация сущностей представлена в таблице 1.

Таблица 1. Спецификация сущностей

Название

Код

Тип

Длина

Обяз.

Первич.

Раздел каталога (Section)

Код раздела

sCode

Integer


X

X

Название раздела

sName

Variable characters(50)

50

X


Книга (Book)

ISBN

ISBN

Characters(13)

13

X

X

Название книги

bName

Variable characters(50)

50

X


Автор(ы)

bAuthor

Variable characters(50)

50

X


Место издания

bPlace

Variable characters(20)

20

X


Издательство

bPublish

Variable characters(20)

20

X


Год издания

bYear

Integer


X


Количество страниц

bPages

Integer


X


Экземпляр книги (Copy)

Номер экземпляра

cNumber

Integer


X

X

Стоимость экземпляра

cCost

Money


X


Дата поставки

cDate

Date


X


Утерян

cLost

Boolean




Место размещения (Place)

Код места

plCode

Integer


X

X

Отдел

plSection

Variable characters(50)

50

X


Стеллаж

plRack

Integer


X


Полка

plShelf

Integer


X


Сектор

plSector

Variable characters(2)

2

X


Название

Код

Тип

Длина

Обяз.

Первич.

Выдача (Issuance)

Номер выдачи

iNumber

Integer


X

X

Дата выдачи

iIssuance

Date


X


Дата ожидаемого возврата

iExpReturn

Date


X


Дата фактического возврата

iFactReturn

Date




Выбор книги читателем

ICHOICE

Boolean




Читатель (Reader)

Номер читательского билета

rNumber

Number(6)

6

X

X

ФИО

rFullName

Variable characters(50)

50

X


Адрес

rAddress

Variable characters(100)

100

X


Телефон

rPhone

Number(11)

11

X


Дата рождения

rDate

Date


X


Замена (Replacement)

Код замены

repCode

Integer


X

X

Дата замены

repDate

Date


X


Списание (Writeoff)

Код списания

woCode

Integer


X

X

Дата списания

woDate

Date


X



Спецификация связей представлена в таблице 2.

Таблица 2. Спецификация связей

Связь

Тип связи

От сущности

К сущности

По атрибуту

хранится

М:М

Книга

Раздел каталога

ISBN / Код раздела

имеется

1:М

Книга

Экземпляр книги

ISBN

расположен

1:М

Место размещения

Экземпляр книги

Код места

выдается

1:М

Экземпляр книги

Выдача

Номер экземпляра

берет

1:М

Читатель

Выдача

Номер читательского билета

заменяется

1:М

Замена

Экземпляр книги

Код замены

списывается

1:М

Списание

Экземпляр книги

Код списания


.3 Физическая модель базы данных

Диаграмма физической модели представлена на рисунке 5.

Рисунок 5. Диаграмма физической модели базы данных

Спецификация таблиц базы данных представлена в таблице 3.

Таблица 3. Спецификация таблиц

Название

Код

Тип

Длина

Первич.

Внеш.

Обяз.

Раздел каталога (Section)

Код раздела

sCode

INTEGER


X


X

Название раздела

sName

VARCHAR2(100)

100



X

хранится (saved)

Код раздела

sCode

INTEGER



X

X

ISBN

ISBN

CHAR(13)

13


X

X

Книга (Book)

ISBN

ISBN

CHAR(13)

13

X


X

Название книги

bName

VARCHAR2(100)

100



X

Автор(ы)

bAuthor

VARCHAR2(100)

100



X

Место издания

bPlace

VARCHAR2(40)

40



X

Издательство

bPublish

VARCHAR2(40)

40



X

Год издания

bYear

INTEGER




X

Количество страниц

INTEGER




X

Экземпляр книги (Copy)

Номер экземпляра

cNumber

INTEGER


X


X

Код списания

woCode

INTEGER



X

X

ISBN

ISBN

CHAR(13)

13


X

X

Код замены

repCode

INTEGER



X

X

Код места

plCode

INTEGER



X

X

Стоимость экземпляра

cCost

NUMBER(8, 2)

8



X

Дата поставки

cDate

DATE




X

Утерян

cLost

SMALLINT





Место размещения (Place)

Код места

plCode

INTEGER


X


X

Отдел

plSection

VARCHAR2(100)

100



X

Стеллаж

plRack

INTEGER




X

Полка

plShelf

INTEGER




X

Сектор

plSector

VARCHAR2(4)

4



X

Название

Код

Тип

Длина

Первич.

Внеш.

Обяз.

Выдача (Issuance)

Номер выдачи

iNumber

INTEGER


X


X

Номер экземпляра

cNumber

INTEGER



X

X

Номер читательского билета

rNumber

NUMBER(6)

6


X

X

Дата выдачи

iIssuance

DATE




X

Дата ожидаемого возврата

iExpReturn

DATE




X

Дата фактического возврата

iFactReturn

DATE





Выбор книги читателем

ICHOICE

SMALLINT





Читатель

Номер читательского билета

rNumber

NUMBER(6)

6

X


X

ФИО

rFullName

VARCHAR2(100)

100



X

Адрес

rAddress

VARCHAR2(200)

200



X

Телефон

rPhone

NUMBER(11)

11



X

Дата рождения

rDate

DATE




X

Замена (Replacement)

Код замены

repCode

INTEGER


X


X

Дата замены

repDate

DATE




X

Списание (Writeoff)

Код списания

woCode

INTEGER


X


X

Дата списания

woDate

DATE




X


.4 Основные запросы к базе данных

Выборка недобросовестных читателей

Из естественного соединения таблиц Читатель и Выдача выбрать ФИО, адрес, телефон читателей для которых дата фактического возврата больше даты ожидаемого возврата, либо имеет null-значение; подсчитать для каждого читателя количество выдач, удовлетворяющих данному условию (количество опозданий/долгов). Отсортировать по убыванию количества опозданий/долгов.

Выборка популярных книг за период

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

Выборка цены утерянных книг

Из естественного соединения таблиц Книга, Экземпляр книги, Выдача и Читатель выбрать название книги, номер экземпляра, его цену и ФИО читателя, если флаг Утерян равен 1 и код акта замены не указан.

Выборка читателей

Из таблицы Читатель выбрать ФИО, адрес, телефон, дату рождения читателя. Если количество выдач читателю в которых ICHOICE не равен null

Выборка книг, находящихся на руках у читателя

Из естественного соединения таблиц Книга, Экземпляр книги, Выдача и Читатель выбрать ISBN и название книги для книг, у которых не указана дата фактического возврата и номер читательского соответствует заданному.

Выборка свободных экземпляров книги

Выбрать из естественного соединения таблиц Книга, Экземпляр книги, Место расположения и Выдача отдел, стеллаж, полку и сектор для экземпляров книги, ISBN которой соответствует заданному, дата фактического возврата не равна null, а дата выдачи максимальна среди выдач этого экземпляра.

Выборка недобросовестных читателей:

где Ч - отношение Читатель (Номер читательского билета, ФИО, Адрес, Телефон, Дата рождения); B - отношение Выдача (Номер выдачи, Номер экземпляра, Номер читательского билета, Дата выдачи, Дата ожидаемого возврата, Дата фактического возврата); dateBegin и dateEnd - введенные начальная и конечная даты соответственно

Выборка стоимости утерянных книг:

где К - отношение Книга(ISBN, Название книги, Автор(ы), Место издания, Издательство, Год издания, Количество страниц, Количество экземпляров); Э - отношение Экземпляр книги (Номер экземпляра, ISBN, Код списания, Код замены, Код места, Стоимость экземпляра, Дата поставки, Утерян).

Формулировка в виде выражений реляционного исчисления с переменными-кортежами

Выборка книг, находящихся на руках:

 

где К - отношение Книга(ISBN, Название книги, Автор(ы), Место издания, Издательство, Год издания, Количество страниц, Количество экземпляров), Э - отношение Экземпляр книги (Номер экземпляра, ISBN, Код списания, Код замены, Код места, Стоимость экземпляра, Дата поставки, Утерян), B - отношение Выдача (Номер выдачи, Номер экземпляра, Номер читательского билета, Дата выдачи, Дата ожидаемого возврата, Дата фактического возврата).

Выборка стоимости утерянных книг:

где Ч - отношение Читатель (Номер читательского билета, ФИО, Адрес, Телефон, Дата рождения); B - отношение Выдача (Номер выдачи, Номер экземпляра, Номер читательского билета, Дата выдачи, Дата ожидаемого возврата, Дата фактического возврата); К - отношение Книга(ISBN, Название книги, Автор(ы), Место издания, Издательство, Год издания, Количество страниц, Количество экземпляров); Э - отношение Экземпляр книги (Номер экземпляра, ISBN, Код списания, Код замены, Код места, Стоимость экземпляра, Дата поставки, Утерян).

Формулировка на языке SQL

Выборка недобросовестных читателейR."rFullName" AS ФИО, R."rAddress" AS Адрес, R."rPhone" AS Телефон, R."rData" AS Дата_рождения, COUNT(I."iNumber") AS Опоздания_Долги"Reader" R, "Issuance" I R."rNumber" = I."rNumber" AND

(I."iExpReturn" < I."iFactReturn" OR I."iFactReturn" IS NULL) AND

(I."iFactReturn" BETWEEN (select to_date('dateBegin','dd-mm-rr') from dual) AND (select to_date('dateEnd','dd-mm-rr') from dual) OR I."iFactReturn" IS NULL)BY R."rFullName",R."rAddress",R."rPhone",R."rData"BY Опоздания_Долги DESC

Выборка популярных книг за периодB."bName" AS Книга, B."bAuthor" AS Автор,B."bPublish" AS Издательство, B."bYear" AS Год_издания, COUNT(I."iNumber") AS Выдач"Book" B, "Issuance" I, "Copy" CB."ISBN" = C."ISBN" AND C."cNumber" = I."cNumber" AND I."iIssuance" BETWEEN (select to_date('dateBegin','dd-mm-rr') from dual) AND (select to_date('dateEnd','dd-mm-rr') from dual)BY B."bName",B."bAuthor",B."bPublish",B."bYear"BY Выдач DESC

Выборка стоимости утерянных книгB."bName" AS Книга, C."cNumber" AS Номер, C."cCost" AS "Цена",R."rFullName" AS ФИО_читателя"Book" B, "Issuance" I, "Copy" C, "Reader" RB."ISBN" = C."ISBN" AND C."cNumber" = I."cNumber" AND I."rNumber"=R."rNumber" AND C."cLost"=1 AND C."repCode" IS NULL

Выборка читателейR."rNumber" AS Номер_билета, R."rFullName" AS ФИО, R."rAddress" AS Адрес, R."rPhone" AS Телефон, R."rData" AS Дата_рождения, case when (select count(I."iNumber") from "Issuance" I, "Reader" R2 where I."rNumber" = R2."rNumber" AND R2."rNumber" = R."rNumber" AND I.ICHOICE IS NOT NULL group by R2."rNumber") IS NULL then 'нет' else 'да' end AS Выбрал_книгу FROM "Reader" R

Выборка книг, находящихся на руках у читателяB.ISBN, B. "bName" "Book" B, "Copy" C, "Issuance" I, "Reader" RI. "cNumber" = C. "cNumber" AND C. ISBN = B.ISBN AND I. "rNumber" = R. "rNumber" AND R. "rNumber" = 'RNUMBER' AND I. "iFactReturn" IS NULL AND C."cLost" = 0 AND C."repCode" IS NULL

Выбор свободных экземпляров книги читателемC."cNumber" AS Номер, P."plSection" AS Отдел,P."plRack" AS Стеллаж,P."plShelf" AS Полка,P."plSector" AS Сектор"Book" B INNER JOIN "Copy" C ON B.ISBN = C.ISBN AND B."bName" = 'Конспект лекций по высшей математике' AND C."cLost" = 0 AND C."woCode" IS NULL JOIN "Place" P ON C."plCode" = P."plCode" JOIN "Issuance" I ON I."cNumber" = C."cNumber" AND I."iFactReturn" IS NOT NULL AND I."iIssuance"=(select max(I2."iIssuance") from "Book" B2 INNER JOIN "Copy" C2 ON B2.ISBN = C2.ISBN AND B2."bName" = 'Конспект лекций по высшей математике' AND C2."cLost" = 0 AND C2."woCode" IS NULL JOIN "Place" P2 ON C2."plCode" = P2."plCode" JOIN "Issuance" I2 ON I2."cNumber" = C2."cNumber"C2."cNumber"=C."cNumber"BY C2."cNumber")

2.5 Хранимые процедуры

Блок-схема алгоритма. Алгоритм регистрации нового читателя представлен на рисунке 6.

Рисунок 6. Алгоритм регистрации нового читателя

Алгоритм регистрации новой книги представлен на рисунке 7.

Рисунок 7. Алгоритм регистрации книги

Алгоритм добавления экземпляра книги представлен на рисунке 8.

Рисунок 8. Алгоритм добавления экземпляра книги

Алгоритм добавления книги в раздел каталога представлен на рисунке 9.

Рисунок 9. Алгоритм добавления книги в раздел каталога

Алгоритм редактирования экземпляра книги и изменения его места расположения представлен на рисунке 10.

Рисунок 10. Алгоритм редактирования экземпляра книги и изменения его места расположения

Алгоритм редактирования данных книги представлен на рисунке 11.

Рисунок 11. Алгоритм редактирования данных книги

Алгоритм редактирования данных читателя представлен на рисунке 12.

Рисунок 12. Алгоритм редактирования данных читателя

Код на языке PL/SQL (см. Приложение 2)

.6 Архитектура информационной системы

Архитектуру информационной системы можно представить в виде совокупности трех элементов: базы данных, СУБД, приложения.

Приложение DBLibrary.exe реализует пользовательский интерфейс для работы с данными, хранящимися в базе. Приложение взаимодействует с базой данных посредством объектно-реляционной СУБД Oracle 11g Express Edition.

Концептуальная схема информационной системы представлена на рисунке 13.

Рисунок 13. Архитектура информационной системы

3. Рабочий проект

.1 SQL-скрипт создания базы данных (см. Приложение 1)

.2 SQL-скрипт хранимых процедур (см. Приложение 2)

.3 Текст программы (см. Приложение 3).

.4 Руководство пользователя

Введение

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

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

Пользователи системы должны иметь опыт работы с персональным компьютером на базе операционных систем Microsoft Windows на уровне квалифицированного пользователя и свободно осуществлять базовые операции.

Перед началом работы с приложением необходимо ознакомиться с

Руководством пользователя.

Назначение и условия применения

Приложение DBLibrary предназначено для автоматизации приведенных ниже функций пользователей.

Функции читателей:

-       просмотр каталога библиотеки и получение полного списка имеющихся книг из выбранного раздела;

-       после выбора книги, при наличии свободного экземпляра, получение его расположения; в противном случае, получение ближайшего времени возврата экземпляра данной книги.

Функции библиотекаря:

-       регистрация новых книг в каталоге, с распределением их по разделам;

-       сохранение месторасположения каждого экземпляра;

-       выдача читателю книг, с фиксированием номера выданного экземпляра и срока возврата книги;

-       списание не пользующихся спросом книг;

-       списание утерянных книг по акту списания или замены.

Функции администрации:

-       получение сведений о должниках;

-       получение сведений о популярных и непопулярных среди читателей книгах;

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

Минимальные требования для запуска программы:

-       Процессор Intel Pentium IV;

-       Наличие не менее 128Mб ОЗУ;

-       Наличие не менее 20Мб свободного дискового пространства;

-       SVGA - графический адаптер;

-       Минимальный набор периферийного оборудования.

.4.2.3 Программное обеспечение, необходимое для функционирования программы:

-       Операционная система Microsoft Windows Vista/7/8;

-       СУБД Oracle 11g Express Edition;

-       программная платформа.NET Framework 4.5 и выше.

Подготовка к работе

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

Для начала работы требуется запустить исполняемый файл DBLibrary.exe, предварительно скопировав его с дистрибутивного носителя на жесткий диск ПК. В случае успешного запуска приложения можно приступать к работе.

Описание операций

После загрузки программы отображается окно выбора пользователя (рисунок 14). Кликнув на один из элементов RadioButton и, для читателя, указав номер читательского билета, пользователь переходит в один из режимов работы в приложении.

Рисунок 14. Диалоговое окно выбора пользователя

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

Рисунок 15. Выбор экземпляра книги читателем

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

Администрации библиотеки доступен просмотр результатов трех запросов, выбираемых в меню. Всю рабочую область окна в режиме работы администрации занимает таблица просмотра результатов.

Для просмотра результата запроса необходимо кликнуть его название в меню и при необходимости указать временно  интервал - результат будет отображен в таблице (рисунок 16).

Рисунок 16. Просмотр результатов запроса о недобросовестных читателях

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

Определить, что читатель выбрал книгу библиотекарь может по значению поля «Выбор_книги» в строке читателя. Для подтверждения выдачи библиотекарь должен кликнуть заголовок строки читателя и выбрать в основном меню пункт «Выдать». Отобразится окно с данными о выбранных читателем книгах, после чего библиотекарь может подтвердить выдачу книг читателю, либо отменить ее.

Для редактирования данных читателя, необходимо кликнуть заголовок строки читателя и выбрать в меню «Правка» пункт «Редактировать». Отобразиться окно редактирования, в котором библиотекарь может изменить указанные данные читателя и сохранить изменения. Для отображения изменений в таблице читателей необходимо выбрать пункт «Обновить» в меню «Правка».

Для добавления читателя необходимо выбрать в пункте «Зарегистрировать» основного меню программы подпункт «Читателя». В отобразившемся окне по завершении ввода данных во все информационные поля нажать кнопку подтверждения и обновить данные в таблице читателей способом, описанным ранее (рисунок 17).

Рисунок 17. Окно добавления читателя

На вкладке «Книги» библиотекарь может просматривать книги, из разделов каталога, а также получать данные об экземплярах этих книг.

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

Для экземпляров книг, не возвращенных в срок, библиотекарь может установить флаг «Утерян», щелкнув заголовок строки экземпляра и выбрав в основном меню пункт «Пометить как утерянный».

Утерянные книги могут быть заменены читателем. Для оформления замены необходимо кликнуть по заголовку строки утерянного экземпляра и выбрать в основном меню пункт «Заменить» (рисунок 18). В появившемся окне необходимо будет ввести информацию о поступившей взамен книге.

Рисунок 18. Выбор акта замены или списания для утерянного экземпляра

Утраченные или старые книги могут быть списаны. Для этого необходимо, выделив строку экземпляра в таблице, выбрать в основном меню пункт «Списать».

Добавление и редактирование данных книг и их экземпляров осуществляется таким же образом как и читателей.

Аварийные ситуации

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

Рекомендации по освоению

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

Заключение

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

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

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

На заключительном этапе создания информационной системы было разработано приложение на языке С#, позволяющее пользователям изменять содержимое базы данных интуитивно понятным для них способом без знания принципов её устройства и функционирования.

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

Список источников

1.       Гарсиа-Молина Г., Ульман Дж.Д., Уидом Дж. Системы баз данных. Полный курс. - М.: Вильямс, 2003. 1089 с.

.        Дейт К.Дж. Введение в системы баз данных. - М.: Вильямс, 2005. - 1328 с.

Приложение 1

скрипт создания базы данных

/* DBMS name: ORACLE Version 11g */

/* Created on: 02.01.2014 6:01:07 */table "Copy"constraint FK_COPY_LOCATED_PLACE;table "Copy"constraint FK_COPY_REPLACED_REPLACEM;table "Copy"constraint FK_COPY_THERE_IS_BOOK;table "Copy"constraint FK_COPY_WRITEOFF_WRITEOFF;table "Issuance"constraint FK_ISSUANCE_ISSUED_COPY;table "Issuance"constraint FK_ISSUANCE_TAKES_READER;table "saved"constraint FK_SAVED_SAVED_SECTION;table "saved"constraint FK_SAVED_SAVED2_BOOK;table "Book" cascade constraints;index "located_FK";index "writeoff_FK";index "replaced_FK";index "there_is_FK";table "Copy" cascade constraints;index "issued_FK";index "takes_FK";table "Issuance" cascade constraints;table "Place" cascade constraints;table "Reader" cascade constraints;table "Replacement" cascade constraints;table "Section" cascade constraints;table "Writeoff" cascade constraints;index "saved2_FK";index "saved_FK";table "saved" cascade constraints;

/*=====================================================

/* Table: "Book" */

/*=====================================================table "Book" CHAR(13) not null,

"bName" VARCHAR2(100) not null,

"bAuthor" VARCHAR2(100) not null,

"bPlace" VARCHAR2(40) not null,

"bPublish" VARCHAR2(40) not null,

"bYear" INTEGER not null,

"bPages" INTEGER not null,PK_BOOK primary key (ISBN)

);

/*=====================================================

/* Table: "Copy" */

/*=====================================================table "Copy"

(

"cNumber" INTEGER not null,

"woCode" INTEGER,CHAR(13) not null,

"repCode" INTEGER,

"plCode" INTEGER not null,

"cCost" NUMBER(8,2) not null,

"cDate" DATE not null,

"cLost" SMALLINT,PK_COPY primary key ("cNumber")

);

/*=====================================================

/* Index: "there_is_FK" */

/*=====================================================index "there_is_FK" on "Copy" (ASC

);

/*=====================================================

/* Index: "replaced_FK" */

/*=====================================================index "replaced_FK" on "Copy" (

"repCode" ASC

);

/*=====================================================

/* Index: "writeoff_FK" */

/*=====================================================index "writeoff_FK" on "Copy" (

"woCode" ASC

);

/*=====================================================

/* Index: "located_FK" */

/*=====================================================index "located_FK" on "Copy" (

"plCode" ASC

);

/*=====================================================

/* Table: "Issuance" */

/*=====================================================table "Issuance"

(

"iNumber" INTEGER not null,

"cNumber" INTEGER not null,

"rNumber" NUMBER(6) not null,

"iIssuance" DATE not null,

"iExpReturn" DATE not null,

"iFactReturn" DATE,SMALLINT,PK_ISSUANCE primary key ("iNumber")

);

/*=====================================================

/* Index: "takes_FK" */

/*=====================================================index "takes_FK" on "Issuance" (

);

/*=====================================================

/* Index: "issued_FK" */

/*=====================================================index "issued_FK" on "Issuance" (

"cNumber" ASC

);

/*=====================================================

/* Table: "Place" */

/*=====================================================table "Place"

(

"plCode" INTEGER not null,

"plSection" VARCHAR2(100) not null,

"plRack" INTEGER not null,

"plShelf" INTEGER not null,

"plSector" VARCHAR2(4) not null,PK_PLACE primary key ("plCode")

);

/*=====================================================

/* Table: "Reader" */

/*=====================================================table "Reader"

(

"rNumber" NUMBER(6) not null,

"rFullName" VARCHAR2(100) not null,

"rAddress" VARCHAR2(200) not null,

"rPhone" NUMBER(11) not null,

"rData" DATE not null,PK_READER primary key ("rNumber")

);

/*=====================================================

/* Table: "Replacement" */

/*=====================================================table "Replacement"

(

"repCode" INTEGER not null,

"repDate" DATE not null,PK_REPLACEMENT primary key ("repCode")

);

/*=====================================================

/* Table: "Section" */

/*=====================================================table "Section"

(

"sCode" INTEGER not null,

"sName" VARCHAR2(100) not null,PK_SECTION primary key ("sCode")

);

/*=====================================================

/* Table: "Writeoff" */

/*=====================================================table "Writeoff"

(

"woCode" INTEGER not null,

"woDate" DATE not null,PK_WRITEOFF primary key ("woCode")

);

/*=====================================================

/* Table: "saved" */

/*=====================================================table "saved"

(

"sCode" INTEGER not null,CHAR(13) not null,PK_SAVED primary key ("sCode", ISBN)

);

/*=====================================================

/* Index: "saved_FK" */

/*=====================================================index "saved_FK" on "saved" (

"sCode" ASC

);

/*=====================================================

/* Index: "saved2_FK" */

/*=====================================================index "saved2_FK" on "saved" (ASC

);table "Copy"constraint FK_COPY_LOCATED_PLACE foreign key ("plCode")"Place" ("plCode");table "Copy"constraint FK_COPY_REPLACED_REPLACEM foreign key ("repCode")"Replacement" ("repCode");table "Copy"constraint FK_COPY_THERE_IS_BOOK foreign key (ISBN)"Book" (ISBN);table "Copy"constraint FK_COPY_WRITEOFF_WRITEOFF foreign key ("woCode")"Writeoff" ("woCode");table "Issuance"constraint FK_ISSUANCE_ISSUED_COPY foreign key ("cNumber")"Copy" ("cNumber");table "Issuance"constraint FK_ISSUANCE_TAKES_READER foreign key ("rNumber")"Reader" ("rNumber");table "saved"constraint FK_SAVED_SAVED_SECTION foreign key ("sCode")"Section" ("sCode");table "saved"constraint FK_SAVED_SAVED2_BOOK foreign key (ISBN)"Book" (ISBN);

Приложение 2

скрипт хранимых процедур

CREATE OR REPLACE PROCEDURE PROCEDURE_INS_READER

(IN VARCHAR2

, ADDRESS IN VARCHAR2

, PHONE IN NUMBER

, DATEB IN DATE

) AS INTO "Reader" ("rNumber", "rFullName", "rAddress", "rPhone", "rData")(0, RNAME,ADDRESS,PHONE,DATEB);PROCEDURE_INS_READER;OR REPLACE PROCEDURE PROCEDURE_INS_BOOK

(_ IN CHAR

, BNAME IN VARCHAR2

, AUTHOR IN VARCHAR2

, PLACE IN VARCHAR2

, PUBLISH IN VARCHAR2

, BYEAR IN NUMBER

, PAGES IN NUMBER

, SCODE IN NUMBER

) AS into "Book"(ISBN, "bName", "bAuthor", "bPlace", "bPublish", "bYear", "bPages")(ISBN_, BNAME, AUTHOR, PLACE, PUBLISH, BYEAR, PAGES);into "saved" ("sCode", ISBN)(SCODE,ISBN_);PROCEDURE_INS_BOOK;OR REPLACE PROCEDURE PROCEDURE_INS_COPY

(_ IN CHAR

, PRICE IN NUMBER

, DATEC IN DATE

, PLCODE IN NUMBER

) AS into "Copy"("cNumber", ISBN, "plCode", "cCost", "cDate", "cLost")(0, ISBN_, PLCODE, PRICE, DATEC, 0);PROCEDURE_INS_COPY;OR REPLACE PROCEDURE PROCEDURE_ADD_SECTION

(_ IN CHAR

, SECTION IN NUMBER

) AS into "saved" ("sCode", ISBN)(SECTION, ISBN_);PROCEDURE_ADD_SECTION;OR REPLACE PROCEDURE PROCEDURE_EDIT_COPY

(_ IN CHAR

, PRICE IN NUMBER

, CDATE IN DATE

, SECTION IN VARCHAR2

, RACK IN NUMBER

, SHELF IN NUMBER

, SECTOR IN VARCHAR2

) AS number(38,0);P."plCode" into num from "Place" PP."plSection" = SECTION AND P."plRack" = RACK AND P."plShelf" = SHELF AND P."plSector" = SECTOR;(num IS NOT NULL) then "Copy" SET "plCode" = num, "cCost" = PRICE, "cDate" = CDATEisbn = ISBN_;;into "Place"("plCode", "plSection", "plRack", "plShelf", "plSector")(0, SECTION, RACK, SHELF, SECTOR);"Copy" SET "plCode" = (select max("plCode") from "Place"), "cCost" = PRICE, "cDate" = CDATE isbn = ISBN_;; end if;PROCEDURE_EDIT_COPY;OR REPLACE PROCEDURE PROCEDURE_EDIT_BOOK

(_ IN CHAR

, BNAME IN VARCHAR2

, AUTHOR IN VARCHAR2

, PLACE IN VARCHAR2

, PUBLISH IN VARCHAR2

, BYEAR IN NUMBER

, PAGES IN NUMBER

) AS "Book" SET "bName" = BNAME, "bAuthor" = AUTHOR, "bPlace" = PLACE, "bPublish" = PUBLISH, "bYear" = BYEAR, "bPages" = PAGESisbn = isbn_; PROCEDURE_EDIT_BOOK;OR REPLACE PROCEDURE PROCEDURE_EDIT_READER

(IN NUMBER

, RNAME IN VARCHAR2

, ADDRESS IN VARCHAR2

, PHONE IN NUMBER

, BDATE IN DATE

) AS "Reader" SET "rFullName" = RNAME, "rAddress" = ADDRESS, "rPhone" = PHONE, "rData" = BDATE"rNumber" = rid;PROCEDURE_EDIT_READER;

Приложение 3

Тексты основных модулей программы

Класс ProgramSystem;System.Collections.Generic;System.Linq;System.Threading.Tasks;System.Windows.Forms;System.Data.OracleClient;DBLibrary

{class Program

{

/// <summary>

/// Главная точка входа для приложения.

/// </summary>

[STAThread]void Main()

{.EnableVisualStyles();.SetCompatibleTextRenderingDefault(false);OC = new OracleConnection();.ConnectionString = "Data source=XE; User id=system; Password=2310823";

{.Open();

}(Exception ex)

{.Show("Failed! " + ex.Message);final;

}

{(true)

{SM = new SelectMode();.ShowDialog();(SM.DialogResult == DialogResult.Yes).Run(new AReader(OC));if (SM.DialogResult == DialogResult.No).Run(new Librarian(OC));if (SM.DialogResult == DialogResult.Ignore).Run(new Administration(OC));;

}

}(Exception ex)

{.Show(ex.Message);final;

}:.Close();.Dispose();

}

}

}

Класс SelectModeSystem;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Threading.Tasks;System.Windows.Forms;DBLibrary

{partial class SelectMode : Form

{SelectMode()

{();.Checked = false;.Checked = false;.Checked = false;

}void button1_Click(object sender, EventArgs e)

{(radioButton1.Checked == true).DialogResult = System.Windows.Forms.DialogResult.Yes;if(radioButton2.Checked == true).DialogResult = System.Windows.Forms.DialogResult.No;if(radioButton3.Checked == true).DialogResult = System.Windows.Forms.DialogResult.Ignore;.Close();

}void radioButton1_MouseDown(object sender, MouseEventArgs e)

{.Checked = true;.Checked = false;.Checked = false;

}void radioButton2_MouseDown(object sender, MouseEventArgs e)

{.Checked = false;.Checked = true;.Checked = false;

}void radioButton3_MouseDown(object sender, MouseEventArgs e)

{.Checked = false;.Checked = false;.Checked = true;

}

}

}

Класс ReaderSystem;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Threading.Tasks;System.Windows.Forms;System.Data.OracleClient;DBLibrary

{partial class Reader : Form

{AReader AR;int cNumber;string isbn;bool flag;bool clc;Reader(AReader A)

{();= A;.Text = this.Text +" "+ AR.rName;= false;= false;

}void Reader_FormClosed(object sender, FormClosedEventArgs e)

{.Close();

}void Reader_Load(object sender, EventArgs e)

{tab;Comand = AR.OC.CreateCommand();.CommandText = "SELECT B.* FROM \"Book\" B INNER JOIN \"Copy\" C ON B.ISBN = C.ISBN AND C.\"cLost\" = 0 AND C.\"woCode\" IS NULL " +

"INNER JOIN \"Issuance\" I ON I.\"cNumber\" = C.\"cNumber\" AND I.\"iFactReturn\" IS NULL "+

"INNER JOIN \"Reader\" R ON R.\"rNumber\" = I.\"rNumber\" AND R.\"rNumber\" = (select to_number('"+AR.rNumber+"')from dual)";= new DataTable();.Load(Comand.ExecuteReader());(tab.Rows.Count == 5)

{.Show("Вы взяли уже пять книг и не можете выбирать новые");;

}.CommandText = "SELECT \"sCode\", \"sName\" FROM \"Section\"";= new DataTable();.Load(Comand.ExecuteReader());.DataSource = tab;.ValueMember = "sCode";.DisplayMember = "sName";.CommandText = "SELECT B.* FROM \"Book\" B, \"saved\" s WHERE B.ISBN = s.ISBN AND s.\"sCode\" = " +.SelectedValue.ToString();= new DataTable();.Load(Comand.ExecuteReader());.DataSource = tab.DefaultView;

}void dataGridView1_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)

{Comand = AR.OC.CreateCommand();tab = new DataTable();.CommandText = "SELECT B.* FROM \"Book\" B INNER JOIN \"Copy\" C ON B.ISBN = C.ISBN AND B.ISBN = (select to_char('" + dataGridView1[0, e.RowIndex].Value + "') from dual) AND C.\"cLost\" = 0 AND C.\"woCode\" IS NULL " +

"INNER JOIN \"Issuance\" I ON I.\"cNumber\" = C.\"cNumber\" AND I.\"iFactReturn\" IS NULL "+

"INNER JOIN \"Reader\" R ON R.\"rNumber\" = I.\"rNumber\" AND R.\"rNumber\" = (select to_number('"+AR.rNumber+"')from dual)";.Load(Comand.ExecuteReader());(tab.Rows.Count != 0)

{.Show("Вы уже выбрали эту книгу");

}= new DataTable();.CommandText = "SELECT C.\"cNumber\" AS Номер, P.\"plSection\" AS Отдел,P.\"plRack\" AS Стеллаж,P.\"plShelf\" AS Полка,P.\"plSector\" AS Сектор " +

"FROM \"Book\" B INNER JOIN \"Copy\" C ON B.ISBN = C.ISBN AND B.ISBN = (select to_char('" + dataGridView1[0, e.RowIndex].Value + "') from dual) AND C.\"cLost\" = 0 AND C.\"woCode\" IS NULL " +

"INNER JOIN \"Place\" P ON C.\"plCode\" = P.\"plCode\" "+

"where (select count(I.\"iNumber\") from \"Issuance\" I where I.\"cNumber\" = C.\"cNumber\" GROUP by C.\"cNumber\") IS NULL";.Load(Comand.ExecuteReader());(tab.Rows.Count == 0)

{= new DataTable();.CommandText = "SELECT C.\"cNumber\" AS Номер, P.\"plSection\" AS Отдел,P.\"plRack\" AS Стеллаж,P.\"plShelf\" AS Полка,P.\"plSector\" AS Сектор " +

"FROM \"Book\" B INNER JOIN \"Copy\" C ON B.ISBN = C.ISBN AND B.ISBN = (select to_char('" + dataGridView1[0, e.RowIndex].Value + "') from dual) AND C.\"cLost\" = 0 AND C.\"woCode\" IS NULL " +

"INNER JOIN \"Place\" P ON C.\"plCode\" = P.\"plCode\" " +

"INNER JOIN \"Issuance\" I ON I.\"cNumber\" = C.\"cNumber\" AND I.\"iFactReturn\" IS NOT NULL " +

"AND I.\"iIssuance\"=(select max(I2.\"iIssuance\") from \"Book\" B2 INNER JOIN \"Copy\" C2 ON B2.ISBN = C2.ISBN AND B2.ISBN = (select to_char('" + dataGridView1[0, e.RowIndex].Value + "') from dual) AND C2.\"cLost\" = 0 AND C2.\"woCode\" IS NULL " +

"INNER JOIN \"Place\" P2 ON C2.\"plCode\" = P2.\"plCode\" " +

"INNER JOIN \"Issuance\" I2 ON I2.\"cNumber\" = C2.\"cNumber\" " +

"WHERE C2.\"cNumber\"=C.\"cNumber\"" +

"GROUP BY C2.\"cNumber\")";.Load(Comand.ExecuteReader());(tab.Rows.Count == 0)

{.CommandText = "SELECT C.\"cNumber\" AS Номер, I.\"iExpReturn\" AS Дата_возврата " +

"FROM \"Book\" B INNER JOIN \"Copy\" C ON B.ISBN = C.ISBN AND B.ISBN = (select to_char('" + dataGridView1[0, e.RowIndex].Value.ToString() + "') from dual) AND C.\"cLost\" = 0 AND C.\"woCode\" IS NULL " +

"INNER JOIN \"Place\" P ON C.\"plCode\" = P.\"plCode\" " +

"INNER JOIN \"Issuance\" I ON I.\"cNumber\" = C.\"cNumber\" AND I.\"iFactReturn\" IS NULL";= new DataTable();.Load(Comand.ExecuteReader());f = false;(int i = 0; i < tab.Rows.Count; ++i)

{(DateTime.Compare(Convert.ToDateTime(tab.Rows[i][1].ToString()), DateTime.Today) > 0)= true;

}(!f)

{.Show("Книга не была возвращена в библиотеку");;

}= true;

}= false;

}.DataSource = tab.DefaultView;= dataGridView1[0, e.RowIndex].Value.ToString();;

}void dataGridView2_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)

{Comand = AR.OC.CreateCommand();.CommandText = "SELECT B.* FROM \"Book\" B INNER JOIN \"Copy\" C ON B.ISBN = C.ISBN AND B.ISBN = (select to_char('" + isbn + "') from dual) AND C.\"cLost\" = 0 AND C.\"woCode\" IS NULL " +

"INNER JOIN \"Issuance\" I ON I.\"cNumber\" = C.\"cNumber\" AND I.\"iFactReturn\" IS NULL " +

"INNER JOIN \"Reader\" R ON R.\"rNumber\" = I.\"rNumber\" AND R.\"rNumber\" = (select to_number('" + AR.rNumber + "')from dual)";tab = new DataTable();.Load(Comand.ExecuteReader());(tab.Rows.Count != 0)

{.Show("Вы уже выбрали эту книгу");;

}(!clc)

{= Convert.ToInt32(dataGridView2[0, e.RowIndex].Value);.Visible = true;.Visible = true;.Enabled = true;

}

}void comboBox1_SelectedIndexChanged(object sender, EventArgs e)

{(flag)

{tab;Comand = AR.OC.CreateCommand();.CommandText = "SELECT B.* FROM \"Book\" B, \"saved\" s WHERE B.ISBN = s.ISBN AND s.\"sCode\" = " +.SelectedValue.ToString();= new DataTable();.Load(Comand.ExecuteReader());.DataSource = tab.DefaultView;

}= false;

}void comboBox1_MouseClick(object sender, MouseEventArgs e)

{= true;

}void button2_Click(object sender, EventArgs e)

{(DateTime.Compare(dateTimePicker1.Value, DateTime.Today) <= 0)

{.Show("Дата возврата должна быть больше текущей даты");;

}tab;Comand = AR.OC.CreateCommand();.CommandText = "SELECT B.* FROM \"Book\" B INNER JOIN \"Copy\" C ON B.ISBN = C.ISBN AND C.\"cLost\" = 0 AND C.\"woCode\" IS NULL " +

"INNER JOIN \"Issuance\" I ON I.\"cNumber\" = C.\"cNumber\" AND I.\"iFactReturn\" IS NULL " +

"INNER JOIN \"Reader\" R ON R.\"rNumber\" = I.\"rNumber\" AND R.\"rNumber\" = (select to_number('" + AR.rNumber + "')from dual)";= new DataTable();.Load(Comand.ExecuteReader());(tab.Rows.Count == 5)

{.Show("Вы взяли уже пять книг и не можете выбирать новые");;

}.CommandText = "INSERT INTO \"Issuance\" (\"iNumber\",\"cNumber\",\"rNumber\",\"iIssuance\",\"iExpReturn\",\"iFactReturn\",ICHOICE) "+

"VALUES (0, "+

"(select to_number('"+cNumber+"') from dual), "+

"(select to_number('" + AR.rNumber + "') from dual), "+

"(select to_date(SYSDATE,'dd-mm-rr') from dual), "+

"(select to_date('" + dateTimePicker1.Value.ToShortDateString()+ "','dd-mm-rr') from dual), "+

"null, 1)";= new DataTable();.Load(Comand.ExecuteReader());.Visible = false;.Visible = false;.Enabled = false;

}

}

}

Класс AdministrationSystem;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Threading.Tasks;System.Windows.Forms;System.Data.OracleClient;DBLibrary

{partial class Administration : Form

{OracleConnection OC;int lbl;Administration(OracleConnection oc)

{();= oc;= 0;

}void Administration_Load(object sender, EventArgs e)

{.Enabled = false;.Enabled = false;.Enabled = false;

}void недобросовестныеЧитателиToolStripMenuItem_Click(object sender, EventArgs e)

{.Enabled = true;.Enabled = true;.Enabled = true;= 1;

}void label1_Click(object sender, EventArgs e)

{ }void популярныеКнигиToolStripMenuItem_Click(object sender, EventArgs e)

{.Enabled = true;.Enabled = true;.Enabled = true;= 2;

}void стоимостьУтерянныхКнигToolStripMenuItem_Click(object sender, EventArgs e)

{= 3;_Click(sender, e);

}void button1_Click(object sender, EventArgs e)

{Comand = OC.CreateCommand();table = new DataTable();(lbl == 1)

{dateBegin = dateTimePicker1.Value.ToShortDateString();dateEnd = dateTimePicker2.Value.ToShortDateString();.CommandText = "SELECT R.\"rFullName\" AS ФИО, R.\"rAddress\" AS Адрес, R.\"rPhone\" AS Телефон, " +

"R.\"rData\" AS Дата_рождения, COUNT(I.\"iNumber\") AS Опоздания_Долги " +

"FROM \"Reader\" R, \"Issuance\" I " +

"WHERE R.\"rNumber\" = I.\"rNumber\" AND " +

"(I.\"iExpReturn\" < I.\"iFactReturn\" OR I.\"iFactReturn\" IS NULL) AND " +

"(I.\"iFactReturn\" BETWEEN (select to_date('"+dateBegin+ "','dd-mm-rr') from dual) AND " +

"(select to_date('" + dateEnd + "','dd-mm-rr') from dual) OR I.\"iFactReturn\" IS NULL) " +

"GROUP BY R.\"rFullName\",R.\"rAddress\",R.\"rPhone\",R.\"rData\" " +

"ORDER BY Опоздания_Долги DESC";.Load(Comand.ExecuteReader());.DataSource = table.DefaultView;

}if (lbl == 2)

{dateBegin = dateTimePicker1.Value.ToShortDateString();dateEnd = dateTimePicker2.Value.ToShortDateString();.CommandText = "SELECT B.\"bName\" AS Книга, B.\"bAuthor\" AS Автор,B.\"bPublish\" AS Издательство, "+

"B.\"bYear\" AS Год_издания, COUNT(I.\"iNumber\") AS Выдач "+

"FROM \"Book\" B, \"Issuance\" I, \"Copy\" C "+

"WHERE B.\"ISBN\" = C.\"ISBN\" AND C.\"cNumber\" = I.\"cNumber\" AND "+

"I.\"iIssuance\" BETWEEN (select to_date('"+dateBegin+ "','dd-mm-rr') from dual) AND "+

"(select to_date('" + dateEnd + "','dd-mm-rr') from dual)"+

"GROUP BY B.\"bName\",B.\"bAuthor\",B.\"bPublish\",B.\"bYear\""+

"ORDER BY Выдач DESC";.Load(Comand.ExecuteReader());.DataSource = table.DefaultView;

}if (lbl == 3)

{ .CommandText = "SELECT B.\"bName\" AS Книга, C.\"cNumber\" AS Номер, C.\"cCost\" AS \"Цена\",R.\"rFullName\" AS ФИО_читателя "+

"FROM \"Book\" B, \"Issuance\" I, \"Copy\" C, \"Reader\" R "+

"WHERE B.\"ISBN\" = C.\"ISBN\" AND C.\"cNumber\" = I.\"cNumber\" AND I.\"rNumber\"=R.\"rNumber\" AND C.\"cLost\"=1 AND C.\"repCode\" IS NULL";.Load(Comand.ExecuteReader());.DataSource = table.DefaultView;

}.Enabled = false;.Enabled = false;.Enabled = false;

}

}

}

Класс LibrarianSystem;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Threading.Tasks;System.Windows.Forms;System.Data.OracleClient;DBLibrary

{partial class Librarian : Form

{OracleConnection OC;bool flag;bool D;string isbn;int rNumber;int mode;int cNumber;Librarian(OracleConnection oc)

{();= oc;= false;

}void Librarian_Load(object sender, EventArgs e)

{

экземплярToolStripMenuItem.Visible = false;.Enabled = true;

выдатьToolStripMenuItem.Visible = false;

списатьToolStripMenuItem.Visible = false;

заменToolStripMenuItem.Visible = false;tab;Comand = OC.CreateCommand();.CommandText = "SELECT \"sCode\", \"sName\" FROM \"Section\"";= new DataTable();.Load(Comand.ExecuteReader());.DataSource = tab;.ValueMember = "sCode";.DisplayMember = "sName";();

}void FLoad()

{tab;Comand = OC.CreateCommand();.CommandText = "SELECT B.* FROM \"Book\" B, \"saved\" s WHERE B.ISBN = s.ISBN AND s.\"sCode\" = " +.SelectedValue.ToString();= new DataTable();.Load(Comand.ExecuteReader());.DataSource = tab.DefaultView;.CommandText = "SELECT R.\"rNumber\" AS Номер_билета, R.\"rFullName\" AS ФИО, R.\"rAddress\" AS Адрес, R.\"rPhone\" AS Телефон, R.\"rData\" AS Дата_рождения, " +

"case when (select count(I.\"iIssuance\") from \"Issuance\" I, \"Reader\" R2 where I.\"rNumber\" = R2.\"rNumber\" AND R2.\"rNumber\" = R.\"rNumber\" AND I.ICHOICE IS NOT NULL group by R2.\"rNumber\")IS NULL then 'нет' else 'да' end AS Выбрал_книгу " +

"FROM \"Reader\" R";= new DataTable();.Load(Comand.ExecuteReader());.DataSource = tab.DefaultView;

}void comboBox1_SelectedIndexChanged(object sender, EventArgs e)

{(flag)

{tab;Comand = OC.CreateCommand();.CommandText = "SELECT B.* FROM \"Book\" B, \"saved\" s WHERE B.ISBN = s.ISBN AND s.\"sCode\" = " +.SelectedValue.ToString();= new DataTable();.Load(Comand.ExecuteReader());.DataSource = tab.DefaultView;

}= false;

}void comboBox1_MouseClick(object sender, MouseEventArgs e)

{= true;

}void dataGridView1_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)

{= false;= 1;= dataGridView1[0, e.RowIndex].Value.ToString();

экземплярToolStripMenuItem.Visible = true;Comand = OC.CreateCommand();tab = new DataTable();.CommandText = "SELECT C.\"cNumber\" AS Номер, C.\"cCost\" AS Цена, C.\"cDate\" AS Дата_поставки, case when C.\"cLost\" = 0 then 'нет' else 'да' end AS Утерян, "+

"case when C.\"cLost\" = 1 AND C.\"repCode\" IS NOT NULL then 'да' when C.\"cLost\" = 1 AND C.\"repCode\" IS NULL then 'нет' else ' ' end AS Заменен, " +

"case when C.\"woCode\" IS NULL then 'нет' else 'да' end AS Списан, " +

"P.\"plSection\" AS Отдел, P.\"plRack\" AS Стеллаж, P.\"plShelf\" AS Полка, P.\"plSector\" AS Сектор, "+

"I.\"iIssuance\" AS Дата_выдачи, I.\"iExpReturn\" AS Ожид_возврат, I.\"iFactReturn\" AS Факт_возврат "+

"FROM \"Book\" B INNER JOIN \"Copy\" C ON B.ISBN = C.ISBN AND B.ISBN = (select to_char('" + isbn + "') from dual) " +

"INNER JOIN \"Place\" P ON C.\"plCode\" = P.\"plCode\" " +

"INNER JOIN \"Issuance\" I ON I.\"cNumber\" = C.\"cNumber\" " +

"AND I.\"iIssuance\"=(select max(I2.\"iIssuance\") from \"Book\" B2 INNER JOIN \"Copy\" C2 ON B2.ISBN = C2.ISBN AND B2.ISBN = (select to_char('" + isbn + "') from dual) " +

"INNER JOIN \"Place\" P2 ON C2.\"plCode\" = P2.\"plCode\" " +

"INNER JOIN \"Issuance\" I2 ON I2.\"cNumber\" = C2.\"cNumber\" " +

"WHERE C2.\"cNumber\"=C.\"cNumber\" " +

"GROUP BY C2.\"cNumber\")";.Load(Comand.ExecuteReader());.DataSource = tab.DefaultView;

}void dataGridView3_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)

{= 3;= Convert.ToInt32(dataGridView3[0, e.RowIndex].Value);Comand = OC.CreateCommand();tab = new DataTable();.CommandText = "SELECT B.ISBN, B.\"bName\" AS Название, C.\"cNumber\" AS Номер, I.\"iExpReturn\" AS Ожид_возврат "+

"FROM \"Book\" B, \"Copy\" C, \"Issuance\" I, \"Reader\" R "+

"WHERE I.\"cNumber\" = C.\"cNumber\" AND C.ISBN = B.ISBN AND I.\"rNumber\" = R.\"rNumber\" AND R.\"rNumber\" = (select to_number('" + rNumber + "') from dual) AND I.\"iFactReturn\" IS NULL AND I.ICHOICE IS NULL";.Load(Comand.ExecuteReader());.DataSource = tab.DefaultView;("да".CompareTo(dataGridView3[5,e.RowIndex].Value.ToString()) == 0)

выдатьToolStripMenuItem.Visible = true;

выдатьToolStripMenuItem.Visible = false;

}void выходToolStripMenuItem_Click(object sender, EventArgs e)

{Comand = OC.CreateCommand();tab = new DataTable();.CommandText = "UPDATE \"Copy\" SET \"cLost\" = 1 WHERE \"Copy\".\"cNumber\" = (select to_number('"+cNumber+"') from dual)";.Load(Comand.ExecuteReader());();

}void выдатьToolStripMenuItem_Click(object sender, EventArgs e)

{I = new Issuance(this);.Enabled = false;.Show();

}void выходToolStripMenuItem1_Click(object sender, EventArgs e)

{.Close();

}void dataGridView2_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)

{= 2;("да".CompareTo(dataGridView2[3, e.RowIndex].Value.ToString()) == 0)

{

заменToolStripMenuItem.Visible = true;

списатьToolStripMenuItem.Visible = true;

выходToolStripMenuItem.Visible = false;

}("да".CompareTo(dataGridView2[4, e.RowIndex].Value.ToString()) == 0)

{

списатьToolStripMenuItem.Visible = true;

заменToolStripMenuItem.Visible = false;

выходToolStripMenuItem.Visible = false;

}("да".CompareTo(dataGridView2[5, e.RowIndex].Value.ToString()) == 0)

{

заменToolStripMenuItem.Visible = false;

списатьToolStripMenuItem.Visible = false;

выходToolStripMenuItem.Visible = false;

}(D)

{

заменToolStripMenuItem.Visible = false;

списатьToolStripMenuItem.Visible = true;

выходToolStripMenuItem.Visible = false;

}if ("да".CompareTo(dataGridView2[5, e.RowIndex].Value.ToString()) != 0 && "".CompareTo(dataGridView2[12, e.RowIndex].Value.ToString()) != 0)

{

списатьToolStripMenuItem.Visible = true;

выходToolStripMenuItem.Visible = false;

}(D)

{

заменToolStripMenuItem.Visible = false;

списатьToolStripMenuItem.Visible = true;

выходToolStripMenuItem.Visible = false;

}if ("да".CompareTo(dataGridView2[3, e.RowIndex].Value.ToString()) != 0 && "".CompareTo(dataGridView2[12, e.RowIndex].Value.ToString()) == 0)

{

заменToolStripMenuItem.Visible = false;

выходToolStripMenuItem.Visible = true;

}= Convert.ToInt32(dataGridView2[0, e.RowIndex].Value);

}void списатьToolStripMenuItem_Click(object sender, EventArgs e)

{Comand = OC.CreateCommand();tab = new DataTable();.CommandText = "INSERT INTO \"Writeoff\" (\"woCode\", \"woDate\") VALUES(0, (select to_date(SYSDATE,'dd-mm-rr') from dual))";.Load(Comand.ExecuteReader());= new DataTable();.CommandText = "UPDATE \"Copy\" SET \"woCode\" = (select max(\"woCode\") from \"Writeoff\") WHERE \"Copy\".\"cNumber\" = (select to_number('"+cNumber+"') from dual)";.Load(Comand.ExecuteReader());();

}void заменToolStripMenuItem_Click(object sender, EventArgs e)

{Comand = OC.CreateCommand();tab = new DataTable();.CommandText = "INSERT INTO \"Replacement\" (\"repCode\", \"repDate\") VALUES(0, (select to_date(SYSDATE,'dd-mm-rr') from dual))";.Load(Comand.ExecuteReader());= new DataTable();.CommandText = "UPDATE \"Copy\" SET \"repCode\" = (select max(\"repCode\") from \"Replacement\") WHERE \"Copy\".\"cNumber\" = (select to_number('" + cNumber + "'))";.Load(Comand.ExecuteReader());

книгуToolStripMenuItem_Click(sender, e);

}void книгуToolStripMenuItem_Click(object sender, EventArgs e)

{AB = new AddBook(OC,null);.Show();

}void обновитьToolStripMenuItem_Click(object sender, EventArgs e)

{();

{AC = new AddCopy(OC, isbn, 0);.Show();

}void dataGridView1_RowHeaderMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)

{= true;= dataGridView1[0, e.RowIndex].Value.ToString();

экземплярToolStripMenuItem.Visible = true;Comand = OC.CreateCommand();tab = new DataTable();= new DataTable();.CommandText = "SELECT C.\"cNumber\" AS Номер, C.\"cCost\" AS Цена, C.\"cDate\" AS Дата_поставки, case when C.\"cLost\" = 0 then 'нет' else 'да' end AS Утерян, " +

"case when C.\"cLost\" = 1 AND C.\"repCode\" IS NOT NULL then 'да' when C.\"cLost\" = 1 AND C.\"repCode\" IS NULL then 'нет' else ' ' end AS Заменен, " +

"case when C.\"woCode\" IS NULL then 'нет' else 'да' end AS Списан, " +

"P.\"plSection\" AS Отдел, P.\"plRack\" AS Стеллаж, P.\"plShelf\" AS Полка, P.\"plSector\" AS Сектор " +

"FROM \"Book\" B INNER JOIN \"Copy\" C ON B.ISBN = C.ISBN AND B.ISBN = (select to_char('" + isbn + "') from dual) " +

"INNER JOIN \"Place\" P ON C.\"plCode\" = P.\"plCode\" ";.Load(Comand.ExecuteReader());.DataSource = tab.DefaultView;

}void читателяToolStripMenuItem_Click(object sender, EventArgs e)

{AR = new AddReader(OC,0);.Show();

}void редактироватьToolStripMenuItem_Click(object sender, EventArgs e)

{(mode == 1)

{AB = new AddBook(OC, isbn);.Show();

}if (mode == 2)

{AC = new AddCopy(OC, isbn, cNumber);.Show();

}if (mode == 3)

{AR = new AddReader(OC, rNumber);.Show();

}.Show("Выделите объект для редактирования");

}

}

}

Класс AddReaderSystem;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Threading.Tasks;System.Windows.Forms;System.Data.OracleClient;DBLibrary

{partial class AddReader : Form

{OracleConnection OC;int rNumber;bool rflag;AddReader(OracleConnection oc, int r)

{();= oc;= false;(r != 0)

{= r;= true;

}

}void button2_Click(object sender, EventArgs e)

{(textBox1.Text == null || textBox1.Text == "" ||.Text == null || textBox2.Text == "" ||.Text == null || textBox5.Text == "")

{.Show("Все поля должны быть заполнены!");;

}ts = DateTime.Today - dateTimePicker1.Value;(ts.Days < 6574)

{.Show("Читатель должен быть совершеннолетним");;

}Comand = OC.CreateCommand();tab = new DataTable();(!rflag)

{.CommandText = "select * from \"Reader\" where \"rFullName\" = '" + textBox1.Text + "' AND \"rData\" = (select to_date('" +.Value.ToShortDateString() + "', 'dd-mm-rr') from dual)";.Load(Comand.ExecuteReader());(tab.Rows.Count != 0)

{.Show("Читатель уже зарегистрирован в библиотеке");;

}.CommandText = "begin PROCEDURE_INS_READER('" + textBox1.Text + "', '" + textBox2.Text + "', '" + textBox5.Text + "', '" + .Value.ToShortDateString() + "'); end;";.ExecuteNonQuery();.Show("Читатель успешно добавлен");.Close();

}

{.CommandText = "begin PROCEDURE_EDIT_READER('" + rNumber + "', '" + textBox1.Text + "', '" + textBox2.Text + "', '" +.Text + "', '" + dateTimePicker1.Value.ToShortDateString() + "'); end;";.ExecuteNonQuery();.Show("Изменения сохранены");.Close();

}

}void button1_Click(object sender, EventArgs e)

{.Close();

}void AddReader_Load(object sender, EventArgs e)

{(rflag)

{Comand = OC.CreateCommand();tab = new DataTable();.CommandText = "select * from \"Reader\" where \"rNumber\" = '" + rNumber + "'";.Load(Comand.ExecuteReader());.Text = tab.Rows[0][1].ToString();.Text = tab.Rows[0][2].ToString();.Text = tab.Rows[0][3].ToString();.Value = Convert.ToDateTime(tab.Rows[0][4].ToString());

}

}

}

}

Класс AddCopy System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Threading.Tasks;System.Windows.Forms;System.Data.OracleClient;DBLibrary

{partial class AddCopy : Form

{OracleConnection OC;string isbn;int cNumber;bool bflag;AddCopy(OracleConnection oc, string i, int c)

{();= oc;= i;= false;(c != 0)

{= c;= true;

}

}void button1_Click(object sender, EventArgs e)

{.Close();

}void button2_Click(object sender, EventArgs e)

{(!bflag)

{Comand = OC.CreateCommand();tab = new DataTable();(comboBox1.SelectedIndex == -1 || comboBox2.SelectedIndex == -1 ||.SelectedIndex == -1 || textBox2.Text == null || textBox2.Text == "")

{.Show("Заполните все поля!");;

}(DateTime.Compare(dateTimePicker1.Value, DateTime.Now) > 0)

{.Show("Дата поставки не может превышать текущую дату");;

}.CommandText = "select P.\"plCode\" from \"Place\" P " +

"where P.\"plSection\" = '" + comboBox1.Items[comboBox1.SelectedIndex].ToString() + "' AND P.\"plRack\" = '" +.Items[comboBox2.SelectedIndex].ToString() + "' AND P.\"plShelf\" = '" +.Items[comboBox3.SelectedIndex].ToString() + "' AND P.\"plSector\" = '" + textBox2.Text + "'";.Load(Comand.ExecuteReader());code = 0;(tab.Rows.Count > 0)

{= Convert.ToInt32(tab.Rows[0][0].ToString());

}(code > 0)

{.CommandText = "begin PROCEDURE_INS_COPY('" + isbn + "', '" + numericUpDown1.Value + "', '" + dateTimePicker1.Value.ToShortDateString() + "', '" + code + "'); end;";.ExecuteNonQuery();

}

{= new DataTable();.CommandText = "begin PROCEDURE_INS_PLACE('" + comboBox1.Items[comboBox1.SelectedIndex].ToString() + "', '" +.Items[comboBox2.SelectedIndex].ToString() + "', '" +.Items[comboBox3.SelectedIndex].ToString() + "', '" + textBox2.Text + "'); end;";.ExecuteNonQuery();.CommandText = "select max(\"plCode\") from \"Place\"";.Load(Comand.ExecuteReader());= Convert.ToInt32(tab.Rows[0][0]);.CommandText = "begin PROCEDURE_INS_COPY('" + isbn + "', '" + numericUpDown1.Value + "', '" + dateTimePicker1.Value.ToShortDateString() + "', '" + code + "'); end;";.ExecuteNonQuery();

}.Show("Экземпляр книги зарегистрирован");

}

{Comand = OC.CreateCommand();tab = new DataTable();(comboBox1.SelectedIndex == -1 || comboBox2.SelectedIndex == -1 ||.SelectedIndex == -1 || textBox2.Text == null || textBox2.Text == "")

{.Show("Заполните все поля!");;

}(DateTime.Compare(dateTimePicker1.Value, DateTime.Now) > 0)

{.Show("Дата поставки не может превышать текущую дату");;

}.CommandText = "begin PROCEDURE_EDIT_COPY('"+cNumber+"', '"+numericUpDown1.Value+"', '"+dateTimePicker1.Value.ToShortDateString()+

"', '" + comboBox1.Items[comboBox1.SelectedIndex].ToString() + "', '" + comboBox2.Items[comboBox2.SelectedIndex].ToString() + "', '" + comboBox3.Items[comboBox3.SelectedIndex].ToString() +

"', '"+textBox2.Text+"'); end;";.ExecuteNonQuery();.Show("Изменения сохранены");.Close();

}

}void AddCopy_Load(object sender, EventArgs e)

{.Text = isbn;Comand = OC.CreateCommand();tab = new DataTable();.CommandText = "select \"bName\" from \"Book\" where ISBN = (select to_char('"+isbn+"') from dual)";.Load(Comand.ExecuteReader());.Text = tab.Rows[0][0].ToString();(bflag)

{= new DataTable();.CommandText = "select C.\"cCost\", C.\"cDate\", P.\"plSection\", P.\"plRack\", P.\"plShelf\", P.\"plSector\" "+

"from \"Copy\" C inner join \"Place\" P on C.\"plCode\" = P.\"plCode\" where C.\"cNumber\" = (select to_number('"+cNumber+"') from dual)";.Load(Comand.ExecuteReader());.Value = Convert.ToDecimal(tab.Rows[0][0]);.Value = Convert.ToDateTime(tab.Rows[0][1]);(int i = 0; i < comboBox1.Items.Count; ++i)

{(comboBox1.Items[i].ToString() == tab.Rows[0][2].ToString())

{.SelectedIndex = i;;

}

}(int i = 0; i < comboBox2.Items.Count; ++i)

{(comboBox2.Items[i].ToString() == tab.Rows[0][3].ToString())

{.SelectedIndex = i;;

}

}(int i = 0; i < comboBox3.Items.Count; ++i)

{(comboBox3.Items[i].ToString() == tab.Rows[0][4].ToString())

{.SelectedIndex = i;;

}.Text = tab.Rows[0][5].ToString();

}

Класс AddBookSystem;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Threading.Tasks;System.Windows.Forms;System.Data.OracleClient;DBLibrary

{partial class AddBook : Form

{OracleConnection OC;string isbn;bool flag;AddBook(OracleConnection oc, string i)

{();= oc;= false;(i != null)

{= true;= i;.Text = "Редактирование";

}void AddBook_Load(object sender, EventArgs e)

{(!flag)

{.Enabled = false;.Enabled = false;Comand = OC.CreateCommand();tab = new DataTable();.CommandText = "SELECT \"sCode\", \"sName\" FROM \"Section\"";= new DataTable();.Load(Comand.ExecuteReader());.DataSource = tab;.ValueMember = "sCode";.DisplayMember = "sName";

}

{.Visible = false;.Visible = false;.ReadOnly = true;.Visible = false;.Text = "Отмена";.Text = "Подтвердить";.Location = new Point(213, 235);.Size = new System.Drawing.Size(102, 32);Comand = OC.CreateCommand();tab = new DataTable();.CommandText = "select * from \"Book\" where ISBN = '"+isbn+"'";.Load(Comand.ExecuteReader());.Text = tab.Rows[0][0].ToString();.Text = tab.Rows[0][1].ToString();.Text = tab.Rows[0][2].ToString();.Text = tab.Rows[0][3].ToString();.Text = tab.Rows[0][4].ToString();.Value = Convert.ToDecimal(tab.Rows[0][5].ToString());.Value = Convert.ToDecimal(tab.Rows[0][6].ToString());

}

}void comboBox1_SelectedIndexChanged(object sender, EventArgs e)

{ }void button1_Click(object sender, EventArgs e)

{.ReadOnly = true;.ReadOnly = true;.ReadOnly = true;.ReadOnly = true;.ReadOnly = true;Comand = OC.CreateCommand();tab = new DataTable();.CommandText = "select \"sCode\" from \"saved\" where ISBN = (select to_char('" + textBox1.Text + "') from dual)";.Load(Comand.ExecuteReader());(int i = 0; i < tab.Rows.Count; ++i)

{(Convert.ToInt32(tab.Rows[i][0]) == Convert.ToInt32(comboBox2.SelectedValue))

{.Show("Книга уже добавлена в этот раздел");;

}= new DataTable();.CommandText = "begin PROCEDURE_ADD_SECTION('" + isbn + "', '" + comboBox2.SelectedValue.ToString() + "'); end;";.ExecuteNonQuery();.Show("Книга добавлена в раздел каталога");

}void button2_Click(object sender, EventArgs e)

{(!flag)

{Comand = OC.CreateCommand();tab = new DataTable();.CommandText = "select count(*) from \"Book\" where ISBN = (select to_char('" + textBox1.Text + "') from dual)";.Load(Comand.ExecuteReader());(Convert.ToInt32(tab.Rows[0][0]) > 0)

{= textBox1.Text;.Show("Книга с таким кодом уже есть в библиотеке. Добавьте экземпляр");AC = new AddCopy(OC, isbn, 0);.Show();.Close();

}.CommandText = "begin PROCEDURE_INS_BOOK('" + textBox1.Text + "', " +

"'" + textBox2.Text + "', '" + textBox3.Text + "', '" + textBox4.Text + "', '" + textBox5.Text +

"', '" + numericUpDown2.Value + "', '" + numericUpDown1.Value + "', '" + comboBox2.SelectedValue + "'); end;";.ExecuteNonQuery();.Show("Книга зарегистрирована");.Enabled = true;= textBox1.Text;

}

{Comand = OC.CreateCommand();tab = new DataTable();.CommandText = "begin PROCEDURE_EDIT_BOOK('" + textBox1.Text + "', '" + textBox2.Text + "', '" + textBox3.Text + "', '" + textBox4.Text + "', '" +.Text + "', '" + numericUpDown2.Value + "', '" + numericUpDown1.Value + "'); end;";.ExecuteNonQuery();.Show("Изменения сохранены");.Close();

}void textBox1_KeyPress(object sender, KeyPressEventArgs e)

{(textBox1.Text == null || textBox1.Text == "" || .Text == null || textBox2.Text == "" || .Text == null || textBox3.Text == "" || .Text == null || textBox4.Text == "" || .Text == null || textBox5.Text == "")

{}.Enabled = true;

}void button3_Click(object sender, EventArgs e)

{(!flag)

{AC = new AddCopy(OC, isbn,0);.Show();.Close();

}

{.Close();

}

Приложение 4

Графическая часть

Рисунок 19. Диаграмма вариантов использования

Рисунок 20. ER-диаграмма инфологической модели предметной области

Рисунок 21. Диаграмма физической модели предметной области

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

Рисунок 22. Алгоритм регистрации нового читателя

Рисунок 23. Алгоритм регистрации книги

Рисунок 24. Алгоритм добавления экземпляра книги

Рисунок 25. Алгоритм добавления книги в раздел каталога

Рисунок 26. Алгоритм редактирования экземпляра книги и изменения его места расположения

Рисунок 27. Алгоритм редактирования данных книги

Рисунок 27. Алгоритм редактирования данных читателя

Похожие работы на - Создание автоматизированных информационных систем

 

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