МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
Дальневосточная государственная академия экономики и управления
Кафедра математики и моделирования
Курсовая работа
по базам данных и базы знаний
Разработка автоматизированной системы “Библиотека”
Студент
Нестеренко М.В.
131-ПИ
Руководитель
Озерова Г.П.
Владивосток, 2002
Оглавление
1. Введение
2. Функциональные возможности системы
3. Построение информационно-логической модели базы данных
3.1. Выделение информационных объектов
3.2. Структура информационных объектов базы данных
3.3. Связи между информационными объектами
4. Проектирование алгоритмов обработки данных
5. Разработка запросов для корректировки и выборки данных
5.1. Запросы на выборку данных
5.2 Корректировка данных средствами запросов.
6. Реализация пользовательского интерфейса средствами форм
7. Разработка отчетов
8. Реализация алгоритмов обработки информации программными средствами
8.1. Реализация алгоритмов средствами макросов
8.2. Реализация алгоритмов средствами Visual Basic
9. Разработка приложения пользователя
Приложения
1. Введение
Имеется некоторая библиотека, в которой хранятся книги. Они различаются по авторам, по жанру, году издания, издательству, которое их выпустило, по месту издания. Каждый жанр книги имеет свою продолжительность держания на руках и пеню, начисляемую в случае не возврата книги вовремя.
В библиотеке записано некоторое количество читателей, данные о которых хранятся в специальной ведомости. Каждый читатель имеет возможность взять любую книгу, которая в данный момент находится в библиотеке.
После того, как человек взял книгу на руки, считается, что никакому другому читателю она не доступна до тех пор, пока взявший ее не вернет назад. Дата взятия книги заносится в ведомость и когда читатель возвращает книгу, учитывается, вернул ли он ее вовремя или же просрочил. В этом случае ему за каждый день просрочки начисляется пеня в установленном размере.
2. Функциональные возможности системы
Система “Библиотека” предоставляет следующие возможности для пользователей:
Занесение новых книг в фонд библиотеки
Просмотр информации о каждом зарегистрированном читателе
Просмотр всех книг, которые читатель брал за все время пользования библиотекой
Поиск необходимой читателю книги по нескольким параметрам
Просмотр книг, которые находятся на руках у читателя, а также тех, за которые он не заплатил пеню
Оплата пени за ту книгу, сдачу которой читатель просрочил
Просмотреть информацию обо всех читателях, которые зарегистрированы в библиотеке (ФИО, адрес, телефон)
3. Построение информационно-логической модели базы данных
3.1 Выделение информационных объектов
а) документы и их реквизиты, подлежащие хранению в базе данных
Документ |
Наименование реквизита |
Идентификатор |
Функциональная зависимость |
Список |
Код_автора |
Код_автора |
|
книг |
Автор_книги |
Автор |
|
Авт_знак |
Авт_знак |
||
Код_заглавия |
Код_заглавия |
||
Заглавие_книги |
Заглавие |
||
Код_вида_издания |
Код_вида_издания |
||
Вид_издания |
Вид_издания |
||
На_какой_срок |
На_какой_срок |
||
Начисляемая_пеня |
Начисляемая_пеня |
||
Код_издательства |
Код_издательства |
||
Издательство |
Издательство |
||
Место_издания Код_издания Библ_шифр Год_издания Аннотация Код_экземпляра На_руках? |
Место_издания Код_издания Библ_шифр Год_издания Аннотация Код_экземпляра На_руках? |
||
Список |
Код_улицы |
Код_улицы |
|
читателей |
Улица_проживания |
Улица |
|
Дом |
Дом |
||
Квартира |
Квартира |
||
Код_адреса |
Код_адреса |
||
Номер_билета |
Номер_билета |
||
Фамилия_читателя |
Фамилия |
||
Имя |
Имя |
||
Отчество |
Отчество |
||
Телефон |
Телефон |
||
Код_ведомости |
Код_ведомости |
||
Дата_оплаты |
Дата_оплаты |
||
Заплачено |
Заплачено |
||
Дата_выдачи |
Дата_выдачи |
||
Когда_вернул |
Когда_вернул |
||
Пеня |
Пеня |
||
Заплатил_пеню? |
Заплатил_пеню? |
б) зависимые реквизиты
Описательные реквизиты |
Ключевые реквизиты |
Код_автора |
Код_издания |
Автор |
Код_автора |
Авт_знак |
Код_автора |
Код_заглавия |
Код_издания |
Заглавие |
Код_заглавия |
Код_вида_издания |
Код_издания |
Вид_издания |
Код_вида_издания |
На_какой_срок |
Код_вида_издания |
Исчисляемая_пеня |
Код_вида_издания |
Код_издательства |
Код_издания |
Издательство |
Код_издательства |
Место_издания |
Код_издательства |
Код_издания |
Код_экземпляра |
Библ_шифр |
Код_издания |
Год_издания |
Код_издания |
Аннотация |
Код_издания |
Код_экземпляра |
Номер_билета |
На_руках? |
Код_экземпляра |
Код_улицы |
Код_адреса |
Улица |
Код_улицы |
Дом |
Код_адреса |
Квартира |
Код_адреса |
Код_адреса |
Номер_билета |
Номер_билета |
Код_ведомости |
Фамилия |
Номер_билета |
Имя |
Номер_билета |
Отчество |
Номер_билета |
Телефон |
Номер_билета |
Код_ведомости |
------------------- |
Дата_оплаты |
Код_ведомости |
Заплачено |
Код_ведомости |
Дата_выдачи |
Номер_билета |
Когда_вернул |
Номер_билета |
Пеня |
Номер_билета |
Заплатил_пеню? |
Номер_билета |
в) группировка реквизитов
Реквизиты |
Ключ |
Имя инф. объекта |
Описание |
Автор |
q |
Авторы |
|
Авт_знак |
|||
Код_автора |
1 |
||
Заглавие |
Заглавия |
|
|
Код_заглавия |
q |
1 |
|
Вид_издания |
q |
Вид_издания |
|
На_какой_срок Начисляемая_пеня Код_вида_издания |
1 |
||
Издательство |
q |
Издательства |
|
Место_издания Код_издательства |
1 |
||
Код_вида_издания |
q |
Издание |
¥ |
Код_автора |
¥ |
||
Заглавие Библ_шифр Код_издательства Год_издания Аннотация Код_издания |
¥ ¥ 1 |
||
Код_издания |
q |
Экземпляр |
¥ |
На_руках? |
|||
Код_экземпляра |
1 |
||
Улица |
q |
Улица |
|
Код_улицы |
1 |
||
Улица |
q |
Адрес |
¥ |
Дом |
|||
Квартира |
|||
Код_адреса |
1 |
||
Фамилия |
q |
Читатели |
|
Имя |
|||
Отчество |
¥ |
||
Код_адреса Телефон |
|
||
Номер_билета |
1 |
||
Номер_билета |
q q |
Выдача |
¥ |
Код_экземпляра Дата_выдачи Когда_вернул Пеня Заплатил_пеню? |
¥ |
||
Код_читателя Код_экземпляра Дата_оплаты Заплачено Код_ведомости |
q |
Ведомость |
¥ |
3.2 Структура информационных объектов базы данных
Авторы
№ |
Название столбца |
Тип |
Ключ |
1 |
Автор |
текстовый |
|
2 |
Авт_знак |
текстовый |
|
3 |
Код_автора |
счетчик |
q |
Заглавия
№ |
Название столбца |
Тип |
Ключ |
1 |
Заглавие |
текстовый |
|
2 |
Код_заглавия |
счетчик |
q |
Вид_издания
№ |
Название столбца |
Тип |
Ключ |
1 |
Ви_издания |
текстовый |
|
2 |
На_какой_срок |
числовой |
|
3 |
Начисляемая_пеня |
числовой |
|
4 |
Код_вида_издания |
счетчик |
q |
Издательства
№ |
Название столбца |
Тип |
Ключ |
1 |
Издательство |
текстовый |
|
2 |
Место_издания |
текстовый |
|
3 |
Код_издательства |
счетчик |
q |
Издание
№ |
Название столбца |
Тип |
Ключ |
1 |
Код_вида_издательства |
числовой |
|
2 |
Код_автора |
числовой |
|
3 |
Заглавие |
числовой |
|
4 |
Библ_шифр |
текстовый |
|
5 |
Код_издательства |
числовой |
|
6 |
Год_издания |
числовой |
|
7 |
Аннотация |
Поле MEMO |
|
8 |
Код_издания |
счетчик |
q |
Экземпляр
№ |
Название столбца |
Тип |
Ключ |
1 |
Код_издания |
числовой |
|
2 |
На_руках? |
логический |
|
3 |
Код_экземпляра |
счетчик |
q |
Улицы
№ |
Название столбца |
Тип |
Ключ |
1 |
Улица |
текстовый |
|
2 |
Код_улицы |
счетчик |
q |
Адрес
№ |
Название столбца |
Тип |
Ключ |
1 |
Улица |
числовой |
|
2
/> |
Дом |
текстовый |
|
3 |
Квартира |
числовой |
|
4 |
Код_адреса |
счетчик |
q |
Читатели
№ |
Название столбца |
Тип |
Ключ |
1 |
Фамилия |
текстовый |
|
2 |
Имя |
текстовый |
|
3 |
Отчество |
текстовый |
|
4 |
Код_адреса |
числовой |
|
5 |
Телефон |
текстовый |
|
6 |
Номер_билета |
счетчик |
q |
Ведомость
№ |
Название столбца |
Тип |
Ключ |
1 |
Код_читателя |
числовой |
|
2 |
Код_экземпляра |
числовой |
|
3 |
Дата_оплаты |
дата/время |
|
4 |
Заплачено |
числовой |
|
5 |
Код_ведомости |
счетчик |
q |
Выдача
№ |
Название столбца |
Тип |
Ключ |
1 |
Номер_билета |
числовой |
q |
2 |
Код_экземпляра |
числовой |
q |
3 |
Дата_выдачи |
дата/время |
|
4 |
Когда_вернул |
дата/время |
|
5 |
Пеня |
числовой |
|
6 |
Заплатил_пеню? |
логический |
3.3 Связи между информационными объектами
4. Проектирование алгоритмов обработки данных
Выбор книги |
Книга на руках |
Сдача книги |
Регистрация в библиотеке (если еще не зарегистрирован) Поиск книги в фонде Выбор найденной книги Занесение информации о взятой книги в карточку читателя Занесение в список информации, что книга на руках |
Подсчет общей пени каждого читателя |
Снятие книги с рук и отражение этого в списках Подсчет пени по данной книге (если такая имеется) Оплата пени |
Действия в течение года |
||
Формирование списка тех книг, которые на руках Добавление новых книг Списание старых книг Регистрация новых читателей |
5. Разработка запросов для корректировки и выборки данных
5.1 Запросы на выборку данных
Пеня
– запрос для расчета задолженности читателей по каждой книге.
а) Данные из следующих таблиц должны быть включены в запрос: Авторы, Заглавия, Издание, Экземпляр, Вид_издания, Выдача, читатели.
б) структура связей между таблицами:
((Заглавия INNER JOIN (Вид_издания INNER JOIN (Авторы INNER JOIN Издание ON Авторы.Код_автора = Издание.Код_автора) ON Вид_издания.Код_вида_издания = Издание.Код_вида_издания) ON Заглавия.Код_заглавия = Издание.Заглавие) INNER JOIN Экземпляр ON Издание.Код_издания = Экземпляр.Код_издания) INNER JOIN (Читатели INNER JOIN Выдача ON Читатели.Номер_билета = Выдача.Номер_билета) ON Экземпляр.Код_экземпляра = Выдача.Код_экземпляра
в) поля, включаемы в запрос:
SELECT Читатели.Фамилия, Читатели.Имя, Читатели.Отчество, Авторы.Автор, Заглавия.Заглавие, Выдача.Дата_выдачи, Выдача!Дата_выдачи+ Вид_издания!На_какой_срок AS До_какого_числа, Выдача.Когда_вернул, (Выдача!Когда_вернул-(Выдача!Дата_выдачи +Вид_издания!На_какой_срок)) *Вид_издания!Начисляемая_пеня AS [Был долг], Выдача.Пеня AS Оплатить
г) групповая операция:
Читатели.Фамилия, Читатели.Имя, Читатели.Отчество, Авторы.Автор, Заглавия.Заглавие, Выдача.Дата_выдачи, Выдача!Дата_выдачи+Вид_издания!На_какой_срок, Выдача.Когда_вернул, (Выдача!Когда_вернул-(Выдача!Дата_выдачи +Вид_издания!На_какой_срок))*Вид_издания!Начисляемая_пеня, Выдача.Пеня
д) условие отбора:
((([Выдача]![Пеня])<>0) AND ((([Выдача]![Когда_вернул]-([Выдача]! [Дата_выдачи]+[Вид_издания]![На_какой_срок])) *[Вид_издания]! [Начисляемая_пеня])>0)) ORDER BY Читатели.Фамилия, Читатели.Имя
10 новых книг
– перечень 10 самых новых книг.
10 самых постоянных читателей
– перечень 10 тех читателей, которые брали наибольшее количество книг.
На_поиск_книги
– запрос, необходимый для поиска (отбора) книги по необходимым параметрам.
5.2 Корректировка данных средствами запросов
Подсчет пени: обновление данных о сумме задолженности, обновление данных о читателях, которые оплатили свою задолженность.
Весь процесс можно описать в два шага.
Шаг 1
: Выполнение запроса Подсчет пени (1)
Таблица Выдача |
||
Номер_билета Код_экземпляра Дата_выдачи Когда_вернул Пеня Заплатил_пеню? |
Данный запрос, описанный в SQL:
UPDATE ((Вид_издания INNER JOIN Издание ON Вид_издания.Код_вида_издания = Издание.Код_вида_издания) INNER JOIN Экземпляр ON Издание.Код_издания = Экземпляр.Код_издания) INNER JOIN Выдача ON Экземпляр.Код_экземпляра = Выдача.Код_экземпляра SET Выдача.Пеня = (Выдача!Когда_вернул-(Выдача!Дата_выдачи+Вид_издания!На_какой_срок)) *Вид_издания! Начисляемая_пеня WHERE ((([Выдача]![Когда_вернул]-([Выдача]![Дата_выдачи]+ [Вид_издания]! [На_какой_срок]))>0) AND (([Выдача]![Пеня])=0) AND (([Выдача]![Заплатил_пеню?])=False));
Шаг 2
: Выполнение запроса Аннулировать пеню (2)
Таблица Выдача
|
Номер_билета Код_экземпляра Дата_выдачи Когда_вернул Пеня Заплатил_пеню? |
Данный запрос, описанный в SQL:
UPDATE ((Вид_издания INNER JOIN Издание ON Вид_издания.Код_вида_издания = Издание.Код_вида_издания) INNER JOIN Экземпляр ON Издание.Код_издания = Экземпляр.Код_издания) INNER JOIN Выдача ON Экземпляр.Код_экземпляра = Выдача.Код_экземпляра SET Выдача.[Заплатил_пеню?]
= True WHERE ((([
Выдача
]![
Когда
_
вернул
]) Is Not Null) AND (([
Выдача
]![
Пеня
])=0));
Вернуть_книгу
– запрос на обновление: если читатель возвращает книгу, то данный запрос изменяет везде данные, что книга имеется в библиотеке в данный момент (не на руках).
На_руках_ли_книга?
– запрос на обновление: проверяется, есть ли книга в фонде библиотеке в данный момент или она на руках.
Создать_таблицу
– запрос на создание таблицы: создается временная таблица Заплатить
с последним заплатившим пеню.
Оплата_пени
– запрос на обновление: сведения из таблицы Заплатить
заносятся в соответствующие списки об оплате пени.
6. Реализация пользовательского интерфейса средствами форм
1. Разберем подробно разработку Главной формы
и ее вкладки Просроченные книги
. Эта вкладка предназначена для просмотра информации о тех книгах, которые читатель просрочил и не заплатил пеню.
1.1) Подсхема данных:
1.2) Наилучший тип формы для построения:
В данной форме должна выдаваться информация в зависимости от выбора пользователем читателя, а это невозможно сделать с помощью составной формы. Такой тип формы, как связь по кнопке нерациональна, так как это составляет сложности для неопытных пользователей и весьма неудобно. Поэтому самым целесообразным является вложенный тип формы – пользователь может выбирать необходимого читателя и при этом сразу же сможет увидеть связанную с ним информацию.
1.3) Источники записей формы:
Для Главной формы
источником записей являются следующие таблицы:
Улицы
, Адрес
и Читатели
.
Для вложенной формы Просроченные_подчиненная форма форма
источником записей являются следующие таблицы:
Заглавия,
Вид_издания, Авторы, Издание, Экземпляр, Читатели
и Выдача.
1.4) Связанные поля форм:
Вложенная форма Просроченные_подчиненная форма
и Главная форма
:
Подчиненные поля: Номер_билета.
Основные поля: Номер_билета.
1.5) Поля базы данных, которые отражены в форме:
Вложенная форма Просроченные_подчиненная форма:
Авт_знак
Автор
Заглавие
Год_издания
Вид_издания
Пеня
Главная форма:
Фамилия
1.6) Форма
7. Разработка отчетов
Фонд_библиотеки
– отчет, в котором содержится информация обо всех книгах, рассортированная по авторам.
Подсхема данных:
1.2) Тип отчета:
составной.
1.3) Источник записей:
Издательства, Заглавия, Авторы, Издание.
1.4) Уровни группировки:
Поле/выражение |
Заголовок группы |
Примечание группы |
Автор |
Да |
Нет |
Код_автора |
Да |
Нет |
1.5) Поля:
Заголовок группы 'Автор'
Автор
Заголовок группы 'Код_автора'
Авт_знак
Область данных
Библ_шифр
Заглавие
Издательство
Место_издания
Год_издания
1.6) Сам отчет:
10 читателей
– отчет, в котором представлена диаграмма с десятью читателями, которые брали в библиотеке наибольшее количество книг.
Читатели
– отчет, в котором содержится информация обо всех читателях библиотеки и книгах, которые они брали: ФИО читателя, книга, которую он брал, дата выдачи).
8. Реализация алгоритмов обработки информации программными средствами
8.1 Реализация алгоритмов средствами макросов
Главная_форма. Оплата
– макрос позволяет читателю заплатить пеню и не переплатить.
а) Сообщение
Сообщение:
Вы ввели слишком большую сумму.
Сигнал:
Да
Тип:
Информационное
Заголовок:
Слишком большая сумма
Макрокоманда выдает сообщение, если сумма, заплаченная пользователем, больше той, которую следует заплатить.
б) КЭлементуУправления
Имя элемента:
[ОплатитьДолг]
Происходит переход ко вкладке ОплатитьДолг
.
в) КЭлементуУправления
Имя элемента:
[Заплачено]
Происходит переход к элементу Заплачено
вкладки ОплатитьДолг
.
г) ОткрытьЗапрос
Имя запроса:
Создать_таблицу
Режим:
Таблица
Режим данных:
Изменение
Макрокоманда открывает запрос на создание таблицы о сумме, которую заплатил читатель.
При выполнении следующих макрокоманд необходимо, чтобы сумма, которую заплатил читатель, была меньше той, которую следует заплатить.
д) ОткрытьЗапрос
Имя запроса:
Создать_таблицу
Режим:
Таблица
Режим данных:
Изменение
Макрокоманда открывает запрос на создание таблицы о сумме, которую заплатил читатель.
е) ОткрытьЗапрос
Имя запроса:
Оплата_пени
Режим:
Таблица
Режим данных:
Изменение
Макрокоманда открывает запрос на обновление той суммы, которую внес читатель и которую ему осталось оплатить.
Главная_форма.Выбор_читателя
– реагирование системы на выбор пользователем определенного читателя.
Главная_форма.Пеня
, Главная_форма.Пеня_присвоение
– переход на вкладку с оплатой пени и занесение данных в нужные ячейки.
Главная_форма.Переход
– вспомогательный макрос для перехода на последнюю запись при оплате пени пользователем.
Главная_форма.Возврат_книги
– возвращение читателем книги, снятие ее с рук, подсчет пени для читателя и убирание тех, кто заплатил.
Главная_форма.На_руках_ли
– открытие запроса На_руках_ли?
, что позволяет проверить, какие книги на руках.
Главная_форма.Закрытие_формы
– закрытие формы Главная форма
и применение запроса Аннулировать_долг(2)
, что позволяет изменить в таблицах долг читателя, если он оплатил его.
Адреса_клиентов.Кнопки
– макрос по выбору читателей по заданной первой букве фамилии.
Сумма_оплаченная
– переход к выбранному читателю из возможных
Поиск_книги.Фильтр
– применение фильтра на основании заданных параметров.
Поиск_книги.Ошибка
– выдается сообщение, если читатель пытается взять книгу, которая на руках у другого человека.
Поиск_книги.Взять
– вспомогательный макрос для поиска книги.
Поиск_книги.Взял
– закрывает форму Поиск_книги
и записывает выбранную книгу за читателем.
Поиск_книги
.Error – выдает сообщение, если при поиске книги по критериям читатель указал более или менее пяти критериев.
8.2 Реализация алгоритмов средствами Visual Basic
Следующий алгоритм предназначен для перехода на форму Адреса_клиентов
после нажатия кнопки Просмотр всех читателей
на главной форме:
Private Sub
ВсеЧитатели
_Click()
On Error GoTo Err_
ВсеЧитатели
_Click
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = ChrW(1040) & ChrW(1076) & ChrW(1088) & ChrW(1077) & ChrW(1089) & ChrW(1072) & ChrW(95) & ChrW(1082) & ChrW(1083) & ChrW(1080) & ChrW(1077) & ChrW(1085) & ChrW(1090) & ChrW(1086) & ChrW(1074)
DoCmd.OpenForm stDocName, , , stLinkCriteria
Exit_
ВсеЧитатели
_Click:
Exit Sub
Err_
ВсеЧитатели
_Click:
MsgBox Err.Description
Resume Exit_
ВсеЧитатели
_Click
End Sub
Кроме того, в автоматизированной системе “Библиотека” присутствуют и другие события, написанные средствами Visual Basic:
Событие, позволяющее подсчитать пеню читателя.
Событие, предназначенное для открытия формы Поиск_книги
после нажатия кнопки Поиск_книги
.
Событие, которое происходит после выбора читателем пяти критериев при поиске книги. Оно позволяет вывести на экран только те критерии, которые выбрал пользователь и после производить действия с ними.
Событие, которое происходит при нажатии читателем при выборе понравившейся ему книги.
Событие, которое скрывает все поля для ввода критериев при запуске формы Поиск_книги
или повторном поиске книги.
9. Разработка приложения пользователя
Главной формой базы данных “Библиотека” является Главная форма
, содержащая в себе 6 вкладок.
Вкладка Сведения о книгах
.
На данной вкладке представлена информация обо всех тех книгах, которые брал тот читатель, чья фамилия выбрана в заголовке формы.
Вкладка Просроченные книги
содержит информацию о просроченных книгах и о той сумме, которую следует заплатить (поле Пеня
). При двойном нажатии на данное поле происходит переход на вкладку Оплатить долг
.
Курсор автоматически устанавливается в последнее поле, счетчик увеличивается на единицу, датой оплаты ставится текущее число, а вверху формы автоматически проставляется текущая сумма задолженности. После того, как пользователь введет сумму, которую он хочет оплатить, ему следует нажать кнопку Рассчитать
.
Вкладка Какие книги на руках
отвечает за информацию о тех книгах, которые находятся на руках у читателя (если таковые имеются).
Вкладка Сведения о читателе
содержит информацию о выбранном читателе. При нажатии кнопки Просмотр всех читателей
открывается форма Адреса_клиентов
, в которой представлена информация обо всех читателях с их адресами и телефонами.
И последняя вкладка, Найти и взять книгу
, содержит данные о тех книгах, которые читатель брал. При нажатии на кнопку Поиск книги
откроется форма Поиск_книги
, на которой читатель может найти книгу по заданным параметрам и взять ее.
Приложения
1. Формы
2. Отчеты