Лабораторная работа 8(не все)

This commit is contained in:
asakky 2024-05-05 21:56:46 +04:00
parent 61d1f66176
commit e8aba23eed
7 changed files with 205 additions and 42 deletions

View File

@ -64,7 +64,7 @@ public abstract class AbstractCompany
/// <returns></returns> /// <returns></returns>
public static int operator +(AbstractCompany company, DrawningBoat boat) public static int operator +(AbstractCompany company, DrawningBoat boat)
{ {
return company._collection.Insert(boat); return company._collection.Insert(boat, new DrawiningBoatEqutables());
} }
/// <summary> /// <summary>

View File

@ -25,16 +25,18 @@ public interface ICollectionGenericObjects<T>
/// Добавление объекта в коллекцию /// Добавление объекта в коллекцию
/// </summary> /// </summary>
/// <param name="obj">Добавляемый объект</param> /// <param name="obj">Добавляемый объект</param>
/// /// <param name="comparer">Cравнение двух объектов</param>
/// <returns>true - вставка прошла удачно, false - вставка не удалась</returns> /// <returns>true - вставка прошла удачно, false - вставка не удалась</returns>
int Insert(T obj); int Insert(T obj, IEqualityComparer<T?>? comparer = null);
/// <summary> /// <summary>
/// Добавление объекта в коллекцию на конкретную позицию /// Добавление объекта в коллекцию на конкретную позицию
/// </summary> /// </summary>
///<param name="obj">Добавляемый объект</param> ///<param name="obj">Добавляемый объект</param>
/// <param name="position">Позиция</param> /// <param name="position">Позиция</param>
/// /// <param name="comparer">Cравнение двух объектов</param>
/// <returns>true - вставка прошла удачно, false - вставка не удалась</returns> /// <returns>true - вставка прошла удачно, false - вставка не удалась</returns>
int Insert(T obj, int position); int Insert(T obj, int position, IEqualityComparer<T?>? comparer = null);
/// <summary> /// <summary>
/// Удаление объекта из коллекции с конкретной позиции /// Удаление объекта из коллекции с конкретной позиции

View File

