Лабораторные работы / Методические указания к ЛР по ОАИП (09.02.07)
.pdf6.6. Удаление темы дипломной работы
Для удаления темы пользователю необходимо выбрать тему в списке и нажать кнопку Удалить.
Реализация метода обработчика события нажатия на кнопку Удалить
представлена в листинге 14.10.
Листинг 14.10 – Удаление темы
1 |
private |
void buttonDeleteThesis_Click(object |
sender, |
||
EventArgs e) |
|
|
|
||
|
|
|
|
||
2 |
{ |
|
|
|
|
3 |
using |
(EntityModelContainer |
db |
= |
new |
EntityModelContainer()) |
|
|
|
||
|
|
|
|
||
4 |
{ |
|
|
|
|
5 |
string |
str |
|
|
= |
Convert.ToString(listBoxTheses.SelectedItem); |
|
||||
|
|
||||
|
Thesis ModifiableThesis = (from t in db.ThesisSet |
||||
6 |
where t.Name == str |
|
|
|
|
|
select t).FirstOrDefault(); |
|
|
|
|
7 |
db.ThesisSet.Remove(ModifiableThesis); |
|
|
||
8 |
db.SaveChanges(); |
|
|
|
|
9 |
} |
|
|
|
|
10 |
this.UpdateListBoxTheses(); |
|
|
|
|
11 |
} |
|
|
|
|
Реализация удаления темы мало отличается от метода редактирования темы. Единственное отличие – строка 7. В ней происходит вызов метода
Remove коллекции ThesisSet, который выполняет удаление объекта
ModifiableThesis.
6.7. Просмотр информации о студентах
Форма просмотра информации о студентах открывается через профиль преподавателя при нажатии на кнопку Поиск студентов.
Реализация метода обработчика события нажатия на кнопку Поиск студентов представлена в листинге 14.11.
Листинг 14.11 – Поиск студентов
1
private void buttonFind_Click(object sender, EventArgs e)
2 {
241
3 |
FormOverviewStudent |
formOverviewStudent |
= |
new |
FormOverviewStudent(this); |
|
|
||
|
|
|
||
4 |
formOverviewStudent.Show(); |
|
|
|
5 |
this.Visible = false; |
|
|
|
6 |
} |
|
|
|
При нажатии на кнопку в строке 3 создается форма просмотра информации о студентах formOverviewStudent, конструктор которой принимается ссылку на текущую форму. В строке 4 происходит открытие
новой формы, а в строке 5 – закрытие формы профиля преподавателя.
Реализация конструктора класса формы представлена в листинге 14.12.
Листинг 14.12 – Конструктор формы FormOverviewStudent
1 |
public |
FormOverviewStudent(FormProfessorAccount |
|||
formProfessorAccount) |
|
|
|
||
|
|
|
|
||
2 |
{ |
|
|
|
|
3 |
InitializeComponent(); |
|
|
|
|
4 |
this.FormProfessorAccount = formProfessorAccount; |
|
|||
5 |
using |
(EntityModelContainer |
db |
= |
new |
EntityModelContainer()) |
|
|
|
||
|
|
|
|
||
6 |
{ |
|
|
|
|
7 |
foreach (User user in db.UserSet) |
|
|
|
|
8 |
{ |
|
|
|
|
9 |
if (user.Student != null) |
|
|
|
|
10 |
{ |
|
|
|
|
11 |
listBoxStudents.Items.Add(user.Student.Name); |
|
|||
12 |
} |
|
|
|
|
13 |
} |
|
|
|
|
14 |
} |
|
|
|
|
15 |
} |
|
|
|
|
В конструкторе происходит заполнение списка listBoxStudents
элементами коллекции db.UserSet, которые являются студентами.
Проверить на принадлежность пользователя роли студента можно, сравнив свойство Student на неравенство значению null или на равенство свойства
Role значению «Студент».
Вывод информации о студенте происходит при выборе ФИО студента в списке listBoxStudents. Реализация метода обработчика события нажатия на элемент списка представлен в листинге 14.13.
242
Листинг 14.13 – Вывод информации о выбранном студенте
|
private |
|
|
|
|
void |
|
1 |
listBoxStudents_SelectedIndexChanged(object |
|
sender, |
||||
|
EventArgs e) |
|
|
|
|
||
2 |
{ |
|
|
|
|
|
|
3 |
using |
(EntityModelContainer |
db |
= |
new |
||
EntityModelContainer()) |
|
|
|
|
|||
|
|
|
|
|
|||
4 |
{ |
|
|
|
|
|
|
5 |
if (listBoxStudents.SelectedItem != null) |
|
|
||||
6 |
{ |
|
|
|
|
|
|
7 |
string |
|
SelectedName |
|
= |
||
Convert.ToString(listBoxStudents.SelectedItem); |
|||||||
|
|||||||
|
Student student = |
|
|
|
|
||
8 |
|
|
(from s in db.StudentSet |
||||
|
|
where s.Name == SelectedName |
|||||
|
|
|
|||||
|
|
|
select s).FirstOrDefault(); |
||||
|
|
|
|
||||
9 |
richTextBoxName.Text = student.Name; |
|
|
||||
10 |
richTextBoxNumberGroup.Text |
|
|
= |
|||
Convert.ToString(student.NumberGroup); |
|
|
|||||
11 |
richTextBoxPersonalData.Text = student.PersonalData; |
||||||
12 |
pictureBoxPhoto.Image |
= |
(Image)(Image)((new |
||||
ImageConverter()).ConvertFrom(student.Photo)); |
|
||||||
13 |
} |
|
|
|
|
|
|
14 |
else |
|
|
|
|
|
|
15 |
{ |
|
|
|
|
|
|
16 |
MessageBox.Show("Ошибка выбора"); |
|
|
|
|||
17 |
} |
|
|
|
|
|
|
18 |
} |
|
|
|
|
|
|
19 |
} |
|
|
|
|
|
В строке 7 создается строковая переменная SelectedName, в которую сохраняется ФИО студента, выбранное в списке listBoxStudents. В строке
8 создается объект student, которому присваивается результат выполнения запроса на выборку, где ищется совпадение ФИО студента s.Name,
хранящейся в таблице StudentSet базы данных со строкой SelectedName.
Далее происходит вывод в соответствующие текстовые поля ФИО, номера группы и информации «О себе» выбранного в списке студента и вывод фотографии студента в pictureBoxPhoto (аналогичное просмотрю информации о преподавателе).
243
ЗАДАНИЕ НА ЛАБОРАТОРНУЮ РАБОТУ
Лабораторная работа №13
Разработать графический интерфейс пользователя информационной системы, создав все необходимые графические формы для реализации всех требований, поставленных в индивидуальном задании. Требования и функционал разрабатываемого приложения предварительно обсудить с
преподавателем.
Лабораторная работа №14
Выполнить программную реализацию информационную систему,
согласно индивидуальному варианту, опираясь на разработанный в
предыдущих лабораторных работах графический интерфейс пользователя.
СПИСОК ИНДИВИДУАЛЬНЫХ ВАРИАНТОВ
№ |
Тема |
1Книжное издательство
2Магазин канц. товаров
3Библиотека
4Магазин автомобильных запасных частей
5Архив фотографий
6Компьютерная мастерская
7Сеть магазинов одежды
8Система регистрации заданий для художников
9Электронный заказ в ресторане
10Электронный каталог периодических изданий
11Конкурс детских рисунков
12Кинотеатр
13Реестр научных статей
14Книжный магазин
15Доставка еды
16Новостной портал
17Система тестирования знаний
18Фотостудия
19Ателье по пошиву одежды
20Цветочный магазин
21Форум
22Портфолио художника
23Электронный ежедневник
24Электронно-обучающая система
25Поликлиника
244
26Стоматология
27Ювелирный дом
28Метеорологическая служба
29Отель
30Отдел кадров
31Служба продажи билетов на массовые мероприятия
32Доставка воды
33Приемная комиссия
34Аптека
35Строительная фирма
36Туристический гид по городу (на выбор)
37Рейтинг ресторанов
38Кофейный автомат
39Кулинарная книга
40Туристическая фирма
245
ЛАБОРАТОРНАЯ РАБОТА №15
Тема: «Разработка приложения с клиент-серверной архитектурой»
ЦЕЛЬ РАБОТЫ
Получение навыков разработки клиент-серверных приложений.
ХОД РАБОТЫ
1. Архитектура «Клиент-сервер»
«Клиент — сервер» — вычислительная или сетевая архитектура, в
которой задания или сетевая нагрузка распределены между поставщиками услуг, называемыми серверами, и заказчиками услуг, называемыми
клиентами.
Фактически клиент и сервер — это программное обеспечение. Обычно эти программы расположены на разных вычислительных машинах и взаимодействуют между собой через вычислительную сеть посредством сетевых протоколов, но они могут быть расположены также и на одной машине.
Программы-серверы ожидают от клиентских программ запросы и предоставляют им свои ресурсы в виде данных (например, загрузка файлов посредством HTTP, FTP, потоковое мультимедиа или работа с базами данных)
или в виде сервисных функций (например, работа с электронной почтой,
общение посредством систем мгновенного обмена сообщениями или просмотр web-страниц во всемирной паутине).
Поскольку одна программа-сервер может выполнять запросы от множества программ-клиентов, её размещают на специально выделенной вычислительной машине, настроенной особым образом, как правило,
совместно с другими программами-серверами, поэтому производительность этой машины должна быть высокой. Из-за особой роли такой машины в сети,
специфики её оборудования и программного обеспечения, её также называют сервером, а машины, выполняющие клиентские программы, соответственно,
клиентами.
246
Архитектура клиент-сервер определяет лишь общие принципы взаимодействия между компьютерами, детали взаимодействия определяют различные протоколы. Данная концепция нам говорит, что нужно разделять машины в сети на клиентские, которым всегда что-то надо и на серверные,
которые дают то, что надо. При этом взаимодействие всегда начинает клиент,
а правила, по которым происходит взаимодействие, описывает протокол.
Существует два вида архитектуры взаимодействия клиент-сервер:
первый получил название двухзвенная архитектура клиент-серверного взаимодействия, второй – многоуровневая архитектура клиент-сервер
(иногда его называют трехуровневая архитектура или трехзвенная архитектура, но это частный случай).
Принцип работы двухуровневой архитектуры взаимодействия клиент-
сервер заключается в том, что обработка запроса происходит на одной машине без использования сторонних ресурсов. Двухзвенная архитектура предъявляет жесткие требования к производительности сервера, но в тоже время является очень надежной.
На рисунке 14.1 представлена модель двухзвенной архитектуры клиент-
серверного взаимодействия.
Рисунок 15.1 – Двухзвенная архитектура клиент-серверного взаимодействия
Здесь четко видно, что есть клиент (1-е звено), который позволяет человеку сделать запрос, и есть сервер (2-е звено), который обрабатывает запрос клиента.
Если говорить про многоуровневую архитектуру взаимодействия клиент-сервер, то в качестве примера можно привести любую современную
247
СУБД. Суть многоуровневой архитектуры заключается в том, что запрос клиента обрабатывается сразу несколькими серверами. Такой подход позволяет значительно снизить нагрузку на сервер из-за того, что происходит распределение операций, но в то же самое время данный подход не такой надежный, как двухзвенная архитектура. На рисунке 8.2 представлен пример многоуровневой архитектуры клиент-сервер.
Рисунок 15.2 – Трехзвенная архитектура клиент-серверного приложения
Если говорить в контексте систем управления базами данных, то первое звено – это клиент, который позволяет нам писать различные SQL запросы к базе данных. Второе звено – это сервер приложения, являющийся промежуточным звеном между клиентом и хранилищем данных, а третье звено – это движок СУБД, который интерпретирует запросы и реализует взаимодействие между клиентом и файловой системой.
2. Создание библиотеки классов
Библиотека классов определяет типы и методы, которые могут быть вызваны из любого приложения.
Нередко различные классы и структуры оформляются в виде отдельных библиотек, которые компилируются в файлы dll и затем могут подключать в другие проекты. Благодаря этому мы можем определить один и тот же функционал в виде библиотеки классов и подключать в различные проекты или передавать на использование другим разработчикам.
248
Создадим и подключим библиотеку классов для функционирования классов, которые будут присутствовать и в клиентской, и в серверной части приложения.
Возьмем имеющийся проект, созданный на предыдущей лабораторной работе. В структуре проекта нажмем правой кнопкой на название решения и далее в появившемся контекстном меню выберем Добавить → Создать проект:
Далее в списке шаблонов проекта найдем пункт Библиотека классов
(.NET Framework):
Рисунок 15.3 – Создание библиотеки классов
Затем дадим новому проекту какое-нибудь название, например, MyLib.
После этого в решение будет добавлен новый проект, в нашем случае с названием MyLib:
249
Рисунок 15.4
По умолчанию новый проект имеет один пустой класс Class1 в файле
Class1.cs. Мы можем этот файл удалить или переименовать, как нам больше нравится.
Например, переименуем файл Class1.cs в User.cs, а класс Class1 в User. Определим в классе User простейший код для сущности
«Пользователь»:
|
Листинг 15.1 – Класс «Пользователь» |
|
|
|
|
1 |
namespace MyLib |
|
2 |
{ |
|
3 |
[Serializable] |
|
4 |
public partial class User |
|
5 |
{ |
|
6 |
public int Id { get; set; } |
|
7 |
public string Login { get; set; } |
|
8 |
public string Password { get; set; } |
|
9 |
public string Role { get; set; } |
|
10 |
public virtual Professor Professor { get; set; } |
|
11 |
public virtual Student Student { get; set; } |
|
12 |
} |
|
13 |
} |
|
|
Теперь скомпилируем библиотеку классов. Для этого нажмем правой |
кнопкой на проект библиотеки классов и в контекстном меню выберем пункт
Перестроить.
После компиляции библиотеки классов в папке проекта в каталоге bin/Debug/ мы сможем найти скомпилированный файл dll (MyLib.dll).
Подключим его в основной проект. Для этого в основном проекте нажмем правой кнопкой на узел Ссылки и в контекстном меню выберем пункт
Добавить ссылку…:
250