diff --git a/ClassDiagram.cd b/ClassDiagram.cd new file mode 100644 index 0000000..438d3c6 --- /dev/null +++ b/ClassDiagram.cd @@ -0,0 +1,53 @@ + + + + + + AEADIAAAAAAAAAAAAABAAAQAACAAAAAACAAAAAAEAAA= + src\Tool\Tool.cs + + + + + + AAAAAAIAAAAAAAAAAAAAAEAAAAACAAAAAAAAAAAAAAA= + src\Tool\ManualTool.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAACAAAAABAAAAAAAAAAA= + src\Tool\ElectricTool.cs + + + + + + AAAAAAAAAIAAAAAAAgAAAAAAAAAAAAAAAAAAAgAAAAA= + src\Tool\Trimmer.cs + + + + + + AAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAABA= + src\Tool\Scythe.cs + + + + + + AAAIAAAAQAAAAAAAAAAAAAAAAAAAQBAIAAAAAAAAAAA= + src\Tool\Lawnmower.cs + + + + + + AAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE= + src\Tool\Scissors.cs + + + + \ No newline at end of file diff --git a/src/Tool/BladeType.cs b/src/Tool/BladeType.cs new file mode 100644 index 0000000..16a5e28 --- /dev/null +++ b/src/Tool/BladeType.cs @@ -0,0 +1,20 @@ +/// +/// Тип лезвия +/// +public enum BladeType +{ + /// + /// Изогнутое лезвие + /// + Curved, + + /// + /// Прямое лезвие + /// + Straight, + + /// + /// Зубчатое лезвие + /// + Serrated +} diff --git a/src/Tool/ElectricTool.cs b/src/Tool/ElectricTool.cs new file mode 100644 index 0000000..149a3a3 --- /dev/null +++ b/src/Tool/ElectricTool.cs @@ -0,0 +1,39 @@ +/// +/// Электрический инструмент для косьбы +/// +public class ElectricTool : Tool +{ + /// + /// Мощность электроинструмента + /// + private uint _power; + + /// + /// Мощность электроинструмента + /// + public uint Power => _power; + + /// + /// Инициализирует новый экземпляр класса с указанным именем, материалом, весом и мощностью + /// + /// Имя электроинструмента + /// Материал электроинструмента + /// Вес электроинструмента. Должен быть больше нуля + /// Мощность электроинструмента. Должна быть больше нуля + /// Выбрасывается, когда вес меньше или равен нулю + /// Выбрасывается, когда мощность равна нулю + 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 + { + } +} \ No newline at end of file diff --git a/src/Tool/Lawnmower.cs b/src/Tool/Lawnmower.cs new file mode 100644 index 0000000..86b7e43 --- /dev/null +++ b/src/Tool/Lawnmower.cs @@ -0,0 +1,50 @@ +/// +/// Газонокосилка +/// +public class Lawnmower : ElectricTool +{ + /// + /// Объем топлива + /// + private float _fuelCapacity; + /// + /// Текущий уровень топлива + /// + private float _fuelLevel; + + /// + /// Объем топлива + /// + public float FuelCapacity => _fuelCapacity; + /// + /// Текущий уровень топлива + /// + public float FuelLevel => _fuelLevel; + + /// + /// Инициализирует новый экземпляр класса с указанным именем, материалом, весом, мощностью и объемом бензина + /// + /// Имя электроинструмента + /// Материал электроинструмента + /// Вес электроинструмента. Должен быть больше нуля + /// Мощность электроинструмента. Должна быть больше нуля + /// Объем топлива. Должен быть больше нуля + /// Выбрасывается, когда вес меньше или равен нулю + /// Выбрасывается, когда мощность равна нулю + /// Выбрасывается, когда объем топлива равна нулю + 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; + } + + /// + /// Пополняет запас топлива до максимального уровня. + /// + public void Refuel() + { + _fuelLevel = _fuelCapacity; + } +} \ No newline at end of file diff --git a/src/Tool/ManualTool.cs b/src/Tool/ManualTool.cs new file mode 100644 index 0000000..63eb4d4 --- /dev/null +++ b/src/Tool/ManualTool.cs @@ -0,0 +1,45 @@ +/// +/// Ручной инструмент для косьбы +/// +public class ManualTool : Tool +{ + /// + /// Длина рукояти ручного инструмента в метрах + /// + private float _handleLength; + + /// + /// Длина рукояти ручного инструмента в метрах + /// + public float HandleLength => _handleLength; + + /// + /// Инициализирует новый экземпляр класса с указанным именем, материалом, весом и мощностью + /// + /// Название ручного инструмента + /// Материал ручного инструмента + /// Вес ручного инструмента в граммах + /// Длина рукояти ручного инструмента в метрах. Должна быть больше нуля + /// Выбрасывается, когда вес меньше или равен нулю + /// Выбрасывается, когда длина рукояти меньше или равна нулю + public ManualTool(string name, Material material, double weight, float handleLength) : base(name, material, weight) + { + if (handleLength <= 0) + throw new ArgumentException("Длина рукояти не может быть меньше или равна нулю", nameof(handleLength)); + + _handleLength = handleLength; + } + + /// + /// Заменяет рукоять на новую другой длины + /// + /// Новая длина рукоятки. Должна быть больше нуля + /// Выбрасывается, когда новая длина рукоятки меньше или равна нулю + public void SwitchHandle(float newHandleLength) + { + if (newHandleLength <= 0) + throw new ArgumentException("Длина рукояти не может быть меньше или равна нулю", nameof(newHandleLength)); + + _handleLength = newHandleLength; + } +} diff --git a/src/Tool/Material.cs b/src/Tool/Material.cs new file mode 100644 index 0000000..196bb59 --- /dev/null +++ b/src/Tool/Material.cs @@ -0,0 +1,20 @@ +/// +/// Материал инструмента +/// +public enum Material +{ + /// + /// Пластик + /// + Plastic, + + /// + /// Метал + /// + Metal, + + /// + /// Дерево + /// + Wood, +} \ No newline at end of file diff --git a/src/Tool/Scissors.cs b/src/Tool/Scissors.cs new file mode 100644 index 0000000..4bef7e0 --- /dev/null +++ b/src/Tool/Scissors.cs @@ -0,0 +1,71 @@ +/// +/// Класс, представляющий ножницы как ручной инструмент. +/// +public class Scissors : ManualTool +{ + private double _bladeSize; + + /// + /// Размер лезвия ножниц. + /// + public double BladeSize => _bladeSize; + + /// + /// Инициализирует новый экземпляр класса с указанными параметрами. + /// + /// Название ручного инструмента + /// Материал ручного инструмента + /// Вес ручного инструмента в граммах + /// Длина рукояти ручного инструмента в метрах. Должна быть больше нуля + /// Длина лезвия ножниц в метрах. Должна быть больше нуля + /// Выбрасывается, когда вес меньше или равен нулю + /// Выбрасывается, когда длина рукояти меньше или равна нулю + /// Выбрасывается, когда длина лезвия меньше или равна нулю + 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; + } + + /// + /// Оценивает точность работы ножниц на основе длины и равномерности лезвия + /// + /// Значение точности работы ножниц (от 0 до 1) + 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; + } +} diff --git a/src/Tool/Scythe.cs b/src/Tool/Scythe.cs new file mode 100644 index 0000000..652672b --- /dev/null +++ b/src/Tool/Scythe.cs @@ -0,0 +1,39 @@ +/// +/// Коса +/// +public class Scythe : ManualTool +{ + /// + /// Тип лезвия + /// + private BladeType _bladeType; + + /// + /// Тип лезвия + /// + public BladeType BladeType => _bladeType; + + /// + /// Создает новый экземпляр класса + /// + /// Название косы + /// Материал косы + /// Вес ручного инструмента в граммах + /// Длина рукояти ручного инструмента в метрах. Должна быть больше нуля + /// Тип лезвия + /// Выбрасывается, когда вес меньше или равен нулю. + /// Выбрасывается, когда длина рукояти меньше или равна нулю + public Scythe(string name, Material material, double weight, float handleLength, BladeType bladeType) : base(name, material, weight, handleLength) + { + _bladeType = bladeType; + } + + /// + /// Заменяет лезвие косы на новое + /// + /// Новый тип лезвия + public void SwitchBlade(BladeType newBladeType) + { + _bladeType = newBladeType; + } +} diff --git a/src/Tool/Tool.cs b/src/Tool/Tool.cs new file mode 100644 index 0000000..fe38dfd --- /dev/null +++ b/src/Tool/Tool.cs @@ -0,0 +1,67 @@ + +/// +/// Инструмент для косьбы +/// +public class Tool +{ + /// + /// Уникальный идентификатор инструмента + /// + private Guid _id = Guid.NewGuid(); + /// + /// Название инструмента + /// + private string _name; + /// + /// Материал инструмента + /// + private Material _material; + /// + /// Вес инструмента + /// + private double _weight; + + /// + /// Уникальный идентификатор инструмента + /// + public Guid Id => _id; + /// + /// Название инструмента + /// + public string Name => _name; + /// + /// Материал инструмента + /// + public Material Material => _material; + /// + /// Вес инструмента + /// + public double Weight => _weight; + + /// + /// Инициализирует новый экземпляр класса . + /// + /// Название инструмента. + /// Материал инструмента. + /// Вес инструмента. Должен быть больше нуля. + /// Выбрасывается, когда вес меньше или равен нулю. + public Tool(string name, Material material, double weight) + { + if (weight <= 0) + { + throw new ArgumentException("Вес инструмента не может быть меньше или равен нулю", nameof(weight)); + } + + _name = name; + _material = material; + _weight = weight; + } + + /// + /// Печатает детали инструмента, включая его имя, материал и вес. + /// + public void Print() + { + Console.WriteLine($"Инструмент: {Name}, Материал: {Material}, Вес: {Weight}"); + } +} diff --git a/src/Tool/Trimmer.cs b/src/Tool/Trimmer.cs new file mode 100644 index 0000000..dda2c5f --- /dev/null +++ b/src/Tool/Trimmer.cs @@ -0,0 +1,38 @@ +/// +/// Триммер +/// +public class Trimmer : ElectricTool +{ + /// + /// Режим работы + /// + private TrimmerMode _mode; + + /// + /// Режим работы + /// + public TrimmerMode Mode => _mode; + + /// + /// Инициализирует новый экземпляр класса с указанным именем, материалом, весом и мощностью + /// + /// Имя электроинструмента + /// Материал электроинструмента + /// Вес электроинструмента. Должен быть больше нуля + /// Мощность электроинструмента. Должна быть больше нуля + /// Выбрасывается, когда вес меньше или равен нулю + /// Выбрасывается, когда мощность равна нулю + public Trimmer(string name, Material material, double weight, uint power) : base(name, material, weight, power) + { + _mode = TrimmerMode.Normal; + } + + /// + /// Изменяет режим работы обрезки + /// + /// Новый режим обрезки, который нужно установить + public void ChangeMode(TrimmerMode mode) + { + _mode = mode; + } +} \ No newline at end of file diff --git a/src/Tool/TrimmerMode.cs b/src/Tool/TrimmerMode.cs new file mode 100644 index 0000000..e75bb5a --- /dev/null +++ b/src/Tool/TrimmerMode.cs @@ -0,0 +1,20 @@ +/// +/// Режим работы триммера +/// +public enum TrimmerMode +{ + /// + /// Нормальный + /// + Normal, + + /// + /// Турбо + /// + Turbo, + + /// + /// Эко + /// + Eco +} \ No newline at end of file