Лабораторная работа №7 (вроде готово)

This commit is contained in:
DjonniStorm 2024-05-09 02:30:43 +04:00
parent 018e2c48ec
commit a34dddad16
7 changed files with 99 additions and 71 deletions

View File

@ -85,8 +85,14 @@ public abstract class AbstractCompany
SetObjectsPosition();
for (int i = 0; i < (_collection?.Count ?? 0); ++i)
{
DrawningTruck? obj = _collection?.Get(i);
obj?.DrawTransport(graphics);
try
{
DrawningTruck? obj = _collection?.Get(i);
obj?.DrawTransport(graphics);
} catch (ObjectNotFoundException)
{
}
}
return bitmap;
}

View File

@ -1,4 +1,5 @@
using ProjectCleaningCar.Drawning;
using ProjectCleaningCar.Exceptions;
namespace ProjectCleaningCar.CollectionGenericObjects;
/// <summary>
@ -39,10 +40,16 @@ public class AutoParkService : AbstractCompany
{
return;
}
if (_collection?.Get(i) != null)
try
{
_collection?.Get(i)?.SetPictureSize(_pictureWidth, _pictureHeight);
_collection?.Get(i)?.SetPosition(_placeSizeWidth * nowWidth + 30, nowHeight * _placeSizeHeight * 2 + 20);
if (_collection?.Get(i) != null)
{
_collection?.Get(i)?.SetPictureSize(_pictureWidth, _pictureHeight);
_collection?.Get(i)?.SetPosition(_placeSizeWidth * nowWidth + 30, nowHeight * _placeSizeHeight * 2 + 20);
}
} catch(ObjectNotFoundException)
{
}
if (nowWidth < _pictureWidth / _placeSizeWidth - 1) nowWidth++;

View File

