This commit is contained in:
GokaPek 2023-12-03 13:27:15 +04:00
parent e6f5b144bd
commit 1ac62c3cc3
11 changed files with 199 additions and 51 deletions

View File

@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
namespace SelfPropelledArtilleryUnit
{
[Serializable]
internal class AddToCollectionException : ApplicationException
{
public AddToCollectionException() : base() { }
public AddToCollectionException(string message) : base(message) { }
public AddToCollectionException(string message, Exception exception) : base(message, exception) { }
protected AddToCollectionException(SerializationInfo info, StreamingContext contex) : base(info, contex) { }
}
}

View File

@ -1,12 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SelfPropelledArtilleryUnit
{
internal class Extention
{
}
}

View File

@ -7,10 +7,13 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.Extensions.Logging;
using SelfPropelledArtilleryUnit.DrawningObjects;
using SelfPropelledArtilleryUnit.MovementStrategy;
using SelfPropelledArtilleryUnit.Generics;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
using NLog;
using System.Xml.Linq;
namespace SelfPropelledArtilleryUnit
{
@ -25,12 +28,17 @@ namespace SelfPropelledArtilleryUnit
/// </summary>
private readonly SPAUGenericStorage _storage;
/// <summary>
/// Логер
/// </summary>
private readonly Microsoft.Extensions.Logging.ILogger _logger;
/// <summary>
/// Конструктор
/// </summary>
public FormSPAUCollection()
public FormSPAUCollection(ILogger<FormSPAUCollection> logger)
{
InitializeComponent();
_storage = new SPAUGenericStorage(pictureBoxCollection.Width, pictureBoxCollection.Height);
_logger = logger;
}
/// <summary>
/// Заполнение listBoxObjects
@ -64,10 +72,12 @@ namespace SelfPropelledArtilleryUnit
if (string.IsNullOrEmpty(textBoxStorageName.Text))
{
MessageBox.Show("Не все данные заполнены", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
_logger.LogWarning("Попытка добавить набор с пустым именем");
return;
}
_storage.AddSet(textBoxStorageName.Text);
ReloadObjects();
_logger.LogInformation($"Добавлен набор: {textBoxStorageName.Text}");
}
/// <summary>
@ -90,12 +100,15 @@ namespace SelfPropelledArtilleryUnit
{
if (listBoxStorages.SelectedIndex == -1)
{
_logger.LogWarning("Коллекция не выбрана");
return;
}
string name = listBoxStorages.SelectedItem.ToString() ?? string.Empty;
if (MessageBox.Show($"Удалить объект {listBoxStorages.SelectedItem}?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
_storage.DelSet(listBoxStorages.SelectedItem.ToString() ?? string.Empty);
_storage.DelSet(name);
ReloadObjects();
_logger.LogInformation($"Удален набор: {name}");
}
}
/// <summary>
@ -108,6 +121,7 @@ namespace SelfPropelledArtilleryUnit
if (listBoxStorages.SelectedIndex == -1)
{
_logger.LogWarning("Коллекция не выбрана");
return;
}
var obj = _storage[listBoxStorages.SelectedItem.ToString() ?? string.Empty];
@ -125,6 +139,7 @@ namespace SelfPropelledArtilleryUnit
{
if (listBoxStorages.SelectedIndex == -1)
{
_logger.LogWarning("Коллекция не выбрана");
return;
}
var obj = _storage[listBoxStorages.SelectedItem.ToString() ?? string.Empty];
@ -133,16 +148,26 @@ namespace SelfPropelledArtilleryUnit
return;
}
int addedIndex = obj + sPAU;
if (addedIndex != -1 && addedIndex <= countPlaces)
try
{
MessageBox.Show("Объект добавлен");
pictureBoxCollection.Image = obj.ShowSPAUs();
int addedIndex = obj + sPAU;
if (addedIndex != -1 && addedIndex <= countPlaces)
{
MessageBox.Show("Объект добавлен");
pictureBoxCollection.Image = obj.ShowSPAUs();
_logger.LogInformation("Объект добавлен");
}
else
{
MessageBox.Show("Не удалось добавить объект");
_logger.LogWarning("Неудачная попытка добавления");
}
}
else
catch (Exception ex)
{
MessageBox.Show("Не удалось добавить объект");
_logger.LogWarning($"Неудачная попытка добавления: {ex}");
}
}
@ -173,19 +198,31 @@ namespace SelfPropelledArtilleryUnit
pos = Convert.ToInt32(maskedTextBoxNumber.Text);
}
catch
catch(Exception ex)
{
MessageBox.Show("Не удалось удалить объект");
_logger.LogWarning($"Неудачная попытка удаления: {ex}");
return;
}
if (obj - pos)
try
{
MessageBox.Show("Объект удален");
pictureBoxCollection.Image = obj.ShowSPAUs();
if (obj - pos)
{
MessageBox.Show("Объект удален");
pictureBoxCollection.Image = obj.ShowSPAUs();
_logger.LogInformation("Объект удален");
}
else
{
MessageBox.Show("Не удалось удалить объект");
_logger.LogWarning("Неудачная попытка удаления");
}
}
else
catch(SPAUNotFoundException ex)
{
MessageBox.Show("Не удалось удалить объект");
MessageBox.Show(ex.Message);
_logger.LogWarning($"Неудачная попытка удаления: {ex}");
}
}
/// <summary>
@ -216,15 +253,17 @@ namespace SelfPropelledArtilleryUnit
{
if (saveFileDialog_.ShowDialog() == DialogResult.OK)
{
if (_storage.SaveData(saveFileDialog_.FileName))
try
{
MessageBox.Show("Сохранение прошло успешно",
"Результат", MessageBoxButtons.OK, MessageBoxIcon.Information);
_storage.SaveData(saveFileDialog_.FileName);
MessageBox.Show("Сохранение прошло успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information);
_logger.LogInformation("Успешное сохранение");
}
else
catch(Exception ex)
{
MessageBox.Show("Не сохранилось", "Результат",
MessageBoxButtons.OK, MessageBoxIcon.Error);
MessageBox.Show($"Не сохранилось: {ex.Message}", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error);
_logger.LogWarning($"Не сохранилось: {ex.Message}");
}
}
}
@ -240,12 +279,13 @@ namespace SelfPropelledArtilleryUnit
if (_storage.LoadData(openFileDialog_.FileName))
{
MessageBox.Show("Загрузка прошлa успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information);
_logger.LogInformation("Успешная загрузка");
ReloadObjects();
}
else
{
MessageBox.Show("Не загрузилось", "Результат",
MessageBoxButtons.OK, MessageBoxIcon.Error);
MessageBox.Show("Не загрузилось", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error);
_logger.LogWarning("Неудачная попытка загрузки");
}
}
}

