Лабораторные работы / Методические указания к ЛР по ОАИП (09.02.07)
.pdfУдаление темы происходит при выборе удаляемого объекта в списке
ListBox1 и нажатии после этого кнопки Удалить.
Разработанный интерфейс формы просмотра информации о преподавателе представлен на рисунке 14.31.
Рисунок 14.31 – Форма профиля преподавателя
5.2.7.Форма информации о студентах
Вданной форме есть список всех студентов и можно просмотреть информацию о каждом студенте, выбранном из списка.
ВLabel1 выводится информация о данной форме (например, «Обзор студентов»).
Возврат в предыдущую форму (форму профиля преподавателя)
происходит при нажатии кнопки Выход.
ФИО студентов, зарегистрированных в системе, выводится в список
ListBox1.
ФИО, номер группы и данные «О себе» выводится в соответствующие
RichTextBox, а фотография в PictureBox при выборе студента в списке
ListBox1.
221
Разработанный интерфейс формы просмотра информации о студентах представлен на рисунке 14.32.
Рисунок 14.32 – Форма просмотра информации о студентах
5.2.8.Форма профиля администратора
Вданной форме есть элементы управления, позволяющие просмотреть,
добавить или удалить пользователей.
При нажатии кнопки Добавление пользователя открывается панель для ввода данных о создаваемом пользователе. Создание пользователе и его добавление в базу данных происходит после нажатия на кнопку Добавить.
При нажатии кнопки Удаление пользователя открывается панель со списком listBoxUsers для выбора удаляемого пользователя. Для удаления необходимо выбрать элемент из появившегося списка и нажать кнопку
Удалить в нижнем правом углу формы.
Возврат в предыдущую форму (форму авторизации) происходит при нажатии кнопки Выход.
222
Рисунок 14.33 – Панель администратора
6.Разработка функционала приложения
6.1.Регистрация пользователя
При регистрации новый пользователь выбирает свою роль
(comboBoxRole), вводит ФИО (textBoxFIO), номер группы
(textBoxNumGroup), логин (textBoxLogin), пароль (textBoxPassword), и
информацию о себе (richTextBoxPersonalData) и выбирает фотографию для создания аватара своего профиля.
Выбор фотографии для аватара происходит по нажатию кнопки Обзор.
Реализация обработчика кнопки Обзор представлена в листинге 14.2.
Листинг 14.2. – Метод загрузки фотографии
1 byte[] imageBytes;
223
2 |
private void buttonOverview_Click(object sender, EventArgs |
||
e) |
|
|
|
3 |
{ |
|
|
4 |
OpenFileDialog open_dialog = new OpenFileDialog(); |
|
|
|
open_dialog.Filter |
= |
"Image |
5 |
Files(*.BMP;*.JPG;*.GIF;*.PNG)|*.BMP;*.JPG;*.GIF;*.PNG|All |
||
|
files (*.*)|*.*"; |
|
|
6 |
if (open_dialog.ShowDialog() == DialogResult.OK) |
|
|
7 |
{ |
|
|
8 |
try |
|
|
9 |
{ |
|
|
10 |
this.imageBytes = File.ReadAllBytes(open_dialog.FileName); |
||
11 |
labelLoadingStatus.Text = "Успешно"; |
|
|
12 |
} |
|
|
13 |
catch |
|
|
14 |
{ |
|
|
15 |
labelLoadingStatus.Text = "Ошибка"; |
|
|
16 |
} |
|
|
17 |
} |
|
|
18 |
} |
|
|
Для хранения картинок в памяти и сохранения в базе данных необходимо преобразовывать их в массив байтов. В строке 1 создается массив imageBytes, который будет хранить набор байтов. Поиск картинки происходит через диалоговое окно OpenFileDialog, экземпляр которого open_dialog создается в строке 4. Свойство Filter задает фильтр файлов,
благодаря чему в диалоговом окне можно отфильтровать файлы по расширению. Фильтр задается в следующем формате
Название_файлов|*.расширение
Например,
Текстовые файлы(*.txt)|*.txt
Можно задать сразу несколько фильтров, для этого они разделяются вертикальной линией |. Например,
Bitmap files (*.bmp)|*.bmp|Image files (*.jpg)|*.jpg
С помощью метода ShowDialog() происходит открытие диалогового
окна для открытия файла.
224
Рисунок 14.34 – Диалоговое окно для открытия файла
Если в окне была нажата кнопка «Открыть», то абсолютный путь до загружаемой картинки сохраняется в свойство FileName объекта open_dialog и передается в качестве параметра в метод ReadAllBytes,
который открывает этот файл, считывает содержимое файла в массив байтов imageBytes и затем закрывает файл. После корректного завершения загрузки файла в labelLoadingStatus выводится сообщение «Успешно». Если во время чтения возникнет исключение, то в labelLoadingStatus выведется сообщение «Ошибка».
Добавление нового пользователя в базу данных происходит по нажатию кнопки Зарегистрироваться (buttonReg). Реализация метода обработчика нажатия на кнопку Зарегистрироваться представлена в листинге 14.3.
225
|
|
Листинг 14.3. – Регистрация пользователя |
|
|
|
|
|
1 |
private void buttonReg_Click(object sender, |
Метод обработчик нажатия на кнопку buttonReg |
|
EventArgs e) |
|||
|
|
||
|
|
|
|
2 |
{ |
|
|
|
|
|
|
3 |
if (comboBoxRole.SelectedItem.ToString() == |
Проверка выбранной при регистрации роли на |
|
"Студент") |
соответствие значению «Студент» |
||
|
|||
|
|
|
|
4 |
{ |
|
|
|
|
|
|
5 |
using (EntityModelContainer db = new |
Создание объекта db контекста данных |
|
EntityModelContainer()) |
EntityModelContainer |
||
|
|||
|
|
|
|
6 |
{ |
|
|
|
|
|
|
|
Student student = new Student() { Name = |
|
|
|
textBoxFIO.Text, NumberGroup = |
Создание объекта student класса Student и |
|
7 |
int.Parse(textBoxNumGroup.Text), PersonalData = |
инициализация его свойств значениями, |
|
|
richTextBoxPersonalData.Text, Photo = |
введенными в соответствующие текстовые поля |
|
|
this.imageBytes }; |
|
|
|
|
|
|
|
|
Добавление созданного объекта student в |
|
8 |
db.StudentSet.Add(student); |
коллекцию сущностей StudentSet из контекста |
|
|
|
данных, отвечающую за хранение сущностей в |
|
|
|
|
226
|
|
базе данных |
|
|
|
|
|
9 |
db.SaveChanges(); |
Сохранение изменений результата запроса в базе |
|
данных |
|||
|
|
||
|
|
|
|
|
User user = new User() { Student = student, |
Создание объекта user класса User и |
|
|
инициализация его свойств значениями, |
||
|
Login = textBoxLogin.Text, Password = |
||
10 |
введенными в соответствующие текстовые поля |
||
textBoxPassword.Text, Role = |
|||
|
(навигационному свойству Student |
||
|
(string)comboBoxRole.SelectedItem }; |
||
|
присваивается созданный ранее объект student) |
||
|
|
||
|
|
|
|
|
|
Добавление созданного объекта user в |
|
11 |
db.UserSet.Add(user); |
коллекцию сущностей UserSet из контекста |
|
данных, отвечающую за хранение сущностей в |
|||
|
|
||
|
|
базе данных |
|
|
|
|
|
12 |
db.SaveChanges(); |
Сохранение изменений результата запроса в базе |
|
данных |
|||
|
|
||
|
|
|
|
13 |
} |
|
|
|
|
|
|
14 |
} |
|
|
|
|
|
|
15 |
else if (comboBoxRole.SelectedItem.ToString() == |
Проверка выбранной при регистрации роли на |
|
"Преподаватель") |
соответствие значению «Преподаватель» |
||
|
|||
|
|
|
227
16 |
{ |
|
|
|
|
|
|
17 |
using (EntityModelContainer db = new |
Создание объекта db контекста данных |
|
EntityModelContainer()) |
EntityModelContainer |
||
|
|||
|
|
|
|
18 |
{ |
|
|
|
|
|
|
|
Professor professor = new Professor() { Name = |
|
|
|
textBoxFIO.Text, Position = |
Создание объекта professor класса Professor |
|
19 |
textBoxNumGroup.Text, PersonalData = |
и инициализация его свойств значениями, |
|
|
richTextBoxPersonalData.Text, Photo = |
введенными в соответствующие текстовые поля |
|
|
this.imageBytes }; |
|
|
|
|
|
|
|
|
Добавление созданного объекта professor в |
|
20 |
db.ProfessorSet.Add(professor); |
коллекцию сущностей ProfessorSet из |
|
контекста данных, отвечающую за хранение |
|||
|
|
||
|
|
сущностей в базе данных |
|
|
|
|
|
21 |
db.SaveChanges(); |
Сохранение изменений результата запроса в базе |
|
данных |
|||
|
|
||
|
|
|
|
|
User user = new User() { Professor = professor, |
Создание объекта user класса User и |
|
22 |
инициализация его свойств значениями, |
||
Login = textBoxLogin.Text, Password = |
|||
|
введенными в соответствующие текстовые поля |
||
|
|
||
|
|
|
228
|
textBoxPassword.Text, Role = |
(навигационному свойству Professor |
|
|
(string)comboBoxRole.SelectedItem }; |
присваивается созданный ранее объект |
|
|
|
professor) |
|
|
|
|
|
|
|
Добавление созданного объекта user в |
|
23 |
db.UserSet.Add(user); |
коллекцию сущностей UserSet из контекста |
|
данных, отвечающую за хранение сущностей в |
|||
|
|
||
|
|
базе данных |
|
|
|
|
|
24 |
db.SaveChanges(); |
Сохранение изменений результата запроса в базе |
|
данных |
|||
|
|
||
|
|
|
|
25 |
} |
|
|
|
|
|
|
26 |
} |
|
|
|
|
|
|
27 |
this.Form1.Visible = true; |
Открытие формы авторизации |
|
|
|
|
|
28 |
this.Visible = false; |
Скрытие формы регистрации |
|
|
|
|
|
29 |
} |
|
|
|
|
|
229
6.2. Авторизация пользователя
При авторизации пользователь вводит в форме авторизации свой логин
(textboxLogin), пароль (textBoxPassword) и нажимает на кнопку Войти
(buttonAuth).
Реализация метода обработчика нажатия на кнопку Войти представлена в листинге 14.4.
|
|
|
Листинг 14.4 – Авторизация пользователя |
||||||
|
|
|
|
|
|
|
|
||
1 |
FormReg FormReg; |
|
|
|
|
|
|
||
2 |
FormStudentAccount FormStudentAccount; |
|
|
|
|||||
3 |
FormProfessorAccount FormProfessorAccount; |
|
|
|
|||||
4 |
FormAdminPanel FormAdminPanel; |
|
|
|
|
|
|||
5 |
private void buttonAuth_Click(object sender, EventArgs |
|
|||||||
e) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
{ |
|
|
|
|
|
|
|
|
7 |
using(EntityModelContainer |
|
db |
= |
|
new |
|
||
EntityModelContainer()) |
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|||
8 |
{ |
|
|
|
|
|
|
|
|
9 |
foreach (User user in db.UserSet) |
|
|
|
|
||||
10 |
{ |
|
|
|
|
|
|
|
|
11 |
if(user.Login == textBoxLogin.Text && user.Password == |
|
|||||||
textBoxPassword.Text && user.Role == "Студент") |
|
|
|
||||||
12 |
{ |
|
|
|
|
|
|
|
|
13 |
this.FormStudentAccount = new FormStudentAccount(this, |
|
|||||||
|
user); |
|
|
|
|
|
|
|
|
14 |
this.FormStudentAccount.Text |
= |
"Профиль |
" |
+ |
|
|||
user.Student.Name; |
|
|
|
|
|
|
|||
15 |
this.FormStudentAccount.labelStudentName.Text = "Добро |
|
|||||||
пожаловать, " + user.Student.Name; |
|
|
|
|
|||||
16 |
this.FormStudentAccount.Visible = true; |
|
|
|
|||||
17 |
this.Visible = false; |
|
|
|
|
|
|
||
18 |
} |
|
|
|
|
|
|
|
|
|
else |
if |
(user.Login |
== |
textBoxLogin.Text |
&& |
|
||
19 |
user.Password == textBoxPassword.Text && user.Role == |
|
|||||||
|
"Преподаватель") |
|
|
|
|
|
|
||
20 |
{ |
|
|
|
|
|
|
|
|
21 |
this.FormProfessorAccount |
|
|
= |
|
new |
|
||
|
FormProfessorAccount(this, user); |
|
|
|
|
||||
22 |
this.FormProfessorAccount.Text |
= |
"Профиль |
" |
+ |
|
|||
user.Professor.Name; |
|
|
|
|
|
|
230