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

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

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

 

40

stream.Write(data, 0, data.Length);

Отправляем массив байтов data серверу

 

 

 

 

41

stream.Flush();

Очистка содержимого потока stream

42}

43

44}

271

При авторизации данные, введенные в текстовые поля пользователем, передаются серверу для дальнейшего сравнения на равенство со значениями свойства логина и пароля пользователя из базы данных. Далее, если нашлось совпадение логина и пароля в базе данных, в сервере создается объект User, он сериализуются и отправляются для дальнейшей обработки клиенту.

Модифицированная версия процесса авторизации представлена в листинге 15.14.

 

Листинг 15.14 – Класс формы авторизации

 

 

 

1

public partial class Form1 : Form

 

2

{

 

3

FormReg FormReg;

 

4

FormStudentAccount FormStudentAccount;

 

5

FormReference FormReference;

 

6

FormProfessorAccount FormProfessorAccount;

 

7

TcpClient client = new TcpClient("127.0.0.1", 8888);

 

8

Byte[] data;

 

9

NetworkStream stream;

 

10

MyLib.Message m, m1, m2;

 

11

ComplexMessage cm = new ComplexMessage();

 

12

public Form1()

 

13

{

 

14

InitializeComponent();

 

15

this.stream = client.GetStream();

 

16

}

 

17

private void buttonAuth_Click(object sender, EventArgs e)

 

18

{

 

 

this.m1 =

 

19

SerializeAndDeserialize.Serialize(textBoxLogin.Text);

 

 

//Сериализация логина, введенного в текстовое поле

 

 

textBoxLogin

 

 

this.m2 =

 

20

SerializeAndDeserialize.Serialize(textBoxPassword.Text);

 

 

//Сериализация пароля, введенного в текстовое поле

 

 

textBoxPassword

 

21

this.cm.First = this.m1; //«Упаковка» сообщения m1 с

 

логином в пакет cm

 

22

this.cm.Second = this.m2; //«Упаковка» сообщения m2 с

 

 

паролем в пакет cm

 

23

this.cm.NumberStatus = 1; //«Упаковка» типа запроса (1 –

 

запрос на авторизацию) NumberStatus в пакет cm

 

272

24

this.m = SerializeAndDeserialize.Serialize(this.cm);

//Сериализация пакета с дальнейшей упаковкой в объект m

25

data = this.m.Data; //Передача массива байтов Data из

 

объекта m в массив data

26

stream.Write(data, 0, data.Length); //Отправка массива

байтов data серверу

27

if (stream.CanRead) //Если поток доступен для чтения

28

{

29

int numberOfBytesRead = 0;

30

byte[] readingData = new byte[6297630];

31

do

32

{

 

numberOfBytesRead = stream.Read(readingData, 0,

33

readingData.Length); //Считываем данные, полученные от

 

сервера, в массив байтов readingData

34

}

35

while (stream.DataAvailable);

36

this.m.Data = readingData;

 

this.cm =

37

(ComplexMessage)SerializeAndDeserialize.Deserialize(m);

//Поэтапно десериализуем массив байтов для восстановления

 

объектов из полученного пакета

38

if (cm.NumberStatus == 2) //Если статус запроса «Успешная

авторизация»

39

{

40

ComplexMessage complexMessage = (ComplexMessage)

SerializeAndDeserialize.Deserialize(m);

41

User user1 = (User)

SerializeAndDeserialize.Deserialize(complexMessage.First);

42

Professor professor;

43

Student student = (Student)

 

SerializeAndDeserialize.Deserialize(complexMessage.Second);

44

if (user1.Role == "Студент")

45

{

46

user1.Student = student;

 

this.FormStudentAccount = new FormStudentAccount(this,

47

user1); //Создаем экземпляр формы личной страницы студента

 

и заполняем её содержимое

48

this.FormStudentAccount.Show();

49

this.FormStudentAccount.Text = "Профиль " +

user1.Student.Name;

50

this.FormStudentAccount.labelStudentName.Text = "Добро

пожаловать, " + user1.Student.Name;

273

51

this.FormStudentAccount.Visible = true;

52

this.Visible = false;

53

return;

54

}

55

else if (user1.Role == "Преподаватель")

56

{

57

professor = user1.Professor;

58

this.FormProfessorAccount = new FormProfessorAccount(this,

 

user1, user1.Professor);

59

this.FormProfessorAccount.Text = "Профиль " +

user1.Professor.Name;

60

this.FormProfessorAccount.labelProfessorName.Text = "Добро

 

пожаловать, " + user1.Professor.Name;

61

this.FormProfessorAccount.Visible = true;

62

this.Visible = false;

63

return;

64

}

65

}

66

else if (cm.NumberStatus == 3) //Если статус запроса

 

«Ошибка авторизации»

67

{

68

MessageBox.Show("Неверный логин или пароль");

69

}

70

}

71

}

 