View File

@ -1,3 +1,6 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using NLog.Extensions.Logging;
namespace SelfPropelledArtilleryUnit
{
internal static class Program
@ -9,8 +12,24 @@ namespace SelfPropelledArtilleryUnit
static void Main()
{
ApplicationConfiguration.Initialize();
Application.Run(new FormSPAUCollection());
//Application.Run(new FormSPAU());
var services = new ServiceCollection();
ConfigureServices(services);
using (ServiceProvider serviceProvider =
services.BuildServiceProvider())
{
Application.Run(serviceProvider.GetRequiredService<FormSPAUCollection>());
}
}
private static void ConfigureServices(ServiceCollection services)
{
services.AddSingleton<FormSPAUCollection>()
.AddLogging(option =>
{
option.SetMinimumLevel(LogLevel.Information);
option.AddNLog("nlog.config");
});
}
}
}

View File

@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
namespace SelfPropelledArtilleryUnit
{
[Serializable]
internal class ReadFileExeption : ApplicationException
{
public ReadFileExeption() : base() { }
public ReadFileExeption(string message) : base(message) { }
public ReadFileExeption(string message, Exception exception) : base(message, exception) { }
protected ReadFileExeption(SerializationInfo info, StreamingContext contex) : base(info, contex) { }
}
}

View File

