Курсовая работа: Разработка приложения Библиотека

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

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

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

Вторым вариантом СУБД рассмотрим MySQL. MySQL считается лучшей СУБД после Oracle, поддерживается большим количеством операционных систем. Её преимущества заключаются в том, MySQL имеет бесплатный доступ, частые обновления функционала, простой и понятный интерфейс, высокую производительность, а также хорошую безопасность.

Ещё один из вариантов СУБД является программный продукт MicrosoftSQL-сервер. Интересными особенностями MicrosoftSQL-сервера являются доступ визуализации на мобильных устройствах и взаимодействие с продуктами Microsoft. MicrosoftSQL-сервер также имеет высокую производительность и интуитивно понятный интерфейс. Недостатком же является высокая стоимость.

Итоговое сравнение СУБД приведено в таблице 1.2

Таблица 1.2 - Сравнительный анализ СУБД

Характеристика

Название СУБД

Высокая производительность

Надёжность

Постоянные обновления от разработчиков

Бесплатный доступ

Oracle

+

+

+

-

MySQL

+

+

+

+

MicrosoftSQL- сервер

+

+

+

-

Как можно заметить из таблицы, все рассмотренные СУБД имеют ряд положительных критериев. Но решающим факторов выбора СУБД является бесплатный доступ к продукту. Таким образом, для разработки ПО целевой была выбрана MySQL.

1.5 Физическое проектирование базы данных

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

«Хранимая запись - совокупность связанных элементов данных, соответствующих одной или нескольким логическим записям. Хранимая запись (физическая запись) состоит из двух частей: служебной части и информационной. Служебная часть хранимой записи используется для идентификации записи, задания ее типа, хранения признака удаления, для хранения указателей на элементы записи, идентификатора длины записи, для установления структурных ассоциаций между записями, для кодирования значений элементов. Пользовательские программы не имеют доступа к служебной части физической записи. Поля информационной части хранимой записи содержат значения элементов данных» [5].

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

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

Таблица 1.3 - Таблица физического проектирования БД для MySQL

Наименование поля

Содержание поля

Тип поля

Размер поля

Значение по умолчанию

Условие на значение

Ключ или индекс

Перечень жанров (genres)

id

Код жанра

INT (Автоинкремент)

11

Уникальное NOTNULL

ПК

name

Название жанра

VARCHAR

50

NOTNULL

Перечень издателей (publishers)

id

Код издателя

INT (Автоинкремент)

11

NOTNULL

ПК

name

Наименование издателя

VARCHAR

50

NOTNULL

city

Город издателя

VARCHAR

50

NOTNULL

Перечень авторов (autors)

id

Код автора

INT (Автоинкремент)

11

Уникальное NOTNULL

ПК

name

Наименование автора

VARCHAR

50

NOTNULL

Перечень книг (books)

id

Код книги

INT (Автоинкремент)

11

ПК

name

Наименование книги

VARCHAR

50

NOTNULL

Id_publisher

Код издателя

INT

11

NOTNULL

ВК

Id_autor

Код автора

INT

11

NOTNULL

ВК

count

Количество

INT

11

NOTNULL

Сопоставление книга-жанры (book_genres)

Id_book

Идентификатор книги

INT

11

ВК

Id_genre

Название жанра

INT (Автоинкремент)

11

ВК

Перечень читательских билетов (readers_tickets)

id

Номер чит. билета

INT (Автоинкремент)

11

ПК

phone_number

Телефонный номер

VARCHAR

50

NOTNULL

adress

Адрес

VARCHAR

50

NOTNULL

surname

Фамилия

VARCHAR

50

NOTNULL

name

Имя

VARCHAR

50

NOTNULL

patronymic

Отчество

VARCHAR

50

Перечень работников библиотеки (workers)

id

Код работника

INT (Автоинкремент)

11

ПК

surname

Фамилия

VARCHAR

50

NOTNULL

name

Имя

VARCHAR

50

NOTNULL

patronymic

Отчество

VARCHAR

50

Перечень пользователей (users)

id

Код пользователя

INT (Автоинкремент)

11

ПК

login

Логин

VARCHAR

50

NOTNULL

password

Пароль

VARCHAR

50

NOTNULL

id_ticket

Идентификатор чит. билета

INT

11

ВК

id_profile

Идентификатор работника

INT

11

ВК

type

Тип пользователя

INT

11

Перечень выданных книг (granted_books)

id

Код выдачи

INT (Автоинкремент)

11

ПК

id_ticket

Идентификатор чит. билета

INT

11

NOTNULL

ВК

id_book

Идентификатор книги

INT

11

NOTNULL

ВК

granted_date

Дата выдачи

DATE

NOTNULL

return_date

Дата возвращения

DATE

NOTNULL

returned

Книга возвращена?

TINYINT

1

NOTNULL

Перечень зарезервированных книг (reserved_books)

id

Код выдачи

INT (Автоинкремент)

11

ПК

id_ticket

Идентификатор чит. билета

INT

11

NOTNULL

ВК

id_book

Идентификатор книги

INT

11

NOTNULL

ВК

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

Рисунок 1.16 - Физическая модель базы данных

1.6 Выводы по главе

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

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

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

