This commit is contained in:
Maxim Boyko 2024-03-14 09:42:38 +04:00
parent fe90aefffa
commit be8ee033b2
10 changed files with 145 additions and 102 deletions

View File

@ -0,0 +1,13 @@
# Default ignored files
/shelf/
/workspace.xml
# Rider ignored files
/projectSettingsUpdater.xml
/.idea.BoykoSolution.iml
/modules.xml
/contentModel.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

View File

@ -0,0 +1 @@
BoykoSolution

View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding" addBOMForNewFiles="with BOM under Windows, with no BOM otherwise" />
</project>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="UserContentModel">
<attachedFolders />
<explicitIncludes />
<explicitExcludes />
</component>
</project>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

View File

@ -57,10 +57,9 @@ public abstract class AbstractCompany
/// <param name="company">Компания</param> /// <param name="company">Компания</param>
/// <param name="car">Добавляемый объект</param> /// <param name="car">Добавляемый объект</param>
/// <returns></returns> /// <returns></returns>
public static bool operator +(AbstractCompany company, DrawingTrans trans) public static int operator +(AbstractCompany company, DrawingTrans trans)
{ {
return company._collection?.Insert(trans) ?? false; return company._collection.Insert(trans);
} }
/// <summary> /// <summary>
@ -69,9 +68,9 @@ public abstract class AbstractCompany
/// <param name="company">Компания</param> /// <param name="company">Компания</param>
/// <param name="position">Номер удаляемого объекта</param> /// <param name="position">Номер удаляемого объекта</param>
/// <returns></returns> /// <returns></returns>
public static bool operator -(AbstractCompany company, int position) public static DrawingTrans? operator -(AbstractCompany company, int position)
{ {
return company._collection?.Remove(position) ?? false; return company._collection?.Remove(position);
} }
/// <summary> /// <summary>

View File

@ -1,4 +1,6 @@
namespace ProjectElectroTrans.CollectionGenericObjects; using ProjectElectroTrans.Drawnings;
namespace ProjectElectroTrans.CollectionGenericObjects;
/// <summary> /// <summary>
/// Интерфейс описания действий для набора хранимых объектов /// Интерфейс описания действий для набора хранимых объектов
@ -22,7 +24,7 @@ public interface ICollectionGenericObjects<T>
/// </summary> /// </summary>
/// <param name="obj">Добавляемый объект</param> /// <param name="obj">Добавляемый объект</param>
/// <returns>true - вставка прошла удачно, false - вставка не удалась</returns> /// <returns>true - вставка прошла удачно, false - вставка не удалась</returns>
bool Insert(T obj); int Insert(T obj);
/// <summary> /// <summary>
/// Добавление объекта в коллекцию на конкретную позицию /// Добавление объекта в коллекцию на конкретную позицию
@ -30,14 +32,14 @@ public interface ICollectionGenericObjects<T>
/// <param name="obj">Добавляемый объект</param> /// <param name="obj">Добавляемый объект</param>
/// <param name="position">Позиция</param> /// <param name="position">Позиция</param>
/// <returns>true - вставка прошла удачно, false - вставка не удалась</returns> /// <returns>true - вставка прошла удачно, false - вставка не удалась</returns>
bool Insert(T obj, int position); int Insert(T obj, int position);
/// <summary> /// <summary>
/// Удаление объекта из коллекции с конкретной позиции /// Удаление объекта из коллекции с конкретной позиции
/// </summary> /// </summary>
/// <param name="position">Позиция</param> /// <param name="position">Позиция</param>
/// <returns>true - удаление прошло удачно, false - удаление не удалось</returns> /// <returns>true - удаление прошло удачно, false - удаление не удалось</returns>
bool Remove(int position); T? Remove(int position);
/// <summary> /// <summary>
/// Получение объекта по позиции /// Получение объекта по позиции

View File

