почти все

This commit is contained in:
Petek1234 2024-05-15 02:28:35 +04:00
parent 2b59f70937
commit 888038edd4
10 changed files with 193 additions and 186 deletions

View File

@ -14,8 +14,6 @@ public class ListGenericObjects<T> : ICollectionGenericObjects<T>
/// </summary>
private readonly List<T?> _collection;
public CollectionType GetCollectionType => CollectionType.List;
/// <summary>
/// Максимально допустимое число объектов в списке
/// </summary>
@ -29,6 +27,7 @@ public class ListGenericObjects<T> : ICollectionGenericObjects<T>
{
return Count;
}
set
{
if (value > 0)
@ -38,6 +37,8 @@ public class ListGenericObjects<T> : ICollectionGenericObjects<T>
}
}
public CollectionType GetCollectionType => CollectionType.List;
/// <summary>
/// Конструктор
/// </summary>
@ -48,39 +49,56 @@ public class ListGenericObjects<T> : ICollectionGenericObjects<T>
public T? Get(int position)
{
if (position >= Count || position < 0) throw new PositionOutOfCollectionException(position);
// Проверка позиции
if (position >= Count || position < 0)
{
throw new PositionOutOfCollectionException(position);
}
return _collection[position];
}
public int Insert(T obj)
{
if (Count == _maxCount) throw new CollectionOverflowException(Count);
// Проверка, что не превышено максимальное количество элементов
if (Count == _maxCount)
{
throw new CollectionOverflowException(Count);
}
_collection.Add(obj);
return Count;
}
public int Insert(T obj, int position)
{
if (position < 0 || position >= Count)
throw new PositionOutOfCollectionException(position);
// Проверка, что не превышено максимальное количество элементов
if (Count == _maxCount)
{
throw new CollectionOverflowException(Count);
}
// Проверка позиции
if (position >= Count || position < 0)
{
throw new PositionOutOfCollectionException(position);
}
_collection.Insert(position, obj);
return position;
}
public T? Remove(int position)
{
if (position >= Count || position < 0) throw new PositionOutOfCollectionException(position);
T obj = _collection[position];
// Проверка позиции
if (position >= Count || position < 0)
{
throw new PositionOutOfCollectionException(position);
}
T? obj = _collection[position];
_collection.RemoveAt(position);
return obj;
}
public IEnumerable<T?> GetItems()
{
for (int i = 0; i < _collection.Count; ++i)
for (int i = 0; i < Count; ++i)
{
yield return _collection[i];
}

View File

@ -23,6 +23,7 @@ public class MassiveGenericObjects<T> : ICollectionGenericObjects<T>
{
return _collection.Length;
}
set
{
if (value > 0)
@ -51,36 +52,32 @@ public class MassiveGenericObjects<T> : ICollectionGenericObjects<T>
public T? Get(int position)
{
if (position >= _collection.Length || position < 0) throw new PositionOutOfCollectionException(position);
if (_collection[position] == null) throw new ObjectNotFoundException(position);
// Проверка позиции
if (position >= _collection.Length || position < 0)
{ return null; }
return _collection[position];
}
public int Insert(T obj)
{
for (int i = 0; i < Count; i++)
{
if (_collection[i] == null)
{
_collection[i] = obj;
return i;
}
}
throw new CollectionOverflowException(Count);
// Вставка в свободное место набора
return Insert(obj, 0);
}
public int Insert(T obj, int position)
{
// Проверка позиции
if (position < 0 || position >= Count)
{
throw new PositionOutOfCollectionException(position);
}
// Проверка, что элемент массива по этой позиции пустой
if (_collection[position] == null)
{
_collection[position] = obj;
return position;
}
//Свободное место после этой позиции
for (int i = position + 1; i < Count; i++)
{
if (_collection[i] == null)
@ -89,6 +86,7 @@ public class MassiveGenericObjects<T> : ICollectionGenericObjects<T>
return i;
}
}
//Свободное место до этой позиции
for (int i = position - 1; i >= 0; i--)
{
if (_collection[i] == null)
@ -97,18 +95,22 @@ public class MassiveGenericObjects<T> : ICollectionGenericObjects<T>
return i;
}
}
throw new CollectionOverflowException(Count);
}
public T? Remove(int position)
{
// Проверка позиции и наличия объекта
if (position < 0 || position >= Count)
{
throw new PositionOutOfCollectionException(position);
}
if (_collection[position] == null) throw new ObjectNotFoundException(position);
T obj = _collection[position];
if (_collection[position] == null)
{
throw new ObjectNotFoundException(position);
}
// Удаление объекта из массива
T? obj = _collection[position];
_collection[position] = null;
return obj;
}

