1
0
This commit is contained in:
2024-03-21 18:22:02 +03:00
parent b87279a383
commit 8c996a248d
11 changed files with 462 additions and 0 deletions

53
ClassDiagram.cd Normal file
View File

@@ -0,0 +1,53 @@
<?xml version="1.0" encoding="utf-8"?>
<ClassDiagram MajorVersion="1" MinorVersion="1">
<Class Name="Tool" Collapsed="true">
<Position X="4.5" Y="0.75" Width="1.5" />
<TypeIdentifier>
<HashCode>AEADIAAAAAAAAAAAAABAAAQAACAAAAAACAAAAAAEAAA=</HashCode>
<FileName>src\Tool\Tool.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ManualTool" Collapsed="true">
<Position X="1.75" Y="1.75" Width="1.5" />
<TypeIdentifier>
<HashCode>AAAAAAIAAAAAAAAAAAAAAEAAAAACAAAAAAAAAAAAAAA=</HashCode>
<FileName>src\Tool\ManualTool.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ElectricTool" Collapsed="true">
<Position X="7.25" Y="1.75" Width="1.5" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAACAAAAABAAAAAAAAAAA=</HashCode>
<FileName>src\Tool\ElectricTool.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="Trimmer" Collapsed="true">
<Position X="8.75" Y="3.25" Width="1.5" />
<TypeIdentifier>
<HashCode>AAAAAAAAAIAAAAAAAgAAAAAAAAAAAAAAAAAAAgAAAAA=</HashCode>
<FileName>src\Tool\Trimmer.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="Scythe" Collapsed="true">
<Position X="0.5" Y="3.25" Width="1.5" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAABA=</HashCode>
<FileName>src\Tool\Scythe.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="Lawnmower" Collapsed="true">
<Position X="5.75" Y="3.25" Width="1.5" />
<TypeIdentifier>
<HashCode>AAAIAAAAQAAAAAAAAAAAAAAAAAAAQBAIAAAAAAAAAAA=</HashCode>
<FileName>src\Tool\Lawnmower.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="Scissors" Collapsed="true">
<Position X="3" Y="3.25" Width="1.5" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE=</HashCode>
<FileName>src\Tool\Scissors.cs</FileName>
</TypeIdentifier>
</Class>
<Font Name="Segoe UI" Size="9" />
</ClassDiagram>

20
src/Tool/BladeType.cs Normal file
View File

@@ -0,0 +1,20 @@
/// <summary>
/// Тип лезвия
/// </summary>
public enum BladeType
{
/// <summary>
/// Изогнутое лезвие
/// </summary>
Curved,
/// <summary>
/// Прямое лезвие
/// </summary>
Straight,
/// <summary>
/// Зубчатое лезвие
/// </summary>
Serrated
}

39
src/Tool/ElectricTool.cs Normal file
View File

@@ -0,0 +1,39 @@
/// <summary>
/// Электрический инструмент для косьбы
/// </summary>
public class ElectricTool : Tool
{
/// <summary>
/// Мощность электроинструмента
/// </summary>
private uint _power;
/// <summary>
/// Мощность электроинструмента
/// </summary>
public uint Power => _power;
/// <summary>
/// Инициализирует новый экземпляр класса <see cref="ElectricTool"/> с указанным именем, материалом, весом и мощностью
/// </summary>
/// <param name="name">Имя электроинструмента</param>
/// <param name="material">Материал электроинструмента</param>
/// <param name="weight">Вес электроинструмента. Должен быть больше нуля</param>
/// <param name="power">Мощность электроинструмента. Должна быть больше нуля</param>
/// <exception cref="ArgumentException">Выбрасывается, когда вес меньше или равен нулю</exception>
/// <exception cref="ArgumentException">Выбрасывается, когда мощность равна нулю</exception>
public ElectricTool(string name, Material material, double weight, uint power) : base(name, material, weight)
{
if (power == 0)
throw new ArgumentException("Мощность не может быть равна нулю", nameof(weight));
_power = power;
}
}
namespace KPO_Lab
{
public class Class1
{
}
}

