diff --git a/Excavator/.editorconfig b/Excavator/.editorconfig
new file mode 100644
index 0000000..91c8707
--- /dev/null
+++ b/Excavator/.editorconfig
@@ -0,0 +1,4 @@
+[*.cs]
+
+# IDE0058: Значение выражения никогда не используется
+csharp_style_unused_value_expression_statement_preference = discard_variable
diff --git a/Excavator/Excavator.sln b/Excavator/Excavator.sln
index 328269f..f6d32b9 100644
--- a/Excavator/Excavator.sln
+++ b/Excavator/Excavator.sln
@@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.8.34330.188
MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Excavator", "Excavator\Excavator.csproj", "{DD2A9FE6-2F74-4387-9318-59AE715EBA73}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Excavator", "Excavator\Excavator.csproj", "{DD2A9FE6-2F74-4387-9318-59AE715EBA73}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
diff --git a/Excavator/Excavator/CollectionGenericObjects/AbstractCompany.cs b/Excavator/Excavator/CollectionGenericObjects/AbstractCompany.cs
index 9991527..201fd1b 100644
--- a/Excavator/Excavator/CollectionGenericObjects/AbstractCompany.cs
+++ b/Excavator/Excavator/CollectionGenericObjects/AbstractCompany.cs
@@ -1,4 +1,5 @@
using Excavator.Drawnings;
+using Excavator.Exceptions;
namespace Excavator.CollectionGenericObjects;
@@ -10,7 +11,7 @@ public abstract class AbstractCompany
///
/// Размер места (ширина)
///
- protected readonly int _placeSizeWidth = 210;
+ protected readonly int _placeSizeWidth = 200;
///
/// Размер места (высота)
@@ -35,7 +36,7 @@ public abstract class AbstractCompany
///
/// Вычисление максимального количества элементов, который можно разместить в окне
///
- private int GetMaxCount => _pictureWidth * _pictureHeight / (_placeSizeWidth * _placeSizeHeight);
+ private int GetMaxCount =>( _pictureWidth * _pictureHeight) / (2 * _placeSizeWidth * _placeSizeHeight);
///
/// Конструктор
@@ -95,14 +96,19 @@ public abstract class AbstractCompany
Bitmap bitmap = new(_pictureWidth, _pictureHeight);
Graphics graphics = Graphics.FromImage(bitmap);
DrawBackgound(graphics);
-
SetObjectsPosition();
for (int i = 0; i < (_collection?.Count ?? 0); ++i)
{
- DrawningTrackedVehicle? obj = _collection?.Get(i);
- obj?.DrawTransport(graphics);
+ try
+ {
+ DrawningTrackedVehicle? obj = _collection?.Get(i);
+ obj?.DrawTransport(graphics);
+ }
+ catch (ObjectNotFoundException)
+ {
+ continue;
+ }
}
-
return bitmap;
}
diff --git a/Excavator/Excavator/CollectionGenericObjects/Garage.cs b/Excavator/Excavator/CollectionGenericObjects/Garage.cs
index e3f6f2f..cd7d3b5 100644
--- a/Excavator/Excavator/CollectionGenericObjects/Garage.cs
+++ b/Excavator/Excavator/CollectionGenericObjects/Garage.cs
@@ -1,4 +1,5 @@
using Excavator.Drawnings;
+using Excavator.Exceptions;
namespace Excavator.CollectionGenericObjects;
@@ -36,16 +37,35 @@ public class Garage(int picWidth, int picHeight, ICollectionGenericObjects 0)
+ curWidth--;
+ else
+ {
+ curWidth = width - 1;
+ curHeight++;
+ }
+
+ if (curHeight >= height)
+ {
+ return;
+ }
}
}
}
+
+
diff --git a/Excavator/Excavator/CollectionGenericObjects/ListGenericObjects.cs b/Excavator/Excavator/CollectionGenericObjects/ListGenericObjects.cs
index 1c4dadc..dfdfc12 100644
--- a/Excavator/Excavator/CollectionGenericObjects/ListGenericObjects.cs
+++ b/Excavator/Excavator/CollectionGenericObjects/ListGenericObjects.cs
@@ -1,4 +1,6 @@
-
+using Excavator.Exceptions;
+
+
namespace Excavator.CollectionGenericObjects;
///
/// Параметризованный набор объектов
@@ -33,31 +35,51 @@ public class ListGenericObjects : ICollectionGenericObjects
public T? Get(int position)
{
- if (position >= Count || position < 0) return null;
+ if (position < 0 || position >= Count)
+ {
+ throw new PositionOutOfCollectionException(position);
+ }
+
return _collection[position];
}
public int Insert(T obj)
{
- if (Count + 1 > _maxCount) return -1;
+ if (Count == _maxCount)
+ {
+ throw new CollectionOverflowException(Count);
+ }
+
_collection.Add(obj);
- return Count;
+ return _collection.Count;
}
public int Insert(T obj, int position)
{
- if (Count + 1 > _maxCount) return -1;
- if (position < 0 || position > Count) return -1;
- _collection.Insert(position, obj);
- return 1;
- }
+
+ if (position < 0 || position > Count)
+ {
+ throw new PositionOutOfCollectionException(position);
+ }
+ if (Count == _maxCount)
+ {
+ throw new CollectionOverflowException(Count);
+ }
+ _collection.Insert(position, obj);
+ return position;
+ }
public T? Remove(int position)
{
- if (position < 0 || position > Count) return null;
- T? pos = _collection[position];
+
+ if (position < 0 || position > Count)
+ {
+ throw new PositionOutOfCollectionException(position);
+ }
+
+ T? obj = _collection[position];
_collection.RemoveAt(position);
- return pos;
+ return obj;
}
public IEnumerable GetItems()
diff --git a/Excavator/Excavator/CollectionGenericObjects/MassiveGenericObjects.cs b/Excavator/Excavator/CollectionGenericObjects/MassiveGenericObjects.cs
index cfb5a8b..ce1751d 100644
--- a/Excavator/Excavator/CollectionGenericObjects/MassiveGenericObjects.cs
+++ b/Excavator/Excavator/CollectionGenericObjects/MassiveGenericObjects.cs
@@ -1,4 +1,6 @@
+using Excavator.Exceptions;
+
namespace Excavator.CollectionGenericObjects;
///
@@ -49,53 +51,79 @@ public class MassiveGenericObjects : ICollectionGenericObjects
public T? Get(int position)
{
- if (position < 0 || position > Count)
+ if (position >= _collection.Length || position < 0)
{
- return null;
+ throw new PositionOutOfCollectionException(position);
+ }
+ if (_collection[position] == null)
+ {
+ throw new ObjectNotFoundException(position);
}
return _collection[position];
}
public int Insert(T excavator)
{
- return Insert(excavator, 0);
- }
- public int Insert(T excavator, int position)
- {
- int nullIndex = -1, i;
- if (!(position >= 0 && position < Count))
- return -1;
- for (i = position; i < Count; i++)
+ for (int i = 0; i < Count; i++)
{
if (_collection[i] == null)
{
- nullIndex = i;
- break;
+ _collection[i] = excavator;
+ return i;
}
}
- if (nullIndex < 0)
+
+ throw new CollectionOverflowException(Count);
+ }
+ public int Insert(T obj, int position)
+ {
+
+ if (position < 0 || position >= Count)
{
- return -1;
+ throw new PositionOutOfCollectionException(position);
}
- for (i = nullIndex; i > position; i--)
+
+ if (_collection[position] == null)
{
- _collection[i] = _collection[i - 1];
+ _collection[position] = obj;
+ return position;
}
- _collection[position] = excavator;
- return position;
+
+ for (int i = position + 1; i < Count; i++)
+ {
+ if (_collection[i] == null)
+ {
+ _collection[i] = obj;
+ return i;
+ }
+ }
+ for (int i = position - 1; i >= 0; i--)
+ {
+ if (_collection[i] == null)
+ {
+ _collection[i] = obj;
+ return i;
+ }
+ }
+
+ throw new CollectionOverflowException(Count);
}
- public T Remove(int position)
+ public T? Remove(int position)
{
- if (position < 0 || position > Count)
+
+ if (position < 0 || position >= Count)
{
- return null;
+ throw new PositionOutOfCollectionException(position);
+ }
+ if (_collection[position] == null)
+ {
+ throw new ObjectNotFoundException(position);
}
- T drawningTrackedVehicle = _collection[position];
- _collection[position] = null;
-
- return drawningTrackedVehicle;
+ T? obj = _collection[position];
+ _collection[position] = null;
+ return obj;
}
public IEnumerable GetItems()
diff --git a/Excavator/Excavator/CollectionGenericObjects/StorageCollection.cs b/Excavator/Excavator/CollectionGenericObjects/StorageCollection.cs
index 62c5d10..dae655d 100644
--- a/Excavator/Excavator/CollectionGenericObjects/StorageCollection.cs
+++ b/Excavator/Excavator/CollectionGenericObjects/StorageCollection.cs
@@ -1,5 +1,7 @@
using Excavator.Drawnings;
+using Excavator.Exceptions;
using System.Text;
+using static System.Windows.Forms.LinkLabel;
namespace Excavator.CollectionGenericObjects;
///
@@ -50,11 +52,15 @@ public class StorageCollection
///
/// Удаление коллекции
///
- /// Название коллекции
+ ///
public void DelCollection(string name)
{
- if (_storages.ContainsKey(name))
- _storages.Remove(name);
+ if (name == null || !_storages.ContainsKey(name))
+ {
+ return;
+ }
+
+ _storages.Remove(name);
}
///
@@ -88,12 +94,11 @@ public class StorageCollection
/// Сохранение информации по автомобилям в хранилище в файл
///
/// Путь и имя файла
- /// true - сохранение прошло успешно, false - ошибка при сохранении данных
- public bool SaveData(string filename)
+ public void SaveData(string filename)
{
if (_storages.Count == 0)
{
- return false;
+ throw new NullReferenceException("В хранилище отсутствуют коллекции для сохранения");
}
if (File.Exists(filename))
@@ -134,18 +139,16 @@ public class StorageCollection
}
}
- return true;
}
///
/// Загрузка информации по автомобилям в хранилище из файла
///
/// Путь и имя файла
- /// true - загрузка прошла успешно, false - ошибка при загрузке данных
- public bool LoadData(string filename)
+ public void LoadData(string filename)
{
if (!File.Exists(filename))
{
- return false;
+ throw new FileNotFoundException("Файл не существует");
}
using (StreamReader reader = File.OpenText(filename))
@@ -153,11 +156,11 @@ public class StorageCollection
string? str = reader.ReadLine();
if (str == null || str.Length == 0)
{
- return false;
+ throw new FileFormatException("В файле нет данных");
}
- if (!str.StartsWith(_collectionKey))
+ if (!str.Equals(_collectionKey))
{
- return false;
+ throw new FileFormatException("В файле неверные данные");
}
_storages.Clear();
string? strs = "";
@@ -175,25 +178,31 @@ public class StorageCollection
if (collection == null)
{
- return false;
+ throw new InvalidOperationException("Не удалось создать коллекцию");
}
collection.MaxCount = Convert.ToInt32(record[2]);
string[] set = record[3].Split(_separatorItems, StringSplitOptions.RemoveEmptyEntries);
foreach (string elem in set)
{
- if (elem?.CreateDrawningTrackedVehicle() is T car)
+ if (elem?.CreateDrawningTrackedVehicle() is T ship)
{
- if (collection.Insert(car) == -1)
+ try
{
- return false;
+ if (collection.Insert(ship) == -1)
+ {
+ throw new InvalidOperationException("Объект не удалось добавить в коллекцию: " + record[3]);
+ }
+ }
+ catch (CollectionOverflowException ex)
+ {
+ throw new OverflowException("Коллекция переполнена", ex);
}
}
}
_storages.Add(record[0], collection);
}
- return true;
}
}
///
diff --git a/Excavator/Excavator/Excavator.csproj b/Excavator/Excavator/Excavator.csproj
index af03d74..c34a49f 100644
--- a/Excavator/Excavator/Excavator.csproj
+++ b/Excavator/Excavator/Excavator.csproj
@@ -8,6 +8,30 @@
enable
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
True
@@ -23,4 +47,10 @@
+
+
+ Always
+
+
+
\ No newline at end of file
diff --git a/Excavator/Excavator/Exceptions/CollectionOverflowException.cs b/Excavator/Excavator/Exceptions/CollectionOverflowException.cs
new file mode 100644
index 0000000..4d4cca8
--- /dev/null
+++ b/Excavator/Excavator/Exceptions/CollectionOverflowException.cs
@@ -0,0 +1,20 @@
+using System.Runtime.Serialization;
+
+namespace Excavator.Exceptions;
+
+///
+/// Класс, описывающий ошибку переполнения коллекции
+///
+[Serializable]
+internal class CollectionOverflowException : ApplicationException
+{
+ public CollectionOverflowException(int count) : base("В коллекции превышено допустимое количество: " + count) { }
+
+ public CollectionOverflowException() : base() { }
+
+ public CollectionOverflowException(string message) : base(message) { }
+
+ public CollectionOverflowException(string message, Exception exception) : base(message, exception) { }
+
+ protected CollectionOverflowException(SerializationInfo info, StreamingContext contex) : base(info, contex) { }
+}
\ No newline at end of file
diff --git a/Excavator/Excavator/Exceptions/ObjectNotFoundException.cs b/Excavator/Excavator/Exceptions/ObjectNotFoundException.cs
new file mode 100644
index 0000000..39cf0d7
--- /dev/null
+++ b/Excavator/Excavator/Exceptions/ObjectNotFoundException.cs
@@ -0,0 +1,20 @@
+using System.Runtime.Serialization;
+
+namespace Excavator.Exceptions;
+
+///
+/// Класс, описывающий ошибку, что по указанной позиции нет элемента
+///
+[Serializable]
+internal class ObjectNotFoundException : ApplicationException
+{
+ public ObjectNotFoundException(int i) : base("Не найден объект по позиции " + i) { }
+
+ public ObjectNotFoundException() : base() { }
+
+ public ObjectNotFoundException(string message) : base(message) { }
+
+ public ObjectNotFoundException(string message, Exception exception) : base(message, exception) { }
+
+ protected ObjectNotFoundException(SerializationInfo info, StreamingContext contex) : base(info, contex) { }
+}
\ No newline at end of file
diff --git a/Excavator/Excavator/Exceptions/PositionOutOfCollectionException.cs b/Excavator/Excavator/Exceptions/PositionOutOfCollectionException.cs
new file mode 100644
index 0000000..0fb60d0
--- /dev/null
+++ b/Excavator/Excavator/Exceptions/PositionOutOfCollectionException.cs
@@ -0,0 +1,15 @@
+using System.Runtime.Serialization;
+namespace Excavator.Exceptions;
+
+///
+/// Класс, описывающий ошибку выхода за границы коллекции
+///
+[Serializable]
+internal class PositionOutOfCollectionException : ApplicationException
+{
+ public PositionOutOfCollectionException(int i) : base("Выход за границы коллекции.Позиция " + i) { }
+ public PositionOutOfCollectionException() : base() { }
+ public PositionOutOfCollectionException(string message) : base(message) { }
+ public PositionOutOfCollectionException(string message, Exception exception) : base(message, exception) { }
+ protected PositionOutOfCollectionException(SerializationInfo info, StreamingContext contex) : base(info, contex) { }
+}
\ No newline at end of file
diff --git a/Excavator/Excavator/FormTrackedVehicleCollection.Designer.cs b/Excavator/Excavator/FormTrackedVehicleCollection.Designer.cs
index e420733..752cd42 100644
--- a/Excavator/Excavator/FormTrackedVehicleCollection.Designer.cs
+++ b/Excavator/Excavator/FormTrackedVehicleCollection.Designer.cs
@@ -66,9 +66,9 @@
groupBox1.Controls.Add(panelStorage);
groupBox1.Controls.Add(comboBoxSelectorCompany);
groupBox1.Dock = DockStyle.Right;
- groupBox1.Location = new Point(939, 28);
+ groupBox1.Location = new Point(843, 28);
groupBox1.Name = "groupBox1";
- groupBox1.Size = new Size(221, 778);
+ groupBox1.Size = new Size(221, 785);
groupBox1.TabIndex = 0;
groupBox1.TabStop = false;
groupBox1.Text = "Инструменты";
@@ -82,9 +82,9 @@
panelCompanyTools.Controls.Add(buttonDelExcavator);
panelCompanyTools.Dock = DockStyle.Bottom;
panelCompanyTools.Enabled = false;
- panelCompanyTools.Location = new Point(3, 476);
+ panelCompanyTools.Location = new Point(3, 514);
panelCompanyTools.Name = "panelCompanyTools";
- panelCompanyTools.Size = new Size(215, 299);
+ panelCompanyTools.Size = new Size(215, 268);
panelCompanyTools.TabIndex = 9;
//
// buttonAddTrackedVehicle
@@ -101,7 +101,7 @@
// buttonRefresh
//
buttonRefresh.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
- buttonRefresh.Location = new Point(18, 221);
+ buttonRefresh.Location = new Point(18, 196);
buttonRefresh.Name = "buttonRefresh";
buttonRefresh.Size = new Size(176, 45);
buttonRefresh.TabIndex = 6;
@@ -112,7 +112,7 @@
// buttonGoToCheck
//
buttonGoToCheck.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
- buttonGoToCheck.Location = new Point(18, 170);
+ buttonGoToCheck.Location = new Point(18, 145);
buttonGoToCheck.Name = "buttonGoToCheck";
buttonGoToCheck.Size = new Size(171, 45);
buttonGoToCheck.TabIndex = 5;
@@ -122,7 +122,7 @@
//
// maskedTextBox
//
- maskedTextBox.Location = new Point(10, 75);
+ maskedTextBox.Location = new Point(10, 61);
maskedTextBox.Mask = "00";
maskedTextBox.Name = "maskedTextBox";
maskedTextBox.Size = new Size(191, 27);
@@ -132,7 +132,7 @@
// buttonDelExcavator
//
buttonDelExcavator.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
- buttonDelExcavator.Location = new Point(18, 119);
+ buttonDelExcavator.Location = new Point(18, 94);
buttonDelExcavator.Name = "buttonDelExcavator";
buttonDelExcavator.Size = new Size(171, 45);
buttonDelExcavator.TabIndex = 4;
@@ -142,7 +142,7 @@
//
// buttonCreateCompany
//
- buttonCreateCompany.Location = new Point(24, 441);
+ buttonCreateCompany.Location = new Point(24, 374);
buttonCreateCompany.Name = "buttonCreateCompany";
buttonCreateCompany.Size = new Size(180, 29);
buttonCreateCompany.TabIndex = 8;
@@ -162,12 +162,12 @@
panelStorage.Dock = DockStyle.Top;
panelStorage.Location = new Point(3, 23);
panelStorage.Name = "panelStorage";
- panelStorage.Size = new Size(215, 362);
+ panelStorage.Size = new Size(215, 311);
panelStorage.TabIndex = 7;
//
// buttonCollectionDel
//
- buttonCollectionDel.Location = new Point(15, 287);
+ buttonCollectionDel.Location = new Point(15, 271);
buttonCollectionDel.Name = "buttonCollectionDel";
buttonCollectionDel.Size = new Size(180, 29);
buttonCollectionDel.TabIndex = 6;
@@ -237,7 +237,7 @@
comboBoxSelectorCompany.DropDownStyle = ComboBoxStyle.DropDownList;
comboBoxSelectorCompany.FormattingEnabled = true;
comboBoxSelectorCompany.Items.AddRange(new object[] { "Хранилище" });
- comboBoxSelectorCompany.Location = new Point(18, 402);
+ comboBoxSelectorCompany.Location = new Point(18, 340);
comboBoxSelectorCompany.Name = "comboBoxSelectorCompany";
comboBoxSelectorCompany.Size = new Size(191, 28);
comboBoxSelectorCompany.TabIndex = 0;
@@ -246,9 +246,9 @@
// pictureBox
//
pictureBox.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
- pictureBox.Location = new Point(1, 27);
+ pictureBox.Location = new Point(1, 28);
pictureBox.Name = "pictureBox";
- pictureBox.Size = new Size(938, 773);
+ pictureBox.Size = new Size(842, 797);
pictureBox.TabIndex = 1;
pictureBox.TabStop = false;
//
@@ -258,7 +258,7 @@
menuStrip.Items.AddRange(new ToolStripItem[] { файлToolStripMenuItem });
menuStrip.Location = new Point(0, 0);
menuStrip.Name = "menuStrip";
- menuStrip.Size = new Size(1160, 28);
+ menuStrip.Size = new Size(1064, 28);
menuStrip.TabIndex = 2;
menuStrip.Text = "menuStrip1";
//
@@ -298,7 +298,7 @@
//
AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font;
- ClientSize = new Size(1160, 806);
+ ClientSize = new Size(1064, 813);
Controls.Add(pictureBox);
Controls.Add(groupBox1);
Controls.Add(menuStrip);
diff --git a/Excavator/Excavator/FormTrackedVehicleCollection.cs b/Excavator/Excavator/FormTrackedVehicleCollection.cs
index 2edc8ec..8f29df0 100644
--- a/Excavator/Excavator/FormTrackedVehicleCollection.cs
+++ b/Excavator/Excavator/FormTrackedVehicleCollection.cs
@@ -1,5 +1,7 @@
using Excavator.CollectionGenericObjects;
using Excavator.Drawnings;
+using Excavator.Exceptions;
+using Microsoft.Extensions.Logging;
namespace Excavator;
@@ -17,13 +19,19 @@ public partial class FormTrackedVehicleCollection : Form
///
private AbstractCompany? _company = null;
+ ///
+ /// Логер
+ ///
+ private readonly ILogger _logger;
+
///
/// Конструктор
///
- public FormTrackedVehicleCollection()
+ public FormTrackedVehicleCollection(ILogger logger)
{
InitializeComponent();
_storageCollection = new();
+ _logger = logger;
}
@@ -45,7 +53,6 @@ public partial class FormTrackedVehicleCollection : Form
private void ButtonAddCar_Click(object sender, EventArgs e)
{
FormTrackedVehicleConfig form = new();
-
form.Show();
form.AddEvent(SetCar);
}
@@ -56,19 +63,24 @@ public partial class FormTrackedVehicleCollection : Form
///
private void SetCar(DrawningTrackedVehicle? car)
{
- if (_company == null || car == null)
+ try
{
- return;
- }
+ if (_company == null || car == null)
+ {
+ return;
+ }
- if (_company + car != -1)
- {
- MessageBox.Show("Объект добавлен");
- pictureBox.Image = _company.Show();
+ if (_company + car != -1)
+ {
+ MessageBox.Show("Объект добавлен");
+ _logger.LogInformation($"Добавлен объект {car.GetDataForSave()}");
+ pictureBox.Image = _company.Show();
+ }
}
- else
+ catch (CollectionOverflowException ex)
{
- MessageBox.Show("Не удалось добавить объект");
+ MessageBox.Show(ex.Message);
+ _logger.LogWarning($"Ошибка: {ex.Message}");
}
}
@@ -89,15 +101,25 @@ public partial class FormTrackedVehicleCollection : Form
return;
}
- int pos = Convert.ToInt32(maskedTextBox.Text);
- if (_company - pos != null)
+ try
{
- MessageBox.Show("Объект удален");
- pictureBox.Image = _company.Show();
+ int pos = Convert.ToInt32(maskedTextBox.Text);
+ if (_company - pos != null)
+ {
+ MessageBox.Show("Объект удален");
+ _logger.LogInformation($"Удален объект по позиции {pos}");
+ pictureBox.Image = _company.Show();
+ }
}
- else
+ catch (ObjectNotFoundException ex)
{
- MessageBox.Show("Не удалось удалить объект");
+ MessageBox.Show(ex.Message);
+ _logger.LogError($"Ошибка: {ex.Message}");
+ }
+ catch (PositionOutOfCollectionException ex)
+ {
+ MessageBox.Show(ex.Message);
+ _logger.LogError($"Ошибка: {ex.Message}");
}
}
@@ -156,28 +178,29 @@ public partial class FormTrackedVehicleCollection : Form
///
///
///
- private void buttonCollectionAdd_Click(object sender, EventArgs e)
- {
- if (string.IsNullOrEmpty(textBoxCollectionName.Text) || (!radioButtonList.Checked && !radioButtonMassive.Checked))
+ private void buttonCollectionAdd_Click(object sender, EventArgs e)
{
- MessageBox.Show("Не все данные заполнены", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
- return;
- }
+ if (string.IsNullOrEmpty(textBoxCollectionName.Text) || (!radioButtonList.Checked && !radioButtonMassive.Checked))
+ {
+ MessageBox.Show("Не все данные заполнены", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ _logger.LogError("Ошибка: Заполнены не все данные для добавления коллекции");
+ return;
+ }
- CollectionType collectionType = CollectionType.None;
- if (radioButtonMassive.Checked)
- {
- collectionType = CollectionType.Massive;
- }
- else if (radioButtonList.Checked)
- {
- collectionType = CollectionType.List;
- }
+ CollectionType collectionType = CollectionType.None;
+ if (radioButtonMassive.Checked)
+ {
+ collectionType = CollectionType.Massive;
+ }
+ else if (radioButtonList.Checked)
+ {
+ collectionType = CollectionType.List;
+ }
- _storageCollection.AddCollection(textBoxCollectionName.Text, collectionType);
- RerfreshListBoxItems();
-
- }
+ _storageCollection.AddCollection(textBoxCollectionName.Text, collectionType);
+ _logger.LogInformation($"Добавлена коллекция: {textBoxCollectionName.Text} типа: {collectionType}");
+ RerfreshListBoxItems();
+ }
///
/// Удаление коллекции
///
@@ -195,6 +218,8 @@ public partial class FormTrackedVehicleCollection : Form
return;
}
_storageCollection.DelCollection(listBoxCollection.SelectedItem.ToString());
+ _logger.LogInformation($"Удалена коллекция: {listBoxCollection.SelectedItem.ToString()}");
+
RerfreshListBoxItems();
}
///
@@ -253,18 +278,18 @@ public partial class FormTrackedVehicleCollection : Form
{
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
- if (_storageCollection.SaveData(saveFileDialog.FileName))
+ try
{
- MessageBox.Show("Сохранение прошло успешно",
- "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information);
+ _storageCollection.SaveData(saveFileDialog.FileName);
+ MessageBox.Show("Сохранение прошло успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information);
+ _logger.LogInformation("Сохранение в файл: {filename}", saveFileDialog.FileName);
}
- else
+ catch (Exception ex)
{
- MessageBox.Show("Не сохранилось", "Результат",
- MessageBoxButtons.OK, MessageBoxIcon.Error);
+ MessageBox.Show(ex.Message, "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ _logger.LogError("Ошибка: {Message}", ex.Message);
}
}
-
}
///
/// Обработка нажатия "Загрузка"
@@ -275,18 +300,21 @@ public partial class FormTrackedVehicleCollection : Form
{
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
- if (_storageCollection.LoadData(openFileDialog.FileName))
+ try
{
- MessageBox.Show("Загрузка прошла успешно",
- "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information);
+ _storageCollection.LoadData(openFileDialog.FileName);
+ MessageBox.Show("Загрузка прошло успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information);
RerfreshListBoxItems();
+ _logger.LogInformation("Загрузка из фала: {filename}", openFileDialog.FileName);
}
- else
+ catch (Exception ex)
{
- MessageBox.Show("Не загрузилось", "Результат",
- MessageBoxButtons.OK, MessageBoxIcon.Error);
+ MessageBox.Show("Не загрузилось", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ _logger.LogError("Ошибка: {Message}", ex.Message);
}
}
}
+
+
}
diff --git a/Excavator/Excavator/FormTrackedVehicleCollection.resx b/Excavator/Excavator/FormTrackedVehicleCollection.resx
index ee1748a..a4f11d6 100644
--- a/Excavator/Excavator/FormTrackedVehicleCollection.resx
+++ b/Excavator/Excavator/FormTrackedVehicleCollection.resx
@@ -126,4 +126,7 @@
310, 17
+
+ 25
+
\ No newline at end of file
diff --git a/Excavator/Excavator/Program.cs b/Excavator/Excavator/Program.cs
index f33af9d..0924217 100644
--- a/Excavator/Excavator/Program.cs
+++ b/Excavator/Excavator/Program.cs
@@ -1,3 +1,8 @@
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.DependencyInjection;
+using Serilog;
+
namespace Excavator
{
internal static class Program
@@ -8,10 +13,29 @@ namespace Excavator
[STAThread]
static void Main()
{
- // To customize application configuration such as set high DPI settings or default font,
- // see https://aka.ms/applicationconfiguration.
ApplicationConfiguration.Initialize();
- Application.Run(new FormTrackedVehicleCollection());
+
+ ServiceCollection services = new();
+ ConfigureServices(services);
+ using ServiceProvider serviceProvider = services.BuildServiceProvider();
+ Application.Run(serviceProvider.GetRequiredService());
+ }
+
+ private static void ConfigureServices(ServiceCollection services)
+ {
+ services
+ .AddSingleton()
+ .AddLogging(option =>
+ {
+ option.SetMinimumLevel(LogLevel.Information);
+ var config = new ConfigurationBuilder()
+ .AddJsonFile("serilogConfig.json", optional: false, reloadOnChange: true)
+ .Build();
+ option.AddSerilog(Log.Logger = new LoggerConfiguration()
+ .ReadFrom.Configuration(config)
+ .CreateLogger());
+ });
}
}
-}
\ No newline at end of file
+}
+
diff --git a/Excavator/Excavator/serilogConfig.json b/Excavator/Excavator/serilogConfig.json
new file mode 100644
index 0000000..2682115
--- /dev/null
+++ b/Excavator/Excavator/serilogConfig.json
@@ -0,0 +1,28 @@
+{
+ "AllowedHosts": "*",
+ "Serilog": {
+ "Using": [ "Serilog.Sinks.File", "Serilog.Sinks.Console" ],
+ "MinimumLevel": {
+ "Default": "Information",
+ "Override": {
+ "Microsoft": "Warning",
+ "System": "Warning"
+ }
+ },
+ "Enrich": [ "FromLogContext", "WithMachineName", "WithProcessId", "WithThreadId" ],
+ "WriteTo": [
+ { "Name": "Console" },
+ {
+ "Name": "File",
+ "Args": {
+ "path": "Logs/log_.log",
+ "rollingInterval": "Day",
+ "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.ffff} | {Level:u} | {SourceContext} | {Message:1j}{NewLine}{Exception}"
+ }
+ }
+ ]
+ }
+}
+
+
+