View File

@ -51,20 +51,18 @@ public class StorageCollection<T>
/// <param name="collectionType">тип коллекции</param>
public void AddCollection(string name, CollectionType collectionType)
{
if (string.IsNullOrEmpty(name) || _storages.ContainsKey(name))
// Проверка, что name не пустой и нет в словаре записи с таким ключом
if (string.IsNullOrEmpty(name) || _storages.ContainsKey(name) || collectionType == CollectionType.None)
{
return;
}
switch (collectionType)
if (collectionType == CollectionType.Massive)
{
case CollectionType.Massive:
_storages[name] = new MassiveGenericObjects<T>();
break;
case CollectionType.List:
}
if (collectionType == CollectionType.List)
{
_storages[name] = new ListGenericObjects<T>();
break;
default:
return;
}
}
@ -93,9 +91,12 @@ public class StorageCollection<T>
{
return _storages[name];
}
else
{
return null;
}
}
}
/// <summary>
/// Сохранение информации по катеру в хранилище в файл
@ -105,7 +106,7 @@ public class StorageCollection<T>
{
if (_storages.Count == 0)
{
throw new Exception("В хранилище отсутствуют коллекции для сохранения");
throw new ArgumentException("В хранилище отсутствуют коллекции для сохранения");
}
if (File.Exists(filename))
@ -113,32 +114,33 @@ public class StorageCollection<T>
File.Delete(filename);
}
StringBuilder sb = new();
using (StreamWriter sw = new StreamWriter(filename))
using (StreamWriter writer = new StreamWriter(filename))
{
sw.WriteLine(_collectionKey.ToString());
foreach (KeyValuePair<string, ICollectionGenericObjects<T>> kvpair in _storages)
writer.Write(_collectionKey);
foreach (KeyValuePair<string, ICollectionGenericObjects<T>> value in _storages)
{
writer.Write(Environment.NewLine);
// не сохраняем пустые коллекции
if (kvpair.Value.Count == 0)
if (value.Value.Count == 0)
{
continue;
sb.Append(kvpair.Key);
sb.Append(_separatorForKeyValue);
sb.Append(kvpair.Value.GetCollectionType);
sb.Append(_separatorForKeyValue);
sb.Append(kvpair.Value.MaxCount);
sb.Append(_separatorForKeyValue);
foreach (T? item in kvpair.Value.GetItems())
}
writer.Write(value.Key);
writer.Write(_separatorForKeyValue);
writer.Write(value.Value.GetCollectionType);
writer.Write(_separatorForKeyValue);
writer.Write(value.Value.MaxCount);
writer.Write(_separatorForKeyValue);
foreach (T? item in value.Value.GetItems())
{
string data = item?.GetDataForSave() ?? string.Empty;
if (string.IsNullOrEmpty(data))
{
continue;
sb.Append(data);
sb.Append(_separatorItems);
}
sw.WriteLine(sb.ToString());
sb.Clear();
writer.Write(data);
writer.Write(_separatorItems);
}
}
}
}
@ -151,30 +153,38 @@ public class StorageCollection<T>
{
if (!File.Exists(filename))
{
throw new Exception("Файл не существует");
throw new FileNotFoundException("Файл не существует");
}
using (StreamReader sr = new StreamReader(filename))
using (StreamReader read = File.OpenText(filename))
{
string? str;
str = sr.ReadLine();
string str = read.ReadLine();
if (str == null || str.Length == 0)
throw new Exception("В файле нет данных");
if (str != _collectionKey.ToString())
throw new Exception("В файле неверные данные");
_storages.Clear();
while ((str = sr.ReadLine()) != null)
{
string[] record = str.Split(_separatorForKeyValue);
throw new FormatException("В файле нет данных");
}
if (!str.StartsWith(_collectionKey))
{
throw new FormatException("В файле неверные данные");
}
_storages.Clear();
string strs = "";
while ((strs = read.ReadLine()) != null)
{
string[] record = strs.Split(_separatorForKeyValue, StringSplitOptions.RemoveEmptyEntries);
if (record.Length != 4)
{
continue;
}
CollectionType collectionType = (CollectionType)Enum.Parse(typeof(CollectionType), record[1]);
ICollectionGenericObjects<T>? collection = StorageCollection<T>.CreateCollection(collectionType);
if (collection == null)
{
throw new Exception("Не удалось создать коллекцию");
throw new InvalidOperationException("Не удалось создать коллекцию");
}
collection.MaxCount = Convert.ToInt32(record[2]);
@ -182,16 +192,18 @@ public class StorageCollection<T>
string[] set = record[3].Split(_separatorItems, StringSplitOptions.RemoveEmptyEntries);
foreach (string elem in set)
{
if (elem?.CreateDrawningB() is T boat)
if (elem?.CreateDrawningB() is T B)
{
try
{
if (collection.Insert(boat) == -1)
throw new Exception("Объект не удалось добавить в коллекцию: " + record[3]);
if (collection.Insert(B) == -1)
{
throw new InvalidOperationException("Объект не удалось добавить в коллекцию: " + record[3]);
}
}
catch (CollectionOverflowException ex)
{
throw new Exception("Коллекция переполнена", ex);
throw new CollectionOverflowException("Коллекция переполнена", ex);
}
}
}

View File

@ -116,7 +116,7 @@
buttonRefresh.TabIndex = 6;
buttonRefresh.Text = "Обновить ";
buttonRefresh.UseVisualStyleBackColor = true;
buttonRefresh.Click += buttonRefresh_Click;
buttonRefresh.Click += ButtonRefresh_Click;
//
// buttonRemoveBoat
//
@ -127,7 +127,7 @@
buttonRemoveBoat.TabIndex = 4;
buttonRemoveBoat.Text = "Удалить катер\r\n ";
buttonRemoveBoat.UseVisualStyleBackColor = true;
buttonRemoveBoat.Click += buttonRemoveBoat_Click;
buttonRemoveBoat.Click += ButtonRemoveBoat_Click;
//
// buttonGoToCheck
//
@ -138,7 +138,7 @@
buttonGoToCheck.TabIndex = 5;
buttonGoToCheck.Text = "Передать на тесты ";
buttonGoToCheck.UseVisualStyleBackColor = true;
buttonGoToCheck.Click += buttonGoToCheck_Click;
buttonGoToCheck.Click += ButtonGoToCheck_Click;
//
// buttonCreateCompany
//
@ -148,7 +148,7 @@
buttonCreateCompany.TabIndex = 8;
buttonCreateCompany.Text = "Создать компанию";
buttonCreateCompany.UseVisualStyleBackColor = true;
buttonCreateCompany.Click += buttonCreateCompany_Click;
buttonCreateCompany.Click += ButtonCreateCompany_Click;
//
// panelStorage
//
@ -173,7 +173,7 @@
buttonCollectionDel.TabIndex = 6;
buttonCollectionDel.Text = "Удалить коллекцию";
buttonCollectionDel.UseVisualStyleBackColor = true;
buttonCollectionDel.Click += buttonCollectionDel_Click;
buttonCollectionDel.Click += ButtonCollectionDel_Click;
//
// listBoxCollection
//
@ -192,7 +192,7 @@
buttonCollectionAdd.TabIndex = 4;
buttonCollectionAdd.Text = "Добавить коллекцию";
buttonCollectionAdd.UseVisualStyleBackColor = true;
buttonCollectionAdd.Click += buttonCollectionAdd_Click;
buttonCollectionAdd.Click += ButtonCollectionAdd_Click;
//
// radioButtonList
//
@ -242,7 +242,7 @@
comboBoxSelectorCompany.Name = "comboBoxSelectorCompany";
comboBoxSelectorCompany.Size = new Size(188, 23);
comboBoxSelectorCompany.TabIndex = 0;
comboBoxSelectorCompany.SelectedIndexChanged += comboBoxSelectorCompany_SelectedIndexChanged;
comboBoxSelectorCompany.SelectedIndexChanged += ComboBoxSelectorCompany_SelectedIndexChanged;
//
// pictureBox
//

View File

@ -33,7 +33,6 @@ public partial class FormBoatCollection : Form
InitializeComponent();
_storageCollection = new();
_logger = logger;
_logger.LogInformation("Форма загрузилась");
}
/// <summary>
@ -41,7 +40,7 @@ public partial class FormBoatCollection : Form
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void comboBoxSelectorCompany_SelectedIndexChanged(object sender, EventArgs e)
private void ComboBoxSelectorCompany_SelectedIndexChanged(object sender, EventArgs e)
{
panelCompanyTools.Enabled = false;
}
@ -54,7 +53,6 @@ public partial class FormBoatCollection : Form
private void buttonAddBoat_Click(object sender, EventArgs e)
{
FormBoatConfig form = new();
// TODO передать метод
form.Show();
form.AddEvent(SetBoat);
}
@ -62,8 +60,8 @@ public partial class FormBoatCollection : Form
/// <summary>
/// Добавление лодки в коллекцию
/// </summary>
/// <param name="boat"></param>
private void SetBoat(DrawningB? b)
/// <param name="b"></param>
private void SetBoat(DrawningB b)
{
try
{
@ -71,7 +69,6 @@ public partial class FormBoatCollection : Form
{
return;
}
if (_company + b != -1)
{
MessageBox.Show("Объект добавлен");
@ -79,10 +76,9 @@ public partial class FormBoatCollection : Form
_logger.LogInformation("Добавлен объект: " + b.GetDataForSave());
}
}
catch (ObjectNotFoundException) { }
catch (CollectionOverflowException ex)
{
MessageBox.Show("В коллекции превышено допустимое количество элементов");
MessageBox.Show(ex.Message, "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error);
_logger.LogError("Ошибка: {Message}", ex.Message);
}
}
@ -93,13 +89,10 @@ public partial class FormBoatCollection : Form
/// <param name="sender"></param>
/// <param name="e"></param>
private void ButtonRemoveBoat_Click(object sender, EventArgs e)
{
int pos = Convert.ToInt32(maskedTextBox.Text);
try
{
if (string.IsNullOrEmpty(maskedTextBox.Text) || _company == null)
{
throw new Exception("Входные данные отсутствуют");
return;
}
if (MessageBox.Show("Удалить объект?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes)
@ -107,17 +100,29 @@ public partial class FormBoatCollection : Form
return;
}
try
{
int pos = Convert.ToInt32(maskedTextBox.Text);
if (_company - pos != null)
{
MessageBox.Show("Объект удален");
pictureBox.Image = _company.Show();
_logger.LogInformation("Объект удален");
_logger.LogInformation("Удаление объекта по индексу " + pos);
}
}
catch (Exception ex)
else
{
MessageBox.Show("Не найден объект по позиции " + pos);
MessageBox.Show("Не удалось удалить объект");
_logger.LogInformation("Не удалось удалить объект из коллекции по индексу " + pos);
}
}
catch (ObjectNotFoundException ex)
{
MessageBox.Show(ex.Message);
_logger.LogError("Ошибка: {Message}", ex.Message);
}
catch (PositionOutOfCollectionException ex)
{
MessageBox.Show(ex.Message);
_logger.LogError("Ошибка: {Message}", ex.Message);
}
}
@ -133,11 +138,8 @@ public partial class FormBoatCollection : Form
{
return;
}
DrawningB? B = null;
int counter = 100;
try
{
while (B == null)
{
B = _company.GetRandomObject();
@ -147,21 +149,15 @@ public partial class FormBoatCollection : Form
break;
}
}
if (B == null)
{
return;
}
FormBoat form = new FormBoat();
form.SetB = B;
form.ShowDialog();
}
catch (Exception ex)
FormBoat form = new()
{
MessageBox.Show(ex.Message, "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
SetB = B
};
form.ShowDialog();
}
/// <summary>
@ -175,7 +171,6 @@ public partial class FormBoatCollection : Form
{
return;
}
pictureBox.Image = _company.Show();
}
@ -184,16 +179,14 @@ public partial class FormBoatCollection : Form
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void buttonCollectionAdd_Click(object sender, EventArgs e)
private void ButtonCollectionAdd_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(textBoxCollectionName.Text) || (!radioButtonList.Checked && !radioButtonMassive.Checked))
{
MessageBox.Show("Не все данный заполнены", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
MessageBox.Show("Не все данные заполнены", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
_logger.LogInformation("Не удалось добавить коллекцию: не все данные заполнены");
return;
}
try
{
CollectionType collectionType = CollectionType.None;
if (radioButtonMassive.Checked)
{
@ -203,16 +196,10 @@ public partial class FormBoatCollection : Form
{
collectionType = CollectionType.List;
}
_storageCollection.AddCollection(textBoxCollectionName.Text, collectionType);
RefreshListBoxItems();
_logger.LogInformation("Добавлена коллекция:", textBoxCollectionName.Text);
}
catch (Exception ex)
{
_logger.LogError("Ошибка: {Message}", ex.Message);
}
_logger.LogInformation("Добавлена коллекция типа " + collectionType + " с названием "
+ textBoxCollectionName.Text);
}
/// <summary>
@ -229,7 +216,6 @@ public partial class FormBoatCollection : Form
listBoxCollection.Items.Add(colName);
}
}
}
/// <summary>
@ -237,28 +223,20 @@ public partial class FormBoatCollection : Form
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void buttonCollectionDel_Click(object sender, EventArgs e)
private void ButtonCollectionDel_Click(object sender, EventArgs e)
{
if (listBoxCollection.SelectedIndex < 0 || listBoxCollection.SelectedItems == null)
if (listBoxCollection.SelectedIndex < 0 || listBoxCollection.SelectedItem == null)
{
MessageBox.Show("Коллекция не выбрана");
return;
}
try
{
if (MessageBox.Show("Удалить коллекцию?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
if (MessageBox.Show("Удалить коллекцию?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes)
{
return;
}
_storageCollection.DelCollection(listBoxCollection.SelectedItem.ToString());
_logger.LogInformation("Удаление коллекции с названием {name}", listBoxCollection.SelectedItem.ToString());
RefreshListBoxItems();
_logger.LogInformation("Удалена коллекция: ", listBoxCollection.SelectedItem.ToString());
}
catch (Exception ex)
{
_logger.LogError("Ошибка: {Message}", ex.Message);
}
}
/// <summary>
@ -266,28 +244,25 @@ public partial class FormBoatCollection : Form
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void buttonCreateCompany_Click(object sender, EventArgs e)
private void ButtonCreateCompany_Click(object sender, EventArgs e)
{
if (listBoxCollection.SelectedIndex < 0 || listBoxCollection.SelectedItem == null)
{
MessageBox.Show("Коллекция не выбрана");
return;
}
ICollectionGenericObjects<DrawningB>? collection = _storageCollection[listBoxCollection.SelectedItem.ToString() ?? string.Empty];
if (collection == null)
{
MessageBox.Show("Коллекция не проинициализирована");
return;
}
switch (comboBoxSelectorCompany.Text)
{
case "Хранилище":
_company = new BoatHarbor(pictureBox.Width, pictureBox.Height, collection);
break;
}
panelCompanyTools.Enabled = true;
RefreshListBoxItems();
}
@ -297,7 +272,7 @@ public partial class FormBoatCollection : Form
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void saveToolStripMenuItem_Click(object sender, EventArgs e)
private void SaveToolStripMenuItem_Click(object sender, EventArgs e)
{
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
@ -306,14 +281,13 @@ public partial class FormBoatCollection : Form
_storageCollection.SaveData(saveFileDialog.FileName);
MessageBox.Show("Сохранение прошло успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information);
_logger.LogInformation("Сохранение в файл: {filename}", saveFileDialog.FileName);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error);
_logger.LogError("Ошибка: {Message}", ex.Message);
}
}
}
@ -322,7 +296,7 @@ public partial class FormBoatCollection : Form
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void loadToolStripMenuItem_Click(object sender, EventArgs e)
private void LoadToolStripMenuItem_Click(object sender, EventArgs e)
{
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
@ -335,7 +309,7 @@ public partial class FormBoatCollection : Form
}
catch (Exception ex)
{
MessageBox.Show("Не загрузилось", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error);
MessageBox.Show(ex.Message, "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error);
_logger.LogError("Ошибка: {Message}", ex.Message);
}
}

View File

@ -10,12 +10,11 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="7.0.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="NLog.Extensions.Logging" Version="5.3.10" />
<PackageReference Include="NLog.Extensions.Logging" Version="5.3.11" />
<PackageReference Include="Serilog.Extensions.Logging" Version="7.0.0" />
<PackageReference Include="Serilog.Settings.Configuration" Version="7.0.1" />
<PackageReference Include="Serilog.Settings.Configuration" Version="7.0.0" />
<PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />
</ItemGroup>

View File

@ -35,13 +35,15 @@ namespace ProjectCatamaran
{
pathNeed += path[i] + "\\";
}
services.AddSingleton<FormBoatCollection>()
.AddLogging(option =>
{
option.SetMinimumLevel(LogLevel.Information);
option.AddSerilog(new LoggerConfiguration().ReadFrom.Configuration(new ConfigurationBuilder().
AddJsonFile($"{pathNeed}serilog.json").Build()).CreateLogger());
option.AddSerilog(new LoggerConfiguration()
.ReadFrom.Configuration(new ConfigurationBuilder()
.AddJsonFile($"{pathNeed}serilog.json")
.Build())
.CreateLogger());
});
}
}

View File

@ -9,7 +9,7 @@
}
],
"Properties": {
"Applicatoin": "Sample"
"Application": "Sample"
}
}
}