From a5d75eae3b269346360d027ed3d9e401cd80f7ab Mon Sep 17 00:00:00 2001 From: Egor_Shtyrkin Date: Mon, 13 May 2024 01:43:05 +0400 Subject: [PATCH 1/4] =?UTF-8?q?=D0=9B=D0=B0=D0=B1=D0=BE=D1=80=D0=B0=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=BD=D0=B0=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=B0=20=E2=84=967=201?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AbstractCompany.cs | 8 +++- .../ListGenericObjects.cs | 22 ++++------- .../MassiveGenericObjects.cs | 39 +++++++++---------- .../StorageCollection.cs | 33 ++++++++-------- .../WarshipDockService.cs | 3 +- .../Exceptions/CollectionOverflowException.cs | 20 ++++++++++ .../Exceptions/ObjectNotFoundException.cs | 20 ++++++++++ .../PositionOutOfCollectionException.cs | 20 ++++++++++ .../FormWarshipCollection.cs | 11 ++++-- .../ProjectAircraftCarrier.csproj | 4 ++ 10 files changed, 124 insertions(+), 56 deletions(-) create mode 100644 ProjectAircraftCarrier/ProjectAircraftCarrier/Exceptions/CollectionOverflowException.cs create mode 100644 ProjectAircraftCarrier/ProjectAircraftCarrier/Exceptions/ObjectNotFoundException.cs create mode 100644 ProjectAircraftCarrier/ProjectAircraftCarrier/Exceptions/PositionOutOfCollectionException.cs diff --git a/ProjectAircraftCarrier/ProjectAircraftCarrier/CollectionGenericObjects/AbstractCompany.cs b/ProjectAircraftCarrier/ProjectAircraftCarrier/CollectionGenericObjects/AbstractCompany.cs index 22e8493..1d30cea 100644 --- a/ProjectAircraftCarrier/ProjectAircraftCarrier/CollectionGenericObjects/AbstractCompany.cs +++ b/ProjectAircraftCarrier/ProjectAircraftCarrier/CollectionGenericObjects/AbstractCompany.cs @@ -101,8 +101,12 @@ public abstract class AbstractCompany SetObjectPosition(); for (int i = 0; i < (_collection?.Count ?? 0); ++i) { - DrawningWarship? obj = _collection?.Get(i); - obj?.DrawTransport(graphics); + try + { + DrawningWarship? obj = _collection?.Get(i); + obj?.DrawTransport(graphics); + } + catch (Exception) { } } return bitmap; diff --git a/ProjectAircraftCarrier/ProjectAircraftCarrier/CollectionGenericObjects/ListGenericObjects.cs b/ProjectAircraftCarrier/ProjectAircraftCarrier/CollectionGenericObjects/ListGenericObjects.cs index 1f2690b..d71a199 100644 --- a/ProjectAircraftCarrier/ProjectAircraftCarrier/CollectionGenericObjects/ListGenericObjects.cs +++ b/ProjectAircraftCarrier/ProjectAircraftCarrier/CollectionGenericObjects/ListGenericObjects.cs @@ -1,4 +1,6 @@ -namespace ProjectAircraftCarrier.CollectionGenericObjects; +using ProjectAircraftCarrier.Exceptions; + +namespace ProjectAircraftCarrier.CollectionGenericObjects; public class ListGenericObjects : ICollectionGenericObjects where T : class @@ -42,36 +44,28 @@ public class ListGenericObjects : ICollectionGenericObjects public T? Get(int position) { - // TODO проверка позиции - if (position >= Count || position < 0) return null; + if (position >= Count || position < 0) throw new PositionOutOfCollectionException(position); return _collection[position]; } public int Insert(T obj) { - // TODO проверка, что не превышено максимальное количество элементов - // TODO вставка в конец набора - if (Count == _maxCount) return -1; + if (Count == _maxCount) throw new CollectionOverflowException(Count); _collection.Add(obj); return Count; } public int Insert(T obj, int position) { - // TODO проверка, что не превышено максимальное количество элементов - // TODO проверка позиции - // TODO вставка по позиции - if (Count == _maxCount) return -1; - if (position >= Count || position < 0) return -1; + if (Count == _maxCount) throw new CollectionOverflowException(Count); + if (position >= Count || position < 0) throw new PositionOutOfCollectionException(position); _collection.Insert(position, obj); return position; } public T Remove(int position) { - // TODO проверка позиции - // TODO удаление объекта из списка - if (position >= Count || position < 0) return null; + if (position >= Count || position < 0) throw new PositionOutOfCollectionException(position); T obj = _collection[position]; _collection.RemoveAt(position); return obj; diff --git a/ProjectAircraftCarrier/ProjectAircraftCarrier/CollectionGenericObjects/MassiveGenericObjects.cs b/ProjectAircraftCarrier/ProjectAircraftCarrier/CollectionGenericObjects/MassiveGenericObjects.cs index 7751f1d..24dfa0c 100644 --- a/ProjectAircraftCarrier/ProjectAircraftCarrier/CollectionGenericObjects/MassiveGenericObjects.cs +++ b/ProjectAircraftCarrier/ProjectAircraftCarrier/CollectionGenericObjects/MassiveGenericObjects.cs @@ -1,4 +1,5 @@ -using System; +using ProjectAircraftCarrier.Exceptions; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -54,29 +55,29 @@ public class MassiveGenericObjects : ICollectionGenericObjects public T? Get(int position) { - // TODO проверка позиции - if (position >= _collection.Length || position < 0) - { - return null; - } + if (position >= _collection.Length || position < 0) throw new PositionOutOfCollectionException(position); + if (_collection[position] == null) throw new ObjectNotFoundException(position); return _collection[position]; } public int Insert(T obj) { - // TODO вставка в свободное место набора - return Insert(obj, 0); + int index = 0; + while (index < _collection.Length) + { + if (_collection[index] == null) + { + _collection[index] = obj; + return index; + } + ++index; + } + throw new CollectionOverflowException(Count); } public int Insert(T obj, int position) { - // TODO проверка позиции - // TODO проверка, что элемент массива по этой позиции пустой, если нет, то - // ищется свободное место после этой позиции и идёт вставка туда - // если нет после, ищем до - // TODO вставка - if (position >= _collection.Length || position < 0) - return -1; + if (position >= _collection.Length || position < 0) throw new PositionOutOfCollectionException(position); if (_collection[position] == null) { _collection[position] = obj; @@ -102,15 +103,13 @@ public class MassiveGenericObjects : ICollectionGenericObjects } --index; } - return -1; + throw new CollectionOverflowException(Count); } public T? Remove(int position) { - // TODO проверка позиции - // TODO удаление объекта из массива, присвоив элементу массива значение null - if (position >= _collection.Length || position < 0) - return null; + if (position >= _collection.Length || position < 0) throw new PositionOutOfCollectionException(position); + if (_collection[position] == null) throw new ObjectNotFoundException(position); T obj = _collection[position]; _collection[position] = null; return obj; diff --git a/ProjectAircraftCarrier/ProjectAircraftCarrier/CollectionGenericObjects/StorageCollection.cs b/ProjectAircraftCarrier/ProjectAircraftCarrier/CollectionGenericObjects/StorageCollection.cs index 3497f48..a7b5def 100644 --- a/ProjectAircraftCarrier/ProjectAircraftCarrier/CollectionGenericObjects/StorageCollection.cs +++ b/ProjectAircraftCarrier/ProjectAircraftCarrier/CollectionGenericObjects/StorageCollection.cs @@ -1,4 +1,5 @@ using ProjectAircraftCarrier.Drawnings; +using ProjectAircraftCarrier.Exceptions; using System.Text; namespace ProjectAircraftCarrier.CollectionGenericObjects; @@ -31,8 +32,6 @@ public class StorageCollection /// тип коллекции public void AddCollection(string name, CollectionType collectionType) { - // TODO проверка, что name не пустой и нет в словаре записи с таким ключом - // TODO Прописать логику для добавления if (_storages.ContainsKey(name)) return; if (collectionType == CollectionType.None) return; else if (collectionType == CollectionType.Massive) @@ -47,7 +46,6 @@ public class StorageCollection /// Название коллекции public void DelCollection(string name) { - // TODO Прописать логику для удаления коллекции if (_storages.ContainsKey(name)) _storages.Remove(name); } @@ -61,7 +59,6 @@ public class StorageCollection { get { - // TODO Продумать логику получения объекта if (_storages.ContainsKey(name)) return _storages[name]; return null; @@ -88,11 +85,11 @@ public class StorageCollection /// /// Путь и имя файла /// true - сохранение прошло успешно, false - ошибка при сохранении данных - public bool SaveData(string filename) + public void SaveData(string filename) { if (_storages.Count == 0) { - return false; + throw new ArgumentException("В хранилище отсутствуют коллекции для сохранения"); } if (File.Exists(filename)) @@ -106,7 +103,6 @@ public class StorageCollection foreach (KeyValuePair> value in _storages) { writer.Write(Environment.NewLine); - // не сохраняем пустые коллекции if (value.Value.Count == 0) { continue; @@ -132,7 +128,6 @@ public class StorageCollection } } } - return true; } /// @@ -140,11 +135,11 @@ public class StorageCollection /// /// Путь и имя файла /// true - загрузка прошла успешно, false - ошибка при загрузке данных - public bool LoadData(string filename) + public void LoadData(string filename) { if (!File.Exists(filename)) { - return false; + throw new FileNotFoundException("Файл не существует"); } using (StreamReader fs = File.OpenText(filename)) @@ -152,12 +147,12 @@ public class StorageCollection string str = fs.ReadLine(); if (str == null || str.Length == 0) { - return false; + throw new Exception("В файле нет данных"); } if (!str.StartsWith(_collectionKey)) { - return false; + throw new FormatException("В файле неверные данные"); } _storages.Clear(); @@ -174,7 +169,7 @@ public class StorageCollection ICollectionGenericObjects? collection = StorageCollection.CreateCollection(collectionType); if (collection == null) { - return false; + throw new Exception("Не удалось создать коллекцию"); } collection.MaxCount = Convert.ToInt32(record[2]); @@ -183,15 +178,21 @@ public class StorageCollection { if (elem?.CreateDrawningWarship() is T warship) { - if (collection.Insert(warship) == -1) + try { - return false; + if (collection.Insert(warship) == -1) + { + throw new InvalidOperationException("Объект не удалось добавить в коллекцию: " + record[3]); + } + } + catch (CollectionOverflowException ex) + { + throw new CollectionOverflowException("Коллекция переполнена", ex); } } } _storages.Add(record[0], collection); } - return true; } } diff --git a/ProjectAircraftCarrier/ProjectAircraftCarrier/CollectionGenericObjects/WarshipDockService.cs b/ProjectAircraftCarrier/ProjectAircraftCarrier/CollectionGenericObjects/WarshipDockService.cs index 3283e58..8c71cfa 100644 --- a/ProjectAircraftCarrier/ProjectAircraftCarrier/CollectionGenericObjects/WarshipDockService.cs +++ b/ProjectAircraftCarrier/ProjectAircraftCarrier/CollectionGenericObjects/WarshipDockService.cs @@ -39,11 +39,12 @@ public class WarshipDockService : AbstractCompany for (int i = 0; i < (_collection?.Count ?? 0); i++) { - if (_collection.Get(i) != null) + try { _collection.Get(i).SetPictureSize(_pictureWidth, _pictureHeight); _collection.Get(i).SetPosition(_placeSizeWidth * posWidth + 5, posHeight * _placeSizeHeight + 10); } + catch (Exception) { } if (posWidth < width - 1) { posWidth++; diff --git a/ProjectAircraftCarrier/ProjectAircraftCarrier/Exceptions/CollectionOverflowException.cs b/ProjectAircraftCarrier/ProjectAircraftCarrier/Exceptions/CollectionOverflowException.cs new file mode 100644 index 0000000..cafa3af --- /dev/null +++ b/ProjectAircraftCarrier/ProjectAircraftCarrier/Exceptions/CollectionOverflowException.cs @@ -0,0 +1,20 @@ +using System.Runtime.Serialization; + +namespace ProjectAircraftCarrier.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/ProjectAircraftCarrier/ProjectAircraftCarrier/Exceptions/ObjectNotFoundException.cs b/ProjectAircraftCarrier/ProjectAircraftCarrier/Exceptions/ObjectNotFoundException.cs new file mode 100644 index 0000000..5fb4899 --- /dev/null +++ b/ProjectAircraftCarrier/ProjectAircraftCarrier/Exceptions/ObjectNotFoundException.cs @@ -0,0 +1,20 @@ +using System.Runtime.Serialization; + +namespace ProjectAircraftCarrier.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) { } +} diff --git a/ProjectAircraftCarrier/ProjectAircraftCarrier/Exceptions/PositionOutOfCollectionException.cs b/ProjectAircraftCarrier/ProjectAircraftCarrier/Exceptions/PositionOutOfCollectionException.cs new file mode 100644 index 0000000..ee8238b --- /dev/null +++ b/ProjectAircraftCarrier/ProjectAircraftCarrier/Exceptions/PositionOutOfCollectionException.cs @@ -0,0 +1,20 @@ +using System.Runtime.Serialization; + +namespace ProjectAircraftCarrier.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/ProjectAircraftCarrier/ProjectAircraftCarrier/FormWarshipCollection.cs b/ProjectAircraftCarrier/ProjectAircraftCarrier/FormWarshipCollection.cs index af533ab..a8ee4f1 100644 --- a/ProjectAircraftCarrier/ProjectAircraftCarrier/FormWarshipCollection.cs +++ b/ProjectAircraftCarrier/ProjectAircraftCarrier/FormWarshipCollection.cs @@ -1,4 +1,5 @@ -using ProjectAircraftCarrier.CollectionGenericObjects; +using Microsoft.Extensions.Logging; +using ProjectAircraftCarrier.CollectionGenericObjects; using ProjectAircraftCarrier.Drawnings; using System; using System.Collections.Generic; @@ -24,13 +25,18 @@ public partial class FormWarshipCollection : Form /// private AbstractCompany? _company = null; + + private readonly ILogger _logger; + /// /// Конструктор /// - public FormWarshipCollection() + public FormWarshipCollection(ILogger logger) { InitializeComponent(); _storageCollection = new(); + _logger = logger; + _logger.LogInformation("Форма загрузилась"); } /// @@ -46,7 +52,6 @@ public partial class FormWarshipCollection : Form private void ButtonAddWarship_Click(object sender, EventArgs e) { FormWarshipConfig form = new(); - // TODO передать метод form.Show(); form.AddEvent(SetWarship); } diff --git a/ProjectAircraftCarrier/ProjectAircraftCarrier/ProjectAircraftCarrier.csproj b/ProjectAircraftCarrier/ProjectAircraftCarrier/ProjectAircraftCarrier.csproj index 244387d..fe07c17 100644 --- a/ProjectAircraftCarrier/ProjectAircraftCarrier/ProjectAircraftCarrier.csproj +++ b/ProjectAircraftCarrier/ProjectAircraftCarrier/ProjectAircraftCarrier.csproj @@ -8,6 +8,10 @@ enable + + + + True -- 2.25.1 From 3281b42193bc93f9c0e9021c1d9ba8955f178758 Mon Sep 17 00:00:00 2001 From: Shtyrkin_Egor Date: Mon, 13 May 2024 08:36:55 +0400 Subject: [PATCH 2/4] =?UTF-8?q?=D0=9B=D0=B0=D0=B1=D0=BE=D1=80=D0=B0=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=BD=D0=B0=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=B0=20=E2=84=967=202?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FormWarshipCollection.cs | 149 ++++++++++-------- .../ProjectAircraftCarrier/Program.cs | 31 +++- .../ProjectAircraftCarrier.csproj | 2 + .../ProjectAircraftCarrier/serilog.json | 15 ++ 4 files changed, 131 insertions(+), 66 deletions(-) create mode 100644 ProjectAircraftCarrier/ProjectAircraftCarrier/serilog.json diff --git a/ProjectAircraftCarrier/ProjectAircraftCarrier/FormWarshipCollection.cs b/ProjectAircraftCarrier/ProjectAircraftCarrier/FormWarshipCollection.cs index a8ee4f1..044243a 100644 --- a/ProjectAircraftCarrier/ProjectAircraftCarrier/FormWarshipCollection.cs +++ b/ProjectAircraftCarrier/ProjectAircraftCarrier/FormWarshipCollection.cs @@ -1,6 +1,7 @@ using Microsoft.Extensions.Logging; using ProjectAircraftCarrier.CollectionGenericObjects; using ProjectAircraftCarrier.Drawnings; +using ProjectAircraftCarrier.Exceptions; using System; using System.Collections.Generic; using System.ComponentModel; @@ -58,18 +59,24 @@ public partial class FormWarshipCollection : Form private void SetWarship(DrawningWarship? warship) { - if (_company == null || warship == null) + try { - return; + if (_company == null || warship == null) + { + return; + } + if (_company + warship != -1) + { + MessageBox.Show("Объект добавлен"); + pictureBox.Image = _company.Show(); + _logger.LogInformation("Добавлен объект: " + warship.GetDataForSave()); + } } - if (_company + warship != -1) - { - MessageBox.Show("Объект добавлен"); - pictureBox.Image = _company.Show(); - } - else + catch (ObjectNotFoundException) { } + catch (CollectionOverflowException ex) { MessageBox.Show("Не удалось добавить объект"); + _logger.LogError("Ошибка: {Message}", ex.Message); } } @@ -79,21 +86,24 @@ public partial class FormWarshipCollection : Form { return; } - if (MessageBox.Show("Удалить объект?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) { return; } - int pos = Convert.ToInt32(maskedTextBox.Text); - if (_company - pos != null) + try { - MessageBox.Show("Объект удалён"); - pictureBox.Image = _company.Show(); + if (_company - pos != null) + { + MessageBox.Show("Объект удален"); + pictureBox.Image = _company.Show(); + _logger.LogInformation("Удален объект по позиции " + pos); + } } - else + catch (Exception ex) { MessageBox.Show("Не удалось удалить объект"); + _logger.LogError("Ошибка: {Message}", ex.Message); } } @@ -103,29 +113,29 @@ public partial class FormWarshipCollection : Form { return; } - DrawningWarship? warship = null; int counter = 100; - while (warship == null) + try { - warship = _company.GetRandomObject(); - counter--; - if (counter <= 0) + while (warship == null) { - break; + warship = _company.GetRandomObject(); + counter--; + if (counter <= 0) + { + break; + } } + FormAircraftCarrier form = new() + { + SetWarship = warship + }; + form.ShowDialog(); } - - if (warship == null) + catch (Exception ex) { - return; + MessageBox.Show(ex.Message, "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error); } - - FormAircraftCarrier form = new() - { - SetWarship = warship - }; - form.ShowDialog(); } private void ButtonRefresh_Click(object sender, EventArgs e) @@ -155,43 +165,52 @@ public partial class FormWarshipCollection : Form { if (string.IsNullOrEmpty(textBoxCollectionName.Text) || (!radioButtonList.Checked && !radioButtonMassive.Checked)) { - MessageBox.Show("Не все данные заполнены", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + MessageBox.Show("Не все данные заполнены", "Ошибка", + MessageBoxButtons.OK, MessageBoxIcon.Error); return; } - - CollectionType collectionType = CollectionType.None; - if (radioButtonMassive.Checked) + try { - collectionType = CollectionType.Massive; + CollectionType collectionType = CollectionType.None; + if (radioButtonMassive.Checked) + { + collectionType = CollectionType.Massive; + } + else if (radioButtonList.Checked) + { + collectionType = CollectionType.List; + } + _storageCollection.AddCollection(textBoxCollectionName.Text, collectionType); + RerfreshListBoxItems(); + _logger.LogInformation("Коллекция добавлена " + textBoxCollectionName.Text); } - else if (radioButtonList.Checked) + catch (Exception ex) { - collectionType = CollectionType.List; + _logger.LogError("Ошибка: {Message}", ex.Message); } - - _storageCollection.AddCollection(textBoxCollectionName.Text, collectionType); - RerfreshListBoxItems(); } private void ButtonCollectionDel_Click(object sender, EventArgs e) { - // TODO прописать логику удаления элемента из коллекции - // нужно убедиться, что есть выбранная коллекция - // спросить у пользователя через MessageBox, что он подтверждает, что хочет удалить запись - // удалить и обновить ListBox if (listBoxCollection.SelectedIndex < 0 || listBoxCollection.SelectedItem == null) { MessageBox.Show("Коллекция не выбрана"); return; } - - if (MessageBox.Show("Удалить коллекцию?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) + try { - return; + if (MessageBox.Show("Удалить коллекцию?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) + { + return; + } + _storageCollection.DelCollection(listBoxCollection.SelectedItem.ToString()); + RerfreshListBoxItems(); + _logger.LogInformation("Коллекция: " + listBoxCollection.SelectedItem.ToString() + " удалена"); + } + catch (Exception ex) + { + _logger.LogError("Ошибка: {Message}", ex.Message); } - - _storageCollection.DelCollection(listBoxCollection.SelectedItem.ToString()); - RerfreshListBoxItems(); } private void ButtonCreateCompany_Click(object sender, EventArgs e) @@ -201,21 +220,19 @@ public partial class FormWarshipCollection : Form MessageBox.Show("Коллекция не выбрана"); return; } - - ICollectionGenericObjects? collection = _storageCollection[listBoxCollection.SelectedItem.ToString() ?? string.Empty]; + ICollectionGenericObjects? collection = + _storageCollection[listBoxCollection.SelectedItem.ToString() ?? string.Empty]; if (collection == null) { MessageBox.Show("Коллекция не проинициализирована"); return; } - switch (comboBoxSelectorCompany.Text) { case "Хранилище": _company = new WarshipDockService(pictureBox.Width, pictureBox.Height, collection); break; } - panelCompanyTools.Enabled = true; RerfreshListBoxItems(); } @@ -224,15 +241,16 @@ public partial class FormWarshipCollection : 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); } } } @@ -241,16 +259,17 @@ public partial class FormWarshipCollection : 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/ProjectAircraftCarrier/ProjectAircraftCarrier/Program.cs b/ProjectAircraftCarrier/ProjectAircraftCarrier/Program.cs index 2a20b85..28ac17d 100644 --- a/ProjectAircraftCarrier/ProjectAircraftCarrier/Program.cs +++ b/ProjectAircraftCarrier/ProjectAircraftCarrier/Program.cs @@ -1,3 +1,8 @@ +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Serilog; +using Microsoft.Extensions.Configuration; + namespace ProjectAircraftCarrier { internal static class Program @@ -11,7 +16,31 @@ namespace ProjectAircraftCarrier // To customize application configuration such as set high DPI settings or default font, // see https://aka.ms/applicationconfiguration. ApplicationConfiguration.Initialize(); - Application.Run(new FormWarshipCollection()); + + ServiceCollection services = new(); + ConfigureServices(services); + using ServiceProvider serviceProvider = services.BuildServiceProvider(); + Application.Run(serviceProvider.GetRequiredService()); + + } + private static void ConfigureServices(ServiceCollection services) + { + string[] path = Directory.GetCurrentDirectory().Split('\\'); + string pathNeed = ""; + for (int i = 0; i < path.Length - 3; i++) + { + pathNeed += path[i] + "\\"; + } + services.AddSingleton() + .AddLogging(option => + { + option.SetMinimumLevel(LogLevel.Information); + option.AddSerilog(new LoggerConfiguration() + .ReadFrom.Configuration(new ConfigurationBuilder() + .AddJsonFile($"{pathNeed}serilog.json") + .Build()) + .CreateLogger()); + }); } } } \ No newline at end of file diff --git a/ProjectAircraftCarrier/ProjectAircraftCarrier/ProjectAircraftCarrier.csproj b/ProjectAircraftCarrier/ProjectAircraftCarrier/ProjectAircraftCarrier.csproj index fe07c17..861d9f3 100644 --- a/ProjectAircraftCarrier/ProjectAircraftCarrier/ProjectAircraftCarrier.csproj +++ b/ProjectAircraftCarrier/ProjectAircraftCarrier/ProjectAircraftCarrier.csproj @@ -9,7 +9,9 @@ + + diff --git a/ProjectAircraftCarrier/ProjectAircraftCarrier/serilog.json b/ProjectAircraftCarrier/ProjectAircraftCarrier/serilog.json new file mode 100644 index 0000000..fbcc282 --- /dev/null +++ b/ProjectAircraftCarrier/ProjectAircraftCarrier/serilog.json @@ -0,0 +1,15 @@ +{ + "Serilog": { + "Using": [ "Serilog.Sinks.File" ], + "MinimumLevel": "Debug", + "WriteTo": [ + { + "Name": "File", + "Args": { "path": "log.log" } + } + ], + "Properties": { + "Application": "Sample" + } + } +} -- 2.25.1 From 899cd1e27a09388a6a318efb333d7ce6dc0739d5 Mon Sep 17 00:00:00 2001 From: Shtyrkin_Egor Date: Mon, 13 May 2024 10:41:38 +0400 Subject: [PATCH 3/4] =?UTF-8?q?=D0=9B=D0=B0=D0=B1=D0=BE=D1=80=D0=B0=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=BD=D0=B0=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=B0=20=E2=84=967=203?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AbstractCompany.cs | 2 +- .../FormWarshipConfig.Designer.cs | 119 ++++++++++-------- .../ProjectAircraftCarrier.csproj | 6 + 3 files changed, 77 insertions(+), 50 deletions(-) diff --git a/ProjectAircraftCarrier/ProjectAircraftCarrier/CollectionGenericObjects/AbstractCompany.cs b/ProjectAircraftCarrier/ProjectAircraftCarrier/CollectionGenericObjects/AbstractCompany.cs index 1d30cea..92867a5 100644 --- a/ProjectAircraftCarrier/ProjectAircraftCarrier/CollectionGenericObjects/AbstractCompany.cs +++ b/ProjectAircraftCarrier/ProjectAircraftCarrier/CollectionGenericObjects/AbstractCompany.cs @@ -40,7 +40,7 @@ public abstract class AbstractCompany /// /// Вычисление максимального количества элементов, которых можно разместить в окне /// - private int GetMaxCount => _pictureWidth * _pictureHeight / (_placeSizeWidth * _placeSizeHeight); + private int GetMaxCount => _pictureWidth * _pictureHeight / (_placeSizeWidth * _placeSizeHeight) - 6; /// /// Конструктор diff --git a/ProjectAircraftCarrier/ProjectAircraftCarrier/FormWarshipConfig.Designer.cs b/ProjectAircraftCarrier/ProjectAircraftCarrier/FormWarshipConfig.Designer.cs index c06eaa4..a240d1e 100644 --- a/ProjectAircraftCarrier/ProjectAircraftCarrier/FormWarshipConfig.Designer.cs +++ b/ProjectAircraftCarrier/ProjectAircraftCarrier/FormWarshipConfig.Designer.cs @@ -73,8 +73,10 @@ groupBoxConfig.Controls.Add(labelSimpleObject); groupBoxConfig.Dock = DockStyle.Left; groupBoxConfig.Location = new Point(0, 0); + groupBoxConfig.Margin = new Padding(3, 2, 3, 2); groupBoxConfig.Name = "groupBoxConfig"; - groupBoxConfig.Size = new Size(686, 215); + groupBoxConfig.Padding = new Padding(3, 2, 3, 2); + groupBoxConfig.Size = new Size(600, 161); groupBoxConfig.TabIndex = 0; groupBoxConfig.TabStop = false; groupBoxConfig.Text = "Параметры"; @@ -89,9 +91,11 @@ groupBoxColors.Controls.Add(panelWhite); groupBoxColors.Controls.Add(panelGreen); groupBoxColors.Controls.Add(panelRed); - groupBoxColors.Location = new Point(386, 20); + groupBoxColors.Location = new Point(338, 15); + groupBoxColors.Margin = new Padding(3, 2, 3, 2); groupBoxColors.Name = "groupBoxColors"; - groupBoxColors.Size = new Size(271, 134); + groupBoxColors.Padding = new Padding(3, 2, 3, 2); + groupBoxColors.Size = new Size(237, 100); groupBoxColors.TabIndex = 8; groupBoxColors.TabStop = false; groupBoxColors.Text = "Цвета"; @@ -99,73 +103,82 @@ // panelPurple // panelPurple.BackColor = Color.Purple; - panelPurple.Location = new Point(212, 77); + panelPurple.Location = new Point(186, 58); + panelPurple.Margin = new Padding(3, 2, 3, 2); panelPurple.Name = "panelPurple"; - panelPurple.Size = new Size(40, 40); + panelPurple.Size = new Size(35, 30); panelPurple.TabIndex = 3; // // panelYellow // panelYellow.BackColor = Color.Yellow; - panelYellow.Location = new Point(212, 26); + panelYellow.Location = new Point(186, 20); + panelYellow.Margin = new Padding(3, 2, 3, 2); panelYellow.Name = "panelYellow"; - panelYellow.Size = new Size(40, 40); + panelYellow.Size = new Size(35, 30); panelYellow.TabIndex = 1; // // panelBlack // panelBlack.BackColor = Color.Black; - panelBlack.Location = new Point(148, 77); + panelBlack.Location = new Point(130, 58); + panelBlack.Margin = new Padding(3, 2, 3, 2); panelBlack.Name = "panelBlack"; - panelBlack.Size = new Size(40, 40); + panelBlack.Size = new Size(35, 30); panelBlack.TabIndex = 4; // // panelBlue // panelBlue.BackColor = Color.Blue; - panelBlue.Location = new Point(148, 26); + panelBlue.Location = new Point(130, 20); + panelBlue.Margin = new Padding(3, 2, 3, 2); panelBlue.Name = "panelBlue"; - panelBlue.Size = new Size(40, 40); + panelBlue.Size = new Size(35, 30); panelBlue.TabIndex = 1; // // panelGray // panelGray.BackColor = Color.Gray; - panelGray.Location = new Point(84, 77); + panelGray.Location = new Point(74, 58); + panelGray.Margin = new Padding(3, 2, 3, 2); panelGray.Name = "panelGray"; - panelGray.Size = new Size(40, 40); + panelGray.Size = new Size(35, 30); panelGray.TabIndex = 5; // // panelWhite // panelWhite.BackColor = Color.White; - panelWhite.Location = new Point(20, 77); + panelWhite.Location = new Point(18, 58); + panelWhite.Margin = new Padding(3, 2, 3, 2); panelWhite.Name = "panelWhite"; - panelWhite.Size = new Size(40, 40); + panelWhite.Size = new Size(35, 30); panelWhite.TabIndex = 2; // // panelGreen // panelGreen.BackColor = Color.Green; - panelGreen.Location = new Point(84, 26); + panelGreen.Location = new Point(74, 20); + panelGreen.Margin = new Padding(3, 2, 3, 2); panelGreen.Name = "panelGreen"; - panelGreen.Size = new Size(40, 40); + panelGreen.Size = new Size(35, 30); panelGreen.TabIndex = 1; // // panelRed // panelRed.BackColor = Color.Red; - panelRed.Location = new Point(20, 26); + panelRed.Location = new Point(18, 20); + panelRed.Margin = new Padding(3, 2, 3, 2); panelRed.Name = "panelRed"; - panelRed.Size = new Size(40, 40); + panelRed.Size = new Size(35, 30); panelRed.TabIndex = 0; // // checkBoxControlRoom // checkBoxControlRoom.AutoSize = true; - checkBoxControlRoom.Location = new Point(6, 130); + checkBoxControlRoom.Location = new Point(5, 98); + checkBoxControlRoom.Margin = new Padding(3, 2, 3, 2); checkBoxControlRoom.Name = "checkBoxControlRoom"; - checkBoxControlRoom.Size = new Size(286, 24); + checkBoxControlRoom.Size = new Size(227, 19); checkBoxControlRoom.TabIndex = 7; checkBoxControlRoom.Text = "Признак наличия рубки управления"; checkBoxControlRoom.UseVisualStyleBackColor = true; @@ -173,57 +186,60 @@ // checkBoxAircraftDeck // checkBoxAircraftDeck.AutoSize = true; - checkBoxAircraftDeck.Location = new Point(6, 172); + checkBoxAircraftDeck.Location = new Point(5, 129); + checkBoxAircraftDeck.Margin = new Padding(3, 2, 3, 2); checkBoxAircraftDeck.Name = "checkBoxAircraftDeck"; - checkBoxAircraftDeck.Size = new Size(361, 24); + checkBoxAircraftDeck.Size = new Size(287, 19); checkBoxAircraftDeck.TabIndex = 6; checkBoxAircraftDeck.Text = "Признак наличия взлётно-посадочной полосы"; checkBoxAircraftDeck.UseVisualStyleBackColor = true; // // numericUpDownWeight // - numericUpDownWeight.Location = new Point(94, 76); + numericUpDownWeight.Location = new Point(82, 57); + numericUpDownWeight.Margin = new Padding(3, 2, 3, 2); numericUpDownWeight.Maximum = new decimal(new int[] { 1000, 0, 0, 0 }); numericUpDownWeight.Minimum = new decimal(new int[] { 100, 0, 0, 0 }); numericUpDownWeight.Name = "numericUpDownWeight"; - numericUpDownWeight.Size = new Size(122, 27); + numericUpDownWeight.Size = new Size(107, 23); numericUpDownWeight.TabIndex = 5; numericUpDownWeight.Value = new decimal(new int[] { 100, 0, 0, 0 }); // // labelWeight // labelWeight.AutoSize = true; - labelWeight.Location = new Point(12, 78); + labelWeight.Location = new Point(10, 58); labelWeight.Name = "labelWeight"; - labelWeight.Size = new Size(36, 20); + labelWeight.Size = new Size(29, 15); labelWeight.TabIndex = 4; labelWeight.Text = "Вес:"; // // numericUpDownSpeed // - numericUpDownSpeed.Location = new Point(94, 39); + numericUpDownSpeed.Location = new Point(82, 29); + numericUpDownSpeed.Margin = new Padding(3, 2, 3, 2); numericUpDownSpeed.Maximum = new decimal(new int[] { 1000, 0, 0, 0 }); numericUpDownSpeed.Minimum = new decimal(new int[] { 100, 0, 0, 0 }); numericUpDownSpeed.Name = "numericUpDownSpeed"; - numericUpDownSpeed.Size = new Size(122, 27); + numericUpDownSpeed.Size = new Size(107, 23); numericUpDownSpeed.TabIndex = 3; numericUpDownSpeed.Value = new decimal(new int[] { 100, 0, 0, 0 }); // // labelSpeed // labelSpeed.AutoSize = true; - labelSpeed.Location = new Point(12, 41); + labelSpeed.Location = new Point(10, 31); labelSpeed.Name = "labelSpeed"; - labelSpeed.Size = new Size(76, 20); + labelSpeed.Size = new Size(62, 15); labelSpeed.TabIndex = 2; labelSpeed.Text = "Скорость:"; // // labelModifiedObject // labelModifiedObject.BorderStyle = BorderStyle.FixedSingle; - labelModifiedObject.Location = new Point(538, 162); + labelModifiedObject.Location = new Point(471, 122); labelModifiedObject.Name = "labelModifiedObject"; - labelModifiedObject.Size = new Size(119, 43); + labelModifiedObject.Size = new Size(104, 33); labelModifiedObject.TabIndex = 1; labelModifiedObject.Text = "Продвинутый"; labelModifiedObject.TextAlign = ContentAlignment.MiddleCenter; @@ -232,9 +248,9 @@ // labelSimpleObject // labelSimpleObject.BorderStyle = BorderStyle.FixedSingle; - labelSimpleObject.Location = new Point(386, 162); + labelSimpleObject.Location = new Point(338, 122); labelSimpleObject.Name = "labelSimpleObject"; - labelSimpleObject.Size = new Size(119, 43); + labelSimpleObject.Size = new Size(104, 33); labelSimpleObject.TabIndex = 0; labelSimpleObject.Text = "Простой"; labelSimpleObject.TextAlign = ContentAlignment.MiddleCenter; @@ -242,17 +258,19 @@ // // pictureBoxObject // - pictureBoxObject.Location = new Point(48, 65); + pictureBoxObject.Location = new Point(8, 42); + pictureBoxObject.Margin = new Padding(3, 2, 3, 2); pictureBoxObject.Name = "pictureBoxObject"; - pictureBoxObject.Size = new Size(154, 102); + pictureBoxObject.Size = new Size(189, 83); pictureBoxObject.TabIndex = 1; pictureBoxObject.TabStop = false; // // buttonAdd // - buttonAdd.Location = new Point(703, 176); + buttonAdd.Location = new Point(615, 132); + buttonAdd.Margin = new Padding(3, 2, 3, 2); buttonAdd.Name = "buttonAdd"; - buttonAdd.Size = new Size(94, 29); + buttonAdd.Size = new Size(82, 22); buttonAdd.TabIndex = 2; buttonAdd.Text = "Добавить"; buttonAdd.UseVisualStyleBackColor = true; @@ -260,9 +278,10 @@ // // buttonCancel // - buttonCancel.Location = new Point(814, 176); + buttonCancel.Location = new Point(712, 132); + buttonCancel.Margin = new Padding(3, 2, 3, 2); buttonCancel.Name = "buttonCancel"; - buttonCancel.Size = new Size(94, 29); + buttonCancel.Size = new Size(82, 22); buttonCancel.TabIndex = 3; buttonCancel.Text = "Отмена"; buttonCancel.UseVisualStyleBackColor = true; @@ -273,9 +292,10 @@ panelObject.Controls.Add(labelAdditionalColor); panelObject.Controls.Add(labelBodyColor); panelObject.Controls.Add(pictureBoxObject); - panelObject.Location = new Point(683, 0); + panelObject.Location = new Point(598, 0); + panelObject.Margin = new Padding(3, 2, 3, 2); panelObject.Name = "panelObject"; - panelObject.Size = new Size(239, 170); + panelObject.Size = new Size(209, 128); panelObject.TabIndex = 4; panelObject.DragDrop += PanelObject_DragDrop; panelObject.DragEnter += PanelObject_DragEnter; @@ -284,9 +304,9 @@ // labelAdditionalColor.AllowDrop = true; labelAdditionalColor.BorderStyle = BorderStyle.FixedSingle; - labelAdditionalColor.Location = new Point(131, 9); + labelAdditionalColor.Location = new Point(115, 7); labelAdditionalColor.Name = "labelAdditionalColor"; - labelAdditionalColor.Size = new Size(94, 43); + labelAdditionalColor.Size = new Size(82, 33); labelAdditionalColor.TabIndex = 3; labelAdditionalColor.Text = "Доп. цвет"; labelAdditionalColor.TextAlign = ContentAlignment.MiddleCenter; @@ -297,9 +317,9 @@ // labelBodyColor.AllowDrop = true; labelBodyColor.BorderStyle = BorderStyle.FixedSingle; - labelBodyColor.Location = new Point(20, 9); + labelBodyColor.Location = new Point(18, 7); labelBodyColor.Name = "labelBodyColor"; - labelBodyColor.Size = new Size(94, 43); + labelBodyColor.Size = new Size(82, 33); labelBodyColor.TabIndex = 2; labelBodyColor.Text = "Цвет"; labelBodyColor.TextAlign = ContentAlignment.MiddleCenter; @@ -308,13 +328,14 @@ // // FormWarshipConfig // - AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleMode = AutoScaleMode.Font; - ClientSize = new Size(923, 215); + ClientSize = new Size(808, 161); Controls.Add(panelObject); Controls.Add(buttonCancel); Controls.Add(buttonAdd); Controls.Add(groupBoxConfig); + Margin = new Padding(3, 2, 3, 2); Name = "FormWarshipConfig"; Text = "Создание объекта"; groupBoxConfig.ResumeLayout(false); diff --git a/ProjectAircraftCarrier/ProjectAircraftCarrier/ProjectAircraftCarrier.csproj b/ProjectAircraftCarrier/ProjectAircraftCarrier/ProjectAircraftCarrier.csproj index 861d9f3..0b9e9ea 100644 --- a/ProjectAircraftCarrier/ProjectAircraftCarrier/ProjectAircraftCarrier.csproj +++ b/ProjectAircraftCarrier/ProjectAircraftCarrier/ProjectAircraftCarrier.csproj @@ -10,8 +10,14 @@ + + + + + + -- 2.25.1 From e10ccd5109cd1ba097e76da3f039323a0c53c3a6 Mon Sep 17 00:00:00 2001 From: Egor_Shtyrkin Date: Fri, 7 Jun 2024 19:11:23 +0400 Subject: [PATCH 4/4] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProjectAircraftCarrier.csproj | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ProjectAircraftCarrier/ProjectAircraftCarrier/ProjectAircraftCarrier.csproj b/ProjectAircraftCarrier/ProjectAircraftCarrier/ProjectAircraftCarrier.csproj index 0b9e9ea..e85c195 100644 --- a/ProjectAircraftCarrier/ProjectAircraftCarrier/ProjectAircraftCarrier.csproj +++ b/ProjectAircraftCarrier/ProjectAircraftCarrier/ProjectAircraftCarrier.csproj @@ -11,12 +11,12 @@ - - + + - - - + + + -- 2.25.1