50
src/Tool/Lawnmower.cs Normal file
View File

@@ -0,0 +1,50 @@
/// <summary>
/// Газонокосилка
/// </summary>
public class Lawnmower : ElectricTool
{
/// <summary>
/// Объем топлива
/// </summary>
private float _fuelCapacity;
/// <summary>
/// Текущий уровень топлива
/// </summary>
private float _fuelLevel;
/// <summary>
/// Объем топлива
/// </summary>
public float FuelCapacity => _fuelCapacity;
/// <summary>
/// Текущий уровень топлива
/// </summary>
public float FuelLevel => _fuelLevel;
/// <summary>
/// Инициализирует новый экземпляр класса <see cref="Lawnmower"/> с указанным именем, материалом, весом, мощностью и объемом бензина
/// </summary>
/// <param name="name">Имя электроинструмента</param>
/// <param name="material">Материал электроинструмента</param>
/// <param name="weight">Вес электроинструмента. Должен быть больше нуля</param>
/// <param name="power">Мощность электроинструмента. Должна быть больше нуля</param>
/// <param name="fuelCapacity">Объем топлива. Должен быть больше нуля</param>
/// <exception cref="ArgumentException">Выбрасывается, когда вес меньше или равен нулю</exception>
/// <exception cref="ArgumentException">Выбрасывается, когда мощность равна нулю</exception>
/// <exception cref="ArgumentException">Выбрасывается, когда объем топлива равна нулю</exception>
public Lawnmower(string name, Material material, double weight, uint power, float fuelCapacity) : base(name, material, weight, power)
{
if (fuelCapacity <= 0)
throw new ArgumentException("Объем топлива не может быть меньше или равен нулю", nameof(fuelCapacity));
_fuelCapacity = fuelCapacity;
}
/// <summary>
/// Пополняет запас топлива до максимального уровня.
/// </summary>
public void Refuel()
{
_fuelLevel = _fuelCapacity;
}
}

45
src/Tool/ManualTool.cs Normal file
View File

@@ -0,0 +1,45 @@
/// <summary>
/// Ручной инструмент для косьбы
/// </summary>
public class ManualTool : Tool
{
/// <summary>
/// Длина рукояти ручного инструмента в метрах
/// </summary>
private float _handleLength;
/// <summary>
/// Длина рукояти ручного инструмента в метрах
/// </summary>
public float HandleLength => _handleLength;
/// <summary>
/// Инициализирует новый экземпляр класса <see cref="ManualTool"/> с указанным именем, материалом, весом и мощностью
/// </summary>
/// <param name="name">Название ручного инструмента</param>
/// <param name="material">Материал ручного инструмента</param>
/// <param name="weight">Вес ручного инструмента в граммах</param>
/// <param name="handleLength">Длина рукояти ручного инструмента в метрах. Должна быть больше нуля</param>
/// <exception cref="ArgumentException">Выбрасывается, когда вес меньше или равен нулю</exception>
/// <exception cref="ArgumentException">Выбрасывается, когда длина рукояти меньше или равна нулю</exception>
public ManualTool(string name, Material material, double weight, float handleLength) : base(name, material, weight)
{
if (handleLength <= 0)
throw new ArgumentException("Длина рукояти не может быть меньше или равна нулю", nameof(handleLength));
_handleLength = handleLength;
}
/// <summary>
/// Заменяет рукоять на новую другой длины
/// </summary>
/// <param name="newHandleLength">Новая длина рукоятки. Должна быть больше нуля</param>
/// <exception cref="ArgumentException">Выбрасывается, когда новая длина рукоятки меньше или равна нулю</exception>
public void SwitchHandle(float newHandleLength)
{
if (newHandleLength <= 0)
throw new ArgumentException("Длина рукояти не может быть меньше или равна нулю", nameof(newHandleLength));
_handleLength = newHandleLength;
}
}

