Лабораторные работы / Методические указания к ЛР по ОАИП (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
