Добавил:
Преподаватель Колледжа информационных технологий Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторные работы / Методические указания к ЛР по ОАИП (09.02.07)

.pdf
Скачиваний:
60
Добавлен:
08.05.2022
Размер:
3.68 Mб
Скачать

23

this.FormProfessorAccount.labelProfessorName.Text

=

"Добро пожаловать, " + user.Professor.Name;

 

24

this.FormProfessorAccount.Visible = true;

 

25

this.Visible = false;

 

 

 

26

}

 

 

 

 

 

 

else

if

(user.Login

==

textBoxLogin.Text

&&

27

user.Password == textBoxPassword.Text && user.Role ==

 

"Администратор")

 

 

 

28

{

 

 

 

 

 

29

this.FormAdminPanel = new FormAdminPanel(this, user);

30

this.FormAdminPanel.Visible = true;

 

31

this.Visible = false;

 

 

 

32

}

 

 

 

 

 

33

}

 

 

 

 

 

34

}

 

 

 

 

 

35

}

 

 

 

 

 

В представленном методе идет последовательный перебор элементов коллекции UserSet, представляющий собой набор данных элементов из таблицы UserSet в базе данных. Если значение свойства Role элемента из коллекции равно «Студент», логин и пароль совпадают с теми, которые были введены в соответствующие текстовые поля (строка 11), то создается и открывается форма профиля студента FormStudentAccount. Если значение свойства Role элемента из коллекции равно «Преподаватель», логин и пароль совпадают с теми, которые были введены в соответствующие текстовые поля

(строка 19), то создается и открывается форма профиля преподавателя

FormProfessorAccount. Если значение свойства Role элемента из коллекции равно «Администратор», логин и пароль совпадают с теми, которые были введены в соответствующие текстовые поля (строка 27), то создается и открывается форма профиля администратора FormAdminPanel.

Обратите внимание, что при создании объекта одной из трех форм в конструктор передается дополнительно два параметра – ссылка на экземпляр текущего класса (формы авторизации) с помощью ключевого слова this и

ссылка на объект user, для которого осуществляется процесс авторизации,

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

231

6.3. Просмотр списка преподавателей

Рассмотрим, как будет осуществляться просмотр списка преподавателей через профиль студента. Список выводится в listBoxLecturer при нажатии кнопки Просмотр списка преподавателей (buttonShowProfessors). После нажатия на эту кнопку она меняет свою надпись на Просмотр и свое назначение – после этого после выбора из списка преподавателя, если нажать на кнопку Просмотр откроется форма информации о преподавателе (форма

5).

Реализация метода обработчика события нажатия на кнопку Просмотр списка преподавателей/Просмотр представлена в листинге 14.5.

232

 

 

Листинг 14.5 – Просмотр списка преподавателей

 

 

 

 

1

private void buttonShowProfessors_Click(object

 

Метод обработчик события нажатия на

sender, EventArgs e)

 

кнопку buttonShowProfessors

 

 

 

 

 

 

2

