diff --git a/AirFighter/AirFighter/AircraftNotFoundException.cs b/AirFighter/AirFighter/AircraftNotFoundException.cs new file mode 100644 index 0000000..a03a2a5 --- /dev/null +++ b/AirFighter/AirFighter/AircraftNotFoundException.cs @@ -0,0 +1,14 @@ +using System.Runtime.Serialization; + +namespace AirFighter +{ + [Serializable] + internal class AircraftNotFoundException : ApplicationException + { + public AircraftNotFoundException(int i) : base($"Не найден объект по позиции {i}") { } + public AircraftNotFoundException() : base() { } + public AircraftNotFoundException(string message) : base(message) { } + public AircraftNotFoundException(string message, Exception exception) : base(message, exception) { } + protected AircraftNotFoundException(SerializationInfo info, StreamingContext contex) : base(info, contex) { } + } +} diff --git a/AirFighter/AirFighter/FormMapWithSetCars.cs b/AirFighter/AirFighter/FormMapWithSetCars.cs index 75e2d5b..19beaf0 100644 --- a/AirFighter/AirFighter/FormMapWithSetCars.cs +++ b/AirFighter/AirFighter/FormMapWithSetCars.cs @@ -112,15 +112,20 @@ namespace AirFighter return; } - if (_mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty] + new DrawingObjectAirFighter(aircraft) != -1) + try { - MessageBox.Show("Объект добавлен"); - pictureBox.Image = - _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].ShowSet(); - } - else + if (_mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty] + new DrawingObjectAirFighter(aircraft) != -1) + { + MessageBox.Show("Объект добавлен"); + pictureBox.Image = + _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].ShowSet(); + } + } catch (StorageOverflowException ex) { - MessageBox.Show("Не удалось добавить объект"); + MessageBox.Show($"Ошибка переполнения: {ex.Message}"); + } catch (Exception ex) + { + MessageBox.Show($"Неизвестная ошибка: {ex.Message}"); } } @@ -151,16 +156,23 @@ namespace AirFighter { 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(); - } - else + if (_mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty] - pos != null) + { + MessageBox.Show("Объект удален"); + pictureBox.Image = + _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].ShowSet(); + } + } catch (AircraftNotFoundException ex) { - MessageBox.Show("Не удалось удалить объект"); + MessageBox.Show($"Ошибка удаления: {ex.Message}"); + } catch (Exception ex) + { + MessageBox.Show($"Неизвестная ошибка: {ex.Message}"); } } @@ -226,38 +238,31 @@ namespace AirFighter private void SaveToolStripMenuItem_Click(object sender, EventArgs e) { - if (saveFileDialog.ShowDialog() == DialogResult.OK) + if (saveFileDialog.ShowDialog() != DialogResult.OK) return; + + try { - if (_mapsCollection.SaveData(saveFileDialog.FileName)) - { - MessageBox.Show("Сохранение прошло успешно", "Результат", - MessageBoxButtons.OK, MessageBoxIcon.Information); - } - else - { - MessageBox.Show("Не сохранилось", "Результат", - MessageBoxButtons.OK, MessageBoxIcon.Error); - } + _mapsCollection.SaveData(saveFileDialog.FileName); + MessageBox.Show("Сохранение прошло успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information); + } catch(Exception ex) + { + MessageBox.Show($"Не сохранилось: {ex.Message}", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error); } + } private void LoadToolStripMenuItem_Click(object sender, EventArgs e) { - // TODO продумать логику + if (openFileDialog.ShowDialog() != DialogResult.OK) return; - if (openFileDialog.ShowDialog() == DialogResult.OK) + try { - if (_mapsCollection.LoadData(openFileDialog.FileName)) - { - MessageBox.Show("Загрузка прошла успешно", "Результат", - MessageBoxButtons.OK, MessageBoxIcon.Information); - ReloadMaps(); - } - else - { - MessageBox.Show("Не загрузилось", "Результат", - MessageBoxButtons.OK, MessageBoxIcon.Error); - } + _mapsCollection.LoadData(openFileDialog.FileName); + MessageBox.Show("Загрузка прошла успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information); + ReloadMaps(); + } catch(Exception ex) + { + MessageBox.Show($"Не загрузилось: {ex.Message}", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error); } } diff --git a/AirFighter/AirFighter/MapsCollection.cs b/AirFighter/AirFighter/MapsCollection.cs index 2335690..d8d7cca 100644 --- a/AirFighter/AirFighter/MapsCollection.cs +++ b/AirFighter/AirFighter/MapsCollection.cs @@ -44,7 +44,7 @@ namespace AirFighter _mapStorages.Remove(name); } - public bool SaveData(string filename) + public void SaveData(string filename) { if (File.Exists(filename)) { @@ -59,14 +59,13 @@ namespace AirFighter 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 FileNotFoundException("Файл не найден"); } using (StreamReader fs = new(filename)) { @@ -74,7 +73,7 @@ namespace AirFighter if (!current.Contains("MapsCollection")) { //если нет такой записи, то это не те данные - return false; + throw new FileFormatException("Не правильный формат данных"); } _mapStorages.Clear(); @@ -96,8 +95,6 @@ namespace AirFighter _mapStorages[elem[0]].LoadData(elem[2].Split(separatorData, StringSplitOptions.RemoveEmptyEntries)); } } - - return true; } diff --git a/AirFighter/AirFighter/SetCarsGeneric.cs b/AirFighter/AirFighter/SetCarsGeneric.cs index 8ac840a..e1331b2 100644 --- a/AirFighter/AirFighter/SetCarsGeneric.cs +++ b/AirFighter/AirFighter/SetCarsGeneric.cs @@ -36,12 +36,7 @@ namespace AirFighter } public int Insert(T car, int position) { - // TODO проверка позиции - // TODO проверка, что элемент массива по этой позиции пустой, если нет, то - // проверка, что после вставляемого элемента в массиве есть пустой элемент - // сдвиг всех объектов, находящихся справа от позиции до первого пустого элемента - // TODO вставка по позиции - if (_places.Count == _maxCount) return -1; + if (_places.Count == _maxCount) throw new StorageOverflowException(_maxCount); ; _places.Insert(position, car); return position; } @@ -52,10 +47,12 @@ namespace AirFighter /// public T Remove(int position) { - // TODO проверка позиции - // TODO удаление объекта из массива, присовив элементу массива значение null + if(position >= _maxCount) throw new AircraftNotFoundException(position); + T res = _places[position]; _places.Remove(res); + + if (res == null) throw new AircraftNotFoundException(position); return res; } /// diff --git a/AirFighter/AirFighter/StorageOverflowException.cs b/AirFighter/AirFighter/StorageOverflowException.cs new file mode 100644 index 0000000..ef7e454 --- /dev/null +++ b/AirFighter/AirFighter/StorageOverflowException.cs @@ -0,0 +1,13 @@ +using System.Runtime.Serialization; +namespace AirFighter +{ + [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) { } + } +} \ No newline at end of file