Добавлен: 12.12.2023
Просмотров: 387
Скачиваний: 14
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Я представил данную модель в виде ER-диаграммы (рисунок 2), которая послужит в дальнейшем базой данных для приложения.
Рисунок 2 – ERD диаграмма
Главной таблицей является Users в которой и записывается основная информация о пользователях где указывается ФИО, почта, номер телефона, логин и пароль. Так же присутствуют таблицы Students и Teachers где записывается уникальные данные разных ролей, а именно студента и учителя. Так же в данной диаграмме есть таблица подписки Subscriptions в которой указывается номер пользователя, который хочет получить подписку и дату её окончания. А также таблица Books которая запоминает информацию о книге, а точнее о её название, авторе и номера ISBN.
-
. Выбор методов и средств разработки
Чтобы разработать информационную систему я выбрал такие программные средства как Visual Studio 2019 и SQL Server. Язык программирования я выбрал C# и платформу .NET Framework. Для связи приложения с базой данный я использовал Entity Framework с подходом к разработке Database-First.
Visual Studio включает в себя редактор исходного кода с поддержкой технологии IntelliSense и возможностью простейшего рефакторинга кода. Встроенный отладчик может работать как отладчик уровня исходного кода, так и отладчик машинного уровня. Остальные встраиваемые инструменты включают в себя редактор форм для упрощения создания графического интерфейса приложения, веб-редактор, дизайнер классов и дизайнер схемы базы данных. Visual Studio позволяет создавать и подключать сторонние дополнения (плагины) для расширения функциональности практически на каждом уровне, включая добавление поддержки систем контроля версий исходного кода добавление новых наборов инструментов или инструментов для прочих аспектов процесса разработки программного обеспечения.
Microsoft SQL Server — система управления реляционными базами данных (РСУБД), разработанная корпорацией Microsoft. Основной используемый язык запросов — Transact-SQL, создан совместно Microsoft и Sybase. Transact-SQL является реализацией стандарта ANSI/ISO по структурированному языку запросов (SQL) с расширениями. Используется для работы с базами данных размером от персональных до крупных баз данных масштаба предприятия; конкурирует с другими СУБД в этом сегменте рынка.
Для создания язык программирования C# и платформа .NET Framework.
.NET Core является кроссплатформой, в отличие от .NET Framework позволяет запустить приложение не только под Windows, но и под остальные известные операционные системы. Также поддерживает больше архитектур процессоров.
Для связи приложения с базой данный использован Entity Framework Core с подходом к разработке Code First.
Также для лучшей работы с Code First была установлена специальная утилита Entity Framework Core Tools для создания миграций базы данных. Миграции позволят обновлять базу данных без её пересоздания.
Поход, называемый Code First (сначала код) предполагает минимальное участие в проектировании сущностей базы данных программистом. Он просто пишет код, остальное делает Entity и Visual Studio. Он подходит в случаях если главное в проекте – бизнес логика, а база данных – это способ хранения данных.
А Database First был первым подходом, который появился в Entity Framework. Данный подход во многом похож на Model First и подходит для тех случаев, когда разработчик уже имеет готовую базу данных. Чтобы Entity Framework мог получить доступ к базе данных, в системе должен быть установлен соответствующий провайдер.
ГЛАВА 2. РЕАЛИЗАЦИЯ ПРОЕКТА ИНФОРМАЦИОННОЙ СИСТЕМЫ «ИНФОРМАЦИОННАЯ СИСТЕМА БИБЛИОТЕКИ ВУЗА»
2.1. Подключение к базе данных
Подключение к базе данных я реализовал, создав специальный класс. В нём описываются таблицы с определёнными типами объектов и настройки подключения к базе данных
Само подключение происходит через использование специального пакета Entity Framework Core SQL Server (рисунок 3) и написания строки подключения с указанием реквизитов в зависимости от типа авторизации.
Пакет NuGet представляет собой отдельный ZIP-файл с расширением .nupkg, который содержит скомпилированный код (DLL), другие файлы, связанные с этим кодом, и описательный манифест, включающий такие сведения, как номер версии пакета. [12, с. 52]
Рисунок 3 – Пакет Entity Framework
С помощью этих действий была добавлена база данных в информационную систему проекта.
2.2. Роли и авторизация
Разработал систему ролей, она включает в себя четыре роли, три из них основные и одна главная. Основные роли включают в себя:
- студент и учитель могут оформить подписку, а также заказать книгу;
- библиотекарь, может выдавать и просматривать заказные книги;
- администратор, он может просмотреть информацию о пользователях и удалить их в случае необходимости, а также добавить или удалить книгу.
Далее я создал систему авторизации пользователей (рисунок 4). Это окно появляется после запуска приложения. В нём запрашивается логин и пароль для прохождения авторизации.
Авторизация (англ. authorization «разрешение; уполномочивание») — предоставление определенному лицу или группе лиц прав на выполнение определённых действий; а также процесс проверки (подтверждения) данных прав при попытке выполнения этих действий. [13, с. 75]
Рисунок 4 – Страница авторизации
В случае неправильного введения логина или пароль появиться сообщение с текстом «Неверный логин или пароль» (рисунок 5).
Рисунок 5 – Окно с ошибкой
Код для авторизации выглядит следующим образом (листинг 1, 2).
Листинг 1 – Код страницы авторизации
-
using System.Linq; -
using Library.Database; -
-
namespace Library -
{ -
public static class Auth -
{ -
public static User Authorize(string login, string password) -
{ -
using (var context = new LibraryEntities()) -
{ -
var user = context.Users.FirstOrDefault(u => u.Login == login && u.Password == password); -
-
return null; -
} -
} -
} -
}
Листинг 2 – Класс для страницы авторизации
-
using System.Linq; -
using System.Windows; -
using System.Windows.Controls; -
using Library.Database; -
-
namespace Library.Pages -
{ -
/// -
/// Interaction logic for AuthPage.xaml -
/// -
public partial class AuthPage : Page -
{ -
public AuthPage() -
{ -
InitializeComponent(); -
-
SignInButton.Click += SignInButton_Click; -
SignUpButton.Click += SignUpButton_Click; -
} -
-
private void SignUpButton_Click(object sender, RoutedEventArgs e) -
{ -
Navigation.Frame.Navigate(new RegistrationPage()); -
} -
-
private void SignInButton_Click(object sender, RoutedEventArgs e) -
{ -
var login = LoginTextBox.Text; -
var password = PasswordTextBox.Password; -
-
if (string.IsNullOrEmpty(login) || string.IsNullOrEmpty(password)) -
return; -
-
var authorizedUser = Auth.Authorize(login, password); -
if (authorizedUser == null) -
{ -
MessageBox.Show("Неверный логин или пароль", "", MessageBoxButton.OK, MessageBoxImage.Error); -
-
return; -
} -
-
using (var context = new LibraryEntities()) -
{ -
var isStudent = context.Students.Any(s => s.UserId == authorizedUser.Id); -
var isTeacher = context.Teachers.Any(t => t.UserId == authorizedUser.Id); -
-
if (isStudent && isTeacher) -
{ -
MessageBox.Show("Произошла внутреняя ошибка. Обратитесь к администратору", "", MessageBoxButton.OK, MessageBoxImage.Error); -
-
return; -
} -
-
if (isStudent == false && isTeacher == false) -
{ -
MessageBox.Show("Произошла внутреняя ошибка. Обратитесь к администратору", "", MessageBoxButton.OK, MessageBoxImage.Error); -
-
return; -
} -
-
var userType = isStudent ? 0 : 1; -
-
Navigation.Frame.Navigate(new UserPage(authorizedUser.FullName, userType)); -
} -
} -
} -
}
Также я добавил на эту страницу кнопку при нажатии на которую открывается форма регистрации (рисунок 6). В первой строке на данной страннице надо написать код, который будет определять какая из ролей будет создаваться (листинг 3, 4).
Рисунок 6 – Страница регистрации
Листинг 3 – Код регистрации
-
using System.Windows; -
using Library.Database; -
-
namespace Library.Registration -
{ -
public static class Registration -
{ -
public static void Register(RegisterData registerData, int userType, string code) -
{ -
using (var context = new LibraryEntities()) -
{ -
if (string.IsNullOrEmpty(registerData.Password) -
|| string.IsNullOrEmpty(registerData.RepeatPassword) -
|| string.IsNullOrEmpty(registerData.Email) -
|| string.IsNullOrEmpty(registerData.Fullname) -
|| string.IsNullOrEmpty(registerData.PhoneNumber) -
|| string.IsNullOrEmpty(registerData.Login)) -
return; -
-
switch (userType) -
{ -
case 0 when code != "student123": -
MessageBox.Show("Неверный код", "", MessageBoxButton.OK, MessageBoxImage.Error); -
-
return; -
case 1 when code != "teacher321": -
MessageBox.Show("Неверный код", "", MessageBoxButton.OK, MessageBoxImage.Error); -
-
return; -
} -
-
if (registerData.Password != registerData.RepeatPassword) -
{ -
MessageBox.Show("Пароли не совпадают", "", MessageBoxButton.OK, MessageBoxImage.Error); -
-
return; -
} -
-
var user = new User() -
{ -
Login = registerData.Login, -
Password = registerData.Password, -
Email = registerData.Email, -
FullName = registerData.Fullname, -
PhoneNumber = registerData.PhoneNumber -
}; -
-
context.Users.Add(user); -
context.SaveChanges(); -
-
MessageBox.Show("Аккаунт успешно создан \rТеперь вы можете авторизоваться", "", MessageBoxButton.OK, MessageBoxImage.Information); -
-
Navigation.Frame.GoBack(); -
} -
} -
} -
}
Листинг 4 – Класс для регистрации
-
using System.Windows; -
using Library.Database; -
-
namespace Library.Registration -
{ -
public static class Registration -
{ -
public static void Register(RegisterData registerData) -
{ -
using (var context = new LibraryEntities()) -
{ -
if (string.IsNullOrEmpty(registerData.Password) -
|| string.IsNullOrEmpty(registerData.RepeatPassword) -
|| string.IsNullOrEmpty(registerData.Email) -
|| string.IsNullOrEmpty(registerData.Fullname) -
|| string.IsNullOrEmpty(registerData.PhoneNumber) -
|| string.IsNullOrEmpty(registerData.Login)) -
return; -
-
if (registerData.Password != registerData.RepeatPassword) -
{ -
MessageBox.Show("Пароли не совпадают", "", MessageBoxButton.OK, MessageBoxImage.Error); -
-
return; -
} -
-
var user = new User() -
{ -
Login = registerData.Login, -
Password = registerData.Password, -
Email = registerData.Email, -
FullName = registerData.Fullname, -
PhoneNumber = registerData.PhoneNumber -
}; -
-
context.Users.Add(user); -
context.SaveChanges(); -
} -
} -
} -
}
После успешных внесений данных в форму регистрации программа сообщает о том, что аккаунт успешно создан (рисунок 7).
Рисунок 7 – Успешная регистрация
Так же в данном приложение есть роль библиотекаря, который может выдавать книги и просматривать пользователей на наличие книг (рисунок 9, 10).
Рисунок 9 – Просмотр информации
Рисунок 10 – Выдача книги
Таким образом выглядит роли в данном проекте, а также было показано система регистрации и авторизации и код с помощью которого это всё было реализовано.
2.3. Пользовательский интерфейс оператора системы
Для пользователей системы я сделал не сложный интерфейс. На котором расположилось две кнопки такие как «Оформить подписку» и «Заказать книгу», а также в левом верхнем углу ФИО пользователя и уровень подписки (рисунок 11).