@ -1,4 +1,5 @@
using System.Runtime.Remoting; using System.Runtime.Remoting;
using ProjectElectroTrans.Drawnings;
namespace ProjectElectroTrans.CollectionGenericObjects; namespace ProjectElectroTrans.CollectionGenericObjects;
@ -6,89 +7,94 @@ namespace ProjectElectroTrans.CollectionGenericObjects;
/// Параметризованный набор объектов /// Параметризованный набор объектов
/// </summary> /// </summary>
/// <typeparam name="T">Параметр: ограничение - ссылочный тип</typeparam> /// <typeparam name="T">Параметр: ограничение - ссылочный тип</typeparam>
public class MassiveGenericObjects<T> :ICollectionGenericObjects<T> public class MassiveGenericObjects<T> : ICollectionGenericObjects<T>
where T : class where T : class
{ {
/// <summary> /// <summary>
/// Массив объектов, которые храним /// Массив объектов, которые храним
/// </summary> /// </summary>
private T?[] _collection; private T?[] _collection;
public int Count => _collection.Length; public int Count => _collection.Length;
public int SetMaxCount public int SetMaxCount
{ {
set set
{ {
if (value > 0) if (value > 0)
{ {
if (_collection.Length > 0) if (_collection.Length > 0)
{ {
Array.Resize(ref _collection, value); Array.Resize(ref _collection, value);
} }
else else
{ {
_collection = new T?[value]; _collection = new T?[value];
} }
} }
}
}
/// <summary>
/// Конструктор
/// </summary>
public MassiveGenericObjects()
{
_collection = Array.Empty<T?>();
}
public T? Get(int position)
{
if (position >= 0 && position < Count)
{
return _collection[position];
} }
return null;
} }
public bool Insert(T obj) /// <summary>
{ /// Конструктор
// вставка в свободное место набора /// </summary>
for (int i = 0; i< Count; i++) public MassiveGenericObjects()
{ {
if (_collection[i] == null) _collection = Array.Empty<T?>();
{ }
_collection[i] = obj;
return true;
}
}
return false;
}
public bool Insert(T obj, int position) public T? Get(int position)
{ {
// проверка позиции if (position >= 0 && position < Count)
if (position < 0 || position >= Count) {
{ return _collection[position];
return false; }
}
// проверка, что элемент массива по этой позиции пустой, если нет, то return null;
// ищется свободное место после этой позиции и идет вставка туда }
// если нет после, ищем до
if (_collection[position] != null) public int Insert(T obj)
{ {
bool pushed = false; // вставка в свободное место набора
for (int index = position + 1; index < Count; index++) { for (int i = 0; i < Count; i++)
if (_collection[index] == null) {
{ if (_collection[i] == null)
position = index; {
pushed = true; _collection[i] = obj;
break; return i;
}
} }
if (!pushed) }
{
for (int index = position- 1; index >= 0; index--) return -1;
}
public int Insert(T obj, int position)
{
// проверка позиции
if (position < 0 || position >= Count)
{
return -1;
}
// проверка, что элемент массива по этой позиции пустой, если нет, то
// ищется свободное место после этой позиции и идет вставка туда
// если нет после, ищем до
if (_collection[position] != null)
{
bool pushed = false;
for (int index = position + 1; index < Count; index++)
{
if (_collection[index] == null)
{
position = index;
pushed = true;
break;
}
}
if (!pushed)
{
for (int index = position - 1; index >= 0; index--)
{ {
if (_collection[index] == null) if (_collection[index] == null)
{ {
@ -98,26 +104,30 @@ public class MassiveGenericObjects<T> :ICollectionGenericObjects<T>
} }
} }
} }
if (!pushed)
{ if (!pushed)
return false; {
} return position;
} }
}
// вставка // вставка
_collection[position] = obj; _collection[position] = obj;
return false; return position;
} }
public bool Remove(int position) public T? Remove(int position)
{ {
// проверка позиции // проверка позиции
if (position < 0 || position >= Count) if (position < 0 || position >= Count)
{ {
return false; return null;
} }
// удаление объекта из массива, присвоив элементу массива значение null
_collection[position] = null; if (_collection[position] == null) return null;
return true;
} T? temp = _collection[position];
_collection[position] = null;
return temp;
}
} }

View File

@ -111,7 +111,7 @@ namespace ProjectElectroTrans
buttonAddSportCar.Name = "buttonAddSportCar"; buttonAddSportCar.Name = "buttonAddSportCar";
buttonAddSportCar.Size = new Size(167, 40); buttonAddSportCar.Size = new Size(167, 40);
buttonAddSportCar.TabIndex = 2; buttonAddSportCar.TabIndex = 2;
buttonAddSportCar.Text = "Добавление спортивного поезда"; buttonAddSportCar.Text = "Добавление электропоезда";
buttonAddSportCar.UseVisualStyleBackColor = true; buttonAddSportCar.UseVisualStyleBackColor = true;
buttonAddSportCar.Click += ButtonAddElectroTrans_Click; buttonAddSportCar.Click += ButtonAddElectroTrans_Click;
// //

View File

@ -70,7 +70,7 @@ public partial class FormTransCollection : Form
drawingTrans = new DrawingTrans(random.Next(100, 300), random.Next(1000, 3000), GetColor(random)); drawingTrans = new DrawingTrans(random.Next(100, 300), random.Next(1000, 3000), GetColor(random));
break; break;
case nameof(DrawingElectroTrans): case nameof(DrawingElectroTrans):
// TODO вызов диалогового окна для выбора цвета // вызов диалогового окна для выбора цвета
drawingTrans = new DrawingElectroTrans(random.Next(100, 300), random.Next(1000, 3000), drawingTrans = new DrawingElectroTrans(random.Next(100, 300), random.Next(1000, 3000),
GetColor(random), GetColor(random),
GetColor(random), GetColor(random),
@ -80,7 +80,7 @@ public partial class FormTransCollection : Form
return; return;
} }
if (_company + drawingTrans) if (_company + drawingTrans != -1)
{ {
MessageBox.Show("Объект добавлен"); MessageBox.Show("Объект добавлен");
pictureBox.Image = _company.Show(); pictureBox.Image = _company.Show();
@ -126,7 +126,7 @@ public partial class FormTransCollection : Form
} }
int pos = Convert.ToInt32(maskedTextBoxPosition.Text); int pos = Convert.ToInt32(maskedTextBoxPosition.Text);
if (_company - pos) if (_company - pos != null)
{ {
MessageBox.Show("Объект удален"); MessageBox.Show("Объект удален");
pictureBox.Image = _company.Show(); pictureBox.Image = _company.Show();