@ -59,11 +59,16 @@ public class ListGenericObjects<T> : ICollectionGenericObjects<T>
} }
return _collection[position]; return _collection[position];
} }
public int Insert(T obj) public int Insert(T obj, IEqualityComparer<T?>? comparer = null)
{ {
// todo выброс ошибки если переплонение /// todo выброс ошибки если переплонение
/// TODO проверка, что не превышено максимальное количество элементов /// TODO проверка, что не превышено максимальное количество элементов
// todo выброс ошибки если такой объект есть в коллекции
if (_collection.Contains(obj, comparer))
{
throw new ArgumentException("Добавляемый объект уже существует в коллекции");
}
/// TODO вставка в конец набора /// TODO вставка в конец набора
if (_maxCount <= Count) if (_maxCount <= Count)
{ {
@ -77,15 +82,20 @@ public class ListGenericObjects<T> : ICollectionGenericObjects<T>
} }
public int Insert(T obj, int position) public int Insert(T obj, int position, IEqualityComparer<T?>? comparer = null)
{ {
/// TODO проверка, что не превышено максимальное количество элементов /// TODO проверка, что не превышено максимальное количество элементов
/// TODO проверка позиции /// TODO проверка позиции
/// TODO вставка по позиции /// TODO вставка по позиции
// todo выброс ошибки если такой объект есть в коллекции
if (_maxCount <= Count) if (_maxCount <= Count)
{ {
throw new CollectionOverflowException(Count); throw new CollectionOverflowException(Count);
} }
if (_collection.Contains(obj, comparer))
{
throw new ArgumentException("Добавляемый объект уже существует в коллекции");
}
if (position < 0 || position >= Count) if (position < 0 || position >= Count)
{ {
throw new PositionOutOfCollectionException(position); throw new PositionOutOfCollectionException(position);

View File

@ -61,47 +61,19 @@ public class MassiveGenericObjects<T> : ICollectionGenericObjects<T>
if (_collection[position] == null) throw new ObjectNotFoundException(position); if (_collection[position] == null) throw new ObjectNotFoundException(position);
return _collection[position]; return _collection[position];
} }
public int Insert(T obj) public int Insert(T obj, IEqualityComparer<T?>? comparer = null)
//todo выброс ошибки если переполнение // todo выброс ошибки если такой объект есть в коллекции
///todo выброс ошибки если переполнение
///to do ///to do
{
for (int i = 0; i < _collection.Length; i++)
{
if (_collection[i] == null)
{
_collection[i] = obj;
return i;
}
}
throw new CollectionOverflowException(Count);
}
public int Insert(T obj, int position)
//todo выброс ошибки если переполнение
// todo выброс ошибки если выход за границы массива
///to do
{
if (position < 0 || position >= _collection.Length)
{
throw new PositionOutOfCollectionException(position);
}
if (_collection[position] == null) {
if (_collection.Contains(obj, comparer))
{ {
_collection[position] = obj;//вставка throw new ArgumentException("Добавляемый объект уже существует в коллекции");
return position;
} }
else else
{ {
for (int i = position + 1; i < _collection.Length; i++) for (int i = 0; i < _collection.Length; i++)
{
if (_collection[i] == null)
{
_collection[i] = obj;//вставка
return i;
}
}
for (int i = position - 1; i >= 0; i--)
{ {
if (_collection[i] == null) if (_collection[i] == null)
{ {
@ -109,8 +81,54 @@ public class MassiveGenericObjects<T> : ICollectionGenericObjects<T>
return i; return i;
} }
} }
throw new CollectionOverflowException(Count);
}
}
public int Insert(T obj, int position, IEqualityComparer<T?>? comparer = null)
// todo выброс ошибки если такой объект есть в коллекции
///todo выброс ошибки если переполнение
/// todo выброс ошибки если выход за границы массива
///to do
{
if (_collection.Contains(obj, comparer))
{
throw new ArgumentException("Добавляемый объект уже существует в коллекции");
}
else
{
if (position < 0 || position >= _collection.Length)
{
throw new PositionOutOfCollectionException(position);
}
if (_collection[position] == null)
{
_collection[position] = obj;//вставка
return position;
}
else
{
for (int i = position + 1; i < _collection.Length; i++)
{
if (_collection[i] == null)
{
_collection[i] = obj;//вставка
return i;
}
}
for (int i = position - 1; i >= 0; i--)
{
if (_collection[i] == null)
{
_collection[i] = obj;
return i;
}
}
}
throw new CollectionOverflowException(Count);
} }
throw new CollectionOverflowException(Count);
} }
public T Remove(int position) public T Remove(int position)
//todo выброс ошибки если выход за границы массива //todo выброс ошибки если выход за границы массива

View File

@ -0,0 +1,69 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics.CodeAnalysis;
using ProjectMotorBoat.Entities;
namespace ProjectMotorBoat.Drawnings;
/// <summary>
/// Реализация сравнения двух объектов класса-прорисовки
/// </summary>
public class DrawiningBoatEqutables : IEqualityComparer<DrawningBoat?>
{
public bool Equals(DrawningBoat? x, DrawningBoat? 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 is DrawningMotorBoat && y is DrawningMotorBoat)
{
// TODO доделать логику сравнения дополнительных параметров
EntityMotorBoat _x = (EntityMotorBoat)x.EntityBoat;
EntityMotorBoat _y = (EntityMotorBoat)y.EntityBoat;
if (_x.AdditionalColor != _y.AdditionalColor)
{
return false;
}
if (_x.Glass != _y.Glass)
{
return false;
}
if (_x.Engine != _y.Engine)
{
return false;
}
}
return true;
}
public int GetHashCode([DisallowNull] DrawningBoat obj)
{
return obj.GetHashCode();
}
}

View File

@ -0,0 +1,29 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography.Xml;
using System.Text;
using System.Threading.Tasks;
namespace ProjectMotorBoat.Drawnings;
/// <summary>
/// Сравнение по цвету, скорости, весу
/// </summary>
public class DrawningBoatCompareByColor : IComparer<DrawningBoat?>
{
public int Compare(DrawningBoat? x, DrawningBoat? y)
{
// TODO прописать логику сравения по цветам, скорости, весу
if (x.EntityBoat.BodyColor != y.EntityBoat.BodyColor)
{
return -1;
}
var speedCompare = x.EntityBoat.Speed.CompareTo(y.EntityBoat.Speed);
if (speedCompare != 0)
{
return speedCompare;
}
return x.EntityBoat.Weight.CompareTo(y.EntityBoat.Weight);
}
}

View File

@ -0,0 +1,35 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectMotorBoat.Drawnings;
/// <summary>
/// Сравнение по типу, скорости, весу
/// </summary>
public class DrawningBoatCompareByType : IComparer<DrawningBoat?>
{
public int Compare(DrawningBoat? x, DrawningBoat? y)
{
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);
}
}