diff --git a/HoistingCrane/HoistingCrane/CollectionGenericObjects/AbstractCompany.cs b/HoistingCrane/HoistingCrane/CollectionGenericObjects/AbstractCompany.cs index c689725..f8bd775 100644 --- a/HoistingCrane/HoistingCrane/CollectionGenericObjects/AbstractCompany.cs +++ b/HoistingCrane/HoistingCrane/CollectionGenericObjects/AbstractCompany.cs @@ -1,88 +1,110 @@ -using HoistingCrane.Drawning; -namespace HoistingCrane.CollectionGenericObjects +using HoistingCrane.CollectionGenericObjects; +using HoistingCrane.Drawning; + +public abstract class AbstractCompany { - public abstract class AbstractCompany + /// + /// Размер места (ширина) + /// + protected readonly int _placeSizeWidth = 180; + + /// + /// Размер места (высота) + /// + protected readonly int _placeSizeHeight = 100; + + /// + /// Ширина окна + /// + protected readonly int _pictureWidth; + + /// + /// Высота окна + /// + protected readonly int _pictureHeight; + + /// + /// Коллекция военных кораблей + /// + protected ICollectionGenericObjects? _collection = null; + + /// + /// Вычисление максимального количества элементов, которые можно разместить в окне + /// + private int GetMaxCount => _pictureWidth * _pictureHeight / (_placeSizeWidth * _placeSizeHeight); + + /// + /// Конструктор + /// + /// Ширина окна + /// Высота окна + /// Коллекция военных кораблей + public AbstractCompany(int picWidth, int picHeight, ICollectionGenericObjects collection) { - /// - /// Ширина ячейки гаража - /// - protected readonly int _placeSizeWidth = 150; - /// - /// Высота ячейки гаража - /// - protected readonly int _placeSizeHeight = 90; - /// - /// Ширина окна - /// - protected readonly int pictureWidth; - /// - /// Высота окна - /// - protected readonly int pictureHeight; - /// - /// Коллекция автомобилей - /// - protected ICollectionGenericObjects? arr = null; - /// - /// Максимальное количество гаражей - /// - private int GetMaxCount - { - get - { - return (pictureWidth * pictureHeight) / (_placeSizeHeight * _placeSizeWidth); - } - } - public AbstractCompany(int picWidth, int picHeight, ICollectionGenericObjects array) - { - pictureWidth = picWidth; - pictureHeight = picHeight; - arr = array; - arr.MaxCount = GetMaxCount; - } - - public static int operator +(AbstractCompany company, DrawningTrackedVehicle car) - { - return company.arr?.Insert(car) ?? -1; - } - public static DrawningTrackedVehicle operator -(AbstractCompany company, int position) - { - return company.arr?.Remove(position); - } - - public DrawningTrackedVehicle? GetRandomObject() - { - Random rnd = new(); - return arr?.Get(rnd.Next(GetMaxCount)); - } - - /// - /// Вывод всей коллекции - /// - /// - public Bitmap? Show() - { - Bitmap bitmap = new(pictureWidth, pictureHeight); - Graphics graphics = Graphics.FromImage(bitmap); - DrawBackgound(graphics); - - SetObjectsPosition(); - for (int i = 0; i < (arr?.Count ?? 0); i++) - { - DrawningTrackedVehicle? obj = arr?.Get(i); - obj?.DrawTransport(graphics); - } - return bitmap; - } - /// - /// Вывод заднего фона - /// - /// - protected abstract void DrawBackgound(Graphics g); - - /// - /// Расстановка объектов - /// - protected abstract void SetObjectsPosition(); + _pictureWidth = picWidth; + _pictureHeight = picHeight; + _collection = collection; + _collection.MaxCount = GetMaxCount; } -} + + /// + /// Перегрузка оператора сложения для класса + /// + /// Компания + /// Добавляемый объект + /// + public static int operator +(AbstractCompany company, DrawningTrackedVehicle crane) + { + return company._collection.Insert(crane); + } + + /// + /// Перегрузка оператора удаления для класса + /// + /// Компания + /// Номер удаляемого объекта + /// + public static DrawningTrackedVehicle operator -(AbstractCompany company, int position) + { + return company._collection.Remove(position); + } + + /// + /// Получение случайного объекта из коллекции + /// + /// + public DrawningTrackedVehicle? GetRandomObject() + { + Random rnd = new(); + return _collection?.Get(rnd.Next(GetMaxCount)); + } + + /// + /// Вывод всей коллекции + /// + /// + public Bitmap? Show() + { + 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); + } + return bitmap; + } + + /// + /// Вывод заднего фона + /// + /// + protected abstract void DrawBackgound(Graphics g); + + /// + /// Расстановка объектов + /// + protected abstract void SetObjectsPosition(); +} \ No newline at end of file diff --git a/HoistingCrane/HoistingCrane/CollectionGenericObjects/CollectionType.cs b/HoistingCrane/HoistingCrane/CollectionGenericObjects/CollectionType.cs index 22ffa84..93433c2 100644 --- a/HoistingCrane/HoistingCrane/CollectionGenericObjects/CollectionType.cs +++ b/HoistingCrane/HoistingCrane/CollectionGenericObjects/CollectionType.cs @@ -1,5 +1,4 @@ -using System; -namespace HoistingCrane.CollectionGenericObjects +namespace HoistingCrane.CollectionGenericObjects { public enum CollectionType { diff --git a/HoistingCrane/HoistingCrane/CollectionGenericObjects/Garage.cs b/HoistingCrane/HoistingCrane/CollectionGenericObjects/Garage.cs index 6ba0162..d9fcfdf 100644 --- a/HoistingCrane/HoistingCrane/CollectionGenericObjects/Garage.cs +++ b/HoistingCrane/HoistingCrane/CollectionGenericObjects/Garage.cs @@ -8,8 +8,8 @@ namespace HoistingCrane.CollectionGenericObjects } protected override void DrawBackgound(Graphics g) { - int width = pictureWidth / _placeSizeWidth; - int height = pictureHeight / _placeSizeHeight; + int width = _pictureWidth / _placeSizeWidth; + int height = _pictureHeight / _placeSizeHeight; Pen pen = new(Color.Black, 3); for (int i = 0; i < width; i++) { @@ -22,18 +22,18 @@ namespace HoistingCrane.CollectionGenericObjects } protected override void SetObjectsPosition() { - int countWidth = pictureWidth / _placeSizeWidth; - int countHeight = pictureHeight / _placeSizeHeight; + int countWidth = _pictureWidth / _placeSizeWidth; + int countHeight = _pictureHeight / _placeSizeHeight; int currentPosWidth = countWidth - 1; int currentPosHeight = countHeight - 1; - for (int i = 0; i < (arr?.Count ?? 0); i++) + for (int i = 0; i < (_collection?.Count ?? 0); i++) { - if (arr?.Get(i) != null) + if (_collection?.Get(i) != null) { - arr?.Get(i)?.SetPictureSize(pictureWidth, pictureHeight); - arr?.Get(i)?.SetPosition(_placeSizeWidth * currentPosWidth + 25, _placeSizeHeight * currentPosHeight + 15); + _collection?.Get(i)?.SetPictureSize(_pictureWidth, _pictureHeight); + _collection?.Get(i)?.SetPosition(_placeSizeWidth * currentPosWidth + 25, _placeSizeHeight * currentPosHeight + 15); } if (currentPosWidth > 0) @@ -47,7 +47,6 @@ namespace HoistingCrane.CollectionGenericObjects { break; } - } } diff --git a/HoistingCrane/HoistingCrane/CollectionGenericObjects/ICollectionGenericObjects.cs b/HoistingCrane/HoistingCrane/CollectionGenericObjects/ICollectionGenericObjects.cs index ae99e89..89b4686 100644 --- a/HoistingCrane/HoistingCrane/CollectionGenericObjects/ICollectionGenericObjects.cs +++ b/HoistingCrane/HoistingCrane/CollectionGenericObjects/ICollectionGenericObjects.cs @@ -1,49 +1,55 @@ -namespace HoistingCrane.CollectionGenericObjects +using HoistingCrane.CollectionGenericObjects; + +public interface ICollectionGenericObjects + where T : class { - public interface ICollectionGenericObjects - where T: class - { - /// - /// Кол-во объектов в коллекции - /// - int Count { get; } - /// /// - /// Установка максимального количества элементов - /// - int MaxCount { get; set; } - /// - /// Добавление элемента в коллекцию - /// - /// - /// - int Insert(T obj); - /// - /// Добавление элемента в коллекцию на определенную позицию - /// - /// - /// - /// - int Insert(T obj, int position); - /// - /// Удаление элемента из коллекции по его позиции - /// - /// - /// - T? Remove(int position); - /// - /// Получение объекта коллекции - /// - /// - /// - T? Get(int position); - /// - /// Получение типа коллекции - /// - CollectionType GetCollectionType { get; } - /// - /// Получение объектов коллекции по одному - /// - /// - IEnumerable GetItems(); - } -} + /// + /// Количество объектов в коллекции + /// + int Count { get; } + + /// + /// Установка максимального количества элементов + /// + int MaxCount { get; set; } + + /// + /// Добавление объекта в коллекцию + /// + /// Добавляемый объект + /// true - вставка прошла удачно, false - вставка не удалась + int Insert(T obj); + + /// + /// Добавление объекта в коллекцию на конкретную позицию + /// + /// Добавляемый объект + /// Позиция + /// true - вставка прошла удачно, false - вставка не удалась + int Insert(T obj, int position); + + /// + /// Удаление объекта из коллекции с конкретной позиции + /// + /// Позиция + /// true - удаление прошло удачно, false - удаление не удалось + T? Remove(int position); + + /// + /// Получение объекта по позиции + /// + /// Позиция + /// Объект + T? Get(int position); + + /// + /// Получение типа коллекции + /// + CollectionType GetCollectionType { get; } + + /// + /// Получение объектов коллекции по одному + /// + /// Поэлементый вывод элементов коллекции + IEnumerable GetItems(); +} \ No newline at end of file diff --git a/HoistingCrane/HoistingCrane/CollectionGenericObjects/ListGenericObjects.cs b/HoistingCrane/HoistingCrane/CollectionGenericObjects/ListGenericObjects.cs index 6f07ab5..80400f4 100644 --- a/HoistingCrane/HoistingCrane/CollectionGenericObjects/ListGenericObjects.cs +++ b/HoistingCrane/HoistingCrane/CollectionGenericObjects/ListGenericObjects.cs @@ -2,88 +2,103 @@ using System.CodeDom.Compiler; using System.Windows.Forms.VisualStyles; -namespace HoistingCrane.CollectionGenericObjects +namespace HoistingCrane.CollectionGenericObjects; + +public class ListGenericObjects : ICollectionGenericObjects +where T : class { - public class ListGenericObjects : ICollectionGenericObjects where T : class + /// + /// Список объектов, которые храним + /// + private readonly List _collection; + + /// + /// Максимально допустимое число объектов в списке + /// + private int _maxCount; + + public int Count => _collection.Count; + + public int MaxCount { - /// - /// Список объектов, которые храним - /// - readonly List list; - /// - /// Конструктор - /// - public ListGenericObjects() + get { - list = new List(); - } - /// - /// Максимально допустимое число объектов в списке - /// - private int _maxCount; - public int Count - { - get { return list.Count; } - } - - public int MaxCount - { - get - { - return list.Count; - } - set - { - if (value > 0) - { - _maxCount = value; - } - } - } - - public CollectionType GetCollectionType => CollectionType.List; - - public T? Get(int position) - { - if (position >= Count || position < 0) return null; - return list[position]; - } - public int Insert(T obj) - { - if (Count == _maxCount) - { - return -1; - } - list.Add(obj); return Count; } - public int Insert(T obj, int position) + set { - if (position < 0 || position >= Count || Count == _maxCount) + if (value > 0) { - return -1; - } - list.Insert(position, obj); - return position; - } - public T? Remove(int position) - { - if(position >= 0 && position < list.Count) - { - T? temp = list[position]; - list.RemoveAt(position); - return temp; - } - return null; - } - - public IEnumerable GetItems() - { - for(int i = 0; i < list.Count; i++) - { - yield return list[i]; + _maxCount = value; } } } -} + + public CollectionType GetCollectionType => CollectionType.List; + + /// + /// Конструктор + /// + public ListGenericObjects() + { + _collection = new(); + } + + public T? Get(int position) + { + // Проверка позиции + if (position >= Count || position < 0) + { + return null; + } + return _collection[position]; + } + + public int Insert(T obj) + { + // Проверка, что не превышено максимальное количество элементов + if (Count == _maxCount) + { + return -1; + } + _collection.Add(obj); + return Count; + } + + public int Insert(T obj, int position) + { + // Проверка, что не превышено максимальное количество элементов + if (Count == _maxCount) + { + return -1; + } + // Проверка позиции + if (position >= Count || position < 0) + { + return -1; + } + _collection.Insert(position, obj); + return position; + } + + public T? Remove(int position) + { + // Проверка позиции + if (position >= Count || position < 0) + { + return null; + } + T? obj = _collection[position]; + _collection.RemoveAt(position); + return obj; + } + + public IEnumerable GetItems() + { + for (int i = 0; i < Count; ++i) + { + yield return _collection[i]; + } + } +} \ No newline at end of file diff --git a/HoistingCrane/HoistingCrane/CollectionGenericObjects/MassivGenericObjects.cs b/HoistingCrane/HoistingCrane/CollectionGenericObjects/MassivGenericObjects.cs index fbd554d..29e6cc8 100644 --- a/HoistingCrane/HoistingCrane/CollectionGenericObjects/MassivGenericObjects.cs +++ b/HoistingCrane/HoistingCrane/CollectionGenericObjects/MassivGenericObjects.cs @@ -1,105 +1,116 @@ -using System; +namespace HoistingCrane.CollectionGenericObjects; -namespace HoistingCrane.CollectionGenericObjects +public class MassiveGenericObjects : ICollectionGenericObjects +where T : class { - public class MassivGenericObjects : ICollectionGenericObjects where T : class + /// + /// Массив объектов, которые храним + /// + private T?[] _collection; + + public int Count => _collection.Length; + + public int MaxCount { - private T?[] arr; - public MassivGenericObjects() + get { - arr = Array.Empty(); + return _collection.Length; } - public int Count + + set { - get { return arr.Length; } - } - public int MaxCount - { - get + if (value > 0) { - return arr.Length; - } - set - { - if (value > 0) + if (_collection.Length > 0) { - if (arr.Length > 0) - { - Array.Resize(ref arr, value); - } - else - { - arr = new T?[value]; - } + Array.Resize(ref _collection, value); + } + else + { + _collection = new T?[value]; } } } - - public CollectionType GetCollectionType => CollectionType.Massive; - - public T? Get(int position) - { - if (position >= 0 && position < arr.Length) - { - return arr[position]; - } - return null; - } - - public IEnumerable GetItems() - { - for(int i = 0; i < arr.Length; i++) - { - yield return arr[i]; - } - } - - public int Insert(T obj) - { - return Insert(obj, 0); - } - - public int Insert(T obj, int position) - { - - if (position < 0 || position >= Count) - { - return -1; - } - - int copyPos = position - 1; - - while (position < Count) - { - if (arr[position] == null) - { - arr[position] = obj; - return position; - } - position++; - } - while (copyPos > 0) - { - if (arr[copyPos] == null) - { - arr[copyPos] = obj; - return copyPos; - } - copyPos--; - } - - return -1; - } - - public T? Remove(int position) - { - if (position >= 0 && position < Count) - { - T? temp = arr[position]; - arr[position] = null; - return temp; - } - return null; - } } -} + + public CollectionType GetCollectionType => CollectionType.Massive; + + /// + /// Конструктор + /// + public MassiveGenericObjects() + { + _collection = Array.Empty(); + } + + public T? Get(int position) + { + // Проверка позиции + if (position < 0 || position >= Count) + { + return null; + } + return _collection[position]; + } + + public int Insert(T obj) + { + // Вставка в свободное место набора + return Insert(obj, 0); + } + + public int Insert(T obj, int position) + { + // Проверка позиции + if (position < 0 || position >= Count) + { + return -1; + } + // Проверка, что элемент массива по этой позиции пустой + if (_collection[position] == null) + { + _collection[position] = obj; + 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; + } + } + return -1; + } + + public T? Remove(int position) + { + // Проверка позиции и наличия объекта + if (position < 0 || position >= Count || _collection[position] == null) + { + return null; + } + // Удаление объекта из массива + T? obj = _collection[position]; + _collection[position] = null; + return obj; + } + + public IEnumerable GetItems() + { + for (int i = 0; i < _collection.Length; ++i) + { + yield return _collection[i]; + } + } +} \ No newline at end of file diff --git a/HoistingCrane/HoistingCrane/CollectionGenericObjects/StorageCollection.cs b/HoistingCrane/HoistingCrane/CollectionGenericObjects/StorageCollection.cs index 0aa587f..9c6c508 100644 --- a/HoistingCrane/HoistingCrane/CollectionGenericObjects/StorageCollection.cs +++ b/HoistingCrane/HoistingCrane/CollectionGenericObjects/StorageCollection.cs @@ -1,200 +1,219 @@ using HoistingCrane.Drawning; -using System; -using System.Configuration; -using System.Text; +namespace HoistingCrane.CollectionGenericObjects; -namespace HoistingCrane.CollectionGenericObjects +public class StorageCollection +where T : DrawningTrackedVehicle { - public class StorageCollection where T : DrawningTrackedVehicle + /// + /// Словарь (хранилище) с коллекциями + /// + readonly Dictionary> _storages; + + /// + /// Возвращение списка названий коллекций + /// + public List Keys => _storages.Keys.ToList(); + + /// + /// Ключевое слово, с которого должен начинаться файл + /// + private readonly string _collectionKey = "CollectionsStorage"; + + /// + /// Разделитель для записи ключа и значения элемента словаря + /// + private readonly string _separatorForKeyValue = "|"; + + /// + /// Разделитель для записей коллекции данных в файл + /// + private readonly string _separatorItems = ";"; + + /// + /// Конструктор + /// + public StorageCollection() { - /// - /// Словарь (хранилище) с коллекциями - /// - readonly Dictionary> dict; - /// - /// Возвращение списка названий коллекций - /// - public List Keys => dict.Keys.ToList(); - /// - /// Ключевое слово, с которого должен начинаться файл - /// - private readonly string _collectionKey = "CollectionsStorage"; - /// - /// Разделитель для записи ключа и значения элемента словаря - /// - private readonly string _separatorForKeyValue = "|"; - /// - /// Разделитель для записей коллекции данных в файл - /// - private readonly string _separatorItems = ";"; - /// - /// Конструктор - /// - public StorageCollection() + _storages = new Dictionary>(); + } + + /// + /// Добавление коллекции в хранилище + /// + /// Название коллекции + /// Тип коллекции + public void AddCollection(string name, CollectionType collectionType) + { + // Проверка, что name не пустой и нет в словаре записи с таким ключом + if (string.IsNullOrEmpty(name) || _storages.ContainsKey(name) || collectionType == CollectionType.None) { - dict = new Dictionary>(); + return; } - /// - /// Добавление коллекции в хранилище - /// - /// Название коллекции - /// тип коллекции - public void AddCollection(string name, CollectionType collectionType) + if (collectionType == CollectionType.Massive) { - if (dict.ContainsKey(name)) return; - if (collectionType == CollectionType.None) return; - else if (collectionType == CollectionType.Massive) - dict[name] = new MassivGenericObjects(); - else if (collectionType == CollectionType.List) - dict[name] = new ListGenericObjects(); + _storages[name] = new MassiveGenericObjects(); } - /// - /// Удаление коллекции - /// - /// Название коллекции - public void DelCollection(string name) + if (collectionType == CollectionType.List) { - if (Keys.Contains(name)) + _storages[name] = new ListGenericObjects(); + } + } + + /// + /// Удаление коллекции + /// + /// Название коллекции + public void DelCollection(string name) + { + if (_storages.ContainsKey(name)) + { + _storages.Remove(name); + } + } + + /// + /// Доступ к коллекции + /// + /// Название коллекции + /// + public ICollectionGenericObjects? this[string name] + { + get + { + if (_storages.ContainsKey(name)) { - dict.Remove(name); + return _storages[name]; } - } - /// - /// Доступ к коллекции - /// - /// Название коллекции - /// - public ICollectionGenericObjects? this[string name] - { - get + else { - if (dict.ContainsKey(name)) - return dict[name]; return null; } } - /// - /// Сохранение информации по автомобилям в хранилище в файл - /// - /// Путь и имя файла - /// true - сохранение прошло успешно, false - ошибка при сохранении данных - public bool SaveData(string filename) + } + + /// + /// Сохранение информации по военным кораблям в хранилище в файл + /// + /// Путь и имя файла + /// true - сохранение прошло успешно, false - ошибка при сохранении данных + public bool SaveData(string filename) + { + if (_storages.Count == 0) { - if (dict.Count == 0) + return false; + } + + if (File.Exists(filename)) + { + File.Delete(filename); + } + + using (StreamWriter writer = new StreamWriter(filename)) + { + writer.Write(_collectionKey); + foreach (KeyValuePair> value in _storages) + { + writer.Write(Environment.NewLine); + // не сохраняем пустые коллекции + if (value.Value.Count == 0) + { + continue; + } + writer.Write(value.Key); + writer.Write(_separatorForKeyValue); + writer.Write(value.Value.GetCollectionType); + writer.Write(_separatorForKeyValue); + writer.Write(value.Value.MaxCount); + writer.Write(_separatorForKeyValue); + foreach (T? item in value.Value.GetItems()) + { + string data = item?.GetDataForSave() ?? string.Empty; + if (string.IsNullOrEmpty(data)) + { + continue; + } + writer.Write(data); + writer.Write(_separatorItems); + } + } + } + return true; + } + + /// + /// Загрузка информации по военным кораблям в хранилище из файла + /// + /// Путь и имя файла + /// true - загрузка прошла успешно, false - ошибка при загрузке данных + public bool LoadData(string filename) + { + if (!File.Exists(filename)) + { + return false; + } + + using (StreamReader read = File.OpenText(filename)) + { + string str = read.ReadLine(); + if (str == null || str.Length == 0) { return false; } - if (File.Exists(filename)) - { - File.Delete(filename); - } - - using (StreamWriter writer = new StreamWriter(filename)) - { - writer.Write(_collectionKey); - - foreach (KeyValuePair> value in dict) - { - StringBuilder sb = new(); - sb.Append(Environment.NewLine); - - // не сохраняем пустые коллекции - if (value.Value.Count == 0) - { - continue; - } - - sb.Append(value.Key); - sb.Append(_separatorForKeyValue); - sb.Append(value.Value.GetCollectionType); - sb.Append(_separatorForKeyValue); - sb.Append(value.Value.MaxCount); - sb.Append(_separatorForKeyValue); - foreach (T? item in value.Value.GetItems()) - { - string data = item?.GetDataForSave() ?? string.Empty; - if (string.IsNullOrEmpty(data)) - { - continue; - } - sb.Append(data); - sb.Append(_separatorItems); - } - writer.Write(sb); - } - } - return true; - } - - /// - // /// Загрузка информации по грузовикам в хранилище из файла - // /// - // /// Путь и имя файла - // /// true - загрузка прошла успешно, false - ошибка при загрузке данных - public bool LoadData(string filename) - { - if (!File.Exists(filename)) + if (!str.StartsWith(_collectionKey)) { return false; } - using (StreamReader fs = File.OpenText(filename)) + + _storages.Clear(); + string strs = ""; + while ((strs = read.ReadLine()) != null) { - string str = fs.ReadLine(); - if (str == null || str.Length == 0) + string[] record = strs.Split(_separatorForKeyValue, StringSplitOptions.RemoveEmptyEntries); + if (record.Length != 4) + { + continue; + } + + CollectionType collectionType = (CollectionType)Enum.Parse(typeof(CollectionType), record[1]); + ICollectionGenericObjects? collection = StorageCollection.CreateCollection(collectionType); + if (collection == null) { return false; } - if (!str.StartsWith(_collectionKey)) + + collection.MaxCount = Convert.ToInt32(record[2]); + + string[] set = record[3].Split(_separatorItems, StringSplitOptions.RemoveEmptyEntries); + foreach (string elem in set) { - return false; - } - dict.Clear(); - string strs = ""; - while ((strs = fs.ReadLine()) != null) - { - string[] record = strs.Split(_separatorForKeyValue, StringSplitOptions.RemoveEmptyEntries); - if (record.Length != 4) + if (elem?.CreateDrawningTrackedVehicle() is T warship) { - continue; - } - CollectionType collectionType = (CollectionType)Enum.Parse(typeof(CollectionType), record[1]); - ICollectionGenericObjects? collection = StorageCollection.CreateCollection(collectionType); - if (collection == null) - { - return false; - } - collection.MaxCount = Convert.ToInt32(record[2]); - string[] set = record[3].Split(_separatorItems, StringSplitOptions.RemoveEmptyEntries); - foreach (string elem in set) - { - if (elem?.CreateDrawningTrackedVehicle() is T truck) + if (collection.Insert(warship) == -1) { - if (collection.Insert(truck) == -1) - { - return false; - } + return false; } } - dict.Add(record[0], collection); } - return true; + _storages.Add(record[0], collection); } } - /// - /// Создание коллекции по типу - /// - /// - /// - private static ICollectionGenericObjects? CreateCollection(CollectionType collectionType) - { - return collectionType switch - { - CollectionType.Massive => new MassivGenericObjects(), - CollectionType.List => new ListGenericObjects(), - _ => null, - }; - } + return true; + } + /// + /// Создание коллекции по типу + /// + /// + /// + private static ICollectionGenericObjects? CreateCollection(CollectionType collectionType) + { + return collectionType switch + { + CollectionType.Massive => new MassiveGenericObjects(), + CollectionType.List => new ListGenericObjects(), + _ => null, + }; } } + diff --git a/HoistingCrane/HoistingCrane/FormCarCollection.cs b/HoistingCrane/HoistingCrane/FormCarCollection.cs index 612b6a7..46d9f0b 100644 --- a/HoistingCrane/HoistingCrane/FormCarCollection.cs +++ b/HoistingCrane/HoistingCrane/FormCarCollection.cs @@ -1,15 +1,6 @@ using HoistingCrane.CollectionGenericObjects; using HoistingCrane.Drawning; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; - +using Microsoft.Extensions.Logging; namespace HoistingCrane { public partial class FormCarCollection : Form @@ -17,6 +8,10 @@ namespace HoistingCrane private AbstractCompany? _company; private readonly StorageCollection _storageCollection; + /// + /// Логгер + /// + private readonly ILogger logger; public FormCarCollection() { InitializeComponent(); @@ -27,70 +22,29 @@ namespace HoistingCrane { panelCompanyTool.Enabled = false; } - private void CreateObject(string type) - { - DrawningTrackedVehicle drawning; - if (_company == null) return; - Random rand = new(); - switch (type) - { - case nameof(DrawningHoistingCrane): - drawning = new DrawningHoistingCrane(rand.Next(100, 300), rand.Next(1000, 3000), GetColor(rand), GetColor(rand), true, true); - break; - - case nameof(DrawningTrackedVehicle): - drawning = new DrawningTrackedVehicle(rand.Next(100, 300), rand.Next(1000, 3000), GetColor(rand)); - break; - default: - return; - } - if ((_company + drawning) != -1) - { - MessageBox.Show("Объект добавлен"); - pictureBox.Image = _company.Show(); - } - else - { - MessageBox.Show("Не удалось добавить объект"); - } - } - private static Color GetColor(Random random) - { - Color color = Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)); - ColorDialog dialog = new(); - if (dialog.ShowDialog() == DialogResult.OK) - { - color = dialog.Color; - } - return color; - } private void buttonCreateHoistingCrane_Click(object sender, EventArgs e) { FormCarConfig form = new(); form.Show(); - form.AddEvent(SetCar); + form.AddEvent(SetCrane); } - private void SetCar(DrawningTrackedVehicle drawningTrackedVehicle) + private void SetCrane(DrawningTrackedVehicle drawningTrackedVehicle) { - if (_company == null || drawningTrackedVehicle == null) - { - return; - } - - if (_company + drawningTrackedVehicle != -1) - { - MessageBox.Show("Объект добавлен"); - pictureBox.Image = _company.Show(); - } - else - { - MessageBox.Show("Не удалось добавить объект"); - } + if (_company == null || drawningTrackedVehicle == null) return; + + if (_company + drawningTrackedVehicle != -1) + { + MessageBox.Show("Объект добавлен"); + pictureBox.Image = _company.Show(); + } + else + { + MessageBox.Show("Не удалось добавить объект"); + } } private void buttonDeleteCar_Click(object sender, EventArgs e) { - if (string.IsNullOrEmpty(maskedTextBox.Text) || _company == null) { return; @@ -99,16 +53,17 @@ namespace HoistingCrane { return; } - int pos = Convert.ToInt32(maskedTextBox.Text); - if ((_company - pos) != null) - { - MessageBox.Show("Объект удален!"); - pictureBox.Image = _company.Show(); - } - else - { - MessageBox.Show("Не удалось удалить объект"); - } + int pos = Convert.ToInt32(maskedTextBox.Text); + if ((_company - pos) != null) + { + MessageBox.Show("Объект удален!"); + pictureBox.Image = _company.Show(); + } + else + { + MessageBox.Show("Не удалось удалить объект"); + } + } private void buttonRefresh_Click(object sender, EventArgs e) { @@ -153,8 +108,7 @@ namespace HoistingCrane { 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; @@ -166,9 +120,7 @@ namespace HoistingCrane { collectionType = CollectionType.List; } - _storageCollection.AddCollection(textBoxCollectionName.Text, - collectionType); - RerfreshListBoxItems(); + _storageCollection.AddCollection(textBoxCollectionName.Text,collectionType);RerfreshListBoxItems(); } private void buttonDeleteCollection_Click(object sender, EventArgs e) { @@ -181,20 +133,22 @@ namespace HoistingCrane return; _storageCollection.DelCollection(listBoxCollection.SelectedItem.ToString()); RerfreshListBoxItems(); + } private void buttonCreateCompany_Click(object sender, EventArgs e) { - if (listBoxCollection.SelectedIndex < 0 || listBoxCollection.SelectedItem == null) + + if (listBoxCollection.SelectedIndex < 0 || listBoxCollection.SelectedItem == null) { MessageBox.Show("Коллекция не выбрана"); return; } ICollectionGenericObjects? collection = _storageCollection[listBoxCollection.SelectedItem.ToString() ?? string.Empty]; - if (collection == null) + if (collection == null) { MessageBox.Show("Коллекция не проинициализирована"); return; - } + }; switch (comboBoxSelectorCompany.Text) { case "Хранилище": @@ -214,13 +168,15 @@ namespace HoistingCrane { if (saveFileDialog.ShowDialog() == DialogResult.OK) { - if (_storageCollection.SaveData(saveFileDialog.FileName)) + try { + _storageCollection.SaveData(saveFileDialog.FileName); MessageBox.Show("Сохранение прошло успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information); + } - else + catch (Exception ex) { - MessageBox.Show("Не сохранилось", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error); + MessageBox.Show(ex.Message, "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } @@ -234,14 +190,16 @@ namespace HoistingCrane { if(openFileDialog.ShowDialog() == DialogResult.OK) { - if (_storageCollection.LoadData(openFileDialog.FileName)) + try { - MessageBox.Show("Загрузка прошла успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information); + _storageCollection.LoadData(openFileDialog.FileName); RerfreshListBoxItems(); + MessageBox.Show("Загрузка прошла успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information); + } - else + catch(Exception ex) { - MessageBox.Show("Не сохранилось", "Результат",MessageBoxButtons.OK, MessageBoxIcon.Error); + MessageBox.Show(ex.Message, "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } diff --git a/HoistingCrane/HoistingCrane/FormCarConfig.cs b/HoistingCrane/HoistingCrane/FormCarConfig.cs index 2d0cd40..306b03f 100644 --- a/HoistingCrane/HoistingCrane/FormCarConfig.cs +++ b/HoistingCrane/HoistingCrane/FormCarConfig.cs @@ -31,6 +31,7 @@ namespace HoistingCrane panelColorPurple.MouseDown += panel_MouseDown; buttonCancel.Click += (sender, e) => Close(); } + /// /// Привязка метода к событию /// diff --git a/HoistingCrane/HoistingCrane/HoistingCrane.csproj b/HoistingCrane/HoistingCrane/HoistingCrane.csproj index 69ac652..3f2e375 100644 --- a/HoistingCrane/HoistingCrane/HoistingCrane.csproj +++ b/HoistingCrane/HoistingCrane/HoistingCrane.csproj @@ -12,6 +12,18 @@ + + + + + + + + + + + + True diff --git a/HoistingCrane/HoistingCrane/Program.cs b/HoistingCrane/HoistingCrane/Program.cs index 79d96ff..b7ebec0 100644 --- a/HoistingCrane/HoistingCrane/Program.cs +++ b/HoistingCrane/HoistingCrane/Program.cs @@ -1,18 +1,16 @@ -namespace HoistingCrane +namespace HoistingCrane; + +internal static class Program { - internal static class Program + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() { - /// - /// The main entry point for the application. - /// - [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 FormCarCollection()); - - } + // To customize application configuration such as set high DPI settings or default font, + // see https://aka.ms/applicationconfiguration. + ApplicationConfiguration.Initialize(); + Application.Run(new FormCarCollection()); } } \ No newline at end of file diff --git a/Файл_для_лабораторной_6.txt b/Файл_для_лабораторной_6.txt deleted file mode 100644 index 9ad6433..0000000 --- a/Файл_для_лабораторной_6.txt +++ /dev/null @@ -1,3 +0,0 @@ -CollectionsStorage -массив|Massive|25|EntityTrackedVehicle:100:100:Green;EntityHoistingCrane:100:100:Yellow:Black:False:False;EntityTrackedVehicle:100:100:Gray; -список|List|2|EntityTrackedVehicle:100:100:Blue;EntityHoistingCrane:100:100:Gray:Black:True:True; \ No newline at end of file diff --git a/Файл_с_машинами.txt b/Файл_с_машинами.txt deleted file mode 100644 index ec76705..0000000 --- a/Файл_с_машинами.txt +++ /dev/null @@ -1,2 +0,0 @@ -CollectionsStorage -массив|Massive|24|EntityTrackedVehicle:100:100:Gray;EntityTrackedVehicle:100:100:Red;EntityTrackedVehicle:100:100:Blue;EntityTrackedVehicle:100:100:Yellow;EntityTrackedVehicle:100:100:Green;EntityTrackedVehicle:100:100:Black;EntityTrackedVehicle:100:100:White;EntityTrackedVehicle:100:100:Purple;EntityHoistingCrane:100:100:Green:Black:False:False;EntityHoistingCrane:100:100:Yellow:Gray:False:True;EntityHoistingCrane:100:100:Purple:Black:True:True;EntityTrackedVehicle:100:100:White;EntityHoistingCrane:100:100:White:Black:False:True;EntityTrackedVehicle:100:100:Green;EntityTrackedVehicle:100:100:White;EntityTrackedVehicle:100:100:White;EntityTrackedVehicle:100:100:White;EntityTrackedVehicle:100:100:White;EntityHoistingCrane:100:100:White:Black:False:False;EntityTrackedVehicle:100:100:White;EntityTrackedVehicle:100:100:Yellow;EntityTrackedVehicle:100:100:White;EntityHoistingCrane:100:100:Gray:Black:False:False;EntityTrackedVehicle:100:100:Black; \ No newline at end of file diff --git a/допка3.txt b/допка3.txt deleted file mode 100644 index 24b0dfa..0000000 --- a/допка3.txt +++ /dev/null @@ -1,3 +0,0 @@ -CollectionsStorage -массив|Massive -список|List \ No newline at end of file