diff --git a/KPO_Lab.sln b/KPO_Lab.sln
index 94ebd7b..a963052 100644
--- a/KPO_Lab.sln
+++ b/KPO_Lab.sln
@@ -3,7 +3,12 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.7.34202.233
MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tool", "Tool/Tool.csproj", "{73C85CBC-5C3A-4F43-8B10-1462B52F709E}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tool", "Tool\Tool.csproj", "{73C85CBC-5C3A-4F43-8B10-1462B52F709E}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lab2", "Lab2\Lab2.csproj", "{BC81743D-B4D3-4D25-A966-AD697757E98C}"
+ ProjectSection(ProjectDependencies) = postProject
+ {73C85CBC-5C3A-4F43-8B10-1462B52F709E} = {73C85CBC-5C3A-4F43-8B10-1462B52F709E}
+ EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -15,6 +20,10 @@ Global
{73C85CBC-5C3A-4F43-8B10-1462B52F709E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{73C85CBC-5C3A-4F43-8B10-1462B52F709E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{73C85CBC-5C3A-4F43-8B10-1462B52F709E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {BC81743D-B4D3-4D25-A966-AD697757E98C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {BC81743D-B4D3-4D25-A966-AD697757E98C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {BC81743D-B4D3-4D25-A966-AD697757E98C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {BC81743D-B4D3-4D25-A966-AD697757E98C}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/Lab2/App.xaml b/Lab2/App.xaml
new file mode 100644
index 0000000..94cb942
--- /dev/null
+++ b/Lab2/App.xaml
@@ -0,0 +1,9 @@
+
+
+
+
+
diff --git a/Lab2/App.xaml.cs b/Lab2/App.xaml.cs
new file mode 100644
index 0000000..e8c336f
--- /dev/null
+++ b/Lab2/App.xaml.cs
@@ -0,0 +1,11 @@
+using System.Windows;
+
+namespace Lab2
+{
+ ///
+ /// Interaction logic for App.xaml
+ ///
+ public partial class App : Application
+ {
+ }
+}
diff --git a/Lab2/Lab2.csproj b/Lab2/Lab2.csproj
new file mode 100644
index 0000000..d40a68d
--- /dev/null
+++ b/Lab2/Lab2.csproj
@@ -0,0 +1,18 @@
+
+
+
+ WinExe
+ net7.0-windows
+ enable
+ true
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Lab2/src/AssemblyInfo.cs b/Lab2/src/AssemblyInfo.cs
new file mode 100644
index 0000000..8b5504e
--- /dev/null
+++ b/Lab2/src/AssemblyInfo.cs
@@ -0,0 +1,10 @@
+using System.Windows;
+
+[assembly: ThemeInfo(
+ ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
+ //(used if a resource is not found in the page,
+ // or application resource dictionaries)
+ ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
+ //(used if a resource is not found in the page,
+ // app, or any theme specific resource dictionaries)
+)]
diff --git a/Lab2/src/Form/CreateLawnmower.xaml b/Lab2/src/Form/CreateLawnmower.xaml
new file mode 100644
index 0000000..f79793b
--- /dev/null
+++ b/Lab2/src/Form/CreateLawnmower.xaml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Lab2/src/Form/CreateLawnmower.xaml.cs b/Lab2/src/Form/CreateLawnmower.xaml.cs
new file mode 100644
index 0000000..05e979b
--- /dev/null
+++ b/Lab2/src/Form/CreateLawnmower.xaml.cs
@@ -0,0 +1,95 @@
+using System;
+using System.Globalization;
+using System.Windows;
+
+namespace Lab2
+{
+ ///
+ /// Interaction logic for CreateLawnmower.xaml
+ ///
+ public partial class CreateLawnmower : Window
+ {
+ ///
+ /// Определяет, сохранять ли изменения
+ ///
+ private bool _save;
+ ///
+ /// Газонокосилка для редактирования
+ ///
+ private Lawnmower _lawnmower;
+
+ ///
+ /// Конструктор
+ ///
+ /// Газонокосилка для редактирования
+ /// Выбрасывается, когда газонокосилка равна null
+ public CreateLawnmower(Lawnmower parLawnmower)
+ {
+ if (parLawnmower == null)
+ throw new ArgumentNullException(nameof(parLawnmower));
+
+ InitializeComponent();
+
+ _materialComboBox.ItemsSource = Enum.GetValues(typeof(Material));
+
+ _lawnmower = parLawnmower;
+
+ Title = $"Lawnmower {_lawnmower.Id}";
+ SyncFields();
+ }
+
+ ///
+ /// Синхронизирует поля формы с данными
+ ///
+ private void SyncFields()
+ {
+ _nameTextBox.Text = _lawnmower.Name;
+ _materialComboBox.SelectedItem = _lawnmower.Material;
+ _weightTextBox.Text = _lawnmower.Weight.ToString(CultureInfo.CurrentCulture);
+ _powerTextBox.Text = _lawnmower.Power.ToString();
+ _fuelСapacityTextBox.Text = _lawnmower.FuelCapacity.ToString(CultureInfo.CurrentCulture);
+ }
+
+ ///
+ /// Синхронизирует данные с полей формы
+ ///
+ private void SyncData()
+ {
+ _lawnmower.Name = _nameTextBox.Text;
+ _lawnmower.Material = (Material)_materialComboBox.SelectedItem;
+ _lawnmower.Weight = Convert.ToDouble(_weightTextBox.Text, CultureInfo.CurrentCulture);
+ _lawnmower.Power = Convert.ToUInt32(_powerTextBox.Text);
+ _lawnmower.FuelCapacity = (float)Convert.ToDouble(_fuelСapacityTextBox.Text, CultureInfo.CurrentCulture);
+ }
+
+ ///
+ /// Обработчик нажатия на кнопку "Save"
+ ///
+ private void SaveButton_Click(object sender, RoutedEventArgs e)
+ {
+ _save = true;
+
+ Close();
+ }
+
+ ///
+ /// Обработчик события закрытия окна
+ ///
+ private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
+ {
+ if (!_save)
+ return;
+
+ try
+ {
+ SyncData();
+ DialogResult = true;
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message);
+ e.Cancel = true;
+ }
+ }
+ }
+}
diff --git a/Lab2/src/Form/CreateScissors.xaml b/Lab2/src/Form/CreateScissors.xaml
new file mode 100644
index 0000000..e12bb33
--- /dev/null
+++ b/Lab2/src/Form/CreateScissors.xaml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Lab2/src/Form/CreateScissors.xaml.cs b/Lab2/src/Form/CreateScissors.xaml.cs
new file mode 100644
index 0000000..b997db0
--- /dev/null
+++ b/Lab2/src/Form/CreateScissors.xaml.cs
@@ -0,0 +1,95 @@
+using System;
+using System.Globalization;
+using System.Windows;
+
+namespace Lab2
+{
+ ///
+ /// Interaction logic for CreateScissors.xaml
+ ///
+ public partial class CreateScissors : Window
+ {
+ ///
+ /// Определяет, сохранять ли изменения
+ ///
+ private bool _save;
+ ///
+ /// Ножницы для редактирования
+ ///
+ private Scissors _scissors;
+
+ ///
+ /// Конструктор
+ ///
+ /// Ножницы для редактирования
+ /// Выбрасывается, когда ножницы равны null
+ public CreateScissors(Scissors parScissors)
+ {
+ if (parScissors == null)
+ throw new ArgumentNullException(nameof(parScissors));
+
+ InitializeComponent();
+
+ _materialComboBox.ItemsSource = Enum.GetValues(typeof(Material));
+
+ _scissors = parScissors;
+
+ Title = $"Scissors {_scissors.Id}";
+ SyncFields();
+ }
+
+ ///
+ /// Синхронизирует поля формы с данными
+ ///
+ private void SyncFields()
+ {
+ _nameTextBox.Text = _scissors.Name;
+ _materialComboBox.SelectedItem = _scissors.Material;
+ _weightTextBox.Text = _scissors.Weight.ToString(CultureInfo.CurrentCulture);
+ _handleLengthTextBox.Text = _scissors.HandleLength.ToString(CultureInfo.CurrentCulture);
+ _bladeSizeTextBox.Text = _scissors.BladeSize.ToString(CultureInfo.CurrentCulture);
+ }
+
+ ///
+ /// Синхронизирует данные с полей формы
+ ///
+ private void SyncData()
+ {
+ _scissors.Name = _nameTextBox.Text;
+ _scissors.Material = (Material)_materialComboBox.SelectedItem;
+ _scissors.Weight = Convert.ToDouble(_weightTextBox.Text, CultureInfo.CurrentCulture);
+ _scissors.HandleLength = (float)Convert.ToDouble(_handleLengthTextBox.Text, CultureInfo.CurrentCulture);
+ _scissors.BladeSize = Convert.ToDouble(_bladeSizeTextBox.Text, CultureInfo.CurrentCulture);
+ }
+
+ ///
+ /// Обработчик нажатия на кнопку "Save"
+ ///
+ private void SaveButton_Click(object sender, RoutedEventArgs e)
+ {
+ _save = true;
+
+ Close();
+ }
+
+ ///
+ /// Обработчик события закрытия окна
+ ///
+ private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
+ {
+ if (!_save)
+ return;
+
+ try
+ {
+ SyncData();
+ DialogResult = true;
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message);
+ e.Cancel = true;
+ }
+ }
+ }
+}
diff --git a/Lab2/src/Form/CreateScythe.xaml b/Lab2/src/Form/CreateScythe.xaml
new file mode 100644
index 0000000..411b81a
--- /dev/null
+++ b/Lab2/src/Form/CreateScythe.xaml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Lab2/src/Form/CreateScythe.xaml.cs b/Lab2/src/Form/CreateScythe.xaml.cs
new file mode 100644
index 0000000..75feac5
--- /dev/null
+++ b/Lab2/src/Form/CreateScythe.xaml.cs
@@ -0,0 +1,96 @@
+using System;
+using System.Globalization;
+using System.Windows;
+
+namespace Lab2
+{
+ ///
+ /// Interaction logic for CreateScythe.xaml
+ ///
+ public partial class CreateScythe : Window
+ {
+ ///
+ /// Определяет, сохранять ли изменения
+ ///
+ private bool _save;
+ ///
+ /// Коса для редактирования
+ ///
+ private Scythe _scythe;
+
+ ///
+ /// Конструктор
+ ///
+ /// Коса для редактирования
+ /// Выбрасывается, когда коса равна null
+ public CreateScythe(Scythe parScythe)
+ {
+ if (parScythe == null)
+ throw new ArgumentNullException(nameof(parScythe));
+
+ InitializeComponent();
+
+ _materialComboBox.ItemsSource = Enum.GetValues(typeof(Material));
+ _bladeTypeComboBox.ItemsSource = Enum.GetValues(typeof(BladeType));
+
+ _scythe = parScythe;
+
+ Title = $"Scythe {_scythe.Id}";
+ SyncFields();
+ }
+
+ ///
+ /// Синхронизирует поля формы с данными
+ ///
+ private void SyncFields()
+ {
+ _nameTextBox.Text = _scythe.Name;
+ _materialComboBox.SelectedItem = _scythe.Material;
+ _weightTextBox.Text = _scythe.Weight.ToString(CultureInfo.CurrentCulture);
+ _handleLengthTextBox.Text = _scythe.HandleLength.ToString(CultureInfo.CurrentCulture);
+ _bladeTypeComboBox.SelectedItem = _scythe.BladeType;
+ }
+
+ ///
+ /// Синхронизирует данные с полей формы
+ ///
+ private void SyncData()
+ {
+ _scythe.Name = _nameTextBox.Text;
+ _scythe.Material = (Material)_materialComboBox.SelectedItem;
+ _scythe.Weight = Convert.ToDouble(_weightTextBox.Text, CultureInfo.CurrentCulture);
+ _scythe.HandleLength = (float)Convert.ToDouble(_handleLengthTextBox.Text, CultureInfo.CurrentCulture);
+ _scythe.BladeType = (BladeType)_bladeTypeComboBox.SelectedItem;
+ }
+
+ ///
+ /// Обработчик события нажатия на кнопку "Save"
+ ///
+ private void SaveButton_Click(object sender, RoutedEventArgs e)
+ {
+ _save = true;
+
+ Close();
+ }
+
+ ///
+ /// Обработчик события закрытия окна
+ ///
+ private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
+ {
+ if (!_save)
+ return;
+
+ try
+ {
+ SyncData();
+ DialogResult = true;
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message);
+ e.Cancel = true;
+ }
+ }
+ }
+}
diff --git a/Lab2/src/Form/CreateTrimmer.xaml b/Lab2/src/Form/CreateTrimmer.xaml
new file mode 100644
index 0000000..5ac97bd
--- /dev/null
+++ b/Lab2/src/Form/CreateTrimmer.xaml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Lab2/src/Form/CreateTrimmer.xaml.cs b/Lab2/src/Form/CreateTrimmer.xaml.cs
new file mode 100644
index 0000000..a6e5c22
--- /dev/null
+++ b/Lab2/src/Form/CreateTrimmer.xaml.cs
@@ -0,0 +1,96 @@
+using System;
+using System.Globalization;
+using System.Windows;
+
+namespace Lab2
+{
+ ///
+ /// Interaction logic for CreateTrimmer.xaml
+ ///
+ public partial class CreateTrimmer : Window
+ {
+ ///
+ /// Определяет, сохранять ли изменения
+ ///
+ private bool _save;
+ ///
+ /// Триммер для редактирования
+ ///
+ private readonly Trimmer _trimmer;
+
+ ///
+ /// Конструктор
+ ///
+ /// Триммер для редактирования
+ /// Выбрасывается, когда триммер равен null
+ public CreateTrimmer(Trimmer parTrimmer)
+ {
+ if (parTrimmer == null)
+ throw new ArgumentNullException(nameof(parTrimmer));
+
+ InitializeComponent();
+
+ _materialComboBox.ItemsSource = Enum.GetValues(typeof(Material));
+ _modeComboBox.ItemsSource = Enum.GetValues(typeof(TrimmerMode));
+
+ _trimmer = parTrimmer;
+
+ Title = $"Trimmer {_trimmer.Id}";
+ SyncFields();
+ }
+
+ ///
+ /// Синхронизирует поля формы с данными
+ ///
+ private void SyncFields()
+ {
+ _nameTextBox.Text = _trimmer.Name;
+ _materialComboBox.SelectedItem = _trimmer.Material;
+ _weightTextBox.Text = _trimmer.Weight.ToString(CultureInfo.CurrentCulture);
+ _powerTextBox.Text = _trimmer.Power.ToString();
+ _modeComboBox.SelectedItem = _trimmer.Mode;
+ }
+
+ ///
+ /// Синхронизирует данные с полей формы
+ ///
+ private void SyncData()
+ {
+ _trimmer.Name = _nameTextBox.Text;
+ _trimmer.Material = (Material)_materialComboBox.SelectedItem;
+ _trimmer.Weight = Convert.ToDouble(_weightTextBox.Text, CultureInfo.CurrentCulture);
+ _trimmer.Power = Convert.ToUInt32(_powerTextBox.Text);
+ _trimmer.Mode = (TrimmerMode)_modeComboBox.SelectedItem;
+ }
+
+ ///
+ /// Обработчик события нажатия на кнопку "Save"
+ ///
+ private void SaveButton_Click(object sender, RoutedEventArgs e)
+ {
+ _save = true;
+
+ Close();
+ }
+
+ ///
+ /// Обработчик события закрытия окна
+ ///
+ private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
+ {
+ if (!_save)
+ return;
+
+ try
+ {
+ SyncData();
+ DialogResult = true;
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message);
+ e.Cancel = true;
+ }
+ }
+ }
+}
diff --git a/Lab2/src/Form/MainWindow.xaml b/Lab2/src/Form/MainWindow.xaml
new file mode 100644
index 0000000..af29502
--- /dev/null
+++ b/Lab2/src/Form/MainWindow.xaml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Lab2/src/Form/MainWindow.xaml.cs b/Lab2/src/Form/MainWindow.xaml.cs
new file mode 100644
index 0000000..fc85988
--- /dev/null
+++ b/Lab2/src/Form/MainWindow.xaml.cs
@@ -0,0 +1,201 @@
+using System;
+using System.Windows;
+using System.Collections.ObjectModel;
+
+namespace Lab2
+{
+ ///
+ /// Interaction logic for MainWindow.xaml
+ ///
+ public partial class MainWindow : Window
+ {
+ ///
+ /// Коллекция инструментов
+ ///
+ private ObservableCollection _tools = new();
+
+ ///
+ /// Случайный генератор
+ ///
+ private Random _random = new();
+
+ ///
+ /// Конструктор
+ ///
+ public MainWindow()
+ {
+ InitializeComponent();
+
+ _dataGrid.ItemsSource = _tools;
+ }
+
+ ///
+ /// Проверяет, является ли индекс валидным
+ ///
+ /// Индекс
+ /// True, если индекс валиден, иначе - false
+ private bool IsValidIndex(int parIndex)
+ {
+ return _tools.Count > 0 && parIndex >= 0 && parIndex < _tools.Count;
+ }
+
+ ///
+ /// Возвращает выбранный инструмент
+ ///
+ /// Выбранный инструмент
+ private Tool? GetSelectedItem()
+ {
+ if (!IsValidIndex(_dataGrid.SelectedIndex))
+ return null;
+
+ return _tools[_dataGrid.SelectedIndex];
+ }
+
+ ///
+ /// Открывает форму редактирования
+ ///
+ /// Инструмент
+ /// True, если редактирование прошло успешно, иначе - false
+ private bool ShowEditForm(Tool parTool)
+ {
+ Window? form = parTool switch
+ {
+ Scissors scissors => new CreateScissors(scissors),
+ Scythe scythe => new CreateScythe(scythe),
+ Trimmer trimmer => new CreateTrimmer(trimmer),
+ Lawnmower lawnmower => new CreateLawnmower(lawnmower),
+ _ => null,
+ };
+
+ if (form == null)
+ return false;
+
+ var result = form.ShowDialog();
+
+ _dataGrid.Items.Refresh();
+
+ return result ?? false;
+ }
+
+
+ ///
+ /// Генерирует случайный триммер
+ ///
+ /// Случайный триммер
+ private Trimmer GenerateTrimmer()
+ {
+ return new Trimmer($"Tr{_random.Next(0, 100)}", (Material)_random.Next(0, 3), _random.Next(1, 100), (uint)_random.Next(1, 100));
+ }
+
+ ///
+ /// Генерирует случайную газонокосилку
+ ///
+ /// Случайная газонокосилка
+ private Lawnmower GenerateLawnmower()
+ {
+ return new Lawnmower($"La{_random.Next(0, 100)}", (Material)_random.Next(0, 3), _random.Next(1, 100), (uint)_random.Next(1, 100), _random.Next(1, 100));
+ }
+
+ ///
+ /// Генерирует случайные ножницы
+ ///
+ /// Случайные ножницы
+ private Scissors GenerateScissors()
+ {
+ return new Scissors($"Si{_random.Next(0, 100)}", (Material)_random.Next(0, 3), _random.Next(1, 100), (uint)_random.Next(1, 100), _random.Next(1, 100));
+ }
+
+ ///
+ /// Генерирует случайную косу
+ ///
+ /// Случайная коса
+ private Scythe GenerateScythe()
+ {
+ return new Scythe($"Sc{_random.Next(0, 100)}", (Material)_random.Next(0, 3), _random.Next(1, 100), (uint)_random.Next(1, 100), (BladeType)_random.Next(0, 3));
+ }
+
+ ///
+ /// Обработчик события нажатия на кнопку "Add Scissors"
+ ///
+ private void CreateScissorsButton_Click(object sender, RoutedEventArgs e)
+ {
+ var scissors = new Scissors("", Material.Wood, 1, 1, 1);
+
+ if (ShowEditForm(scissors))
+ _tools.Add(scissors);
+ }
+
+ ///
+ /// Обработчик события нажатия на кнопку "Add Scythe"
+ ///
+ private void CreateScytheButton_Click(object sender, RoutedEventArgs e)
+ {
+ var scythe = new Scythe("", Material.Wood, 1, 1, BladeType.Straight);
+
+ if (ShowEditForm(scythe))
+ _tools.Add(scythe);
+ }
+
+ ///
+ /// Обработчик события нажатия на кнопку "Add Trimmer"
+ ///
+ private void CreateTrimmerButton_Click(object sender, RoutedEventArgs e)
+ {
+ var trimmer = new Trimmer("", Material.Wood, 1, 1);
+
+ if (ShowEditForm(trimmer))
+ _tools.Add(trimmer);
+ }
+
+ ///
+ /// Обработчик события нажатия на кнопку "Add Lawnmower"
+ ///
+ private void CreateLawnmowerButton_Click(object sender, RoutedEventArgs e)
+ {
+ var lawnmower = new Lawnmower("", Material.Wood, 1, 1, 1);
+
+ if (ShowEditForm(lawnmower))
+ _tools.Add(lawnmower);
+ }
+
+ ///
+ /// Обработчик события нажатия на кнопку "Edit"
+ ///
+ private void EditSelectedButton_Click(object sender, RoutedEventArgs e)
+ {
+ var item = GetSelectedItem();
+ if (item == null)
+ return;
+
+ ShowEditForm(item);
+ }
+
+ ///
+ /// Обработчик события нажатия на кнопку "Delete"
+ ///
+ private void DeleteSelectedButton_Click(object sender, RoutedEventArgs e)
+ {
+ if (!IsValidIndex(_dataGrid.SelectedIndex))
+ return;
+
+ _tools.RemoveAt(_dataGrid.SelectedIndex);
+ }
+
+ ///
+ /// Обработчик события нажатия на кнопку "Generate"
+ ///
+ private void GenerateButton_Click(object sender, RoutedEventArgs e)
+ {
+ Tool tool = _random.Next(0, 4) switch
+ {
+ 0 => GenerateScissors(),
+ 1 => GenerateScythe(),
+ 2 => GenerateTrimmer(),
+ 3 => GenerateLawnmower(),
+ _ => GenerateScissors(),
+ };
+
+ _tools.Add(tool);
+ }
+ }
+}
diff --git a/Tool/src/Tool.cs b/Tool/src/Tool.cs
index 0b87c7c..de612fb 100644
--- a/Tool/src/Tool.cs
+++ b/Tool/src/Tool.cs
@@ -32,7 +32,7 @@ public class Tool
///
/// Материал инструмента
///
- public Material Material => _material;
+ public Material Material { get => _material; set => _material = value; }
///
/// Вес инструмента
///