5. Создание и форматирование DOCX файла

DocX3 - это библиотека .NET, которая позволяет разработчикам легко и интуитивно управлять файлами Microsoft Word. Библиотеку DocX можно добавить в проект при помощи установщика пакетов NuGet.

Рисунок 15.8

3 С другими методами библиотеки DocX можно ознакомиться на сайте https://progtask.ru/rabota-s-word-pri-pomoshi-c-sharp/

274

Предположим, что разрабатываемое приложения должно создавать заполненное задание на дипломный проект для согласования темы. Часть документа, которая будет генерироваться программой с использованием библиотеки DocX, представлена на рисунке 15.9.

Рисунок 15.9 – Генерируемый документ

Документ условно делится на параграфы, представляющие собой абзацы с элементами наполнения (текстом, таблицами, ссылками, изображениями и т.д.). DocX

предоставляет методы для форматирования элементов документа, размещенных в параграфах.

Класс, реализующий данный участок документа, представлен в листинге 15.15.

275

 

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

 

 

 

1

private void OutputDocFile()

 

2

{

 

3

string pathDocument = AppDomain.CurrentDomain.BaseDirectory +

Путь к документу

"first.docx";

 

 

4

DocX document = DocX.Create(pathDocument);

Создание документа

5

document.MarginLeft = 60.0f;

 

6

document.MarginRight = 60.0f;

Определение отступов в документе

7

document.MarginTop = 60.0f;

слева, справа, сверху и снизу

8

document.MarginBottom = 60.0f;

 

 

document.InsertParagraph("федеральное государственное

 

9

бюджетное образовательное учреждение высшего образования

Вставка параграфа (абзаца) и указание

«Казанский национальный исследовательский технический

текста

 

 

университет им. А.Н. Туполева-КАИ» (КНИТУ-КАИ)").

 

10

Bold().

Задание полужирного начертания текста

11

Font("Times New Roman").

Задание шрифта «Times New Roman»

12

FontSize(14).

Задание размера шрифта «14»

13

Alignment = Alignment.center;

Задание выравнивания содержимого по

центру

 

 

14

document.InsertParagraph("\n" + "ОТДЕЛЕНИЕ СРЕДНЕГО

 

ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ" + "\n\n").

 

15

Font("Times New Roman").

 

16

FontSize(14).

 

17

Alignment = Alignment.center;

 

18

document.InsertParagraph("У Т В Е Р Ж Д А Ю" + "\n\n" +

 

 

"Директор отделения СПО ИКТЗИ" + "\n").

 

19

Font("Times New Roman").

 

20

FontSize(12).

 

21

Alignment = Alignment.right;

 

276

22

document.InsertParagraph("_______________, Осадчая Д.М." +

 

 

 

"\n").

 

 

 

23

Font("Times New Roman").

 

 

 

24

FontSize(12).

 

 

 

25

Alignment = Alignment.right;

 

 

 

26

document.InsertParagraph("«____»______________20_____г." +

 

 

 

 

"\n").

 

 

 

27

Font("Times New Roman").

 

 

 

28

FontSize(12).

 

 

 

29

Alignment = Alignment.right;

 

 

 

30

document.InsertParagraph("З А Д А Н И Е").

 

 

 

31

Font("Times New Roman").

 

 

 

32

FontSize(16).

 

 

 

33

Alignment = Alignment.center;

 

 

 

34

document.InsertParagraph("на дипломный проект").

 

 

 

35

Font("Times New Roman").

 

 

 

36

FontSize(12).

 

 

 

37

Bold().

 

 

 

38

Alignment = Alignment.center;

 

 

 

39

Table table = document.AddTable(7, 2);

Создание таблицы с 7 строками и 2

 

столбцами

 

 

 

 

40

table.Alignment = Alignment.center;

Задание выравнивания таблицы по

 

центру

 

 

 

 

41

table.Design = TableDesign.TableGrid;

Определение стандартного дизайна

 

таблицы

 

 

 

 

42

table.SetWidths(new float[] { 180.0f, 600.0f});

Установка ширины столбцов таблицы

 

 

table.Rows[0].Cells[0].Paragraphs[0]

Изменение содержимого ячейки 1-й

 

43

строки 1-го столбца таблицы. Метод

 

.Append("Обучающийся").Font("Times New Roman").

 

 

 

Append задает содержимое ячейки.

 

 

 

 

 

 

 

 

277

 

 

 

 

 

 

 

 

 

 

44

FontSize(12).

 

45

Bold();

 

 

table.Rows[0].Cells[1].Paragraphs[0]

Изменение содержимого ячейки 1-й

46

строки 2-го столбца таблицы на ФИО

.Append(this.user.Student.Name).Font("Times New Roman").

 

 

студента, сохраненное в свойстве Name.

47

FontSize(12).

 

48

Bold();

 

49

table.Rows[1].Cells[0].Paragraphs[0]

 

.Append("Специальность").Font("Times New Roman").

 

50

FontSize(12).

 

51

Bold();

 

52

table.Rows[2].Cells[0].Paragraphs[0]

 

 

.Append("Группа").Font("Times New Roman").

 

53

FontSize(12).

 

54

Bold();

 

 

table.Rows[2].Cells[1].Paragraphs[0]

 

55

.Append(this.user.Student.NumberGroup.ToString()).Font("Times

 

 

New Roman").

 

56

FontSize(12).

 

57

Bold();

 

58

table.Rows[3].Cells[0].Paragraphs[0]

 

.Append("Тема дипломного проекта").Font("Times New Roman").

 

59

FontSize(12).

 

60

Bold();

 

61

table.Rows[3].Cells[1].Paragraphs[0]

 

 

.Append(richTextBoxThesis.Text).Font("Times New Roman").

 

62

FontSize(12).

 

63

Bold();

 

64

table.Rows[4].MergeCells(0, 1);

 

278

 

table.Rows[4].Cells[0].Paragraphs[0].Append("Тема утверждена

 

65

приказом по университету от «__»__________20__г. №______")

 

 

.Font("Times New Roman").

 

 

66

FontSize(12).

 

 

67

Bold();

 

 

68

table.Rows[5].MergeCells(0, 1);

 

 

 

table.Rows[5].Cells[0].Paragraphs[0].Append("Срок сдачи

 

69

дипломного проекта «__»______________20__г.

")

 

 

.Font("Times New Roman").

 

 

70

FontSize(12).

 

 

71

Bold();

 

 

72

table.Rows[6].MergeCells(0, 1);

 

 

 

table.Rows[6].Cells[0].Paragraphs[0].Append("Содержание

 

73

дипломного проекта (перечень вопросов, подлежащих

 

 

рассмотрению):").Font("Times New Roman").

 

 

74

FontSize(12).

 

 

75

Bold();

 

 

 

 

 

Создаем в документе пустой параграф и

76

document.InsertParagraph().InsertTableAfterSelf(table);

вставляем туда ранее созданную

 

 

 

таблицу.

77

document.Save();

 

Сохранение документа

78

}

 

 

279

6. Печать документа

Для того, чтобы определить объект, который отправляет выходные данные на принтер при печати из приложения используется класс PrintDocument. Класс

PrintDialog позволяет пользователям выбирать принтер и определять, какие разделы документа должны быть напечатаны из приложения Windows Forms.

Код программы, отправляющий на печать документ с данными о студенте,

представлен в листинге 15.16.

Листинг 15.16 – Печать документа

1

string printContent = "";

2

private void PrintDoc()

3

{

 

this.printContent = richTextBoxName.Text + "\n" +

 

richTextBoxNumberGroup.Text + "\n"

4

+ richTextBoxPassword.Text + "\n" +

richTextBoxPersonalData.Text + "\n" +

 

 

richTextBoxProfessor.Text + "\n" +

 

richTextBoxThesis.Text;

5

PrintDocument printDocument = new PrintDocument();

6

PrintDialog printDialog = new PrintDialog();

7

printDocument.PrintPage += PrintPageHandler;

8

printDialog.Document = printDocument;

9

if (printDialog.ShowDialog() == DialogResult.OK)

10

{

11

printDialog.Document.Print();

12

}

13

}

Встроке 8 происходит установка объекта печати для его настройки.

Встроке 9 открывается диалоговое окно печати и выполняется печать строки

printContent (строка 11), когда будет нажата кнопка ОК. В состав строки printContent входят все данные о студенте.

В строке 7 добавляется обработчик события печати PrintPageHandler.

Реализация метода обработчика события представлена в листинге 15.17.

Листинг 15.17 – Обработчик события печати

1

private void PrintPageHandler(object sender, PrintPageEventArgs e)

2 {

280

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