diff --git a/lab_0/CollectionGenericObject/ICollectionGenericObjects.cs b/lab_0/CollectionGenericObject/ICollectionGenericObjects.cs index 1c57f2c..6ad2367 100644 --- a/lab_0/CollectionGenericObject/ICollectionGenericObjects.cs +++ b/lab_0/CollectionGenericObject/ICollectionGenericObjects.cs @@ -51,7 +51,18 @@ namespace ProjectBus.CollectionGenericObject; /// Позиция /// Объект T? Get(int position); - } + + /// + /// Получение типа коллекции + /// + CollectionType GetCollectionType { get; } + + /// + /// Получение объектов коллекции по одному + /// + /// Поэлементый вывод элементов коллекции + IEnumerable GetItems(); +} diff --git a/lab_0/CollectionGenericObject/ListGenericObjects.cs b/lab_0/CollectionGenericObject/ListGenericObjects.cs index 2fbfbdb..4070bcc 100644 --- a/lab_0/CollectionGenericObject/ListGenericObjects.cs +++ b/lab_0/CollectionGenericObject/ListGenericObjects.cs @@ -23,6 +23,8 @@ public class ListGenericObjects : ICollectionGenericObjects public int SetMaxCount { set { if (value > 0) { _maxCount = value; } } } + public CollectionType GetCollectionType => CollectionType.List; + /// /// Конструктор /// @@ -70,5 +72,13 @@ public class ListGenericObjects : ICollectionGenericObjects _collection.RemoveAt(position); return temp; } + + public IEnumerable GetItems() + { + for (int i = 0; i < Count; ++i) + { + yield return _collection[i]; + } + } } diff --git a/lab_0/CollectionGenericObject/MassiveGenericObjects.cs b/lab_0/CollectionGenericObject/MassiveGenericObjects.cs index 9b4ee88..d352b26 100644 --- a/lab_0/CollectionGenericObject/MassiveGenericObjects.cs +++ b/lab_0/CollectionGenericObject/MassiveGenericObjects.cs @@ -39,10 +39,12 @@ namespace ProjectBus.CollectionGenericObject; } } - /// - /// Конструктор - /// - public MassiveGenericObjects() + public CollectionType GetCollectionType => CollectionType.Massive; + + /// + /// Конструктор + /// + public MassiveGenericObjects() { _collection = Array.Empty(); } @@ -132,5 +134,13 @@ namespace ProjectBus.CollectionGenericObject; _collection[position] = null; return temp; } - } + + public IEnumerable GetItems() + { + for (int i = 0; i < _collection.Length; ++i) + { + yield return _collection[i]; + } + } +} diff --git a/lab_0/Drawnings/DrawningBus.cs b/lab_0/Drawnings/DrawningBus.cs index be191ba..3a4a07f 100644 --- a/lab_0/Drawnings/DrawningBus.cs +++ b/lab_0/Drawnings/DrawningBus.cs @@ -22,6 +22,14 @@ public class DrawningBus : DrawningSimpleBus EntitySimpleBus = new EntityBus(speed, weight, bodyColor, additionalColor, additionalCompartment, accordion); } + public DrawningBus(EntitySimpleBus simpleBus) : base(310, 52) + { + if (simpleBus != null && simpleBus is EntityBus bus) + { + EntitySimpleBus = new EntityBus(bus.Speed, bus.Weight, bus.BodyColor, bus.AdditionalColor, bus.AdditionalCompartment, bus.Accordion); + } + } + public override void DrawTransport(Graphics g) { if (EntitySimpleBus == null || EntitySimpleBus is not EntityBus bus || !_startPosX.HasValue || !_startPosY.HasValue) diff --git a/lab_0/Drawnings/DrawningSimpleBus.cs b/lab_0/Drawnings/DrawningSimpleBus.cs index 873435a..2819396 100644 --- a/lab_0/Drawnings/DrawningSimpleBus.cs +++ b/lab_0/Drawnings/DrawningSimpleBus.cs @@ -80,6 +80,18 @@ public class DrawningSimpleBus EntitySimpleBus = new EntitySimpleBus(speed, weight, bodyColor); } + /// + /// Конструктор + /// + /// Класс-сущность + public DrawningSimpleBus(EntitySimpleBus simpleBus) : this() + { + if (simpleBus != null) + { + EntitySimpleBus = new EntitySimpleBus(simpleBus.Speed, simpleBus.Weight, simpleBus.BodyColor); + } + } + /// /// Конструктор для наследников /// diff --git a/lab_0/Drawnings/ExtentionDrawningSimpleBus.cs b/lab_0/Drawnings/ExtentionDrawningSimpleBus.cs new file mode 100644 index 0000000..94e4f33 --- /dev/null +++ b/lab_0/Drawnings/ExtentionDrawningSimpleBus.cs @@ -0,0 +1,56 @@ +using System; +using ProjectBus.Entities; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectBus.Drawnings; + +public static class ExtentionDrawningSimpleBus +{ + /// + /// Разделитель для записи информации по объекту в файл + /// + private static readonly string _separatorForObject = ":"; + + /// + /// Создание объекта из строки + /// + /// Строка с данными для создания объекта + /// Объект + public static DrawningSimpleBus? CreateDrawningSimpleBus(this string info) + { + string[] strs = info.Split(_separatorForObject); + EntitySimpleBus? simpleBus = EntityBus.CreateEntityBus(strs); + if (simpleBus != null) + { + return new DrawningBus((EntityBus)simpleBus); + } + + simpleBus = EntitySimpleBus.CreateEntitySimpleBus(strs); + if (simpleBus != null) + { + return new DrawningSimpleBus(simpleBus); + } + + return null; + } + + /// + /// Получение данных для сохранения в файл + /// + /// Сохраняемый объект + /// Строка с данными по объекту + public static string GetDataForSave(this DrawningSimpleBus drawningSimpleBus) + { + string[]? array = drawningSimpleBus?.EntitySimpleBus?.GetStringRepresentation(); + + if (array == null) + { + return string.Empty; + } + + return string.Join(_separatorForObject, array); + } +} diff --git a/lab_0/Entities/EntityBus.cs b/lab_0/Entities/EntityBus.cs index 24db7c8..820fa7f 100644 --- a/lab_0/Entities/EntityBus.cs +++ b/lab_0/Entities/EntityBus.cs @@ -40,4 +40,32 @@ public class EntityBus : EntitySimpleBus AdditionalCompartment = additionalCompartment; Accordion = accordion; } -} \ No newline at end of file + /// + /// Получение строк со значениями свойств объекта класса-сущности + /// + /// + public override string[] GetStringRepresentation() + { + return new[] + { + nameof(EntityBus), Speed.ToString(), + Weight.ToString(), BodyColor.Name, AdditionalColor.Name, AdditionalCompartment.ToString(), Accordion.ToString() + + }; + } + + /// + /// Создание объекта из массива строк + /// + /// + /// + public static EntitySimpleBus? CreateEntityBus(string[] strs) + { + if (strs.Length != 7 || strs[0] != nameof(EntityBus)) + { + return null; + } + + return new EntityBus(Convert.ToInt32(strs[1]), Convert.ToDouble(strs[2]), Color.FromName(strs[3]), Color.FromName(strs[4]), Convert.ToBoolean(strs[5]), Convert.ToBoolean(strs[5])); + } +} diff --git a/lab_0/Entities/EntitySimpleBus.cs b/lab_0/Entities/EntitySimpleBus.cs index 438bad8..5f31438 100644 --- a/lab_0/Entities/EntitySimpleBus.cs +++ b/lab_0/Entities/EntitySimpleBus.cs @@ -20,10 +20,6 @@ public class EntitySimpleBus /// Основной цвет /// public Color BodyColor { get; private set; } - public void setBodyColor(Color color) - { - BodyColor = color; - } /// @@ -43,4 +39,26 @@ public class EntitySimpleBus Weight = weight; BodyColor = bodyColor; } + + // + /// Получение строк со значениями свойств объекта класса-сущности + /// + /// + public virtual string[] GetStringRepresentation() + { + return new[] { nameof(EntitySimpleBus), Speed.ToString(), Weight.ToString(), BodyColor.Name }; + } + /// + /// Создание объекта из массива строк + /// + /// + /// + public static EntitySimpleBus? CreateEntitySimpleBus(string[] strs) + { + if (strs.Length != 4 || strs[0] != nameof(EntitySimpleBus)) + { + return null; + } + return new EntitySimpleBus(Convert.ToInt32(strs[1]), Convert.ToDouble(strs[2]), Color.FromName(strs[3])); + } }