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
## Компоненты:
### 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
Визуальный компонент выбора из списка значений
__Публичные Методы__:
- Заполнить список значениями
```c#
public void FillValues(IEnumerable<string> strings)
```
- Очистить список
```c#
public void Clear()
```
Пользовательский визуальный компонент, который наследуется от UserControl.
Этот компонент является оберткой вокруг стандартного ListBox и предоставляет функционал для выбора значений из списка.
Класс поддерживает заполнение списка значениями, очистку списка,
обработку выбора элемента и уведомление об ошибках.
__Свойства__:
- Событие возникающие при изменении списка
```c#
public event EventHandler ValueChanged
```
- Обработка ошибок
```c#
public event Action<Exception> AnErrorOccurred
```
- Выбранное значение
```c#
public string Selected
```
---
### Свойства:
1. Selected (тип: `string`)
- Функция: Возвращает или устанавливает выбранное значение в списке.
- get: Возвращает выбранный элемент списка или пустую строку, если элемент не выбран.
- set: Устанавливает выбранный элемент списка, если он существует.
---
### Методы:
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
Визуальный компонент ввода целочисленного значения допускающего null
__Свойства__:
- Событие возникающие при изменении поля ввода
```c#
public event EventHandler NumericInputChanged
```
- Обработка ошибок
```c#
public event Action<Exception> AnErrorOccurred
```
- Значения поля ввода
```c#
public int? Value
```
_Возможно исключение ```InvalidNumericInputValueException```_
CustomNumericInputField представляет собой пользовательский визуальный компонент,
который наследуется от UserControl.
Этот компонент предназначен для ввода целочисленных значений, которые могут быть null.
Он включает текстовое поле для ввода числа и флажок (чекбокс) для указания,
что значение должно быть null. Компонент также поддерживает события для обработки изменений ввода и ошибок.
---
### Свойства:
1. Value (тип: `int?`)
- Функция: Возвращает или устанавливает значение поля ввода.
- get: Возвращает введенное целое число или null, если флажок "null" активен.
Если введенное значение не является числом, выбрасывает исключение 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
@ -111,131 +146,92 @@ __Свойства__:
### 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>
/// Список таблиц
/// </summary>
public IEnumerable<string[,]> Tables { get; init; } = [];
}
```
1. SaveToPdf(PdfTableInfo tableInfo)
- Функция: Сохраняет данные в PDF-документ с таблицами.
- Параметры:
- tableInfo: Объект типа PdfTableInfo,
- содержащий информацию о пути сохранения файла, заголовке документа и таблицах.
- Логика:
- Проверяет, что таблицы не пусты.
- Создает PDF-документ с помощью PdfCreator.
- Добавляет заголовок документа.
- Для каждой таблицы создает строки и столбцы на основе двумерного массива строк.
- Сохраняет документ по указанному пути.
---
### CustomPdfTableWithGrouping
Компонент создающий таблицу и группирует элементы по 1 столбцу
__Публичные Методы__:
- Сохранить в пдф
```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";
CustomPdfTableWithGrouping создает PDF-документ с таблицей,
группируя данные по первому столбцу.
Использует библиотеку PdfSharp.MigraDoc для создания и форматирования PDF-документов.
Класс поддерживает настройку заголовка таблицы, столбцов, строк и группировку данных.
/// <summary>
/// название документа(заголовок в документе)
/// </summary>
public string Title { get; init; } = "Таблица";
---
/// <summary>
/// Высота заголовков
/// </summary>
public float HeaderHeight { get; init; } = 0.5f;
### Методы:
/// <summary>
/// Параметры столбцов
/// </summary>
public IEnumerable<ColumnInfo> Columns { get; init; } = [];
1. SaveToPdf<TType>(PdfTableWithGroupingInfo<TType> tableInfo)
- Функция: Сохраняет данные в PDF-документ с таблицей, группируя строки по первому столбцу.
- Параметры:
- tableInfo: Объект типа PdfTableWithGroupingInfo<TType>,
содержащий информацию о пути сохранения файла, заголовке таблицы, столбцах и строках.
- Логика:
- Проверяет, что столбцы и строки не пусты.
- Создает PDF-документ с помощью PdfCreator.
- Добавляет заголовок таблицы в документ.
- Создает таблицу с указанными столбцами и строками, группируя данные по первому столбцу.
- Сохраняет документ по указанному пути.
---
/// <summary>
/// Список таблиц
/// </summary>
public IEnumerable<RowInfo<TType>> Rows { get; init; } = [];
}
```
### CustomPdfHistogram
Компонент создающий линейную диаграмму
__Публичные Методы__:
- Сохранить гистограмму в пдф
```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; }
}
```
CustomPdfHistogram представляет собой компонент, который сохраняет гистограмму в PDF-документ.
Этот компонент использует библиотеку PdfSharp.MigraDoc для создания и форматирования PDF-документов.
Класс поддерживает добавление заголовка документа,
создание гистограммы на основе переданных данных и сохранение документа по указанному пути.
---
### Методы:
1. SaveToPdf(PdfHistigramInfo histogramInfo)
- Функция: Сохраняет гистограмму в PDF-документ.
- Параметры:
- histogramInfo: Объект типа PdfHistigramInfo, содержащий информацию о пути сохранения файла, заголовке документа,
заголовке диаграммы, данных и положении легенды.
- Логика:
- Проверяет корректность входных данных (путь к файлу, заголовки, данные).
- Создает PDF-документ с помощью PdfCreator.
- Добавляет заголовок документа.
- Создает линейную диаграмму на основе переданных данных.
- Сохраняет документ по указанному пути.
- Исключения:
- ArgumentException: Если входные данные некорректны (например, отсутствует путь к файлу, заголовок или данные).
---
# Лабораторная работа 3
Программный продукт предназначен для учета успеваемости студентов и управления их данными.
Он позволяет хранить информацию о каждом студенте,
формировать отчеты в различных форматах (Word, PDF, Excel)
и визуализировать данные с помощью круговой диаграммы.
и визуализировать данные с помощью линейной диаграммы.
### Цель программы
Цель программы — автоматизация процесса учета успеваемости студентов, упрощение работы с данными и формирование отчетов для анализа успеваемости и стипендиальных выплат.
Цель программы — автоматизация процесса учета успеваемости студентов,
упрощение работы с данными и формирование отчетов для анализа успеваемости студентов.
### Функционал программы
- Хранение данных о студентах:
@ -281,18 +277,21 @@ __Публичные Методы__:
1) Дать описание паттернов, указанных во вариантах, для каких целей они могут применяться,
какие участники там фигурируют.
2) На основе задания из 3 лабораторной работы, для каждого паттерна придумать сущности,
относящиеся к той же предметной области, что описаны в задании и реализация которых
относящиеся к той же предметной области, что описаны в задании и реализация которых
бы в приложении потребовала применения паттерна.
### Ограничения:
- На каждый паттерн свои сущности
- В качестве источника сущностей использовать предметную область задания 3 лабораторной работы, а не элементы разработки (что-то типа «У меня паттерн Singleton, укажу ка я класс-подключение к БД через него», не принимается).
3) Создать диаграммы классов, отражающие взаимодействие новых
сущностей (а также используемый паттерн) с классами,
созданными в рамках 3 лабораторной работы. Отдельно отметить
классы, которые являются участниками паттерна
- В качестве источника сущностей использовать предметную область задания 3 лабораторной работы,
а не элементы разработки (что-то типа «У меня паттерн Singleton,
укажу ка я класс-подключение к БД через него», не принимается).
3) Создать диаграммы классов, отражающие взаимодействие новых
сущностей (а также используемый паттерн) с классами,
созданными в рамках 3 лабораторной работы. Отдельно отметить
классы, которые являются участниками паттерна
## Вариант 3: _Adapter, Composite, Proxy_
### Паттерн Adapter
Паттерн Адаптер используется для того,
чтобы объекты с несовместимыми интерфейсами могли работать вместе.
Он оборачивает один интерфейс в другой,
@ -419,7 +418,7 @@ __Публичные Методы__:
- FivePointLaggingStudentsReport и HundredPointLaggingStudentsReport (Concrete Products) отчеты по отстающим студентам для 5- и 10-балльной систем.
- 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
@ -506,7 +505,7 @@ Object Pool (пул объектов) — это поведенческий па
- Student ConcreteColleague2 - Студент
- 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 - Сайт лмс
- User Colleague - Пользователь лмс
@ -514,7 +513,7 @@ Object Pool (пул объектов) — это поведенческий па
- Student ConcreteColleague2 - Студент
- 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