From c4c450563c18dbea711806c70d572e728aab34b3 Mon Sep 17 00:00:00 2001 From: Baryshev Dmitry Date: Mon, 25 Mar 2024 19:31:49 +0400 Subject: [PATCH] =?UTF-8?q?=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AbstractCompany.cs | 17 ++-- .../CollectionGenericObject/Autopark.cs | 2 +- .../ICollectionGenericObject.cs | 6 +- .../MassiveGenericObjects.cs | 88 ++++++++++++++----- .../ProjectDumpTruck/FormTruckCollection.cs | 8 +- 5 files changed, 81 insertions(+), 40 deletions(-) diff --git a/ProjectDumpTruck/ProjectDumpTruck/CollectionGenericObject/AbstractCompany.cs b/ProjectDumpTruck/ProjectDumpTruck/CollectionGenericObject/AbstractCompany.cs index 7752bc8..94802bc 100644 --- a/ProjectDumpTruck/ProjectDumpTruck/CollectionGenericObject/AbstractCompany.cs +++ b/ProjectDumpTruck/ProjectDumpTruck/CollectionGenericObject/AbstractCompany.cs @@ -32,8 +32,7 @@ public abstract class AbstractCompany /// /// Вычисление максимального количества элементов, который можно разместить в окне /// - private int GetMaxCount => _pictureWidth * _pictureHeight / - (_placeSizeWidth * _placeSizeHeight); + private int GetMaxCount => _pictureWidth * _pictureHeight / (_placeSizeWidth * _placeSizeHeight); /// /// Конструктор /// @@ -52,11 +51,11 @@ public abstract class AbstractCompany /// Перегрузка оператора сложения для класса /// /// Компания - /// Добавляемый объект + /// Добавляемый объект /// - public static bool operator +(AbstractCompany company, DrawningTruck truck) + public static int operator +(AbstractCompany company, DrawningTruck truck) { - return company._collection?.Insert(truck) ?? false; + return company._collection?.Insert(truck)??-1; } /// @@ -65,9 +64,9 @@ public abstract class AbstractCompany /// Компания /// Номер удаляемого объекта /// - public static bool operator -(AbstractCompany company, int position) + public static DrawningTruck? operator -(AbstractCompany company, int position) { - return company._collection?.Remove(position) ?? false; + return company._collection?.Remove(position); } /// @@ -88,7 +87,7 @@ public abstract class AbstractCompany { Bitmap bitmap = new(_pictureWidth, _pictureHeight); Graphics graphics = Graphics.FromImage(bitmap); - DrawBackgound(graphics); + DrawBackground(graphics); SetObjectsPosition(); for (int i = 0; i < (_collection?.Count ?? 0); ++i) { @@ -102,7 +101,7 @@ public abstract class AbstractCompany /// Вывод заднего фона /// /// - protected abstract void DrawBackgound(Graphics g); + protected abstract void DrawBackground(Graphics g); /// /// Расстановка объектов diff --git a/ProjectDumpTruck/ProjectDumpTruck/CollectionGenericObject/Autopark.cs b/ProjectDumpTruck/ProjectDumpTruck/CollectionGenericObject/Autopark.cs index 6ca095a..26a4d27 100644 --- a/ProjectDumpTruck/ProjectDumpTruck/CollectionGenericObject/Autopark.cs +++ b/ProjectDumpTruck/ProjectDumpTruck/CollectionGenericObject/Autopark.cs @@ -13,7 +13,7 @@ public class Autopark : AbstractCompany { } - protected override void DrawBackgound(Graphics g) + protected override void DrawBackground(Graphics g) { Pen pen = new(Color.Black, 2); Pen widerPen = new(Color.Black, 5); diff --git a/ProjectDumpTruck/ProjectDumpTruck/CollectionGenericObject/ICollectionGenericObject.cs b/ProjectDumpTruck/ProjectDumpTruck/CollectionGenericObject/ICollectionGenericObject.cs index 59b57ef..9cc73dc 100644 --- a/ProjectDumpTruck/ProjectDumpTruck/CollectionGenericObject/ICollectionGenericObject.cs +++ b/ProjectDumpTruck/ProjectDumpTruck/CollectionGenericObject/ICollectionGenericObject.cs @@ -25,7 +25,7 @@ public interface ICollectionGenericObject /// /// Добавляемый объект /// true - вставка прошла удачно, false - вставка не удалась - bool Insert(T obj); + int Insert(T obj); /// /// Добавление объекта на конкретную позиуцию @@ -33,14 +33,14 @@ public interface ICollectionGenericObject /// Добавляемый объектПозиция /// true - вставка прошла успешна, false - вставка не удалась - bool Insert(T obj, int position); + int Insert(T obj, int position); /// /// Удаление объекта из коллекции с конкретной позиции /// /// Позиция /// true - удаление прошло удачно, false - удаление не удалось - bool Remove(int position); + T? Remove(int position); /// /// Получение объекта по позиции diff --git a/ProjectDumpTruck/ProjectDumpTruck/CollectionGenericObject/MassiveGenericObjects.cs b/ProjectDumpTruck/ProjectDumpTruck/CollectionGenericObject/MassiveGenericObjects.cs index d353df4..a50c650 100644 --- a/ProjectDumpTruck/ProjectDumpTruck/CollectionGenericObject/MassiveGenericObjects.cs +++ b/ProjectDumpTruck/ProjectDumpTruck/CollectionGenericObject/MassiveGenericObjects.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Reflection.Metadata.Ecma335; using System.Text; using System.Threading.Tasks; @@ -14,19 +15,11 @@ public class MassiveGenericObjects : ICollectionGenericObject /// Массив объектов, которые храним /// private T?[] _collection; - public int Count => _collection.Length; - public int SetMaxCount - { - set - { - if (value > 0) - { - if (_collection.Length > 0) Array.Resize(ref _collection, value); - else _collection = new T?[value]; - } - } - } + public int Count => _collection.Length; + + public int SetMaxCount { set { if (value > 0) { _collection = new T?[value]; } } } + /// /// Конструктор /// @@ -38,27 +31,78 @@ public class MassiveGenericObjects : ICollectionGenericObject public T? Get(int position) { // TODO проверка позиции - return _collection[position]; + if (position >= 0 && position < Count) + { + return _collection[position]; + } + + return null; } - public bool Insert(T obj) + public int Insert(T obj) { // TODO вставка в свободное место набора - return false; + for (int i = 0; i < _collection.Length; i++) + { + if (_collection[i] != null) + { + _collection[i] = obj; + return i; + } + } + return -1; } - public bool Insert(T obj, int position) + public int Insert(T obj, int position) { // TODO проверка позиции // TODO проверка, что элемент массива по этой позиции пустой, если нет, то - // ищется свободное место после этой позиции и идет вставка туда, если нет после, ищем до + // ищется свободное место после этой позиции и идет вставка туда + // если нет после, ищем до // TODO вставка - return false; + 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 position; + } + } + + for (int i = position - 1; i >= 0; i--) + { + if (_collection[i] == null) + { + _collection[i] = obj; + return position; + } + } + + return -1; } - public bool Remove(int position) + public T? Remove(int position) { - // TODO проверка позиции - // TODO удаление объекта из массива, присвоив элементу массива значение null - return true; + // проверка позиции + if (position < 0 || position >= Count) + { + return null; + } + + if (_collection[position] == null) return null; + + T? temp = _collection[position]; + _collection[position] = null; + return temp; } } \ No newline at end of file diff --git a/ProjectDumpTruck/ProjectDumpTruck/FormTruckCollection.cs b/ProjectDumpTruck/ProjectDumpTruck/FormTruckCollection.cs index dcd73aa..a4d6706 100644 --- a/ProjectDumpTruck/ProjectDumpTruck/FormTruckCollection.cs +++ b/ProjectDumpTruck/ProjectDumpTruck/FormTruckCollection.cs @@ -64,16 +64,14 @@ public partial class FormTruckCollection : Form case nameof(DrawningDumpTruck): drawningTruck = new DrawningDumpTruck(random.Next(100, 300), random.Next(1000, 3000), - GetColor(random), - Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)), - Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2))); + GetColor(random),GetColor(random), Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2))); break; default: return; } - if (_company + drawningTruck) + if (_company + drawningTruck!=-1) { MessageBox.Show("Объект добавлен"); pictureBox.Image = _company.Show(); @@ -109,7 +107,7 @@ public partial class FormTruckCollection : Form if (MessageBox.Show("Удалить объект?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) return; int pos = Convert.ToInt32(maskedTextBoxPosition.Text); - if (_company - pos) + if (_company - pos!=null) { MessageBox.Show("Объект удален");