Курсовая работа Тема: Работа в среде Microsoft Office (Access), разработка приложения

Вид материалаКурсовая

Содержание


Постановка задачи
Видение в суть и структуру приложения
Разработка таблиц, ключей и связей
Разработка Форм
О техническом задании
Автоматизация приложения при помощи VBA
Рецензия от научного руководителя
Подобный материал:


Курсовая работа


Тема: Работа в среде Microsoft Office (Access), разработка приложения

Описание проекта созданного в 3 семестре в рамках индивидуального задания по дисциплине Информационные системы в экономике


Выполнил студент группы МЭК: Трифсик Григорий


Москва 2020205


Оглавление



Постановка задачи: 3

Видение в суть и структуру приложения 4

Разработка таблиц, ключей и связей 6

Разработка Форм 9

О техническом задании 10

Автоматизация приложения при помощи VBA 13

Тестирование 25



Постановка задачи:



Для библиотеки Международного Института XXI века требуется разработать приложение позволяющее автоматизировать работу библиотекаря.


Требования к приложению:

- работа в среде Microsoft


Описание приложения:

Библиотека работает на основе устава. Основные положения устава:
  1. Список пользователей формирует методический отдел или отдел кадров
    1. 01\09 в библиотеку подается список пользователей на текущий учебный год.
    2. Если нет новых или убывших пользователей, список не подается
    3. При отчислении студента или уходе преподавателя, лицо удаляется из приложения библиотеки после подписания приказа или обходного листа
  2. Библиотекарь заносит полную информацию о книге имеющейся в наличие в минимальном количестве одна штука. Информация о книге находится на титульном листе книги. При поступлении следующей партии этой же книги формируются только личные номера книг, привязанные к введенному ISBN номеру.
  3. Текущая работа библиотекаря по приему и выдачи книг.
  4. В конце года библиотекарь, к установленной методическим отделам дате, формирует список должников, пользователей, не сдавших всех книг к заданной дате. Список печатается и за печатью и подписью подается в методический отдел для принятия административных мер.


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


Функции приложения:
  1. регистрация новых книг
    1. регистрация данных о книге
    2. регистрация всей партии этой книги (присвоение личных номеров каждой книге)
  2. регистрация пользователей библиотекой (список из методического отдела)
  3. выдача \ принятие зарегистрированных книг (текущая работа библиотекаря)
  4. создание отчетов



План разработки приложения:
  1. утвердить количество и сущность таблиц
  2. определить ключевые поля таблиц
  3. разработать интерфейсы ввода \ вывода данных
  4. разработать запросы, требуемые заказчиком
  5. разработать Администраторскую часть приложения
  6. максимально уменьшить возможность ошибок пользователем
  7. отладка приложения
  8. обработка ошибок приложения



Видение в суть и структуру приложения



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

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


Так будут связанные таблицы, образующее целостность данных.




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

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


Разработка таблиц, ключей и связей



Таблицы приложения:

  1. Users – данные о пользователях
  2. Books – данные о книгах
  3. BooksOfUsers – инвентарные номера книг записанных на пользователей
  4. InventNumbers – инвентарные номера книг зарегистрированных в библиотеке, вспомогательная таблица для таблицы Books.
  5. ServInventNumbers – вспомогательная таблица для выдачи книг


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

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

Непосредственно для хранения данных необходимо четыре таблицы:

Users будет хранить всю информацию об абонентах. Информация приходит из методического отдела, поэтому проверять ее нет необходимости. Ключом этой таблице целесообразно назначить автоматический счетчик. Таблица Books будет хранить информацию о книгах, информация поступает вместе с партией книг и содержится в сопроводительной документации и на самой книге. Каждой книге министерство печати присваивает идентификационный номер ISBN. По данному номеру можно однозначно идентифицировать книгу, поэтому целесообразно назначить его ключом в этой таблице. Таблица InventNumbers будет содержать личные номера книг поступивших в библиотеку. Личные номера книг повторяться не могут, поэтому это поле будет назначено ключевым в таблице InventNumbers. Таблица BooksOfUsers хранит порядковые номера читателей и личные номера книг, которые они взяли. Как уже было сказано, личные номера книг не могут повторяться, поэтому это поле также будет ключевым в этой таблице.

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