@ -116,7 +116,7 @@ namespace SelfPropelledArtilleryUnit.Generics
}
if (data.Length == 0)
{
return false;
throw new Exception("Невалиданя операция, нет данных для сохранения");
}
using (StreamWriter writer = new StreamWriter(filename))
{
@ -142,11 +142,12 @@ namespace SelfPropelledArtilleryUnit.Generics
string str = fs.ReadLine();
if (str == null || str.Length == 0)
{
return false;
throw new ReadFileExeption("Нет данных для загрузки");
}
if (!str.StartsWith("SPAUStorage"))
{
return false;
//если нет такой записи, то это не те данные
throw new ReadFileExeption("Неверный формат данных");
}
_SPAUStorages.Clear();
@ -156,7 +157,7 @@ namespace SelfPropelledArtilleryUnit.Generics
{
if (strs == null)
{
return false;
throw new AddToCollectionException("Ошибка добавления в коллекцию");
}
string[] record = strs.Split(_separatorForKeyValue, StringSplitOptions.RemoveEmptyEntries);
@ -173,7 +174,7 @@ namespace SelfPropelledArtilleryUnit.Generics
{
if ((collection + sPAU) == -1)
{
return false;
throw new AddToCollectionException("Ошибка добавления в коллекцию");
}
}
}

View File

@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
namespace SelfPropelledArtilleryUnit
{
[Serializable]
internal class SPAUNotFoundException : ApplicationException
{
public SPAUNotFoundException(int i) : base($"Не найден объект попозиции { i}") { }
public SPAUNotFoundException() : base() { }
public SPAUNotFoundException(string message) : base(message) { }
public SPAUNotFoundException(string message, Exception exception) : base(message, exception) { }
protected SPAUNotFoundException(SerializationInfo info, StreamingContext contex) : base(info, contex) { }
}
}

View File

@ -8,6 +8,11 @@
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.0" />
<PackageReference Include="NLog.Extensions.Logging" Version="5.3.5" />
</ItemGroup>
<ItemGroup>
<Compile Update="Properties\Resources.Designer.cs">
<DesignTime>True</DesignTime>
@ -23,4 +28,10 @@
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<None Update="nlog.config">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>

View File

@ -55,13 +55,14 @@ namespace SelfPropelledArtilleryUnit.Generics
public int Insert(T spau, int position)
{
if (Count == _maxCount)
return -1;
throw new StorageOverflowException(Count);
if (position < 0 || spau == null)
return -1;
if (position >= _maxCount)
return -1;
if (spau == null)
throw new SPAUNotFoundException("Вставка невоможна, объект не найден");
if (position < 0 || position > _maxCount)
throw new SPAUNotFoundException("Недоступная позиция");
if (Count == 0)
@ -81,9 +82,8 @@ namespace SelfPropelledArtilleryUnit.Generics
/// <returns></returns>
public bool Remove(int position)
{
if (position < 0 || position >= Count)
return false;
if (_places[position] == null)
throw new SPAUNotFoundException("Невалиданя операция, нет данных для сохранения");
_places.RemoveAt(position);
return true;
@ -97,13 +97,13 @@ namespace SelfPropelledArtilleryUnit.Generics
{
get
{
if (position < 0 || position >= _maxCount)
if (position < 0 || position >= Count)
return null;
return _places[position];
}
set
{
if (position < 0 || position >= _maxCount)
if (position < 0 || position > _maxCount)
return;
_places[position] = value;
}

View File

@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
namespace SelfPropelledArtilleryUnit
{
[Serializable]
internal class StorageOverflowException : ApplicationException
{
public StorageOverflowException(int count) : base($"В наборе превышено допустимое количество: {count}") { }
public StorageOverflowException() : base() { }
public StorageOverflowException(string message) : base(message) { }
public StorageOverflowException(string message, Exception exception) : base(message, exception) { }
protected StorageOverflowException(SerializationInfo info, StreamingContext contex) : base(info, contex) { }
}
}

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
autoReload="true" internalLogLevel="Info">
<targets>
<target xsi:type="File" name="tofile" fileName="logs/spaulog-${shortdate}.log" />
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="tofile" />
</rules>
</nlog>
</configuration>