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="car">Добавляемый объект</param>
/// <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>
@ -69,9 +68,9 @@ public abstract class AbstractCompany
/// <param name="company">Компания</param>
/// <param name="position">Номер удаляемого объекта</param>
/// <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>

View File

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

View File

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

View File

@ -111,7 +111,7 @@ namespace ProjectElectroTrans
buttonAddSportCar.Name = "buttonAddSportCar";
buttonAddSportCar.Size = new Size(167, 40);
buttonAddSportCar.TabIndex = 2;
buttonAddSportCar.Text = "Добавление спортивного поезда";
buttonAddSportCar.Text = "Добавление электропоезда";
buttonAddSportCar.UseVisualStyleBackColor = true;
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));
break;
case nameof(DrawingElectroTrans):
// TODO вызов диалогового окна для выбора цвета
// вызов диалогового окна для выбора цвета
drawingTrans = new DrawingElectroTrans(random.Next(100, 300), random.Next(1000, 3000),
GetColor(random),
GetColor(random),
@ -80,7 +80,7 @@ public partial class FormTransCollection : Form
return;
}
if (_company + drawingTrans)
if (_company + drawingTrans != -1)
{
MessageBox.Show("Объект добавлен");
pictureBox.Image = _company.Show();
@ -126,7 +126,7 @@ public partial class FormTransCollection : Form
}
int pos = Convert.ToInt32(maskedTextBoxPosition.Text);
if (_company - pos)
if (_company - pos != null)
{
MessageBox.Show("Объект удален");
pictureBox.Image = _company.Show();