{

 

 

 

 

 

 

 

if (buttonShowProfessors.Text == "Просмотр списка

 

Проверка на равенство надписи кнопки

3

 

buttonShowProfessors значению

преподавателей")

 

 

 

"Просмотр списка преподавателей"

 

 

 

 

 

 

 

4

{

 

Если условие в строке 3 истинно, то

 

производим следующие действия

 

 

 

 

 

 

 

5

using (EntityModelContainer db = new

 

Создание объекта db контекста данных

EntityModelContainer())

 

EntityModelContainer

 

 

 

 

 

 

6

{

 

 

 

 

 

 

 

 

 

Цикл для обработки элементов коллекции

7

foreach (Professor professor in db.ProfessorSet)

 

db.ProfessorSet (коллекция сущностей

 

 

 

ProfessorSet из базы данных)

 

 

 

 

8

{

 

 

 

 

 

 

9

listBoxLecturer.Items.Add(professor.Name);

 

Добавление в список listBoxLecturer

 

значений свойства Name каждого

 

 

 

 

 

 

 

233

 

 

преподавателя из коллекции

 

 

db.ProfessorSet

 

 

 

10

}

 

 

 

 

11

}

 

 

 

 

12

buttonShowProfessors.Text = "Просмотр";

Изменение надписи кнопки

buttonShowProfessors на «Просмотр»

 

 

 

 

 

13

}

 

 

 

 

 

 

Если условие в строке 3 ложно, то

14

else if(buttonShowProfessors.Text == "Просмотр")

производится проверка на равенство надписи

кнопки buttonShowProfessors значению

 

 

 

 

"Просмотр"

 

 

 

15

{

 

 

 

 

 

this.FormProfessorInfo = new

Создание формы FormProfessorInfo и

16

передача в конструктор формы ссылки на

FormProfessorInfo(this);

 

экземпляр текущего класса (формы)

 

 

 

 

 

17

using (EntityModelContainer db = new

Создание объекта db контекста данных

EntityModelContainer())

EntityModelContainer

 

 

 

 

18

{

 

 

 

 

234

 

 

Цикл для обработки элементов коллекции

19

foreach (Professor professor in db.ProfessorSet)

db.ProfessorSet (коллекция сущностей

 

 

ProfessorSet из базы данных)

 

 

 

20

{

 

 

 

 

 

 

Проверка на равенство значения свойства

 

 

Name объекта professor из коллекции

21

if (professor.Name ==

db.ProfessorSet элементу, выбранному в

Convert.ToString(listBoxLecturer.SelectedItem))

списке listBoxLecturer (свойство

 

 

 

SelectedItem возвращает значение

 

 

выбранного элемента в списке)

 

 

 

 

 

Если условие в строке 21 истинно, то в

22

{

таблице ProfessorSet базы данных был

найден объект professor с именем, которое

 

 

 

 

выбрано в списке listBoxLecturer

 

 

 

23

this.FormProfessorInfo.Show();

Открытие формы FormProfessorInfo

 

 

 

24

this.FormProfessorInfo.richTextBoxName.Text =

Изменение текста элемента

professor.Name;

richTextBoxName на значение свойства

 

 

 

 

235

 

 

Name объекта professor (ФИО

 

 

преподавателя)

 

 

 

 

 

Изменение текста элемента

25

this.FormProfessorInfo.richTextBoxPosition.Text =

richTextBoxPosition на значение

professor.Position;

свойства Position объекта professor

 

 

 

(Должность преподавателя)

 

 

 

 

 

Изменение текста элемента

26

this.FormProfessorInfo.richTextBoxPersonalData.Text

richTextBoxPersonalData на значение

= professor.PersonalData;

свойства PersonalData объекта professor

 

 

 

(Информация «О себе» преподавателя)

 

 

 

 

 

Изменение отображаемого изображения в

 

this.FormProfessorInfo.pictureBoxPhoto.Image =

pictureBoxPhoto путем последовательного

27

(Image)((new

преобразования массива байтов, хранящихся

 

ImageConverter()).ConvertFrom(professor.Photo));

в свойстве Photo объекта professor в тип

 

 

данных Image

 

 

 

28

}}}

 

 

 

 

29

this.Visible = false;

Скрытие формы профиля студента

 

 

 

30

}}

 

 

 

 

236

6.4. Добавление темы дипломной работы

Добавление темы происходит по нажатию кнопки Добавить в форме профиля преподавателя. Тема дипломной работы записывается в текстовое поле richTextBoxNameThesis.

Предварительно рассмотрим реализацию конструкторы формы профиля преподавателя.

 

Листинг 14.6 – Конструктор формы профиля преподавателя

 

 

 

1

Form1 Form1;

 

2

User User;

 

3

public FormProfessorAccount(Form1 form1, User user)

 

4

{

 

5

InitializeComponent();

 

6

this.Form1 = form1;

 

7

this.User = user;

 

8

this.UpdateListBoxTheses();

 

9

}

 

Конструктор принимает в качестве параметра ссылку на форму авторизации form1 для возможности перехода в нее обратно и ссылку на объект user, для которого будет происходить открытие профиля, и

информация о котором будет появляться в открываемой форме.

При реализации добавления используем запросы LINQ.

LINQ to Entities предлагает простой и интуитивно понятный подход для получения данных с помощью выражений, которые по форме близки выражениям языка SQL.

Хотя при работе с базой данных мы оперируем запросами LINQ, но база данных понимает только запросы на языке SQL. Поэтому между LINQ to

Entities и базой данных есть проводник, который позволяет им взаимодействовать. Этим проводником является провайдер EntityClient. Он создает интерфейс для взаимодействия с провайдером ADO.NET для SQL Serverа.

Для начала взаимодействия с базой данных создается объект

EntityConnection. Через объект EntityCommand он отправляет запросы, а с помощью объекта EntityDataReader считывает извлеченные из базы данных

237

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

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

Листинг 14.7 – Добавление темы

1

private User User;

2

private void buttonAddThesis_Click(object sender,

EventArgs e)

 

3

{

4

using(EntityModelContainer db = new

EntityModelContainer())

 

5

{

 

Professor ModifiableProfessor =

6

(from p in db.ProfessorSet

where p.Name == User.Professor.Name

 

 

select p).FirstOrDefault();

 

Thesis thesis = new Thesis() { Name =

7

richTextBoxNameThesis.Text, Annotation =

richTextBoxNameThesis.Text, Professor =

 

 

ModifiableProfessor };

8

db.ThesisSet.Add(thesis);

9

ModifiableProfessor.Thesis.Add(thesis);

10

db.SaveChanges();

11

}

12

this.UpdateListBoxTheses();

13

}

Встроке 6 создается объект ModifiableProfessor класса Professor,

вкоторый сохраняется результат запроса LINQ на выборку. В данном запросе мы отбираем элементы p из коллекции, у которых свойство Name равно значению аналогичного свойства у объекта User.Professor. User хранит данные об объекте-пользователе, для которого открыта форма профиля. Метод

FirstOrDefault() получает первый элемент полученной выборки (в данном случае – преподавателя, для которого выполнено условие выборки). Если выборка пуста, то он возвращает значение null.

238

При добавлении темы создается объект thesis класса Thesis и

инициализируются его свойства: Name, Annotation и Professor.

Свойству

Professor объекта thesis присваивается ссылка на

объект

ModifiableProfessor.

После создания темы происходит закрепление темы дипломного проекта за преподавателем. Для этого происходит обращение к свойству-коллекции

Thesis объекта ModifiableProfessor и добавление в нее ранее созданной темы thesis.

Метод UpdateListBoxTheses обновляет содержимое списка тем дипломных проектов. Его реализация представлена в листинге 14.8.

Листинг 14.8 – Обновление списка

1

private void UpdateListBoxTheses()

 

 

 

2

{

 

 

 

 

3

this.listBoxTheses.Items.Clear();

 

 

 

4

using

(EntityModelContainer

db

=

new

EntityModelContainer())

 

 

 

 

 

 

 

5

{

 

 

 

 

 

var ThesesList =

 

 

 

 

from t in db.ThesisSet

 

 

 

6

where t.Professor.Name == (from p in db.ProfessorSet

 

where p.Name == User.Professor.Name

 

 

 

 

select p).FirstOrDefault().Name

 

select t;

 

 

 

 

7

foreach (Thesis thesis in ThesesList)

 

 

8

{

 

 

 

 

9

this.listBoxTheses.Items.Add(thesis.Name);

 

 

10

}

 

 

 

 

11}

12}

Встроке 6 реализован запрос LINQ – здесь идет выборка тем

дипломных проектов у преподавателя.

239

6.5. Редактирование темы дипломной работы

Редактирование темы происходит по нажатию кнопки Изменить в

форме профиля преподавателя. Измененная тема дипломной работы записывается в текстовое поле richTextBoxNewName.

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

Листинг 14.9 – Редактирование темы

1

private void buttonChangeThesis_Click(object

sender,

EventArgs e)

 

 

 

 

 

 

 

2

{

 

 

 

3

using(EntityModelContainer

db

=

new

EntityModelContainer())

 

 

 

 

 

 

 

4

{

 

 

 

5

string

str

 

=

Convert.ToString(listBoxTheses.SelectedItem);

 

 

 

 

Thesis ModifiableThesis =

 

 

 

6

 

(from t in db.ThesisSet

 

where t.Name == str

 

 

 

 

select t).FirstOrDefault();

7

ModifiableThesis.Name = richTextBoxNewName.Text;

8

db.SaveChanges();

 

 

 

9

}

 

 

 

10

this.UpdateListBoxTheses();

 

 

11

}

 

 

 

В строковую переменную str сохраняется наименование темы,

выбранной в списке listBoxTheses. В строке 6 происходит создание объекта

ModifiableThesis класса Thesis, которому присваивается результат выполнения запроса на выборку, где ищется совпадение наименования темы каждой дипломной работы t.Name, хранящейся в таблице ThesisSet базы данных со строкой str. В строке 7 происходит обращение к свойству Name

объекта ModifiableThesis и присваивание ему нового значение, которое будет задано в текстовом поле richTextBoxNewName, то есть происходит изменение наименования темы дипломной работы, найденной в базе данных.

240

Соседние файлы в папке Лабораторные работы