20
src/Tool/Material.cs Normal file
View File

@@ -0,0 +1,20 @@
/// <summary>
/// Материал инструмента
/// </summary>
public enum Material
{
/// <summary>
/// Пластик
/// </summary>
Plastic,
/// <summary>
/// Метал
/// </summary>
Metal,
/// <summary>
/// Дерево
/// </summary>
Wood,
}

71
src/Tool/Scissors.cs Normal file
View File

@@ -0,0 +1,71 @@
/// <summary>
/// Класс, представляющий ножницы как ручной инструмент.
/// </summary>
public class Scissors : ManualTool
{
private double _bladeSize;
/// <summary>
/// Размер лезвия ножниц.
/// </summary>
public double BladeSize => _bladeSize;
/// <summary>
/// Инициализирует новый экземпляр класса <see cref="Scissors"/> с указанными параметрами.
/// </summary>
/// <param name="name">Название ручного инструмента</param>
/// <param name="material">Материал ручного инструмента</param>
/// <param name="weight">Вес ручного инструмента в граммах</param>
/// <param name="handleLength">Длина рукояти ручного инструмента в метрах. Должна быть больше нуля</param>
/// <param name="bladeSize">Длина лезвия ножниц в метрах. Должна быть больше нуля</param>
/// <exception cref="ArgumentException">Выбрасывается, когда вес меньше или равен нулю</exception>
/// <exception cref="ArgumentException">Выбрасывается, когда длина рукояти меньше или равна нулю</exception>
/// <exception cref="ArgumentException">Выбрасывается, когда длина лезвия меньше или равна нулю</exception>
public Scissors(string name, Material material, double weight, float handleLength, double bladeSize) : base(name, material, weight, handleLength)
{
if (bladeSize <= 0)
throw new ArgumentException("Длина лезвия не может быть меньше или равна нулю", nameof(bladeSize));
_bladeSize = bladeSize;
}
/// <summary>
/// Оценивает точность работы ножниц на основе длины и равномерности лезвия
/// </summary>
/// <returns>Значение точности работы ножниц (от 0 до 1)</returns>
public double MeasureAccuracy()
{
double cleanlinessFactor = 0.0;
double evennessFactor = 0.0;
if (_bladeSize < 5)
{
cleanlinessFactor = 0.8;
}
else if (_bladeSize >= 5 && _bladeSize < 10)
{
cleanlinessFactor = 0.7;
}
else
{
cleanlinessFactor = 0.6;
}
if (_bladeSize < 5)
{
evennessFactor = 0.9;
}
else if (_bladeSize >= 5 && _bladeSize < 10)
{
evennessFactor = 0.8;
}
else
{
evennessFactor = 0.7;
}
double accuracy = (cleanlinessFactor + evennessFactor) / 2.0;
return accuracy;
}
}

39
src/Tool/Scythe.cs Normal file
View File

@@ -0,0 +1,39 @@
/// <summary>
/// Коса
/// </summary>
public class Scythe : ManualTool
{
/// <summary>
/// Тип лезвия
/// </summary>
private BladeType _bladeType;
/// <summary>
/// Тип лезвия
/// </summary>
public BladeType BladeType => _bladeType;
/// <summary>
/// Создает новый экземпляр класса <see cref="Scythe"/>
/// </summary>
/// <param name="name">Название косы</param>
/// <param name="material">Материал косы</param>
/// <param name="weight">Вес ручного инструмента в граммах</param>
/// <param name="handleLength">Длина рукояти ручного инструмента в метрах. Должна быть больше нуля</param>
/// <param name="bladeType">Тип лезвия</param>
/// <exception cref="ArgumentException">Выбрасывается, когда вес меньше или равен нулю.</exception>
/// <exception cref="ArgumentException">Выбрасывается, когда длина рукояти меньше или равна нулю</exception>
public Scythe(string name, Material material, double weight, float handleLength, BladeType bladeType) : base(name, material, weight, handleLength)
{
_bladeType = bladeType;
}
/// <summary>
/// Заменяет лезвие косы на новое
/// </summary>
/// <param name="newBladeType">Новый тип лезвия</param>
public void SwitchBlade(BladeType newBladeType)
{
_bladeType = newBladeType;
}
}