Связанные таблицы приложения. Выделенные поля в таблицах это ключевые поля.





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


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


Нам потребуется две основных формы ввода-вывода. Первая для кыниг. Она должна содержать текстовые поля ввода для ввода информации о книге и переход на второй уровень заполнения, присвоение личных номеров книгам. Личные номера должен генерировать компьютер по входным данным. Входные данные это, в нашем случае, два параметра количество новых книг и ISBN которому они будут принадлежать. Вводить ISBN второй раз с клавиатуры нецелесообразно поэтому, применяя методы VBA, перенесем его из таблицы первого уровня и запретим его изменение в окне формы второго уровня. Таким образом, нам останется ввести только количество книг поступивших в данной партии.


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


Разработка Форм




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


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

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

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

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


О техническом задании


Очень важно, точно оговорить заранее все условия и требования заказчика. Если посреди разработки приложения будет выяснена не точность, это может дорого стоить. Одна такая неточность была у меня в процессе разработки. Это было связано с ключевым полем таблицы Books, полем ISBN. В начале было обусловлено, что у книги есть уникальный номер и это номер УДК. Просмотрев несколько десятков различных книг, я пришел к выводу, что для хранения этого номера мне хватит длинных целых чисел. Номера были небольшие, что насторожило меня, так как книг выходит миллионы каждый год, если не месяц, а их уникальные номера маловаты. Наш договор не фиксировался на бумаге, что тоже повлияло на последовавшую далее неразбериху. В конечном итоге, когда приложение было почти завершено, я узнал что уникальный номер книги не УДК, а ISBN и тип его данных текст, так как там может встретиться значок или буква. По этой причине пришлось переделать весь проект. Но это было ценным урокам.


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


Подведем некоторые итоги. Для успешного создания приложения необходимо: первое, четко продумать и формализовать задачу, опираясь на документированные данные заказчика. Принять решение в какой среде, и какими средствами будет создаваться приложение. Разработать и протестировать костяк приложения, в нашем случае это связанные таблицы в среде MS Office Access. После тестирования таблиц на простых и сложных примерах, я перешел к разработке автоматизации приложения. В моем случае, надо написать код на VBA при помощи которого будут генерироваться личные номера книг.


Разработка автоматизации проходит в Access FORMS VBA.

Алгоритм:
  1. нажимается кнопка главной формы Books
  2. если поле ISBN главной формы Books не пусто (книга зарегистрирована)
    1. открыть поверх главной формы новую форму для ввода количества новых книг
    2. ISBN номер переносится на второй уровень с первого
    3. вводится количество новых книг в поле на новой форме n
    4. из таблицы InventNumbers, из поля InventNum извлекается максимальный номер и присваивается рабочей переменной плюс 1
    5. организуется цикл for для создания новых n личных номеров и записи их на текущий ISBN
    6. присваиваем текущему ISBN n новых номеров и заносим их в таблицу InventNumbers
  3. иначе сообщение об ошибке, попытка присвоить личные номера не зарегистрированной книге.



Первый уровень формы регистрации новой книге.





Для успешной организации алгоритма приведенного выше понадобиться написать ряд пользовательских функций и ухищрений. Например, есть два рациональных варианта получить максимальный личный номер книги. Первый это организовать функцию поиска максимального числа в заданной таблице и заданном поле. Но это неэффективно при больших массивах информации. Есть более быстрый способ. Для его реализации необходимо создать служебную таблицу. Она не будет связана с другими таблицами приложения, но будет использоваться как хранилище служебных данных не связанных друг с другом. В соответствии с правилами такие данные должны храниться в зашифрованном виде в отдельных файлах. Но удобней всю необходимую информацию хранить вместе. Я пробовал работать с файлами разных расширений. Проблема заключается в том, что если что-то делать профессионально, то придется все делать по правилам. В случае с файлами для грамотной и хорошей работы потребуется писать программу развертки SETUP, иначе эти файлы придется создавать вручную и заносить в них начальные значения, или в лучшем случае писать код на VBA и управлять им с помощью кнопок формы. А это дело не благодарное, много раз это будет забываться при отладке и пользовании приложения. К тому же пользователя надо будет оповестить об этом, что б он ненароком не удалил эти файлы, так как все привыкли, что приложения MS Office работают без вспомогательных файлов, это будет не просто. Организация таблицы, которая не будет использоваться, по прямому назначению решит разом все проблемы. Будет быстродействие, но за это понадобиться заплатить двумя вещами. Первое и самое важное это защитить эту таблицу от пользователя. По причине того, что она не предназначена для такова рода использования, это может создать проблемы, но в ходе долгих поисков решение было найдено.

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


