PIbd-21_MasenkinMS_LabWork08
This commit is contained in:
parent
35ac29189b
commit
b5459737b6
@ -30,6 +30,8 @@
|
||||
{
|
||||
pictureBoxCollection = new PictureBox();
|
||||
panelTools = new Panel();
|
||||
buttonSortByColor = new Button();
|
||||
buttonSortByType = new Button();
|
||||
buttonDeleteObject = new Button();
|
||||
listBoxStorages = new ListBox();
|
||||
maskedTextBoxStorageName = new MaskedTextBox();
|
||||
@ -60,6 +62,8 @@
|
||||
//
|
||||
// panelTools
|
||||
//
|
||||
panelTools.Controls.Add(buttonSortByColor);
|
||||
panelTools.Controls.Add(buttonSortByType);
|
||||
panelTools.Controls.Add(buttonDeleteObject);
|
||||
panelTools.Controls.Add(listBoxStorages);
|
||||
panelTools.Controls.Add(maskedTextBoxStorageName);
|
||||
@ -74,11 +78,32 @@
|
||||
panelTools.Size = new Size(174, 461);
|
||||
panelTools.TabIndex = 1;
|
||||
//
|
||||
// buttonSortByColor
|
||||
//
|
||||
buttonSortByColor.Font = new Font("Segoe UI", 8F, FontStyle.Regular, GraphicsUnit.Point);
|
||||
buttonSortByColor.Location = new Point(22, 237);
|
||||
buttonSortByColor.Name = "buttonSortByColor";
|
||||
buttonSortByColor.Size = new Size(130, 30);
|
||||
buttonSortByColor.TabIndex = 10;
|
||||
buttonSortByColor.Text = "Сортировка по цвету";
|
||||
buttonSortByColor.UseVisualStyleBackColor = true;
|
||||
buttonSortByColor.Click += buttonSortByColor_Click;
|
||||
//
|
||||
// buttonSortByType
|
||||
//
|
||||
buttonSortByType.Location = new Point(22, 201);
|
||||
buttonSortByType.Name = "buttonSortByType";
|
||||
buttonSortByType.Size = new Size(130, 30);
|
||||
buttonSortByType.TabIndex = 9;
|
||||
buttonSortByType.Text = "Сортировка по типу";
|
||||
buttonSortByType.UseVisualStyleBackColor = true;
|
||||
buttonSortByType.Click += buttonSortByType_Click;
|
||||
//
|
||||
// buttonDeleteObject
|
||||
//
|
||||
buttonDeleteObject.Location = new Point(30, 180);
|
||||
buttonDeleteObject.Location = new Point(22, 165);
|
||||
buttonDeleteObject.Name = "buttonDeleteObject";
|
||||
buttonDeleteObject.Size = new Size(120, 40);
|
||||
buttonDeleteObject.Size = new Size(130, 30);
|
||||
buttonDeleteObject.TabIndex = 8;
|
||||
buttonDeleteObject.Text = "Удалить набор";
|
||||
buttonDeleteObject.UseVisualStyleBackColor = true;
|
||||
@ -88,24 +113,24 @@
|
||||
//
|
||||
listBoxStorages.FormattingEnabled = true;
|
||||
listBoxStorages.ItemHeight = 15;
|
||||
listBoxStorages.Location = new Point(30, 110);
|
||||
listBoxStorages.Location = new Point(22, 95);
|
||||
listBoxStorages.Name = "listBoxStorages";
|
||||
listBoxStorages.Size = new Size(120, 64);
|
||||
listBoxStorages.Size = new Size(130, 64);
|
||||
listBoxStorages.TabIndex = 7;
|
||||
listBoxStorages.SelectedIndexChanged += listBoxStorages_SelectedIndexChanged;
|
||||
//
|
||||
// maskedTextBoxStorageName
|
||||
//
|
||||
maskedTextBoxStorageName.Location = new Point(30, 30);
|
||||
maskedTextBoxStorageName.Location = new Point(22, 30);
|
||||
maskedTextBoxStorageName.Name = "maskedTextBoxStorageName";
|
||||
maskedTextBoxStorageName.Size = new Size(120, 23);
|
||||
maskedTextBoxStorageName.Size = new Size(130, 23);
|
||||
maskedTextBoxStorageName.TabIndex = 6;
|
||||
//
|
||||
// buttonAddObject
|
||||
//
|
||||
buttonAddObject.Location = new Point(30, 60);
|
||||
buttonAddObject.Location = new Point(22, 59);
|
||||
buttonAddObject.Name = "buttonAddObject";
|
||||
buttonAddObject.Size = new Size(120, 40);
|
||||
buttonAddObject.Size = new Size(130, 30);
|
||||
buttonAddObject.TabIndex = 5;
|
||||
buttonAddObject.Text = "Добавить набор";
|
||||
buttonAddObject.UseVisualStyleBackColor = true;
|
||||
@ -113,16 +138,16 @@
|
||||
//
|
||||
// maskedTextBoxNumber
|
||||
//
|
||||
maskedTextBoxNumber.Location = new Point(30, 300);
|
||||
maskedTextBoxNumber.Location = new Point(22, 322);
|
||||
maskedTextBoxNumber.Name = "maskedTextBoxNumber";
|
||||
maskedTextBoxNumber.Size = new Size(120, 23);
|
||||
maskedTextBoxNumber.Size = new Size(130, 23);
|
||||
maskedTextBoxNumber.TabIndex = 4;
|
||||
//
|
||||
// buttonRefreshCollection
|
||||
//
|
||||
buttonRefreshCollection.Location = new Point(30, 400);
|
||||
buttonRefreshCollection.Location = new Point(22, 400);
|
||||
buttonRefreshCollection.Name = "buttonRefreshCollection";
|
||||
buttonRefreshCollection.Size = new Size(120, 40);
|
||||
buttonRefreshCollection.Size = new Size(130, 40);
|
||||
buttonRefreshCollection.TabIndex = 3;
|
||||
buttonRefreshCollection.Text = "Обновить коллекцию";
|
||||
buttonRefreshCollection.UseVisualStyleBackColor = true;
|
||||
@ -130,9 +155,9 @@
|
||||
//
|
||||
// buttonRemoveBus
|
||||
//
|
||||
buttonRemoveBus.Location = new Point(30, 330);
|
||||
buttonRemoveBus.Location = new Point(22, 351);
|
||||
buttonRemoveBus.Name = "buttonRemoveBus";
|
||||
buttonRemoveBus.Size = new Size(120, 40);
|
||||
buttonRemoveBus.Size = new Size(130, 30);
|
||||
buttonRemoveBus.TabIndex = 2;
|
||||
buttonRemoveBus.Text = "Удалить автобус";
|
||||
buttonRemoveBus.UseVisualStyleBackColor = true;
|
||||
@ -140,9 +165,9 @@
|
||||
//
|
||||
// buttonAddBus
|
||||
//
|
||||
buttonAddBus.Location = new Point(30, 250);
|
||||
buttonAddBus.Location = new Point(22, 286);
|
||||
buttonAddBus.Name = "buttonAddBus";
|
||||
buttonAddBus.Size = new Size(120, 40);
|
||||
buttonAddBus.Size = new Size(130, 30);
|
||||
buttonAddBus.TabIndex = 1;
|
||||
buttonAddBus.Text = "Добавить автобус";
|
||||
buttonAddBus.UseVisualStyleBackColor = true;
|
||||
@ -163,7 +188,7 @@
|
||||
menuStrip.Items.AddRange(new ToolStripItem[] { файлToolStripMenuItem });
|
||||
menuStrip.Location = new Point(0, 0);
|
||||
menuStrip.Name = "menuStrip";
|
||||
menuStrip.Size = new Size(176, 24);
|
||||
menuStrip.Size = new Size(56, 24);
|
||||
menuStrip.TabIndex = 2;
|
||||
menuStrip.Text = "menuStrip";
|
||||
//
|
||||
@ -177,14 +202,14 @@
|
||||
// saveToolStripMenuItem
|
||||
//
|
||||
saveToolStripMenuItem.Name = "saveToolStripMenuItem";
|
||||
saveToolStripMenuItem.Size = new Size(180, 22);
|
||||
saveToolStripMenuItem.Size = new Size(141, 22);
|
||||
saveToolStripMenuItem.Text = "Сохранение";
|
||||
saveToolStripMenuItem.Click += saveToolStripMenuItem_Click;
|
||||
//
|
||||
// LoadToolStripMenuItem
|
||||
//
|
||||
LoadToolStripMenuItem.Name = "LoadToolStripMenuItem";
|
||||
LoadToolStripMenuItem.Size = new Size(180, 22);
|
||||
LoadToolStripMenuItem.Size = new Size(141, 22);
|
||||
LoadToolStripMenuItem.Text = "Загрузка";
|
||||
LoadToolStripMenuItem.Click += LoadToolStripMenuItem_Click;
|
||||
//
|
||||
@ -236,5 +261,7 @@
|
||||
private ToolStripMenuItem LoadToolStripMenuItem;
|
||||
private OpenFileDialog openFileDialog;
|
||||
private SaveFileDialog saveFileDialog;
|
||||
private Button buttonSortByType;
|
||||
private Button buttonSortByColor;
|
||||
}
|
||||
}
|
@ -51,7 +51,7 @@ namespace AccordionBus
|
||||
listBoxStorages.Items.Clear();
|
||||
for (int i = 0; i < _storage.Keys.Count; i++)
|
||||
{
|
||||
listBoxStorages.Items.Add(_storage.Keys[i]);
|
||||
listBoxStorages.Items.Add(_storage.Keys[i].Name);
|
||||
}
|
||||
|
||||
if (listBoxStorages.Items.Count > 0 && (index == -1 || index >= listBoxStorages.Items.Count))
|
||||
@ -64,6 +64,27 @@ namespace AccordionBus
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Сортировка по сравнителю
|
||||
/// </summary>
|
||||
/// <param name="comparer"></param>
|
||||
private void CompareBuses(IComparer<DrawingBus?> comparer)
|
||||
{
|
||||
if (listBoxStorages.SelectedIndex == -1)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var obj = _storage[listBoxStorages.SelectedIndex.ToString() ?? string.Empty];
|
||||
if (obj == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
obj.Sort(comparer);
|
||||
pictureBoxCollection.Image = obj.ShowBuses();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Добавление набора в коллекцию
|
||||
/// </summary>
|
||||
@ -71,7 +92,7 @@ namespace AccordionBus
|
||||
/// <param name="e"></param>
|
||||
private void buttonAddObject_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (string.IsNullOrEmpty(buttonAddObject.Text))
|
||||
if (string.IsNullOrEmpty(maskedTextBoxStorageName.Text))
|
||||
{
|
||||
MessageBox.Show("Не все данные заполнены", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
_logger.LogWarning($"Не удалось добавить набор: {maskedTextBoxStorageName.Text}. Не все данные заполнены");
|
||||
@ -153,7 +174,7 @@ namespace AccordionBus
|
||||
_logger.LogWarning($"Не удалось добавить объект: {ex.Message}");
|
||||
MessageBox.Show($"Не удалось добавить объект: {ex.Message}");
|
||||
}
|
||||
|
||||
|
||||
});
|
||||
form.Show();
|
||||
}
|
||||
@ -194,7 +215,7 @@ namespace AccordionBus
|
||||
_logger.LogInformation($"Удален объект с позиции {pos}");
|
||||
}
|
||||
}
|
||||
catch(Exception ex)
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogWarning($"Не удалось удалить объект: {ex.Message}");
|
||||
MessageBox.Show($"Не удалось удалить объект: {ex.Message}");
|
||||
@ -268,5 +289,19 @@ namespace AccordionBus
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Сортировка по типу
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void buttonSortByType_Click(object sender, EventArgs e) => CompareBuses(new BusCompareByType());
|
||||
|
||||
/// <summary>
|
||||
/// Сортировка по цвету
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void buttonSortByColor_Click(object sender, EventArgs e) => CompareBuses(new BusCompareByColor());
|
||||
}
|
||||
}
|
||||
|
54
AccordionBus/AccordionBus/BusCollectionInfo.cs
Normal file
54
AccordionBus/AccordionBus/BusCollectionInfo.cs
Normal file
@ -0,0 +1,54 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AccordionBus.Generics
|
||||
{
|
||||
/// <summary>
|
||||
/// Класс для хранения описания коллекции
|
||||
/// </summary>
|
||||
public class BusCollectionInfo : IEquatable<BusCollectionInfo>
|
||||
{
|
||||
/// <summary>
|
||||
/// Название коллекции
|
||||
/// </summary>
|
||||
public string Name { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Описание коллекции
|
||||
/// </summary>
|
||||
public string Description { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Конструктор
|
||||
/// </summary>
|
||||
/// <param name="name">Название коллекции</param>
|
||||
/// <param name="description">Описание коллекции</param>
|
||||
public BusCollectionInfo(string name, string description)
|
||||
{
|
||||
Name = name;
|
||||
Description = description;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Сравнение названий
|
||||
/// </summary>
|
||||
/// <param name="other">Название</param>
|
||||
/// <returns></returns>
|
||||
public bool Equals(BusCollectionInfo? other)
|
||||
{
|
||||
return Name == other?.Name;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Получение хэш-кода
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return Name.GetHashCode();
|
||||
}
|
||||
}
|
||||
}
|
62
AccordionBus/AccordionBus/BusCompareByColor.cs
Normal file
62
AccordionBus/AccordionBus/BusCompareByColor.cs
Normal file
@ -0,0 +1,62 @@
|
||||
using AccordionBus.Drawings;
|
||||
using AccordionBus.Entities;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AccordionBus
|
||||
{
|
||||
/// <summary>
|
||||
/// Класс реализации сравнения объектов по цвету
|
||||
/// </summary>
|
||||
public class BusCompareByColor : IComparer<DrawingBus?>
|
||||
{
|
||||
/// <summary>
|
||||
/// Сравнение объектов
|
||||
/// </summary>
|
||||
/// <param name="x">Первый объект</param>
|
||||
/// <param name="y">Второй объект</param>
|
||||
/// <returns></returns>
|
||||
/// <exception cref="ArgumentNullException"></exception>
|
||||
public int Compare(DrawingBus? x, DrawingBus? y)
|
||||
{
|
||||
// Проверка на null
|
||||
if (x == null || x.EntityBus == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(x));
|
||||
}
|
||||
if (y == null || y.EntityBus == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(y));
|
||||
}
|
||||
|
||||
// Проверка по основному цвету
|
||||
var bodyColorCompare = x.EntityBus.BodyColor.Name.CompareTo(y.EntityBus.BodyColor.Name);
|
||||
if (bodyColorCompare != 0)
|
||||
{
|
||||
return bodyColorCompare;
|
||||
}
|
||||
|
||||
// Проверка по дополнительному цвету
|
||||
if (x.EntityBus is EntityAccordionBus objX && y.EntityBus is EntityAccordionBus objY)
|
||||
{
|
||||
var additionalColorCompare = objX.AdditionalColor.Name.CompareTo(objY.AdditionalColor.Name);
|
||||
if (additionalColorCompare != 0)
|
||||
{
|
||||
return additionalColorCompare;
|
||||
}
|
||||
}
|
||||
|
||||
// Проверка по остальным параметрам
|
||||
var speedCompare = x.EntityBus.Speed.CompareTo(y.EntityBus.Speed);
|
||||
if (speedCompare != 0)
|
||||
{
|
||||
return speedCompare;
|
||||
}
|
||||
|
||||
return x.EntityBus.Weight.CompareTo(y.EntityBus.Weight);
|
||||
}
|
||||
}
|
||||
}
|
50
AccordionBus/AccordionBus/BusCompareByType.cs
Normal file
50
AccordionBus/AccordionBus/BusCompareByType.cs
Normal file
@ -0,0 +1,50 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using AccordionBus.Drawings;
|
||||
|
||||
namespace AccordionBus.Generics
|
||||
{
|
||||
/// <summary>
|
||||
/// Класс реализации сравнения объектов по типу
|
||||
/// </summary>
|
||||
public class BusCompareByType : IComparer<DrawingBus?>
|
||||
{
|
||||
/// <summary>
|
||||
/// Сравнение объектов
|
||||
/// </summary>
|
||||
/// <param name="x">Первый объект</param>
|
||||
/// <param name="y">Второй объект</param>
|
||||
/// <returns></returns>
|
||||
/// <exception cref="ArgumentNullException"></exception>
|
||||
public int Compare(DrawingBus? x, DrawingBus? y)
|
||||
{
|
||||
// Проверка на null
|
||||
if (x == null || x.EntityBus == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(x));
|
||||
}
|
||||
if (y == null || y.EntityBus == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(y));
|
||||
}
|
||||
|
||||
// Проверка по типу
|
||||
if (x.GetType().Name != y.GetType().Name)
|
||||
{
|
||||
return x.GetType().Name.CompareTo(y.GetType().Name);
|
||||
}
|
||||
|
||||
// Проверка по остальным параметрам
|
||||
var speedCompare = x.EntityBus.Speed.CompareTo(y.EntityBus.Speed);
|
||||
if (speedCompare != 0)
|
||||
{
|
||||
return speedCompare;
|
||||
}
|
||||
|
||||
return x.EntityBus.Weight.CompareTo(y.EntityBus.Weight);
|
||||
}
|
||||
}
|
||||
}
|
@ -47,6 +47,12 @@ namespace AccordionBus.Generics
|
||||
/// </summary>
|
||||
public IEnumerable<T?> GetBuses => _collection.GetBuses();
|
||||
|
||||
/// <summary>
|
||||
/// Сортировка
|
||||
/// </summary>
|
||||
/// <param name="comparer"></param>
|
||||
public void Sort(IComparer<T?> comparer) => _collection.SortSet(comparer);
|
||||
|
||||
/// <summary>
|
||||
/// Конструктор
|
||||
/// </summary>
|
||||
@ -75,7 +81,7 @@ namespace AccordionBus.Generics
|
||||
throw new NullReferenceException();
|
||||
}
|
||||
|
||||
return collect?._collection.Insert(obj) ?? -1;
|
||||
return collect?._collection.Insert(obj, new DrawingBusEqutables()) ?? -1;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -6,6 +6,7 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Xml.Linq;
|
||||
|
||||
namespace AccordionBus
|
||||
{
|
||||
@ -17,12 +18,12 @@ namespace AccordionBus
|
||||
/// <summary>
|
||||
/// Словарь (хранилище)
|
||||
/// </summary>
|
||||
readonly Dictionary<string, BusGenericCollection<DrawingBus, DrawingObjectBus>> _busStorages;
|
||||
readonly Dictionary<BusCollectionInfo, BusGenericCollection<DrawingBus, DrawingObjectBus>> _busStorages;
|
||||
|
||||
/// <summary>
|
||||
/// Возвращение списка названий наборов
|
||||
/// </summary>
|
||||
public List<string> Keys => _busStorages.Keys.ToList();
|
||||
public List<BusCollectionInfo> Keys => _busStorages.Keys.ToList();
|
||||
|
||||
/// <summary>
|
||||
/// Ширина окна отрисовки
|
||||
@ -56,7 +57,7 @@ namespace AccordionBus
|
||||
/// <param name="pictureHeight">Высота картинки</param>
|
||||
public BusGenericStorage(int pictureWidth, int pictureHeight)
|
||||
{
|
||||
_busStorages = new Dictionary<string, BusGenericCollection<DrawingBus, DrawingObjectBus>>();
|
||||
_busStorages = new Dictionary<BusCollectionInfo, BusGenericCollection<DrawingBus, DrawingObjectBus>>();
|
||||
_pictureWidth = pictureWidth;
|
||||
_pictureHeight = pictureHeight;
|
||||
}
|
||||
@ -67,7 +68,15 @@ namespace AccordionBus
|
||||
/// <param name="name">Название набора</param>
|
||||
public void AddSet(string name)
|
||||
{
|
||||
_busStorages.Add(name, new BusGenericCollection<DrawingBus, DrawingObjectBus>(_pictureWidth, _pictureHeight));
|
||||
BusCollectionInfo info = new BusCollectionInfo(name, string.Empty);
|
||||
|
||||
// Проверка наличия ключа
|
||||
if (_busStorages.ContainsKey(info))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_busStorages.Add(info, new BusGenericCollection<DrawingBus, DrawingObjectBus>(_pictureWidth, _pictureHeight));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -76,13 +85,15 @@ namespace AccordionBus
|
||||
/// <param name="name">Название набора</param>
|
||||
public void DelSet(string name)
|
||||
{
|
||||
BusCollectionInfo info = new BusCollectionInfo(name, string.Empty);
|
||||
|
||||
// Проверка наличия ключа
|
||||
if (!_busStorages.ContainsKey(name))
|
||||
if (!_busStorages.ContainsKey(info))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_busStorages.Remove(name);
|
||||
_busStorages.Remove(info);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -94,10 +105,12 @@ namespace AccordionBus
|
||||
{
|
||||
get
|
||||
{
|
||||
BusCollectionInfo info = new BusCollectionInfo(ind, string.Empty);
|
||||
|
||||
// Проверка наличия ключа
|
||||
if (_busStorages.ContainsKey(ind))
|
||||
if (_busStorages.ContainsKey(info))
|
||||
{
|
||||
return _busStorages[ind];
|
||||
return _busStorages[info];
|
||||
}
|
||||
|
||||
return null;
|
||||
@ -117,7 +130,7 @@ namespace AccordionBus
|
||||
}
|
||||
|
||||
StringBuilder data = new();
|
||||
foreach (KeyValuePair<string, BusGenericCollection<DrawingBus, DrawingObjectBus>> record in _busStorages)
|
||||
foreach (KeyValuePair<BusCollectionInfo, BusGenericCollection<DrawingBus, DrawingObjectBus>> record in _busStorages)
|
||||
{
|
||||
StringBuilder records = new();
|
||||
foreach (DrawingBus? elem in record.Value.GetBuses)
|
||||
@ -190,7 +203,8 @@ namespace AccordionBus
|
||||
}
|
||||
}
|
||||
}
|
||||
_busStorages.Add(record[0], collection);
|
||||
|
||||
_busStorages.Add(new BusCollectionInfo(record[0], string.Empty), collection);
|
||||
line = reader.ReadLine();
|
||||
}
|
||||
}
|
||||
|
89
AccordionBus/AccordionBus/DrawingBusEqutables.cs
Normal file
89
AccordionBus/AccordionBus/DrawingBusEqutables.cs
Normal file
@ -0,0 +1,89 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using AccordionBus.Drawings;
|
||||
using AccordionBus.Entities;
|
||||
|
||||
namespace AccordionBus.Generics
|
||||
{
|
||||
/// <summary>
|
||||
/// Класс для реализации сравнения объектов
|
||||
/// </summary>
|
||||
internal class DrawingBusEqutables : IEqualityComparer<DrawingBus?>
|
||||
{
|
||||
/// <summary>
|
||||
/// Сравнение объектов
|
||||
/// </summary>
|
||||
/// <param name="x">Первый объект</param>
|
||||
/// <param name="y">Второй объект</param>
|
||||
/// <returns></returns>
|
||||
/// <exception cref="ArgumentNullException"></exception>
|
||||
public bool Equals(DrawingBus? x, DrawingBus? y)
|
||||
{
|
||||
// Проверки на null
|
||||
if (x == null || x.EntityBus == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(x));
|
||||
}
|
||||
if (y == null || y.EntityBus == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(y));
|
||||
}
|
||||
|
||||
// Сравнение типов объектов
|
||||
if (x.GetType().Name != y.GetType().Name)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Сравнение параметров базовых объектов
|
||||
if (x.EntityBus.Speed != y.EntityBus.Speed)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (x.EntityBus.Weight != y.EntityBus.Weight)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (x.EntityBus.BodyColor != y.EntityBus.BodyColor)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Сравнение параметров продвинутых объектов
|
||||
if (x is DrawingAccordionBus && y is DrawingAccordionBus)
|
||||
{
|
||||
EntityAccordionBus objX = (EntityAccordionBus)x.EntityBus;
|
||||
EntityAccordionBus objY = (EntityAccordionBus)y.EntityBus;
|
||||
|
||||
if (objX.AdditionalColor != objY.AdditionalColor)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (objX.AdditionalBody != objY.AdditionalBody)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (objX.AdditionalDoor != objY.AdditionalDoor)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Получение хэш-кода объекта
|
||||
/// </summary>
|
||||
/// <param name="obj"></param>
|
||||
/// <returns></returns>
|
||||
public int GetHashCode([DisallowNull] DrawingBus obj)
|
||||
{
|
||||
return obj.GetHashCode();
|
||||
}
|
||||
}
|
||||
}
|
@ -43,9 +43,9 @@ namespace AccordionBus.Generics
|
||||
/// </summary>
|
||||
/// <param name="bus">Добавляемый автобус</param>
|
||||
/// <returns></returns>
|
||||
public int Insert(T bus)
|
||||
public int Insert(T bus, IEqualityComparer<T?>? equal = null)
|
||||
{
|
||||
return Insert(bus, 0);
|
||||
return Insert(bus, 0, equal);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -54,7 +54,7 @@ namespace AccordionBus.Generics
|
||||
/// <param name="bus">Добавляемый автобус</param>
|
||||
/// <param name="position">Позиция</param>
|
||||
/// <returns></returns>
|
||||
public int Insert(T bus, int position)
|
||||
public int Insert(T bus, int position, IEqualityComparer<T?>? equal = null)
|
||||
{
|
||||
if (_places.Count >= _maxCount)
|
||||
{
|
||||
@ -67,6 +67,11 @@ namespace AccordionBus.Generics
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (equal != null && _places.Contains(bus, equal))
|
||||
{
|
||||
throw new ArgumentException("Данный объект уже есть в коллекции");
|
||||
}
|
||||
|
||||
// Вставка по позиции
|
||||
_places.Insert(position, bus);
|
||||
return position;
|
||||
@ -95,6 +100,12 @@ namespace AccordionBus.Generics
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Сортировка набора объектов
|
||||
/// </summary>
|
||||
/// <param name="comparer"></param>
|
||||
public void SortSet(IComparer<T?> comparer) => _places.Sort(comparer);
|
||||
|
||||
/// <summary>
|
||||
/// Получение объекта из набора по позиции
|
||||
/// </summary>
|
||||
|
2
data.txt
Normal file
2
data.txt
Normal file
@ -0,0 +1,2 @@
|
||||
BusStorage
|
||||
0|100:100:Blue;100:100:Green;100:100:Red;100:100:Magenta:Red:True:True;100:100:Black:Green:True:True;100:100:Gray:Blue:True:True;100:100:White:Yellow:True:True;100:100:Yellow:White:True:True;100:100:Blue:Gray:True:True;100:100:Green:Black:True:True;100:100:Red:Magenta:True:True;100:100:Magenta:Black:True:False;100:100:Black:Black:True:False;100:100:Gray:Black:True:False;100:100:White:Black:True:False;100:100:Yellow:Black:True:False;100:100:Blue:Black:True:False;100:100:Green:Black:True:False;100:100:Red:Black:True:False;100:100:Magenta;100:100:Black;100:100:Gray;100:100:White;100:100:Yellow;100:100:Blue;100:100:Green;100:100:Red;
|
Loading…
x
Reference in New Issue
Block a user