2.1 Структура программной системы

Для приложения было создано 1 форма:

- «Родительская форма» (MyLibrary).

Так же было разработано 11 элементов управления (User Control):

- «Добавить чит. билет» (AddTicket);

- «Добавить/изменить чит. билеты» (AddTickets);

- «Добавление/удаление сотрудника/изменение данных о сотруднике» (Admin);

- «Авторизация пользователя» (Autorization);

- «Регистрация пользователя» (Registration);

- «Добавление/удаление/изменение книг и атрибутов» (BooksDesigner);

- «Добавление выданных книг/формирование отчёта/отметить возвращенные книги» (GrantedBooks);

- «Просмотр каталога книг/резервация книг» (Library);

- «Просмотр/редактирование списка зарезервированных книг» (ReservedBooks);

- «Родительский элемент управления - имитатор PageControl» (Worker);

- «Графики завозимых жанров и авторов» (Charts).

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

Если пользователь авторизовался под учётной записью работника, то ему открывается возможность открывать вкладки «Добавление книг» и «Работник». В первой вкладке можно редактировать книги и их атрибуты. Можно добавлять, удалять книги, изменять информацию о них, увеличивать и уменьшать их количество. Такие же операции, кроме изменения количества, можно производить и с тремя списками атрибутов: «Жанры», «Авторы», «Издатели». Что список книг, что списки атрибутов отображаются через DataGridView, которые черпают данные из БД.

Вкладка «Работник» состоит из ещё 4-х вкладок: «Выданные книги», «Зарезервированные книги», «Читательские билеты», «Графики», между которыми можно переключаться одним нажатием, что должно эмулировать элемент управления из Delphy - PageControl.

Вкладка «Выданные книги» содержит список, структура которого содержит данные читательского билета, взятую человеком книгу, а также информация о том, возвращена ли книга. Данный список можно фильтровать при помощи трёх элементов radioButton и отобразить либо список возвращенных, либо список не возвращённых книг. Так же можно отобразить сразу весь список без фильтра. С помощью специальной кнопки можно отметить, что книга возвращена. Так же можно добавлять в список новые элементы с помощью удобного конструктора, на котором отображены списки читательских билетов и книг и необходимо просто выбрать по 1-му элементу из каждого списка.

На вкладке «Зарезервированные книги» можно найти список зарезервированных книг, с которым можно взаимодействовать только посредством кнопок: «Забрали», «Не пришли», первая из которых просто удаляет элемент списка, а вторая удаляет и прибавляет к количеству этих книг в таблице books одну книгу. А заполнением этой таблицы занимаются авторизованные пользователи с читательским билетом, которые резервируют книги.

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

На вкладке «Графики» расположены 2 графика. Первый - какие жанры, в большей части, имеются в библиотеке, а второй - наиболее распространённые в библиотеке авторы. Графики отображаются с помощью элемента управления chart.

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

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

2.2 Реализация бизнес-правил

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

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

- правило ограничения (constraintrule) проверяет значения транзакции или операции на непротиворечивость. Кроме того, могут применяться вместе с булевыми результатами. Если они не истинны, то мы не сможем продолжить или завершить операцию.

- инвариантные правила (invariantrules) проверяют множественные изменения и обеспечивают непротиворечивость итоговых результатов [6].

Данный программный продукт должен подчиняться следующим правилам:

- Администратор должен иметь возможность добавлять, изменять и удалять данные о сотрудниках;

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

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

На рис. 2.1 показана диаграмма прецедентов, отражающая данные правила.

На рисунке 2.2 показана диаграмма активности, показывающая, как программа реализует авторизацию пользователя.

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

Алгоритм проверки данных для входа в систему, происходящий в Form1, представлен в листинге 2.1.

Листинг 2.1 - Проверка верных данных и наличие прав доступа

SQL: GetUserType(int id):

SELECT type

FROM users

WHERE (id = ?)

C#:

int type = Convert.ToInt32(Program.Queries.GetUserType(id));

Рисунок 2.1 - UML-диаграмма прецедентов

Рисунок 2.2 - Диаграмма активности

Для удобство просмотра каталога книг был добавлен поиск по названию, автору и издателю, а так же фильтрация по жанрам (листинг 2.2).

Листинг 2.2 - поиск по названию, автору и издателю, фильтрация по жанрам

SQL:

books_catalog_viewTableAdapter.GetData():

SELECT id, Автор, Название, Жанры, Издатель, Количество

FROM books_catalog_view

books_catalog_searchTableAdapter.GetData(string, string, string, string, string)

SELECT Автор, Название, Жанры, Издатель

FROM books_catalog_view

WHERE ((LOCATE(?, Автор) > 0) OR

(LOCATE(?, Название) > 0) OR

(LOCATE(?, Издатель) > 0)) AND ((LOCATE(?, Жанры) > 0) OR (? = 'Все'))

C#:

private void textBoxSearch_TextChanged(object sender, EventArgs e)

{

string pr = ((TextBox)sender).Text;

string gr = checkedListBoxGenres.CheckedItems[0].ToString();

if ((pr == "" || pr == " ") & gr == "Все")

dataGridView1.DataSource = view_Adapter.GetData();