Список
Код_улицы
Код_улицы
читателей
Улица_проживания
Улица
Дом
Дом
Квартира
Квартира
Код_адреса
Код_адреса
Номер_билета
Номер_билета
Фамилия_читателя
Фамилия
Имя
Имя
Отчество
Отчество
Телефон
Телефон
Код_ведомости
Код_ведомости
Дата_оплаты
Дата_оплаты
Заплачено
Заплачено
Дата_выдачи
Дата_выдачи
Когда_вернул
Когда_вернул
Пеня
Пеня
Заплатил_пеню?
Заплатил_пеню?
б) зависимые реквизиты
Описательные реквизиты |
Ключевые реквизиты |
|
Код_автора |
Код_издания |
|
Автор |
Код_автора |
|
Авт_знак |
Код_автора |
|
Код_заглавия |
Код_издания |
|
Заглавие |
Код_заглавия |
|
Код_вида_издания |
Код_издания |
|
Вид_издания |
Код_вида_издания |
|
На_какой_срок |
Код_вида_издания |
|
Исчисляемая_пеня |
Код_вида_издания |
|
Код_издательства |
Код_издания |
|
Издательство |
Код_издательства |
|
Место_издания |
Код_издательства |
|
Код_издания |
Код_экземпляра |
|
Библ_шифр |
Код_издания |
|
Год_издания |
Код_издания |
|
Аннотация |
Код_издания |
|
Код_экземпляра |
Номер_билета |
|
На_руках? |
Код_экземпляра |
|
Код_улицы |
Код_адреса |
|
Улица |
Код_улицы |
|
Дом |
Код_адреса |
|
Квартира |
Код_адреса |
|
Код_адреса |
Номер_билета |
|
Номер_билета |
Код_ведомости |
|
Фамилия |
Номер_билета |
|
Имя |
Номер_билета |
|
Отчество |
Номер_билета |
|
Телефон |
Номер_билета |
|
Код_ведомости |
------------------- |
|
Дата_оплаты |
Код_ведомости |
|
Заплачено |
Код_ведомости |
|
Дата_выдачи |
Номер_билета |
|
Когда_вернул |
Номер_билета |
|
Пеня |
Номер_билета |
|
Заплатил_пеню? |
Номер_билета |
в) группировка реквизитов
Реквизиты |
Ключ |
Имя инф. объекта |
Описание |
|
Автор |
Авторы |
|||
Авт_знак |
||||
Код_автора |
1 |
|||
Заглавие |
Заглавия |
|||
Код_заглавия |
1 |
|||
Вид_издания |
Вид_издания |
|||
На_какой_срок Начисляемая_пеня Код_вида_издания |
1 |
|||
Издательство |
Издательства |
|||
Место_издания Код_издательства |
1 |
|||
Код_вида_издания |
Издание |
|||
Код_автора |
||||
Заглавие Библ_шифр Код_издательства Год_издания Аннотация Код_издания |
1 |
|||
Код_издания |
Экземпляр |
|||
На_руках? |
||||
Код_экземпляра |
1 |
|||
Улица |
Улица |
|||
Код_улицы |
1 |
|||
Улица |
Адрес |
|||
Дом |
||||
Квартира |
||||
Код_адреса |
1 |
|||
Фамилия |
Читатели |
|||
Имя |
||||
Отчество |
||||
Код_адреса Телефон |
||||
Номер_билета |
1 |
|||
Номер_билета |
Выдача |
|||
Код_экземпляра Дата_выдачи Когда_вернул Пеня Заплатил_пеню? |
||||
Код_читателя Код_экземпляра Дата_оплаты Заплачено Код_ведомости |
Ведомость |
3.2 Структура информационных объектов базы данных
Авторы
№ |
Название столбца |
Тип |
Ключ |
|
1 |
Автор |
текстовый |
||
2 |
Авт_знак |
текстовый |
||
3 |
Код_автора |
счетчик |
Заглавия
№ |
Название столбца |
Тип |
Ключ |
|
1 |
Заглавие |
текстовый |
||
2 |
Код_заглавия |
счетчик |
Вид_издания
№ |
Название столбца |
Тип |
Ключ |
|
1 |
Ви_издания |
текстовый |
||
2 |
На_какой_срок |
числовой |
||
3 |
Начисляемая_пеня |
числовой |
||
4 |
Код_вида_издания |
счетчик |
Издательства
№ |
Название столбца |
Тип |
Ключ |
|
1 |
Издательство |
текстовый |
||
2 |
Место_издания |
текстовый |
||
3 |
Код_издательства |
счетчик |
Издание
№ |
Название столбца |
Тип |
Ключ |
|
1 |
Код_вида_издательства |
числовой |
||
2 |
Код_автора |
числовой |
||
3 |
Заглавие |
числовой |
||
4 |
Библ_шифр |
текстовый |
||
5 |
Код_издательства |
числовой |
||
6 |
Год_издания |
числовой |
||
7 |
Аннотация |
Поле MEMO |
||
8 |
Код_издания |
счетчик |
Экземпляр
№ |
Название столбца |
Тип |
Ключ |
|
1 |
Код_издания |
числовой |
||
2 |
На_руках? |
логический |
||
3 |
Код_экземпляра |
счетчик |
Улицы
№ |
Название столбца |
Тип |
Ключ |
|
1 |
Улица |
текстовый |
||
2 |
Код_улицы |
счетчик |
Адрес
№ |
Название столбца |
Тип |
Ключ |
|
1 |
Улица |
числовой |
||
2 |
Дом |
текстовый |
||
3 |
Квартира |
числовой |
||
4 |
Код_адреса |
счетчик |
Читатели
№ |
Название столбца |
Тип |
Ключ |
|
1 |
Фамилия |
текстовый |
||
2 |
Имя |
текстовый |
||
3 |
Отчество |
текстовый |
||
4 |
Код_адреса |
числовой |
||
5 |
Телефон |
текстовый |
||
6 |
Номер_билета |
счетчик |
Ведомость
№ |
Название столбца |
Тип |
Ключ |
|
1 |
Код_читателя |
числовой |
||
2 |
Код_экземпляра |
числовой |
||
3 |
Дата_оплаты |
дата/время |
||
4 |
Заплачено |
числовой |
||
5 |
Код_ведомости |
счетчик |
Выдача
№ |
Название столбца |
Тип |
Ключ |
|
1 |
Номер_билета |
числовой |
||
2 |
Код_экземпляра |
числовой |
||
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. Отчеты
- 3.2 Структура информационных объектов базы данных
- 3.3 Связи между информационными объектами
- 4. Проектирование алгоритмов обработки данных
- 5. Разработка запросов для корректировки и выборки данных
- 5.1 Запросы на выборку данных
- 5.2 Корректировка данных средствами запросов
- 6. Реализация пользовательского интерфейса средствами форм
- 7. Разработка отчетов
- 8. Реализация алгоритмов обработки информации программными средствами
- 8.1 Реализация алгоритмов средствами макросов
- 8.2 Реализация алгоритмов средствами Visual Basic
- 9. Разработка приложения пользователя
- Список