Автоматизация приложения при помощи VBA




Приведем код на VBA, автоматизирующий работу приложения.

Ниже приведены только основные коды.


Эта процедура используется для авто заполнения поля таблицы Books «количества книг»

Sub AddToTable(ID As String, num As Long)

' добавляет в таблицу «Книги» в поле «Количество книг»

Dim cn As ADODB.Connection

Dim rcd As New ADODB.Recordset


Set cn = CurrentProject.Connection

rcd.Open "Books", cn, adOpenKeyset, adLockOptimistic, adCmdTable

rcd.MoveFirst

Do While Not rcd.EOF

If rcd![IDBook] = ID Then

rcd![Всего] = rcd![Всего] + num

End If

rcd.MoveNext

Loop

End Sub


Sub DelNumber()

' удаляет число из таблицы MAXINVENT

Dim cn As ADODB.Connection

Dim rcd As New ADODB.Recordset

Set cn = CurrentProject.Connection

rcd.Open "MAXINVENT", cn, adOpenKeyset, adLockOptimistic, adCmdTable ' сослаться на таблицу rcd.MoveLast

rcd.Delete

rcd.Update

End Sub


Sub InNumber(a)

‘Вставляет MaxInventNumber в таблицу MAXINVENT

Dim cn1 As ADODB.Connection

Dim rcd1 As New ADODB.Recordset

Set cn1 = CurrentProject.Connection

rcd1.Open "MAXINVENT", cn1, adOpenKeyset, adLockOptimistic, adCmdTable

rcd1.AddNew

rcd1![MaxInventNumber] = a

rcd1.Update

End Sub


Function OutNumber()

Функция возвращающая MaxInventNumber

Dim cn1 As ADODB.Connection

Dim rcd1 As New ADODB.Recordset


Set cn1 = CurrentProject.Connection

rcd1.Open "MAXINVENT", cn1, adOpenKeyset, adLockOptimistic, adCmdTable

rcd1.MoveFirst

OutNumber = rcd1![MaxInventNumber]

End Function


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


Private Sub Кнопка9_Click()

' присвоить n последовательных номеров начиная с мах инвент номера

Dim minInv As Long ' номер из таблицы, с которого+1 присваиваются инвент №


Dim i As Long, j As Long ' j=minInv + 1

Dim n As Long ' количество книг, вводится из формы

Dim ISBN As String ' ID книги

Dim max_invent_number As Long ' номер до которого включительно присваиваются инвент №

Dim db As DAO.Database

Dim rcd As DAO.Recordset

If Forms![AddBooks-2].Поле6 <> "" Then

n = Val(Forms![AddBooks-2].Поле6)

ISBN = Forms![AddBooks-2].Поле2

minInv = OutNumber

j = minInv + 1

max_invent_number = minInv + n

For i = j To max_invent_number

Set db = CurrentDb

Set rcd = db.OpenRecordset("InventNumbers", dbOpenDynaset, dbappendonly)

With rcd

.AddNew

![InventNum] = i

![IDBook] = ISBN

.Update

.Close

End With

Forms![AddBooks-2].Список0.AddItem i

Next i

DoCmd.Save

AddToTable ISBN, n

Else

MsgBox " Введите Количество Книг", vbCritical

End If

DelNumber

InNumber (max_invent_number)

End Sub


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

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


Простые интерфейсы проще создать при помощи мастера форм, он создает строгие классические формы вполне приемлемые для нашей задачи.


Второй уровень формы регистрации новой книги.





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

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