67
src/Tool/Tool.cs Normal file
View File

@@ -0,0 +1,67 @@
/// <summary>
/// Инструмент для косьбы
/// </summary>
public class Tool
{
/// <summary>
/// Уникальный идентификатор инструмента
/// </summary>
private Guid _id = Guid.NewGuid();
/// <summary>
/// Название инструмента
/// </summary>
private string _name;
/// <summary>
/// Материал инструмента
/// </summary>
private Material _material;
/// <summary>
/// Вес инструмента
/// </summary>
private double _weight;
/// <summary>
/// Уникальный идентификатор инструмента
/// </summary>
public Guid Id => _id;
/// <summary>
/// Название инструмента
/// </summary>
public string Name => _name;
/// <summary>
/// Материал инструмента
/// </summary>
public Material Material => _material;
/// <summary>
/// Вес инструмента
/// </summary>
public double Weight => _weight;
/// <summary>
/// Инициализирует новый экземпляр класса <see cref="Tool"/>.
/// </summary>
/// <param name="name">Название инструмента.</param>
/// <param name="material">Материал инструмента.</param>
/// <param name="weight">Вес инструмента. Должен быть больше нуля.</param>
/// <exception cref="ArgumentException">Выбрасывается, когда вес меньше или равен нулю.</exception>
public Tool(string name, Material material, double weight)
{
if (weight <= 0)
{
throw new ArgumentException("Вес инструмента не может быть меньше или равен нулю", nameof(weight));
}
_name = name;
_material = material;
_weight = weight;
}
/// <summary>
/// Печатает детали инструмента, включая его имя, материал и вес.
/// </summary>
public void Print()
{
Console.WriteLine($"Инструмент: {Name}, Материал: {Material}, Вес: {Weight}");
}
}

38
src/Tool/Trimmer.cs Normal file
View File

@@ -0,0 +1,38 @@
/// <summary>
/// Триммер
/// </summary>
public class Trimmer : ElectricTool
{
/// <summary>
/// Режим работы
/// </summary>
private TrimmerMode _mode;
/// <summary>
/// Режим работы
/// </summary>
public TrimmerMode Mode => _mode;
/// <summary>
/// Инициализирует новый экземпляр класса <see cref="Trimmer"/> с указанным именем, материалом, весом и мощностью
/// </summary>
/// <param name="name">Имя электроинструмента</param>
/// <param name="material">Материал электроинструмента</param>
/// <param name="weight">Вес электроинструмента. Должен быть больше нуля</param>
/// <param name="power">Мощность электроинструмента. Должна быть больше нуля</param>
/// <exception cref="ArgumentException">Выбрасывается, когда вес меньше или равен нулю</exception>
/// <exception cref="ArgumentException">Выбрасывается, когда мощность равна нулю</exception>
public Trimmer(string name, Material material, double weight, uint power) : base(name, material, weight, power)
{
_mode = TrimmerMode.Normal;
}
/// <summary>
/// Изменяет режим работы обрезки
/// </summary>
/// <param name="mode">Новый режим обрезки, который нужно установить</param>
public void ChangeMode(TrimmerMode mode)
{
_mode = mode;
}
}

20
src/Tool/TrimmerMode.cs Normal file
View File

@@ -0,0 +1,20 @@
/// <summary>
/// Режим работы триммера
/// </summary>
public enum TrimmerMode
{
/// <summary>
/// Нормальный
/// </summary>
Normal,
/// <summary>
/// Турбо
/// </summary>
Turbo,
/// <summary>
/// Эко
/// </summary>
Eco
}