diff --git a/ProjectAirbus/ProjectAirbus/CollectionGenericObjects/AbstractCompany.cs b/ProjectAirbus/ProjectAirbus/CollectionGenericObjects/AbstractCompany.cs index cbe395f..993c59b 100644 --- a/ProjectAirbus/ProjectAirbus/CollectionGenericObjects/AbstractCompany.cs +++ b/ProjectAirbus/ProjectAirbus/CollectionGenericObjects/AbstractCompany.cs @@ -41,8 +41,8 @@ public abstract class AbstractCompany /// /// Вычисление максимального количества элементов, который можно разместить в окне /// - private int GetMaxCount => _pictureWidth * _pictureHeight / (_placeSizeWidth * _placeSizeHeight); - + //private int GetMaxCount => _pictureWidth * _pictureHeight / (_placeSizeWidth * _placeSizeHeight); + private int GetMaxCount => 36; /// /// Конструктор /// @@ -98,8 +98,12 @@ public abstract class AbstractCompany SetObjectsPosition(); for (int i = 0; i < (_collection?.Count ?? 0); ++i) { - DrawningBus? obj = _collection?.Get(i); - obj?.DrawTransport(graphics); + try + { + DrawningBus? obj = _collection?.Get(i); + obj?.DrawTransport(graphics); + } + catch (Exception) { } } return bitmap; } diff --git a/ProjectAirbus/ProjectAirbus/CollectionGenericObjects/BusSharingService.cs b/ProjectAirbus/ProjectAirbus/CollectionGenericObjects/BusSharingService.cs index ee8fbc4..4ec65e5 100644 --- a/ProjectAirbus/ProjectAirbus/CollectionGenericObjects/BusSharingService.cs +++ b/ProjectAirbus/ProjectAirbus/CollectionGenericObjects/BusSharingService.cs @@ -9,19 +9,19 @@ namespace ProjectAirbus.CollectionGenericObjects; public class BusSharingService : AbstractCompany { - public BusSharingService(int picWidth, int picHeight, ICollectionGenericObjects collection) : base(picWidth, picHeight, collection) + public BusSharingService(int picWidth, int picHeight, ICollectionGenericObjects collection) : base(picWidth, picHeight, collection) { } - + protected override void DrawBackgound(Graphics g) { int width = _pictureWidth / _placeSizeWidth; int height = _pictureHeight / _placeSizeHeight; Pen pen = new(Color.Black, 2); - for (int i = 0; i < width; i++) + for (int i = 0; i < width; i++) { - for (int j = 0; j < height + 1; j++) + for (int j = 0; j < height + 1; j++) { //if (j + 1 > height) @@ -36,23 +36,24 @@ public class BusSharingService : AbstractCompany int width = _pictureWidth / _placeSizeWidth; int height = _pictureHeight / _placeSizeHeight; - int BusWidth = width - 1; - int BusHeight = height - 1; + int BusWidth = 0; + int BusHeight = 0; 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 * BusWidth + 20, BusHeight * _placeSizeHeight + 20); } + catch (Exception) { } - if (BusWidth > 0) - BusWidth--; + if (BusWidth < width - 1) + BusWidth++; else { - BusWidth = width - 1; - BusHeight--; + BusWidth = 0; + BusHeight++; } if (BusHeight > height) { diff --git a/ProjectAirbus/ProjectAirbus/CollectionGenericObjects/MassiveGenericObjects.cs b/ProjectAirbus/ProjectAirbus/CollectionGenericObjects/MassiveGenericObjects.cs index 2e2c84e..8d7723d 100644 --- a/ProjectAirbus/ProjectAirbus/CollectionGenericObjects/MassiveGenericObjects.cs +++ b/ProjectAirbus/ProjectAirbus/CollectionGenericObjects/MassiveGenericObjects.cs @@ -56,6 +56,10 @@ public class MassiveGenericObjects : ICollectionGenericObjects { throw new PositionOutOfCollectionException(position); } + if (_collection[position] == null) + { + throw new ObjectNotFoundException(position); + } return _collection[position]; } diff --git a/ProjectAirbus/ProjectAirbus/CollectionGenericObjects/StorageCollection.cs b/ProjectAirbus/ProjectAirbus/CollectionGenericObjects/StorageCollection.cs index 9857c27..de4c901 100644 --- a/ProjectAirbus/ProjectAirbus/CollectionGenericObjects/StorageCollection.cs +++ b/ProjectAirbus/ProjectAirbus/CollectionGenericObjects/StorageCollection.cs @@ -99,6 +99,7 @@ public class StorageCollection /// true - сохранение прошло успешно, false - ошибка при сохранении данных public void SaveData(string filename) { + if (_storages.Count == 0) { throw new Exception("В хранилище отсутствуют коллекции для сохранения"); @@ -150,63 +151,67 @@ public class StorageCollection { throw new Exception("Файл не существует"); } - using (StreamReader fs = File.OpenText(filename)) + using StreamReader rd = new StreamReader(filename); + + + UTF8Encoding temp = new(true); + string str = rd.ReadLine(); + + if (str == null) { - string str = fs.ReadLine(); - if (str == null || str.Length == 0) + throw new Exception("В файле нет данных"); + } + if (!str.StartsWith(_collectionKey)) + { + throw new Exception("В файле неверные данные"); + } + + _storages.Clear(); + string strs = ""; + while ((strs = rd.ReadLine()) != null) + { + string[] record = strs.Split(_separatorForKeyValue, StringSplitOptions.RemoveEmptyEntries); + if (record.Length != 4) { - throw new Exception("В файле нет данных"); + continue; } - if (!str.StartsWith(_collectionKey)) + CollectionType collectionType = (CollectionType)Enum.Parse(typeof(CollectionType), record[1]); + ICollectionGenericObjects? collection = StorageCollection.CreateCollection(collectionType); + if (collection == null) { - throw new Exception("В файле неверные данные"); + throw new Exception("Не удалось создать коллекции"); } - _storages.Clear(); - string strs = ""; - while ((strs = fs.ReadLine()) != null) + collection.MaxCount = Convert.ToInt32(record[2]); + string[] set = record[3].Split(_separatorItems, StringSplitOptions.RemoveEmptyEntries); + foreach (string elem in set) { - string[] record = strs.Split(_separatorForKeyValue, StringSplitOptions.RemoveEmptyEntries); - if (record.Length != 4) + if (elem?.CreateDrawningBus() is T bus) { - continue; - } - CollectionType collectionType = (CollectionType)Enum.Parse(typeof(CollectionType), record[1]); - ICollectionGenericObjects? collection = StorageCollection.CreateCollection(collectionType); - if (collection == null) - { - throw new Exception("Не удалось определить тип коллекции:" + record[1]); - } - collection.MaxCount = Convert.ToInt32(record[2]); - string[] set = record[3].Split(_separatorItems, StringSplitOptions.RemoveEmptyEntries); - foreach (string elem in set) - { - if (elem?.CreateDrawningBus() is T bus) + try { - try + if (collection.Insert(bus) < 0) { - if (collection.Insert(bus) == -1) - { - throw new Exception("Объект не удалось добавить в коллекцию: " + record[3]); - } - } - catch (CollectionOverflowException ex) - { - throw new Exception("Коллекция переполнена", ex); + throw new Exception("Объект не удалось добавить в коллекцию: " + record[3]); } } + catch (CollectionOverflowException ex) + { + throw new Exception("Коллекция переполнена", ex); + } + } - _storages.Add(record[0], collection); } + _storages.Add(record[0], collection); } } - /// - /// Создание коллекции по типу - /// - /// - /// - private static ICollectionGenericObjects? - CreateCollection(CollectionType collectionType) + /// + /// Создание коллекции по типу + /// + /// + /// + private static ICollectionGenericObjects? +CreateCollection(CollectionType collectionType) { return collectionType switch { diff --git a/ProjectAirbus/ProjectAirbus/FormBusCollection.cs b/ProjectAirbus/ProjectAirbus/FormBusCollection.cs index b4b37fa..48801c8 100644 --- a/ProjectAirbus/ProjectAirbus/FormBusCollection.cs +++ b/ProjectAirbus/ProjectAirbus/FormBusCollection.cs @@ -38,6 +38,7 @@ namespace ProjectAirbus InitializeComponent(); _storageCollection = new(); _logger = logger; + _logger.LogInformation("Форма загрузилась"); } private void ComboBoxSelectorCompany_SelectedIndexChanged(object sender, EventArgs e) @@ -54,18 +55,24 @@ namespace ProjectAirbus private void SetBus(DrawningBus? bus) { - if (_company == null || bus == null) + try { - return; + if (_company == null || bus == null) + { + return; + } + if (_company + bus >= 0) + { + MessageBox.Show("Объект добавлен"); + pictureBox.Image = _company.Show(); + _logger.LogInformation("Объект добавлен"); + } } - if (_company + bus >= 0) - { - MessageBox.Show("Объект добавлен"); - pictureBox.Image = _company.Show(); - } - else + catch (Exception ex) { MessageBox.Show("Не удалось добавить объект"); + _logger.LogWarning($"Ошибка: {ex.Message}"); + } } /// @@ -85,14 +92,19 @@ namespace ProjectAirbus return; } int pos = Convert.ToInt32(maskedTextBoxPosition.Text); - if (_company - pos != null) + try { - MessageBox.Show("Объект удален"); - pictureBox.Image = _company.Show(); + if (_company - pos != null) + { + MessageBox.Show("Объект удален"); + pictureBox.Image = _company.Show(); + _logger.LogInformation("Объект удален"); + } } - else + catch (Exception ex) { MessageBox.Show("Не удалось удалить объект"); + _logger.LogError("Ошибка: {Message}", ex.Message); } } @@ -165,6 +177,7 @@ namespace ProjectAirbus collectionType = CollectionType.List; } _storageCollection.AddCollection(textBoxCollectionName.Text, collectionType); + _logger.LogInformation("Коллекция добавлена " + textBoxCollectionName.Text); RerfreshListBoxItems(); } @@ -206,6 +219,7 @@ namespace ProjectAirbus return; } _storageCollection.DelCollection(listBoxCollection.SelectedItem.ToString()); + _logger.LogInformation("Коллекция с название: " + listBoxCollection.SelectedItem.ToString() + " удалена"); RerfreshListBoxItems(); } diff --git a/ProjectAirbus/ProjectAirbus/nlog.config b/ProjectAirbus/ProjectAirbus/nlog.config index 2c84659..bca0f39 100644 --- a/ProjectAirbus/ProjectAirbus/nlog.config +++ b/ProjectAirbus/ProjectAirbus/nlog.config @@ -5,7 +5,7 @@ autoReload="true" internalLogLevel="Info"> - +