Алгоритм формы выдача-прием книг:

    1. открываем форму
    2. курсор автоматически устанавливается на поле фамилия абонента
    3. нажимаем кнопку на панели инструментов поиск
    4. в форме поиска ввести нужную фамилию или первые буквы
    5. появится сложноподчиненная форма, первого уровня



    1. на ней если надо выдать книгу, то после выбора книги пользователем, личный номер книги вводится в соответствующее поле
    2. нажать кнопку расширенный просмотр текущих книг
    3. появиться такая же форма, только защищенная от изменений и с полной информацией о книгах личные номера, которых до этого были введены.
    4. Проварив данные, выданные компьютером о книге, которую библиотекарь держит в руках, с фактическими данными на титульных листах книги библиотекарь убедившись, что выдает то, что регистрирует, нажимает кнопку сохранить.
    5. После чего возвращается обратно в главное меню.


На этом этапе надо учитывать, что личные номера вводятся в форму непосредственно из книги, поэтому любая ошибка ввода личного номера это ошибка не машины, а человека при вводе, поэтому при стандартной ошибке среды о повторяющемся значении ключевого поля следует выдать сообщение, что данная книга уже выдана и произошла ошибка ввода. Это однозначно так, по той причине таблица InventNumbers и таблица BooksOfUsers связана один к одному, то есть в каждой из таблиц запись может встречаться только один раз. По этой причине, сообщение о попытке ввода повторных записей в ключевое поле должно быть трактовано однозначно.

После выполнения этой части следует протестировать эту часть приложения.


Форма выдачи-приема книг.





в этой форме водиться только личный номер книги и при нажатии кнопки «Расширенно» производиться визуальный контроль номера книги и самой книги соответствует ли номер выдаваемой книги.




Второй уровень формы выдача-прием книги. Режим визуального контроля.


Алгоритм списания книги с абонента аналогичен выдачи книги. Производиться в этой же форме. Порядок действий такой же. Находится пользователь среди представленного списка личных номеров книг записанного на данного пользователя номер книги, которые конкретно принесены в библиотеку для сдачу. Найдя нужный номер, при помощи встроенной функции «Найти…» или обнаружив его, визуально выделяем его и удаляем. Сохраняем изменения.

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

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


Создав сложные формы, использующие коды автоматизации VBA создаем простые формы при помощи мастера форм.


Всего нам понадобятся формы:

  1. AddBooks
  2. AddUsers
  3. Books&InventNumbers
  4. MainMenu
  5. ServeCodeInput
  6. UsersTakingBooks


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

Важное замечание. Все формы должны быть связаны друг с другом при помощи кнопок перехода. Это обеспечивает целостность работы с формами. Форма MainMenu используется как главное меню. Из нее есть последовательный, продуманный доступ ко всем пользовательским формам. Из всех форм есть прямой доступ к форме MainMenu, это похоже на гиперссылку Home на сайтах.

Форма ServeCodeInput дает доступ, при наличии пароля, к администраторской части приложения.

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





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


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


Для нашего приложения необходимо задать следующее возможности:

  1. обнуление таблиц
  2. восстановление-удаление стандартных пользовательских панелей


Главное служебное меню.




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


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

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

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


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


Тестирование




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


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


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

Для поиска и отбора, данных я решил воспользоваться встроенным поиском по полю и фильтром. Этот метод очень эффективен и прост в использовании. Работает во всех приложениях MS office. Фильтром так же не сложно пользоваться, при условии, что с данными не надо делать различных манипуляций и математических действий. Для того чтобы воспользоваться этим, методом не обходимо открыть форму, в которой предполагается, что храниться нужные данные и включить фильтр. На всех полях формы появится возможность выбора из списка. Выбрать, что требуется по всем необходимым полям и нажать кнопку отфильтровать, что и сформирует список необходимой информации.





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


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

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


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


Рецензия от научного руководителя:


> Безусловно хорошая работа

Работа решает практическую задачу

Работа выполнена самостоятельно на 100 %

Работе сопутствовала большая работа по самостоятельному освоению Access


Предложения

Использовать стили заголовков и сделать Оглавление

Оглавление поможет лучше структурировать работу, сделать изложение более логичным

Перечитать и убрать ошибки в правописании

Необходимо создать отдельный параграф по Программе тестирования


Григорий,

мне очень приятно с Вами работать.

С моей точки зрения, это идеальный вариант работы в высшей школе.

В attachment Ваша работа. Примечаниях - мои заметки.

С наилучшими пожеланиями,

Дм.Куприянов