diff --git a/AirBomber/AirBomber/AirplaneNotFoundException.cs b/AirBomber/AirBomber/AirplaneNotFoundException.cs index 7d52782..727b520 100644 --- a/AirBomber/AirBomber/AirplaneNotFoundException.cs +++ b/AirBomber/AirBomber/AirplaneNotFoundException.cs @@ -1,6 +1,6 @@ using System.Runtime.Serialization; -namespace Cars +namespace AirBomber { [Serializable] internal class AirplaneNotFoundException : ApplicationException diff --git a/AirBomber/AirBomber/FormMapWithSetAirplanes.cs b/AirBomber/AirBomber/FormMapWithSetAirplanes.cs index 536dc8a..a513942 100644 --- a/AirBomber/AirBomber/FormMapWithSetAirplanes.cs +++ b/AirBomber/AirBomber/FormMapWithSetAirplanes.cs @@ -115,19 +115,27 @@ namespace AirBomber /// private void AddAirplane(DrawningAirplane airplane) { - if (listBoxMaps.SelectedIndex == -1) + try { - MessageBox.Show("Перед добавлением объекта необходимо создать карту"); + if (listBoxMaps.SelectedIndex == -1) + { + MessageBox.Show("Перед добавлением объекта необходимо создать карту"); + } + else if (_mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty] + new DrawningObject(airplane) != -1) + { + MessageBox.Show("Объект добавлен"); + pictureBox.Image = _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].ShowSet(); + } + else + { + MessageBox.Show("Не удалось добавить объект"); + } } - else if (_mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty] + new DrawningObject(airplane) != -1) + catch (StorageOverflowException ex) { - MessageBox.Show("Объект добавлен"); - pictureBox.Image = _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].ShowSet(); - } - else - { - MessageBox.Show("Не удалось добавить объект"); + MessageBox.Show($"Ошибка переполнения хранилища: {ex.Message}", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error); } + } /// /// Удаление объекта @@ -142,15 +150,23 @@ namespace AirBomber return; } int pos = Convert.ToInt32(maskedTextBoxPosition.Text); - if (_mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty] - pos != null) + try { - MessageBox.Show("Объект удален"); - pictureBox.Image = _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].ShowSet(); + if (_mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty] - pos != null) + { + MessageBox.Show("Объект удален"); + pictureBox.Image = _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].ShowSet(); + } + else + { + MessageBox.Show("Не удалось удалить объект"); + } } - else + catch (AirplaneNotFoundException ex) { - MessageBox.Show("Не удалось удалить объект"); + MessageBox.Show($"Ошибка удаления: {ex.Message}"); } + } /// /// Вывод набора @@ -219,13 +235,14 @@ namespace AirBomber { if (saveFileDialog.ShowDialog() == DialogResult.OK) { - if(_mapsCollection.SaveData(saveFileDialog.FileName)) + try { + _mapsCollection.SaveData(saveFileDialog.FileName); 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 (_mapsCollection.LoadData(openFileDialog.FileName)) + try { + _mapsCollection.LoadData(openFileDialog.FileName); MessageBox.Show("Открытие прошло успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information); ReloadMaps(); } - else + catch (Exception ex) { - MessageBox.Show("Не удалось открыть", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error); + MessageBox.Show($"Не удалось открыть: {ex.Message}", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } diff --git a/AirBomber/AirBomber/MapsCollection.cs b/AirBomber/AirBomber/MapsCollection.cs index 633c36d..e6e448f 100644 --- a/AirBomber/AirBomber/MapsCollection.cs +++ b/AirBomber/AirBomber/MapsCollection.cs @@ -84,8 +84,7 @@ namespace AirBomber /// Сохранение информации по самолетам в хранилище в файл /// /// Путь и имя файла - /// - public bool SaveData(string filename) + public void SaveData(string filename) { if (File.Exists(filename)) { @@ -99,18 +98,17 @@ namespace AirBomber fs.Write($"{storage.Key}{separatorDict}{storage.Value.GetData(separatorDict, separatorData)}{Environment.NewLine}"); } } - return true; } /// /// Загрузка информации по самолетам в ангарах из файла /// /// /// - public bool LoadData(string filename) + public void LoadData(string filename) { if (!File.Exists(filename)) { - return false; + throw new Exception("Файл не найден"); } List strs = new List(); using (StreamReader fs = new(filename)) @@ -123,7 +121,7 @@ namespace AirBomber if (!strs[0].Contains("MapsCollection")) { //если нет такой записи, то это не те данные - return false; + throw new Exception("Формат данных в файле не правильный"); } //очищаем записи _mapStorages.Clear(); @@ -145,7 +143,6 @@ namespace AirBomber _mapStorages[elem[0]].LoadData(elem[2].Split(separatorData, StringSplitOptions.RemoveEmptyEntries)); } - return true; } } } diff --git a/AirBomber/AirBomber/SetAirplanesGeneric.cs b/AirBomber/AirBomber/SetAirplanesGeneric.cs index c3a054a..6dfc51e 100644 --- a/AirBomber/AirBomber/SetAirplanesGeneric.cs +++ b/AirBomber/AirBomber/SetAirplanesGeneric.cs @@ -54,6 +54,8 @@ namespace AirBomber /// Возвращает позицию вставленного объекта, либо -1 если его не удалось вставить public int Insert(T airplane, int position) { + if (position == _maxcount) + throw new StorageOverflowException(); if (!isCorrectPosition(position)) { return -1; @@ -70,7 +72,9 @@ namespace AirBomber { if (!isCorrectPosition(position)) return null; - var result = _places[position]; + var result = this[position]; + if (result == null) + throw new AirplaneNotFoundException(); _places.RemoveAt(position); return result; } diff --git a/AirBomber/AirBomber/StorageOverflowException.cs b/AirBomber/AirBomber/StorageOverflowException.cs index 4cf74a6..1701690 100644 --- a/AirBomber/AirBomber/StorageOverflowException.cs +++ b/AirBomber/AirBomber/StorageOverflowException.cs @@ -1,6 +1,6 @@ using System.Runtime.Serialization; -namespace Cars +namespace AirBomber { [Serializable] internal class StorageOverflowException : ApplicationException