Добавлены исключения и их обработка

This commit is contained in:
Данияр Аглиуллов 2022-10-29 00:04:13 +04:00
parent 1051ef5845
commit 191a66c189
5 changed files with 49 additions and 30 deletions

View File

@ -1,6 +1,6 @@
using System.Runtime.Serialization; using System.Runtime.Serialization;
namespace Cars namespace AirBomber
{ {
[Serializable] [Serializable]
internal class AirplaneNotFoundException : ApplicationException internal class AirplaneNotFoundException : ApplicationException

View File

@ -114,6 +114,8 @@ namespace AirBomber
/// </summary> /// </summary>
/// <param name="airplane"></param> /// <param name="airplane"></param>
private void AddAirplane(DrawningAirplane airplane) private void AddAirplane(DrawningAirplane airplane)
{
try
{ {
if (listBoxMaps.SelectedIndex == -1) if (listBoxMaps.SelectedIndex == -1)
{ {
@ -129,6 +131,12 @@ namespace AirBomber
MessageBox.Show("Не удалось добавить объект"); MessageBox.Show("Не удалось добавить объект");
} }
} }
catch (StorageOverflowException ex)
{
MessageBox.Show($"Ошибка переполнения хранилища: {ex.Message}", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
/// <summary> /// <summary>
/// Удаление объекта /// Удаление объекта
/// </summary> /// </summary>
@ -142,6 +150,8 @@ namespace AirBomber
return; return;
} }
int pos = Convert.ToInt32(maskedTextBoxPosition.Text); int pos = Convert.ToInt32(maskedTextBoxPosition.Text);
try
{
if (_mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty] - pos != null) if (_mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty] - pos != null)
{ {
MessageBox.Show("Объект удален"); MessageBox.Show("Объект удален");
@ -152,6 +162,12 @@ namespace AirBomber
MessageBox.Show("Не удалось удалить объект"); MessageBox.Show("Не удалось удалить объект");
} }
} }
catch (AirplaneNotFoundException ex)
{
MessageBox.Show($"Ошибка удаления: {ex.Message}");
}
}
/// <summary> /// <summary>
/// Вывод набора /// Вывод набора
/// </summary> /// </summary>
@ -219,13 +235,14 @@ namespace AirBomber
{ {
if (saveFileDialog.ShowDialog() == DialogResult.OK) if (saveFileDialog.ShowDialog() == DialogResult.OK)
{ {
if(_mapsCollection.SaveData(saveFileDialog.FileName)) try
{ {
_mapsCollection.SaveData(saveFileDialog.FileName);
MessageBox.Show("Сохранение прошло успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information); MessageBox.Show("Сохранение прошло успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information);
} }
else catch (Exception ex)
{ {
MessageBox.Show("Не сохранилось", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBox.Show($"Не сохранилось: {ex.Message}", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error);
} }
} }
} }
@ -238,14 +255,15 @@ namespace AirBomber
{ {
if (openFileDialog.ShowDialog() == DialogResult.OK) if (openFileDialog.ShowDialog() == DialogResult.OK)
{ {
if (_mapsCollection.LoadData(openFileDialog.FileName)) try
{ {
_mapsCollection.LoadData(openFileDialog.FileName);
MessageBox.Show("Открытие прошло успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information); MessageBox.Show("Открытие прошло успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information);
ReloadMaps(); ReloadMaps();
} }
else catch (Exception ex)
{ {
MessageBox.Show("Не удалось открыть", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBox.Show($"Не удалось открыть: {ex.Message}", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error);
} }
} }
} }

View File

@ -84,8 +84,7 @@ namespace AirBomber
/// Сохранение информации по самолетам в хранилище в файл /// Сохранение информации по самолетам в хранилище в файл
/// </summary> /// </summary>
/// <param name="filename">Путь и имя файла</param> /// <param name="filename">Путь и имя файла</param>
/// <returns></returns> public void SaveData(string filename)
public bool SaveData(string filename)
{ {
if (File.Exists(filename)) if (File.Exists(filename))
{ {
@ -99,18 +98,17 @@ namespace AirBomber
fs.Write($"{storage.Key}{separatorDict}{storage.Value.GetData(separatorDict, separatorData)}{Environment.NewLine}"); fs.Write($"{storage.Key}{separatorDict}{storage.Value.GetData(separatorDict, separatorData)}{Environment.NewLine}");
} }
} }
return true;
} }
/// <summary> /// <summary>
/// Загрузка информации по самолетам в ангарах из файла /// Загрузка информации по самолетам в ангарах из файла
/// </summary> /// </summary>
/// <param name="filename"></param> /// <param name="filename"></param>
/// <returns></returns> /// <returns></returns>
public bool LoadData(string filename) public void LoadData(string filename)
{ {
if (!File.Exists(filename)) if (!File.Exists(filename))
{ {
return false; throw new Exception("Файл не найден");
} }
List<string> strs = new List<string>(); List<string> strs = new List<string>();
using (StreamReader fs = new(filename)) using (StreamReader fs = new(filename))
@ -123,7 +121,7 @@ namespace AirBomber
if (!strs[0].Contains("MapsCollection")) if (!strs[0].Contains("MapsCollection"))
{ {
//если нет такой записи, то это не те данные //если нет такой записи, то это не те данные
return false; throw new Exception("Формат данных в файле не правильный");
} }
//очищаем записи //очищаем записи
_mapStorages.Clear(); _mapStorages.Clear();
@ -145,7 +143,6 @@ namespace AirBomber
_mapStorages[elem[0]].LoadData(elem[2].Split(separatorData, _mapStorages[elem[0]].LoadData(elem[2].Split(separatorData,
StringSplitOptions.RemoveEmptyEntries)); StringSplitOptions.RemoveEmptyEntries));
} }
return true;
} }
} }
} }

View File

@ -54,6 +54,8 @@ namespace AirBomber
/// <returns>Возвращает позицию вставленного объекта, либо -1 если его не удалось вставить</returns> /// <returns>Возвращает позицию вставленного объекта, либо -1 если его не удалось вставить</returns>
public int Insert(T airplane, int position) public int Insert(T airplane, int position)
{ {
if (position == _maxcount)
throw new StorageOverflowException();
if (!isCorrectPosition(position)) if (!isCorrectPosition(position))
{ {
return -1; return -1;
@ -70,7 +72,9 @@ namespace AirBomber
{ {
if (!isCorrectPosition(position)) if (!isCorrectPosition(position))
return null; return null;
var result = _places[position]; var result = this[position];
if (result == null)
throw new AirplaneNotFoundException();
_places.RemoveAt(position); _places.RemoveAt(position);
return result; return result;
} }

View File

@ -1,6 +1,6 @@
using System.Runtime.Serialization; using System.Runtime.Serialization;
namespace Cars namespace AirBomber
{ {
[Serializable] [Serializable]
internal class StorageOverflowException : ApplicationException internal class StorageOverflowException : ApplicationException