From f2c16adaa728556a67bc6ce6f784cf5e64536636 Mon Sep 17 00:00:00 2001 From: easynickname1 <7326033@gmail.com> Date: Tue, 21 May 2024 21:18:05 +0400 Subject: [PATCH] =?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=968?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AbstractCompany.cs | 8 +- .../BoatHarborService.cs | 4 +- .../CollectionInfo.cs | 76 +++++++++++++++++++ .../ICollectionGenericObjects.cs | 12 ++- .../ListGenericObjects.cs | 25 +++++- .../MassiveGenericObjects.cs | 38 ++++++++-- .../StorageCollection.cs | 45 ++++++----- .../ProjectMotorBoat/Drawings/DrawingBoat.cs | 2 - .../Drawings/DrawingBoatCompareByColor.cs | 35 +++++++++ .../Drawings/DrawingBoatCompareByType.cs | 34 +++++++++ .../Drawings/DrawingBoatEqutables.cs | 73 ++++++++++++++++++ .../ObjectAlreadyExistsException.cs | 20 +++++ .../FormBoatCollection.Designer.cs | 48 +++++++++--- .../ProjectMotorBoat/FormBoatCollection.cs | 41 +++++++++- .../ProjectMotorBoat/ProjectMotorBoat.csproj | 4 - .../{save.txt => saveList.txt} | 2 +- .../ProjectMotorBoat/saveMassive.txt | 2 + 17 files changed, 417 insertions(+), 52 deletions(-) create mode 100644 ProjectMotorBoat/ProjectMotorBoat/CollectionGenericObjects/CollectionInfo.cs create mode 100644 ProjectMotorBoat/ProjectMotorBoat/Drawings/DrawingBoatCompareByColor.cs create mode 100644 ProjectMotorBoat/ProjectMotorBoat/Drawings/DrawingBoatCompareByType.cs create mode 100644 ProjectMotorBoat/ProjectMotorBoat/Drawings/DrawingBoatEqutables.cs create mode 100644 ProjectMotorBoat/ProjectMotorBoat/Exceptions/ObjectAlreadyExistsException.cs rename ProjectMotorBoat/ProjectMotorBoat/{save.txt => saveList.txt} (69%) create mode 100644 ProjectMotorBoat/ProjectMotorBoat/saveMassive.txt diff --git a/ProjectMotorBoat/ProjectMotorBoat/CollectionGenericObjects/AbstractCompany.cs b/ProjectMotorBoat/ProjectMotorBoat/CollectionGenericObjects/AbstractCompany.cs index 524d736..91cea2d 100644 --- a/ProjectMotorBoat/ProjectMotorBoat/CollectionGenericObjects/AbstractCompany.cs +++ b/ProjectMotorBoat/ProjectMotorBoat/CollectionGenericObjects/AbstractCompany.cs @@ -59,7 +59,7 @@ public abstract class AbstractCompany /// public static int? operator +(AbstractCompany company, DrawingBoat boat) { - return company._collection?.Insert(boat); + return company._collection?.Insert(boat, new DrawingBoatEqutables()) ?? -1; } /// @@ -107,6 +107,12 @@ public abstract class AbstractCompany return bitmap; } + /// + /// Сортировка + /// + /// Сравнитель объектов + public void Sort(IComparer comparer) => _collection?.CollectionSort(comparer); + /// /// Вывод заднего фона /// diff --git a/ProjectMotorBoat/ProjectMotorBoat/CollectionGenericObjects/BoatHarborService.cs b/ProjectMotorBoat/ProjectMotorBoat/CollectionGenericObjects/BoatHarborService.cs index 58ee77b..2db2d15 100644 --- a/ProjectMotorBoat/ProjectMotorBoat/CollectionGenericObjects/BoatHarborService.cs +++ b/ProjectMotorBoat/ProjectMotorBoat/CollectionGenericObjects/BoatHarborService.cs @@ -56,8 +56,8 @@ public class BoatHarborService : AbstractCompany try { - _collection.Get(i).SetPictureSize(_pictureWidth, _pictureHeight); - _collection.Get(i).SetPosition(startPosX, startPosY); + _collection?.Get(i)?.SetPictureSize(_pictureWidth, _pictureHeight); + _collection?.Get(i)?.SetPosition(startPosX, startPosY); } catch (Exception) { } diff --git a/ProjectMotorBoat/ProjectMotorBoat/CollectionGenericObjects/CollectionInfo.cs b/ProjectMotorBoat/ProjectMotorBoat/CollectionGenericObjects/CollectionInfo.cs new file mode 100644 index 0000000..94542ff --- /dev/null +++ b/ProjectMotorBoat/ProjectMotorBoat/CollectionGenericObjects/CollectionInfo.cs @@ -0,0 +1,76 @@ +namespace ProjectMotorBoat.CollectionGenericObjects; + +/// +/// Класс, хранящиий информацию по коллекции +/// +public class CollectionInfo : IEquatable +{ + /// + /// Название + /// + public string Name { get; private set; } + + /// + /// Тип + /// + public CollectionType CollectionType { get; private set; } + + /// + /// Описание + /// + public string Description { get; private set; } + + /// + /// Разделитель для записи информации по объекту в файл + /// + private static readonly string _separator = "-"; + + /// + /// Конструктор + /// + /// Название + /// Тип + /// Описание + public CollectionInfo(string name, CollectionType collectionType, string description) + { + Name = name; + CollectionType = collectionType; + Description = description; + } + + /// + /// Создание объекта из строки + /// + /// Строка + /// Объект или null + public static CollectionInfo? GetCollectionInfo(string data) + { + string[] strs = data.Split(_separator, StringSplitOptions.RemoveEmptyEntries); + if (strs.Length < 1 || strs.Length > 3) + { + return null; + } + + return new CollectionInfo(strs[0], (CollectionType)Enum.Parse(typeof(CollectionType), strs[1]), strs.Length > 2 ? strs[2] : string.Empty); + } + + public override string ToString() + { + return Name + _separator + CollectionType + _separator + Description; + } + + public bool Equals(CollectionInfo? other) + { + return Name == other?.Name; + } + + public override bool Equals(object? obj) + { + return Equals(obj as CollectionInfo); + } + + public override int GetHashCode() + { + return Name.GetHashCode(); + } +} diff --git a/ProjectMotorBoat/ProjectMotorBoat/CollectionGenericObjects/ICollectionGenericObjects.cs b/ProjectMotorBoat/ProjectMotorBoat/CollectionGenericObjects/ICollectionGenericObjects.cs index 329018d..2f4e862 100644 --- a/ProjectMotorBoat/ProjectMotorBoat/CollectionGenericObjects/ICollectionGenericObjects.cs +++ b/ProjectMotorBoat/ProjectMotorBoat/CollectionGenericObjects/ICollectionGenericObjects.cs @@ -21,16 +21,18 @@ public interface ICollectionGenericObjects /// Добавление объекта в коллекцию /// /// Добавляемый объект + /// Cравнение двух объектов /// Count - вставка прошла удачно, -1 - вставка не удалась - int Insert(T obj); + int Insert(T obj, IEqualityComparer? comparer = null); /// /// Добавление объекта в коллекцию на конкретную позицию /// /// Добавляемый объект /// Позиция + /// Cравнение двух объектов /// Count - вставка прошла удачно, -1 - вставка не удалась - int Insert(T obj, int position); + int Insert(T obj, int position, IEqualityComparer? comparer = null); /// /// Удаление объекта из коллекции с конкретной позиции @@ -56,4 +58,10 @@ public interface ICollectionGenericObjects /// /// Поэлементый вывод элементов коллекции IEnumerable GetItems(); + + /// + /// Сортировка коллекции + /// + /// Сравнитель объектов + void CollectionSort(IComparer comparer); } diff --git a/ProjectMotorBoat/ProjectMotorBoat/CollectionGenericObjects/ListGenericObjects.cs b/ProjectMotorBoat/ProjectMotorBoat/CollectionGenericObjects/ListGenericObjects.cs index ff3e277..285fb88 100644 --- a/ProjectMotorBoat/ProjectMotorBoat/CollectionGenericObjects/ListGenericObjects.cs +++ b/ProjectMotorBoat/ProjectMotorBoat/CollectionGenericObjects/ListGenericObjects.cs @@ -46,16 +46,32 @@ public class ListGenericObjects : ICollectionGenericObjects return _collection[position]; } - public int Insert(T obj) + public int Insert(T obj, IEqualityComparer? comparer = null) { + for (int i = 0; i < Count; i++) + { + if (comparer != null && comparer.Equals(obj, _collection[i])) + { + throw new ObjectAlreadyExistsException(i); + } + } + // выброс ошибки, если переполнение if (Count >= _maxCount) throw new CollectionOverflowException(Count); _collection.Add(obj); return _collection.Count; } - public int Insert(T obj, int position) + public int Insert(T obj, int position, IEqualityComparer? comparer = null) { + for (int i = 0; i < Count; i++) + { + if (comparer != null && comparer.Equals(obj, _collection[i])) + { + throw new ObjectAlreadyExistsException(i); + } + } + // выброс ошибки, если переполнение if (Count >= _maxCount) throw new CollectionOverflowException(); @@ -87,4 +103,9 @@ public class ListGenericObjects : ICollectionGenericObjects yield return _collection[i]; } } + + public void CollectionSort(IComparer comparer) + { + _collection.Sort(comparer); + } } diff --git a/ProjectMotorBoat/ProjectMotorBoat/CollectionGenericObjects/MassiveGenericObjects.cs b/ProjectMotorBoat/ProjectMotorBoat/CollectionGenericObjects/MassiveGenericObjects.cs index a0ca361..2a91042 100644 --- a/ProjectMotorBoat/ProjectMotorBoat/CollectionGenericObjects/MassiveGenericObjects.cs +++ b/ProjectMotorBoat/ProjectMotorBoat/CollectionGenericObjects/MassiveGenericObjects.cs @@ -1,4 +1,5 @@ -using ProjectMotorBoat.Exceptions; +using ProjectMotorBoat.Drawings; +using ProjectMotorBoat.Exceptions; namespace ProjectMotorBoat.CollectionGenericObjects; @@ -51,15 +52,22 @@ public class MassiveGenericObjects : ICollectionGenericObjects public T? Get(int position) { // выброс ошибки, если выход за границы массива - if (position >= Count) throw new PositionOutOfCollectionException(position); - // выброс ошибки, если объект пустой - if (_collection[position] == null) throw new ObjectNotFoundException(position); + if (position >= Count || position < 0) throw new PositionOutOfCollectionException(position); return _collection[position]; } - public int Insert(T obj) + public int Insert(T obj, IEqualityComparer? comparer = null) { + // выборс ошибки, если такой объект есть в коллекции + for (int i = 0; i < Count; i++) + { + if (comparer != null && comparer.Equals(obj, _collection[i])) + { + throw new ObjectAlreadyExistsException(i); + } + } + // вставка в свободное место набора ✔ for (int i = 0; i < Count; i++) { @@ -73,11 +81,20 @@ public class MassiveGenericObjects : ICollectionGenericObjects throw new CollectionOverflowException(Count); } - public int Insert(T obj, int position) + public int Insert(T obj, int position, IEqualityComparer? comparer = null) { // выброс ошибки, если выход за границы массива if (position >= Count) throw new PositionOutOfCollectionException(position); + // выборс ошибки, если такой объект есть в коллекции + for (int i = 0; i < Count; i++) + { + if (comparer.Equals(obj, _collection[i])) + { + throw new ObjectAlreadyExistsException(i); + } + } + if (_collection[position] != null) { for (int i = position; i < Count; i++) @@ -121,4 +138,13 @@ public class MassiveGenericObjects : ICollectionGenericObjects yield return _collection[i]; } } + + public void CollectionSort(IComparer comparer) + { + Array.Sort(_collection, comparer); + if (_collection[0] == null) + { + Array.Reverse(_collection); + } + } } diff --git a/ProjectMotorBoat/ProjectMotorBoat/CollectionGenericObjects/StorageCollection.cs b/ProjectMotorBoat/ProjectMotorBoat/CollectionGenericObjects/StorageCollection.cs index 2c0555f..9761aa7 100644 --- a/ProjectMotorBoat/ProjectMotorBoat/CollectionGenericObjects/StorageCollection.cs +++ b/ProjectMotorBoat/ProjectMotorBoat/CollectionGenericObjects/StorageCollection.cs @@ -1,8 +1,6 @@ using ProjectMotorBoat.Drawings; using ProjectMotorBoat.Exceptions; -using ProjectMotorBoat.MovementStrategy; using System.Text; -using System.Windows.Forms; namespace ProjectMotorBoat.CollectionGenericObjects; @@ -16,12 +14,12 @@ public class StorageCollection /// /// Словарь (хранилище) с коллекциями /// - readonly Dictionary> _storages; + readonly Dictionary> _storages; /// /// Возвращение списка названий коллекций /// - public List Keys => _storages.Keys.ToList(); + public List Keys => _storages.Keys.ToList(); /// /// Ключевое слово, с которого должен начинаться файл @@ -43,7 +41,7 @@ public class StorageCollection /// public StorageCollection() { - _storages = new Dictionary>(); + _storages = new Dictionary>(); } /// @@ -55,18 +53,20 @@ public class StorageCollection { // проверка, что name не пустой и нет в словаре записи с таким ключом ✔ // Прописать логику для добавления ✔ - if (name != null && !_storages.ContainsKey(name)) + CollectionInfo collectionInfo = new CollectionInfo(name, collectionType, string.Empty); + + if (name != null && !_storages.ContainsKey(collectionInfo)) { switch (collectionType) { case CollectionType.List: { - _storages[name] = new ListGenericObjects(); + _storages[collectionInfo] = new ListGenericObjects(); break; } case CollectionType.Massive: { - _storages[name] = new MassiveGenericObjects(); + _storages[collectionInfo] = new MassiveGenericObjects(); break; } } @@ -80,7 +80,12 @@ public class StorageCollection public void DelCollection(string name) { // Прописать логику для удаления коллекции ✔ - _storages.Remove(name); + CollectionInfo collectionInfo = new CollectionInfo(name, CollectionType.None, string.Empty); + + if (name != null && !_storages.ContainsKey(collectionInfo)) + { + _storages.Remove(collectionInfo); + } } /// @@ -93,8 +98,9 @@ public class StorageCollection get { // Продумать логику получения объекта ✔ - if (_storages.ContainsKey(name)) - return _storages[name]; + CollectionInfo collectionInfo = new CollectionInfo(name, CollectionType.None, string.Empty); + if (_storages.ContainsKey(collectionInfo)) + return _storages[collectionInfo]; return null; } @@ -119,7 +125,7 @@ public class StorageCollection StringBuilder sb = new(); sb.Append(_collectionKey); - foreach (KeyValuePair> value in _storages) + foreach (KeyValuePair> value in _storages) { sb.Append(Environment.NewLine); // Не сохраняем пустые коллекции @@ -130,8 +136,6 @@ public class StorageCollection sb.Append(value.Key); sb.Append(_separatorForKeyValue); - sb.Append(value.Value.GetCollectionType); - sb.Append(_separatorForKeyValue); sb.Append(value.Value.MaxCount); sb.Append(_separatorForKeyValue); @@ -190,17 +194,18 @@ public class StorageCollection foreach (string data in strs) { string[] record = data.Split(_separatorForKeyValue, StringSplitOptions.RemoveEmptyEntries); - if (record.Length != 4) + if (record.Length != 3) { continue; } - CollectionType collectionType = (CollectionType)Enum.Parse(typeof(CollectionType), record[1]); - ICollectionGenericObjects? collection = StorageCollection.CreateCollection(collectionType) ?? + CollectionInfo? collectionInfo = CollectionInfo.GetCollectionInfo(record[0]) ?? + throw new Exception("Не удалось определить информацию коллекции:" + record[0]); + ICollectionGenericObjects? collection = StorageCollection.CreateCollection(collectionInfo.CollectionType) ?? throw new Exception("Не удалось определить тип коллекции:" + record[1]); - collection.MaxCount = Convert.ToInt32(record[2]); + collection.MaxCount = Convert.ToInt32(record[1]); - string[] set = record[3].Split(_separatorItems, StringSplitOptions.RemoveEmptyEntries); + string[] set = record[2].Split(_separatorItems, StringSplitOptions.RemoveEmptyEntries); foreach (string elem in set) { if (elem?.CreateDrawingBoat() is T boat) @@ -218,7 +223,7 @@ public class StorageCollection } } } - _storages.Add(record[0], collection); + _storages.Add(collectionInfo, collection); } } diff --git a/ProjectMotorBoat/ProjectMotorBoat/Drawings/DrawingBoat.cs b/ProjectMotorBoat/ProjectMotorBoat/Drawings/DrawingBoat.cs index 76981e8..5433731 100644 --- a/ProjectMotorBoat/ProjectMotorBoat/Drawings/DrawingBoat.cs +++ b/ProjectMotorBoat/ProjectMotorBoat/Drawings/DrawingBoat.cs @@ -89,8 +89,6 @@ public class DrawingBoat EntityBoat = entityBoat; } - - /// /// Конструктор для наследников /// diff --git a/ProjectMotorBoat/ProjectMotorBoat/Drawings/DrawingBoatCompareByColor.cs b/ProjectMotorBoat/ProjectMotorBoat/Drawings/DrawingBoatCompareByColor.cs new file mode 100644 index 0000000..9fd3137 --- /dev/null +++ b/ProjectMotorBoat/ProjectMotorBoat/Drawings/DrawingBoatCompareByColor.cs @@ -0,0 +1,35 @@ +namespace ProjectMotorBoat.Drawings; + +/// +/// Сравнение по цвету, скорости, весу +/// +public class DrawingBoatCompareByColor : IComparer +{ + public int Compare(DrawingBoat? x, DrawingBoat? y) + { + if (x == null && y == null) return 0; + if (x == null || x.EntityBoat == null) + { + return 1; + } + + if (y == null || y.EntityBoat == null) + { + return -1; + } + + var bodyColorCompare = x.EntityBoat.BodyColor.Name.CompareTo(y.EntityBoat.BodyColor.Name); + if (bodyColorCompare != 0) + { + return bodyColorCompare; + } + + var speedCompare = x.EntityBoat.Speed.CompareTo(y.EntityBoat.Speed); + if (speedCompare != 0) + { + return speedCompare; + } + + return x.EntityBoat.Weight.CompareTo(y.EntityBoat.Weight); + } +} \ No newline at end of file diff --git a/ProjectMotorBoat/ProjectMotorBoat/Drawings/DrawingBoatCompareByType.cs b/ProjectMotorBoat/ProjectMotorBoat/Drawings/DrawingBoatCompareByType.cs new file mode 100644 index 0000000..7eebdd6 --- /dev/null +++ b/ProjectMotorBoat/ProjectMotorBoat/Drawings/DrawingBoatCompareByType.cs @@ -0,0 +1,34 @@ +namespace ProjectMotorBoat.Drawings; + +/// +/// Сравнение по типу, скорости, весу +/// +public class DrawingBoatCompareByType : IComparer +{ + public int Compare(DrawingBoat? x, DrawingBoat? y) + { + if (x == null && y == null) return 0; + if (x == null || x.EntityBoat == null) + { + return -1; + } + + if (y == null || y.EntityBoat == null) + { + return 1; + } + + if (x.GetType().Name != y.GetType().Name) + { + return x.GetType().Name.CompareTo(y.GetType().Name); + } + + var speedCompare = x.EntityBoat.Speed.CompareTo(y.EntityBoat.Speed); + if (speedCompare != 0) + { + return speedCompare; + } + + return x.EntityBoat.Weight.CompareTo(y.EntityBoat.Weight); + } +} \ No newline at end of file diff --git a/ProjectMotorBoat/ProjectMotorBoat/Drawings/DrawingBoatEqutables.cs b/ProjectMotorBoat/ProjectMotorBoat/Drawings/DrawingBoatEqutables.cs new file mode 100644 index 0000000..13043a6 --- /dev/null +++ b/ProjectMotorBoat/ProjectMotorBoat/Drawings/DrawingBoatEqutables.cs @@ -0,0 +1,73 @@ +using ProjectMotorBoat.Entities; +using System.Diagnostics.CodeAnalysis; + +namespace ProjectMotorBoat.Drawings; + +/// +/// Реализация сравнения двух объектов класса-прорисовки +/// +public class DrawingBoatEqutables : IEqualityComparer +{ + public bool Equals(DrawingBoat? x, DrawingBoat? y) + { + if (x == null || x.EntityBoat == null) + { + return false; + } + + if (y == null || y.EntityBoat == null) + { + return false; + } + + if (x.GetType().Name != y.GetType().Name) + { + return false; + } + + if (x.EntityBoat.Speed != y.EntityBoat.Speed) + { + return false; + } + + if (x.EntityBoat.Weight != y.EntityBoat.Weight) + { + return false; + } + + if (x.EntityBoat.BodyColor != y.EntityBoat.BodyColor) + { + return false; + } + + if (x.EntityBoat is EntityMotorBoat xMotorBoat && y.EntityBoat is EntityMotorBoat yMotorBoat) + { + if (xMotorBoat.AdditionalColor != yMotorBoat.AdditionalColor) + { + return false; + } + + if (xMotorBoat.InboardEngine != yMotorBoat.InboardEngine) + { + return false; + } + + if (xMotorBoat.Oar != yMotorBoat.Oar) + { + return false; + } + + if (xMotorBoat.ProtectiveGlass != yMotorBoat.ProtectiveGlass) + { + return false; + } + } + + return true; + } + + public int GetHashCode([DisallowNull] DrawingBoat obj) + { + return obj.GetHashCode(); + } +} \ No newline at end of file diff --git a/ProjectMotorBoat/ProjectMotorBoat/Exceptions/ObjectAlreadyExistsException.cs b/ProjectMotorBoat/ProjectMotorBoat/Exceptions/ObjectAlreadyExistsException.cs new file mode 100644 index 0000000..45c8c20 --- /dev/null +++ b/ProjectMotorBoat/ProjectMotorBoat/Exceptions/ObjectAlreadyExistsException.cs @@ -0,0 +1,20 @@ +using System.Runtime.Serialization; + +namespace ProjectMotorBoat.Exceptions; + +/// +/// Класс, описывающий ошибку, что такой объект уже существует +/// +[Serializable] +internal class ObjectAlreadyExistsException : ApplicationException +{ + public ObjectAlreadyExistsException(int i) : base("Такой объект уже существует. Позиция " + i) { } + + public ObjectAlreadyExistsException() : base() { } + + public ObjectAlreadyExistsException(string message) : base(message) { } + + public ObjectAlreadyExistsException(string message, Exception exception) : base(message, exception) { } + + protected ObjectAlreadyExistsException(SerializationInfo info, StreamingContext contex) : base(info, contex) { } +} diff --git a/ProjectMotorBoat/ProjectMotorBoat/FormBoatCollection.Designer.cs b/ProjectMotorBoat/ProjectMotorBoat/FormBoatCollection.Designer.cs index f6297f9..d261501 100644 --- a/ProjectMotorBoat/ProjectMotorBoat/FormBoatCollection.Designer.cs +++ b/ProjectMotorBoat/ProjectMotorBoat/FormBoatCollection.Designer.cs @@ -52,6 +52,8 @@ loadToolStripMenuItem = new ToolStripMenuItem(); saveFileDialog = new SaveFileDialog(); openFileDialog = new OpenFileDialog(); + buttonSortByColor = new Button(); + buttonSortByType = new Button(); groupBoxTools.SuspendLayout(); panelCompanyTools.SuspendLayout(); panelStorage.SuspendLayout(); @@ -75,6 +77,8 @@ // // panelCompanyTools // + panelCompanyTools.Controls.Add(buttonSortByColor); + panelCompanyTools.Controls.Add(buttonSortByType); panelCompanyTools.Controls.Add(buttonAddBoat); panelCompanyTools.Controls.Add(buttonRefresh); panelCompanyTools.Controls.Add(maskedTextBoxPosition); @@ -82,9 +86,9 @@ panelCompanyTools.Controls.Add(buttonRemoveBoat); panelCompanyTools.Dock = DockStyle.Bottom; panelCompanyTools.Enabled = false; - panelCompanyTools.Location = new Point(3, 322); + panelCompanyTools.Location = new Point(3, 329); panelCompanyTools.Name = "panelCompanyTools"; - panelCompanyTools.Size = new Size(195, 219); + panelCompanyTools.Size = new Size(195, 212); panelCompanyTools.TabIndex = 8; // // buttonAddBoat @@ -92,7 +96,7 @@ buttonAddBoat.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; buttonAddBoat.Location = new Point(3, 3); buttonAddBoat.Name = "buttonAddBoat"; - buttonAddBoat.Size = new Size(184, 32); + buttonAddBoat.Size = new Size(184, 23); buttonAddBoat.TabIndex = 1; buttonAddBoat.Text = "Добавление лодки"; buttonAddBoat.UseVisualStyleBackColor = true; @@ -101,9 +105,9 @@ // buttonRefresh // buttonRefresh.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; - buttonRefresh.Location = new Point(3, 177); + buttonRefresh.Location = new Point(3, 128); buttonRefresh.Name = "buttonRefresh"; - buttonRefresh.Size = new Size(184, 32); + buttonRefresh.Size = new Size(184, 23); buttonRefresh.TabIndex = 6; buttonRefresh.Text = "Обновить"; buttonRefresh.UseVisualStyleBackColor = true; @@ -111,7 +115,7 @@ // // maskedTextBoxPosition // - maskedTextBoxPosition.Location = new Point(3, 72); + maskedTextBoxPosition.Location = new Point(3, 41); maskedTextBoxPosition.Mask = "00"; maskedTextBoxPosition.Name = "maskedTextBoxPosition"; maskedTextBoxPosition.Size = new Size(189, 23); @@ -121,9 +125,9 @@ // buttonGoToCheck // buttonGoToCheck.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; - buttonGoToCheck.Location = new Point(3, 139); + buttonGoToCheck.Location = new Point(3, 99); buttonGoToCheck.Name = "buttonGoToCheck"; - buttonGoToCheck.Size = new Size(184, 32); + buttonGoToCheck.Size = new Size(184, 23); buttonGoToCheck.TabIndex = 5; buttonGoToCheck.Text = "Передать на тесты"; buttonGoToCheck.UseVisualStyleBackColor = true; @@ -132,9 +136,9 @@ // buttonRemoveBoat // buttonRemoveBoat.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; - buttonRemoveBoat.Location = new Point(3, 101); + buttonRemoveBoat.Location = new Point(3, 70); buttonRemoveBoat.Name = "buttonRemoveBoat"; - buttonRemoveBoat.Size = new Size(184, 32); + buttonRemoveBoat.Size = new Size(184, 23); buttonRemoveBoat.TabIndex = 4; buttonRemoveBoat.Text = "Удалить лодку"; buttonRemoveBoat.UseVisualStyleBackColor = true; @@ -293,6 +297,28 @@ // openFileDialog.Filter = "txt file | *.txt"; // + // buttonSortByColor + // + buttonSortByColor.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + buttonSortByColor.Location = new Point(3, 186); + buttonSortByColor.Name = "buttonSortByColor"; + buttonSortByColor.Size = new Size(184, 23); + buttonSortByColor.TabIndex = 8; + buttonSortByColor.Text = "Сортировка по цвету"; + buttonSortByColor.UseVisualStyleBackColor = true; + buttonSortByColor.Click += ButtonSortByColor_Click; + // + // buttonSortByType + // + buttonSortByType.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + buttonSortByType.Location = new Point(3, 157); + buttonSortByType.Name = "buttonSortByType"; + buttonSortByType.Size = new Size(184, 23); + buttonSortByType.TabIndex = 7; + buttonSortByType.Text = "Сортировка по типу"; + buttonSortByType.UseVisualStyleBackColor = true; + buttonSortByType.Click += ButtonSortByType_Click; + // // FormBoatCollection // AutoScaleDimensions = new SizeF(7F, 15F); @@ -342,5 +368,7 @@ private ToolStripMenuItem loadToolStripMenuItem; private SaveFileDialog saveFileDialog; private OpenFileDialog openFileDialog; + private Button buttonSortByColor; + private Button buttonSortByType; } } \ No newline at end of file diff --git a/ProjectMotorBoat/ProjectMotorBoat/FormBoatCollection.cs b/ProjectMotorBoat/ProjectMotorBoat/FormBoatCollection.cs index 525a334..8cd88b6 100644 --- a/ProjectMotorBoat/ProjectMotorBoat/FormBoatCollection.cs +++ b/ProjectMotorBoat/ProjectMotorBoat/FormBoatCollection.cs @@ -1,6 +1,7 @@ using Microsoft.Extensions.Logging; using ProjectMotorBoat.CollectionGenericObjects; using ProjectMotorBoat.Drawings; +using System.Xml.Linq; namespace ProjectMotorBoat; @@ -220,7 +221,8 @@ public partial class FormBoatCollection : Form { return; } - if (_storageCollection.Keys.Contains(listBoxCollection.SelectedItem.ToString() ?? string.Empty)) + CollectionInfo collectionInfo = new CollectionInfo(listBoxCollection.SelectedItem.ToString(), CollectionType.None, string.Empty); + if (_storageCollection.Keys.Contains(collectionInfo ?? null)) { _storageCollection.DelCollection(listBoxCollection.SelectedItem.ToString() ?? string.Empty); } @@ -237,7 +239,7 @@ public partial class FormBoatCollection : Form listBoxCollection.Items.Clear(); for (int i = 0; i < _storageCollection.Keys?.Count; ++i) { - string? colName = _storageCollection.Keys?[i]; + string? colName = _storageCollection.Keys?[i].Name; if (!string.IsNullOrEmpty(colName)) { listBoxCollection.Items.Add(colName); @@ -325,4 +327,39 @@ public partial class FormBoatCollection : Form } } + + /// + /// Сортировка по типу + /// + /// + /// + private void ButtonSortByType_Click(object sender, EventArgs e) + { + CompareBoats(new DrawingBoatCompareByType()); + } + + /// + /// Сортировка по цвету + /// + /// + /// + private void ButtonSortByColor_Click(object sender, EventArgs e) + { + CompareBoats(new DrawingBoatCompareByColor()); + } + + /// + /// Сортировка по сравнителю + /// + /// Сравнитель объектов + private void CompareBoats(IComparer comparer) + { + if (_company == null) + { + return; + } + + _company.Sort(comparer); + pictureBox.Image = _company.Show(); + } } diff --git a/ProjectMotorBoat/ProjectMotorBoat/ProjectMotorBoat.csproj b/ProjectMotorBoat/ProjectMotorBoat/ProjectMotorBoat.csproj index fda71c6..b57d170 100644 --- a/ProjectMotorBoat/ProjectMotorBoat/ProjectMotorBoat.csproj +++ b/ProjectMotorBoat/ProjectMotorBoat/ProjectMotorBoat.csproj @@ -8,10 +8,6 @@ enable - - - - diff --git a/ProjectMotorBoat/ProjectMotorBoat/save.txt b/ProjectMotorBoat/ProjectMotorBoat/saveList.txt similarity index 69% rename from ProjectMotorBoat/ProjectMotorBoat/save.txt rename to ProjectMotorBoat/ProjectMotorBoat/saveList.txt index 36db68b..3b4afa2 100644 --- a/ProjectMotorBoat/ProjectMotorBoat/save.txt +++ b/ProjectMotorBoat/ProjectMotorBoat/saveList.txt @@ -1,2 +1,2 @@ CollectionsStorage -Коллекция|Massive|60|EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White; \ No newline at end of file +Коллекция-List-|54|EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White; \ No newline at end of file diff --git a/ProjectMotorBoat/ProjectMotorBoat/saveMassive.txt b/ProjectMotorBoat/ProjectMotorBoat/saveMassive.txt new file mode 100644 index 0000000..6f10cfe --- /dev/null +++ b/ProjectMotorBoat/ProjectMotorBoat/saveMassive.txt @@ -0,0 +1,2 @@ +CollectionsStorage +Коллекция-Massive-|54|EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White;EntityBoat:100:100:White; \ No newline at end of file