@ -1,7 +1,7 @@
using NLog.LayoutRenderers.Wrappers;
using ProjectCleaningCar.Drawning;
using ProjectCleaningCar.Drawning;
using ProjectCleaningCar.Entities;
using ProjectCleaningCar.Exceptions;
using System.Data;
using System.Text;
namespace ProjectCleaningCar.CollectionGenericObjects;
@ -102,7 +102,7 @@ public class StorageCollection<T>
{
if (_storages.Count == 0)
{
throw new Exception("В хранилище отсутствуют коллекции для сохранения");
throw new InvalidDataException("В хранилище отсутствуют коллекции для сохранения");
}
if (File.Exists(filename))
@ -157,7 +157,7 @@ public class StorageCollection<T>
string line = reader.ReadLine();
if (line == null || line.Length == 0)
{
throw new IOException("Файл не подходит");
throw new FileFormatException("Файл не подходит");
}
if (!line.Equals(_collectionKey))
{
@ -177,7 +177,7 @@ public class StorageCollection<T>
ICollectionGenericObjects<T>? collection = StorageCollection<T>.CreateCollection(collectionType);
if (collection == null)
{
throw new Exception("Не удалось создать коллекцию");
throw new InvalidOperationException("Не удалось создать коллекцию");
}
collection.MaxCount = Convert.ToInt32(record[2]);
string[] set = record[3].Split(_separatorItems,
@ -190,12 +190,12 @@ public class StorageCollection<T>
{
if (collection.Insert(truck) == -1)
{
throw new Exception("Объект не удалось добавить в коллекцию: " + record[3]);
throw new ConstraintException("Объект не удалось добавить в коллекцию: " + record[3]);
}
}
catch (CollectionOverflowException ex)
{
throw new Exception("Коллекция переполнена", ex);
throw new DataException("Коллекция переполнена", ex);
}
}
}

View File

@ -71,11 +71,14 @@ public partial class FormCleaningCarCollection : Form
{
MessageBox.Show("Объект добавлен");
pictureBox.Image = _company.Show();
_logger.LogInformation("Добавлен объект: {0}", truck.GetDataForSave());
}
} catch (CollectionOverflowException)
}
catch (CollectionOverflowException)
{
MessageBox.Show("Не удалось добавить объект");
_logger.LogError("Ошибка: В коллекции превышено допустимое количество");
}
}
@ -101,6 +104,7 @@ public partial class FormCleaningCarCollection : Form
{
MessageBox.Show("Объект удален");
pictureBox.Image = _company.Show();
_logger.LogInformation("Удалён объект по позиции {0}", pos);
} else
{
MessageBox.Show("Не удалось удалить объект");
@ -108,11 +112,18 @@ public partial class FormCleaningCarCollection : Form
}
catch (PositionOutOfCollectionException)
{
MessageBox.Show("Ошибка при удалении объекта");
MessageBox.Show($"Ошибка при удалении по позиции {pos}");
_logger.LogError("Ошибка при удалении по позиции {0}", pos);
}
catch (Exception)
catch (ObjectNotFoundException)
{
MessageBox.Show($"Ошибка: Не найден объект по позиции {pos}");
_logger.LogError("Ошибка: Не найден объект по позиции {0}", pos);
}
catch (Exception ex)
{
MessageBox.Show("Неизвестная ошибка при удалении объекта");
_logger.LogError("Ошибка: {0}", ex);
}
}
@ -127,21 +138,30 @@ public partial class FormCleaningCarCollection : Form
{
return;
}
DrawningTruck? truck = null;
int counter = 100;
while (truck == null)
try
{
truck = _company.GetRandomObject();
counter--;
if (counter <= 0) break;
}
if (truck == null)
DrawningTruck? truck = null;
int counter = 100;
while (truck == null)
{
truck = _company.GetRandomObject();
counter--;
if (counter <= 0) break;
}
if (truck == null)
{
return;
}
FormCleaningCar form = new FormCleaningCar();
form.SetCar = truck;
form.ShowDialog();
} catch(ObjectNotFoundException)
{
return;
_logger.LogError("Ошибка при передаче объекта на FormCleaningCar");
} catch(Exception)
{
_logger.LogError("фатальная Ошибка при передаче объекта на FormCleaningCar");
}
FormCleaningCar form = new FormCleaningCar();
form.SetCar = truck;
form.ShowDialog();
}
/// <summary>
/// Перерисовка коллекции
@ -154,12 +174,7 @@ public partial class FormCleaningCarCollection : Form
{
return;
}
try
{
pictureBox.Image = _company.Show();
} catch (PositionOutOfCollectionException) { }
catch (Exception) { }
pictureBox.Image = _company.Show();
}
/// <summary>
@ -174,19 +189,26 @@ public partial class FormCleaningCarCollection : Form
MessageBox.Show("Не все данные заполнены", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
CollectionType collectionType = CollectionType.None;
if (radioButtonMassive.Checked)
try
{
collectionType = CollectionType.Massive;
CollectionType collectionType = CollectionType.None;
if (radioButtonMassive.Checked)
{
collectionType = CollectionType.Massive;
}
else if (radioButtonList.Checked)
{
collectionType = CollectionType.List;
}
_storageCollection.AddCollection(textBoxCollectionName.Text, collectionType);
RerfreshListBoxItems();
_logger.LogInformation("Добавлена коллекция: {Collection} типа: {Type}", textBoxCollectionName.Text, collectionType);
}
else if (radioButtonList.Checked)
catch(Exception)
{
collectionType = CollectionType.List;
_logger.LogError("Ошибка при добавлении коллекции");
}
_storageCollection.AddCollection(textBoxCollectionName.Text, collectionType);
RerfreshListBoxItems();
}
/// <summary>
@ -217,13 +239,22 @@ public partial class FormCleaningCarCollection : Form
MessageBox.Show("Коллекция не выбрана");
return;
}
if (MessageBox.Show("Удалить коллекцию?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
try
{
return;
if (MessageBox.Show("Удалить коллекцию?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
{
return;
}
_storageCollection.DelCollection(listBoxCollection.SelectedItem.ToString());
RerfreshListBoxItems();
MessageBox.Show($"Коллекция {textBoxCollectionName.Text} удалена");
_logger.LogInformation("Коллекция удалена: {0}", textBoxCollectionName.Text);
}
catch(Exception)
{
MessageBox.Show("Ошибка при удалении коллекции");
_logger.LogError("Ошибка при удалении коллекции");
}
_storageCollection.DelCollection(listBoxCollection.SelectedItem.ToString());
RerfreshListBoxItems();
}
/// <summary>
@ -245,20 +276,14 @@ public partial class FormCleaningCarCollection : Form
MessageBox.Show("Коллекция не проинициализирована");
return;
}
try
switch (comboBoxSelectorCompany.Text)
{
switch (comboBoxSelectorCompany.Text)
{
case "Автопарк":
_company = new AutoParkService(pictureBox.Width, pictureBox.Height, collection);
break;
}
} catch (ObjectNotFoundException)
{
case "Автопарк":
_company = new AutoParkService(pictureBox.Width, pictureBox.Height, collection);
_logger.LogInformation("Создна компания типа {Company}, коллекция: {Collection}", comboBoxSelectorCompany.Text, textBoxCollectionName.Text);
_logger.LogInformation("Создана компания на коллекции: {Collection}", textBoxCollectionName.Text);
break;
}
panelCompanyTools.Enabled = true;
RerfreshListBoxItems();
}

View File

@ -12,12 +12,10 @@
<PackageReference Include="Microsoft.Extensions.Configuration" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="7.0.0" />
<PackageReference Include="NLog.Extensions.Logging" Version="5.3.8" />
<PackageReference Include="Serilog" Version="3.1.1" />
<PackageReference Include="Serilog.Enrichers.Thread" Version="3.1.0" />
<PackageReference Include="Serilog.Extensions.Logging" Version="7.0.0" />
<PackageReference Include="Serilog.Settings.Configuration" Version="8.0.0" />
<PackageReference Include="Serilog.Sinks.Console" Version="5.0.1" />
<PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />
</ItemGroup>

View File

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="serilog:minimum-level" value="Verbose"/>
<add key="serilog:write-to:LiterateConsole"/>
</appSettings>
</configuration>

View File

@ -1,7 +1,7 @@
{
"AllowedHosts": "*",
"Serilog": {
"Using": [ "Serilog.Sinks.File", "Serilog.Sinks.Console" ],
"Using": [ "Serilog.Sinks.File" ],
"MinimumLevel": {
"Default": "Information",
"Override": {
@ -11,13 +11,12 @@
},
"Enrich": [ "FromLogContext", "WithMachineName", "WithProcessId", "WithThreadId" ],
"WriteTo": [
{ "Name": "Console" },
{
"Name": "File",
"Args": {
"path": "C:\\Users\\ipazu\\Desktop\\log.txt",
"path": "Logs\\log.txt",
"rollingInterval": "Day",
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.ffff} | {Level:u} | {SourceContext} | {Message:1j}{NewLine}{Exception}"
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.ffff}|{Level:u}|{SourceContext}|{Message:lj}{NewLine}{Exception}"
}
}
]