This commit is contained in:
bekodeg 2025-01-22 22:33:55 +04:00
parent d10a98650d
commit 237a890a7b

View File

@ -1,109 +1,144 @@
# Лабораторная работа 1 # Лабораторная работа 1
## Компоненты: ## Компоненты:
### CustomDataTable:
Визуальный компонент вывода таблицы значений
__Публичные Методы__:
- Определить структуру таблицы
```c#
void ConfigureColumns(params CustomDataTableColumnParameter[] columnParameters)
```
CustomDataTableColumnParameter
```c#
/// <summary>
/// Параметры столбца таблицы
/// </summary>
public record CustomDataTableColumnParameter
{
/// <summary>
/// Заголовок
/// </summary>
public string HeaderName { get; init; } = string.Empty;
/// <summary>
/// Ширина
/// </summary>
public int Width { get; init; } = 0;
/// <summary>
/// Видимость
/// </summary>
public bool Visible { get; init; } = true;
/// <summary>
/// Название свойства
/// </summary>
public string PropertyName { get; init; } = string.Empty;
}
```
- Отчистить таблицу
```c#
public void Clear()
```
- Заполнить таблицу
```c#
public void Fill<TType>(IList<TType> insertValues)
```
__Публичные Функции__:
- Получить стоку таблицы в виде объекта
```c#
public TType? GetRow<TType>(int rowIndex) where TType : new()
```
__Свойства__:
- Индекс выбранной строки
```c#
public int SelectedRow
```
### CustomListBox ### CustomListBox
Визуальный компонент выбора из списка значений
__Публичные Методы__: Пользовательский визуальный компонент, который наследуется от UserControl.
- Заполнить список значениями Этот компонент является оберткой вокруг стандартного ListBox и предоставляет функционал для выбора значений из списка.
```c# Класс поддерживает заполнение списка значениями, очистку списка,
public void FillValues(IEnumerable<string> strings) обработку выбора элемента и уведомление об ошибках.
```
- Очистить список
```c#
public void Clear()
```
__Свойства__: ---
- Событие возникающие при изменении списка
```c# ### Свойства:
public event EventHandler ValueChanged
``` 1. Selected (тип: `string`)
- Обработка ошибок - Функция: Возвращает или устанавливает выбранное значение в списке.
```c# - get: Возвращает выбранный элемент списка или пустую строку, если элемент не выбран.
public event Action<Exception> AnErrorOccurred - set: Устанавливает выбранный элемент списка, если он существует.
```
- Выбранное значение ---
```c#
public string Selected ### Методы:
```
1. FillValues(IEnumerable<string> strings)
- Функция: Заполняет список значениями из переданной коллекции строк.
2. Clear()
- Функция: Очищает список, сбрасывает выбор и обновляет отображение.
---
### Поля:
1. _selectedChanged (тип: `EventHandler?`)
- Функция: Хранит подписчиков на событие изменения выбранного элемента.
2. _errorOccured (тип: `Action<Exception>?`)
- Функция: Хранит подписчиков на событие возникновения ошибки.
---
### События:
1. ValueChanged (тип: `EventHandler`)
- Функция: Событие, возникающее при изменении выбранного элемента в списке.
2. AnErrorOccurred (тип: `Action<Exception>`)
- Функция: Событие, возникающее при возникновении ошибки в процессе обработки выбранного элемента.
### CustomDataTable
CustomDataTable представляет собой пользовательский визуальный компонент, который наследуется от UserControl.
Этот компонент является оберткой вокруг стандартного DataGridView
и предоставляет функционал для отображения и управления таблицей данных. Класс поддерживает настройку столбцов,
заполнение таблицы данными, очистку таблицы, выбор строки и получение данных из строки в виде объекта.
---
### Свойства:
1. SelectedRow (тип: `int`)
- Функция: Возвращает или устанавливает индекс выбранной строки в таблице.
- get: Возвращает индекс текущей выбранной строки.
- set: Устанавливает выбранную строку по индексу.
---
### Методы:
1. ConfigureColumns(params CustomDataTableColumnParameter[] columnParameters)
- Функция: Настраивает столбцы таблицы на основе переданных параметров.
2. Clear()
- Функция: Очищает таблицу, удаляя все строки.
3. GetRow<TType>(int rowIndex)
- Функция: Возвращает данные из указанной строки таблицы в виде объекта типа TType.
4. Fill<TType>(IList<TType> insertValues)
- Функция: Заполняет таблицу данными из переданного списка объектов.
---
### Поля:
- outDataGridView (тип: `DataGridView`)
- Функция: Внутренний элемент управления DataGridView, используемый для отображения таблицы.
---
### CustomNumericInputField ### CustomNumericInputField
Визуальный компонент ввода целочисленного значения допускающего null
__Свойства__: CustomNumericInputField представляет собой пользовательский визуальный компонент,
- Событие возникающие при изменении поля ввода который наследуется от UserControl.
```c# Этот компонент предназначен для ввода целочисленных значений, которые могут быть null.
public event EventHandler NumericInputChanged Он включает текстовое поле для ввода числа и флажок (чекбокс) для указания,
``` что значение должно быть null. Компонент также поддерживает события для обработки изменений ввода и ошибок.
- Обработка ошибок
```c# ---
public event Action<Exception> AnErrorOccurred
``` ### Свойства:
- Значения поля ввода
```c# 1. Value (тип: `int?`)
public int? Value - Функция: Возвращает или устанавливает значение поля ввода.
``` - get: Возвращает введенное целое число или null, если флажок "null" активен.
_Возможно исключение ```InvalidNumericInputValueException```_ Если введенное значение не является числом, выбрасывает исключение InvalidNumericInputValueException.
- set: Устанавливает значение поля ввода. Если значение null, активирует флажок "null" и очищает текстовое поле.
---
### Методы:
1. Приватный: IsNullcheckBox_CheckedChanged(object sender, EventArgs e)
- Функция: Обрабатывает изменение состояния флажка "null". Если флажок активен,
отключает текстовое поле и очищает его. Вызывает событие _numericInputChanged или _errorOccurred в случае ошибки.
2. Приватный: InputField_TextChanged(object sender, EventArgs e)
- Функция: Обрабатывает изменение текста в поле ввода.
Вызывает событие _numericInputChanged или _errorOccurred в случае ошибки.
---
### Поля:
1. _numericInputChanged (тип: `EventHandler?`)
- Функция: Хранит подписчиков на событие изменения значения в поле ввода.
2. _errorOccured (тип: `Action<Exception>?`)
- Функция: Хранит подписчиков на событие возникновения ошибки.
---
### События:
1. NumericInputChanged (тип: `EventHandler`)
- Функция: Событие, возникающее при изменении значения в поле ввода (включая активацию флажка "null").
2. AnErrorOccurred (тип: `Action<Exception>`)
- Функция: Событие, возникающее при возникновении ошибки в процессе обработки ввода.
---
# Лабораторная работа 2 # Лабораторная работа 2
@ -111,131 +146,92 @@ __Свойства__:
### CustomPdfTable ### CustomPdfTable
Компонент для сохранения таблицы в пдф Класс CustomPdfTable представляет собой компонент, который сохраняет данные в виде таблицы в PDF-документ.
Этот компонент использует библиотеку PdfSharp.MigraDoc для создания и форматирования PDF-документов.
Класс поддерживает добавление заголовка документа,
создание таблиц на основе двумерных массивов строк и сохранение документа по указанному пути.
__Публичные Методы__: ---
- Определить структуру таблицы
```c#
public void SaveToPdf(PdfTableInfo tableInfo)
```
PdfTableInfo
```c#
/// <summary>
/// Параметры для создания таблиц в пдф
/// </summary>
public record PdfTableInfo
{
/// <summary>
/// имя файла (включая путь до файла)
/// </summary>
public string FilePath { get; init; } = @"C:\pdfTable.pdf";
/// <summary> ### Методы:
/// название документа(заголовок в документе)
/// </summary>
public string Title { get; init; } = "Таблица";
/// <summary> 1. SaveToPdf(PdfTableInfo tableInfo)
/// Список таблиц - Функция: Сохраняет данные в PDF-документ с таблицами.
/// </summary> - Параметры:
public IEnumerable<string[,]> Tables { get; init; } = []; - tableInfo: Объект типа PdfTableInfo,
} - содержащий информацию о пути сохранения файла, заголовке документа и таблицах.
``` - Логика:
- Проверяет, что таблицы не пусты.
- Создает PDF-документ с помощью PdfCreator.
- Добавляет заголовок документа.
- Для каждой таблицы создает строки и столбцы на основе двумерного массива строк.
- Сохраняет документ по указанному пути.
---
### CustomPdfTableWithGrouping ### CustomPdfTableWithGrouping
Компонент создающий таблицу и группирует элементы по 1 столбцу CustomPdfTableWithGrouping создает PDF-документ с таблицей,
__Публичные Методы__: группируя данные по первому столбцу.
- Сохранить в пдф Использует библиотеку PdfSharp.MigraDoc для создания и форматирования PDF-документов.
```c# Класс поддерживает настройку заголовка таблицы, столбцов, строк и группировку данных.
public void SaveToPdf<TType>(PdfTableWithGroupingInfo<TType> tableInfo) where TType : class
```
PdfTableWithGroupingInfo
```c#
/// <summary>
/// Параметры для создания таблицы в пдф с группировкой по 1 столбцу
/// </summary>
public class PdfTableWithGroupingInfo<TType> where TType : class
{
/// <summary>
/// имя файла (включая путь до файла)
/// </summary>
public string FilePath { get; init; } = @"C:\pdfTable.pdf";
/// <summary> ---
/// название документа(заголовок в документе)
/// </summary>
public string Title { get; init; } = "Таблица";
/// <summary> ### Методы:
/// Высота заголовков
/// </summary>
public float HeaderHeight { get; init; } = 0.5f;
/// <summary> 1. SaveToPdf<TType>(PdfTableWithGroupingInfo<TType> tableInfo)
/// Параметры столбцов - Функция: Сохраняет данные в PDF-документ с таблицей, группируя строки по первому столбцу.
/// </summary> - Параметры:
public IEnumerable<ColumnInfo> Columns { get; init; } = []; - tableInfo: Объект типа PdfTableWithGroupingInfo<TType>,
содержащий информацию о пути сохранения файла, заголовке таблицы, столбцах и строках.
- Логика:
- Проверяет, что столбцы и строки не пусты.
- Создает PDF-документ с помощью PdfCreator.
- Добавляет заголовок таблицы в документ.
- Создает таблицу с указанными столбцами и строками, группируя данные по первому столбцу.
- Сохраняет документ по указанному пути.
---
/// <summary>
/// Список таблиц
/// </summary>
public IEnumerable<RowInfo<TType>> Rows { get; init; } = [];
}
```
### CustomPdfHistogram ### CustomPdfHistogram
Компонент создающий линейную диаграмму CustomPdfHistogram представляет собой компонент, который сохраняет гистограмму в PDF-документ.
__Публичные Методы__: Этот компонент использует библиотеку PdfSharp.MigraDoc для создания и форматирования PDF-документов.
- Сохранить гистограмму в пдф Класс поддерживает добавление заголовка документа,
```c# создание гистограммы на основе переданных данных и сохранение документа по указанному пути.
public void SaveToPdf(PdfHistigramInfo histogramInfo)
```
PdfHistigramInfo
```c#
/// <summary>
/// Параметры для создания линейной диаграммы
/// </summary>
public record PdfHistigramInfo
{
/// <summary>
/// Имя файла (включая путь до файла)
/// </summary>
public string FilePath { get; init; } = @"C:\pdfTable.pdf";
/// <summary>
/// Заголовок документа
/// </summary>
public string DocumentTitle { get; init; } = "Гистограмма";
/// <summary>
/// Заголовок диаграммы
/// </summary>
public string HistogramTitle { get; init; } = "Гистограмма";
/// <summary>
/// Расположение легенды
/// </summary>
public PdfLegendPosition LegendPosition { get; init; } = PdfLegendPosition.Bottom;
/// <summary>
/// Значения
/// </summary>
public required IEnumerable<PdfHistogramLineInfo> Values { get; init; }
}
```
---
### Методы:
1. SaveToPdf(PdfHistigramInfo histogramInfo)
- Функция: Сохраняет гистограмму в PDF-документ.
- Параметры:
- histogramInfo: Объект типа PdfHistigramInfo, содержащий информацию о пути сохранения файла, заголовке документа,
заголовке диаграммы, данных и положении легенды.
- Логика:
- Проверяет корректность входных данных (путь к файлу, заголовки, данные).
- Создает PDF-документ с помощью PdfCreator.
- Добавляет заголовок документа.
- Создает линейную диаграмму на основе переданных данных.
- Сохраняет документ по указанному пути.
- Исключения:
- ArgumentException: Если входные данные некорректны (например, отсутствует путь к файлу, заголовок или данные).
---
# Лабораторная работа 3 # Лабораторная работа 3
Программный продукт предназначен для учета успеваемости студентов и управления их данными. Программный продукт предназначен для учета успеваемости студентов и управления их данными.
Он позволяет хранить информацию о каждом студенте, Он позволяет хранить информацию о каждом студенте,
формировать отчеты в различных форматах (Word, PDF, Excel) формировать отчеты в различных форматах (Word, PDF, Excel)
и визуализировать данные с помощью круговой диаграммы. и визуализировать данные с помощью линейной диаграммы.
### Цель программы ### Цель программы
Цель программы — автоматизация процесса учета успеваемости студентов, упрощение работы с данными и формирование отчетов для анализа успеваемости и стипендиальных выплат. Цель программы — автоматизация процесса учета успеваемости студентов,
упрощение работы с данными и формирование отчетов для анализа успеваемости студентов.
### Функционал программы ### Функционал программы
- Хранение данных о студентах: - Хранение данных о студентах:
@ -281,18 +277,21 @@ __Публичные Методы__:
1) Дать описание паттернов, указанных во вариантах, для каких целей они могут применяться, 1) Дать описание паттернов, указанных во вариантах, для каких целей они могут применяться,
какие участники там фигурируют. какие участники там фигурируют.
2) На основе задания из 3 лабораторной работы, для каждого паттерна придумать сущности, 2) На основе задания из 3 лабораторной работы, для каждого паттерна придумать сущности,
относящиеся к той же предметной области, что описаны в задании и реализация которых относящиеся к той же предметной области, что описаны в задании и реализация которых
бы в приложении потребовала применения паттерна. бы в приложении потребовала применения паттерна.
### Ограничения: ### Ограничения:
- На каждый паттерн свои сущности - На каждый паттерн свои сущности
- В качестве источника сущностей использовать предметную область задания 3 лабораторной работы, а не элементы разработки (что-то типа «У меня паттерн Singleton, укажу ка я класс-подключение к БД через него», не принимается). - В качестве источника сущностей использовать предметную область задания 3 лабораторной работы,
3) Создать диаграммы классов, отражающие взаимодействие новых а не элементы разработки (что-то типа «У меня паттерн Singleton,
сущностей (а также используемый паттерн) с классами, укажу ка я класс-подключение к БД через него», не принимается).
созданными в рамках 3 лабораторной работы. Отдельно отметить 3) Создать диаграммы классов, отражающие взаимодействие новых
классы, которые являются участниками паттерна сущностей (а также используемый паттерн) с классами,
созданными в рамках 3 лабораторной работы. Отдельно отметить
классы, которые являются участниками паттерна
## Вариант 3: _Adapter, Composite, Proxy_ ## Вариант 3: _Adapter, Composite, Proxy_
### Паттерн Adapter ### Паттерн Adapter
Паттерн Адаптер используется для того, Паттерн Адаптер используется для того,
чтобы объекты с несовместимыми интерфейсами могли работать вместе. чтобы объекты с несовместимыми интерфейсами могли работать вместе.
Он оборачивает один интерфейс в другой, Он оборачивает один интерфейс в другой,
@ -419,7 +418,7 @@ __Публичные Методы__:
- FivePointLaggingStudentsReport и HundredPointLaggingStudentsReport (Concrete Products) отчеты по отстающим студентам для 5- и 10-балльной систем. - FivePointLaggingStudentsReport и HundredPointLaggingStudentsReport (Concrete Products) отчеты по отстающим студентам для 5- и 10-балльной систем.
- ReportManager (Client) класс, который обрабатывает отчеты - ReportManager (Client) класс, который обрабатывает отчеты
![img_4.png](https://git.is.ulstu.ru/bekodeg/Cop.Borovkov.Var3/raw/branch/dev/Lab5-6/img_4.png) ![img_4.png](https://i.pinimg.com/originals/43/89/ed/4389ed56415070fc606be04621db69cc.jpg)
### Паттерн FactoryMethod ### Паттерн FactoryMethod
@ -506,7 +505,7 @@ Object Pool (пул объектов) — это поведенческий па
- Student ConcreteColleague2 - Студент - Student ConcreteColleague2 - Студент
- Dean`s Office ConcreteMediator - Деканат - Dean`s Office ConcreteMediator - Деканат
![img_8.png](https://git.is.ulstu.ru/bekodeg/Cop.Borovkov.Var3/raw/branch/dev/Lab5-6/img_8.png) ![img_8.png](https://i.pinimg.com/originals/7f/c3/40/7fc340de38957f5c29de3a6a6689a252.png)
- ILms Mediator - Сайт лмс - ILms Mediator - Сайт лмс
- User Colleague - Пользователь лмс - User Colleague - Пользователь лмс
@ -514,7 +513,7 @@ Object Pool (пул объектов) — это поведенческий па
- Student ConcreteColleague2 - Студент - Student ConcreteColleague2 - Студент
- Lms ConcreteMediator - Логика сайта лмс - Lms ConcreteMediator - Логика сайта лмс
![img_7.png](https://git.is.ulstu.ru/bekodeg/Cop.Borovkov.Var3/raw/branch/dev/Lab5-6/img_7.png) ![img_7.png](https://i.pinimg.com/originals/ac/c5/67/acc567be76d33349c35fd5fc10f84b9f.jpg)
### Паттерн Strategy ### Паттерн Strategy