Лабораторная работа №7

This commit is contained in:
victinass 2024-05-12 12:32:21 +04:00
parent c21d2a3c02
commit 26fd2f83d9
4 changed files with 87 additions and 35 deletions

View File

@ -28,4 +28,10 @@
</EmbeddedResource> </EmbeddedResource>
</ItemGroup> </ItemGroup>
<ItemGroup>
<None Update="nlog.config">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project> </Project>

View File

@ -32,7 +32,7 @@ public abstract class AbstractCompany
/// <summary> /// <summary>
/// Вычисление максимального количества элементов, который можно разместить в окне /// Вычисление максимального количества элементов, который можно разместить в окне
/// </summary> /// </summary>
private int GetMaxCount => _pictureWidth * _pictureHeight / (_placeSizeWidth * _placeSizeHeight) + 2; private int GetMaxCount => _pictureWidth * _pictureHeight / (_placeSizeWidth * _placeSizeHeight);
/// <summary> /// <summary>
/// Конструктор /// Конструктор

View File

@ -1,5 +1,6 @@
using Battleship.CollectionGenericObjects; using Battleship.CollectionGenericObjects;
using Battleship.Drawings; using Battleship.Drawings;
using Battleship.Exceptions;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using System.Windows.Forms; using System.Windows.Forms;
@ -50,8 +51,8 @@ public partial class FormWarshipCollection : Form
private void ButtonAddWarship_Click(object sender, EventArgs e) private void ButtonAddWarship_Click(object sender, EventArgs e)
{ {
FormWarshipConfig form = new(); FormWarshipConfig form = new();
form.Show();
form.AddEvent(SetWarship); form.AddEvent(SetWarship);
form.Show();
} }
@ -65,15 +66,19 @@ public partial class FormWarshipCollection : Form
{ {
return; return;
} }
try
if (_company + warship != -1)
{ {
MessageBox.Show("Объект добавлен"); if (_company + warship != -1)
pictureBox.Image = _company.Show(); {
MessageBox.Show("Объект добавлен");
pictureBox.Image = _company.Show();
_logger.LogInformation("Добавлен объект: {object}", warship.GetDataForSave());
}
} }
else catch (CollectionOverflowException ex)
{ {
MessageBox.Show("Не удалось добавить объект"); MessageBox.Show(ex.Message);
_logger.LogError("Ошибка: {Message}", ex.Message);
} }
} }
@ -96,14 +101,19 @@ public partial class FormWarshipCollection : Form
} }
int pos = Convert.ToInt32(maskedTextBox1.Text); int pos = Convert.ToInt32(maskedTextBox1.Text);
if (_company - pos != null) try
{ {
MessageBox.Show("Объект удален"); if (_company - pos != null)
pictureBox.Image = _company.Show(); {
MessageBox.Show("Объект удален");
pictureBox.Image = _company.Show();
_logger.LogInformation("Удален объект по позиции " + pos);
}
} }
else catch (ObjectNotFoundException ex)
{ {
MessageBox.Show("Не удалось удалить объект"); MessageBox.Show(ex.Message);
_logger.LogError("Ошибка: {Message}", ex.Message);
} }
} }
@ -120,23 +130,34 @@ public partial class FormWarshipCollection : Form
} }
DrawingWarship? warship = null; DrawingWarship? warship = null;
int counter = 120; int counter = 100;
while (warship == null) try
{ {
warship = _company.GetRandomObject(); while (warship == null)
counter--;
if (counter <= 0)
{ {
break; warship = _company.GetRandomObject();
counter--;
if (counter <= 0)
{
break;
}
} }
if (warship == null)
{
return;
}
FormBattleship form = new()
{
SetWarship = warship
};
form.ShowDialog();
} }
catch (Exception ex)
FormBattleship form = new()
{ {
SetWarship = warship MessageBox.Show(ex.Message, "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error);
}; }
form.ShowDialog();
} }
/// <summary> /// <summary>
@ -178,10 +199,10 @@ public partial class FormWarshipCollection : Form
{ {
if (string.IsNullOrEmpty(textBoxCollectionName.Text) || (!radioButtonList.Checked && !radioButtonMassive.Checked)) if (string.IsNullOrEmpty(textBoxCollectionName.Text) || (!radioButtonList.Checked && !radioButtonMassive.Checked))
{ {
MessageBox.Show("Не все данные заполнены", "Ошибка", MessageBox.Show("Не все данные заполнены", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
MessageBoxButtons.OK, MessageBoxIcon.Error);
return; return;
} }
CollectionType collectionType = CollectionType.None; CollectionType collectionType = CollectionType.None;
if (radioButtonMassive.Checked) if (radioButtonMassive.Checked)
{ {
@ -191,8 +212,10 @@ public partial class FormWarshipCollection : Form
{ {
collectionType = CollectionType.List; collectionType = CollectionType.List;
} }
_storageCollection.AddCollection(textBoxCollectionName.Text, collectionType); _storageCollection.AddCollection(textBoxCollectionName.Text, collectionType);
RerfreshListBoxItems(); RerfreshListBoxItems();
_logger.LogInformation("Добавлена коллекция: {collectionName} типа: {collectionType}", textBoxCollectionName.Text, collectionType);
} }
/// <summary> /// <summary>
@ -202,7 +225,7 @@ public partial class FormWarshipCollection : Form
/// <param name="e"></param> /// <param name="e"></param>
private void ButtonCollectionDel_Click(object sender, EventArgs e) private void ButtonCollectionDel_Click(object sender, EventArgs e)
{ {
// TODO прописать логику удаления элемента из коллекции //прописать логику удаления элемента из коллекции
// нужно убедиться, что есть выбранная коллекция // нужно убедиться, что есть выбранная коллекция
// спросить у пользователя через MessageBox, что он подтверждает, что хочет удалить запись // спросить у пользователя через MessageBox, что он подтверждает, что хочет удалить запись
// удалить и обновить ListBox // удалить и обновить ListBox
@ -211,12 +234,20 @@ public partial class FormWarshipCollection : Form
MessageBox.Show("Коллекция не выбрана"); MessageBox.Show("Коллекция не выбрана");
return; 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();
_logger.LogInformation("Коллекция: " + listBoxCollection.SelectedItem.ToString() + " удалена");
}
catch (Exception ex)
{
_logger.LogError("Ошибка: {Message}", ex.Message);
} }
_storageCollection.DelCollection(listBoxCollection.SelectedItem.ToString());
RerfreshListBoxItems();
} }
/// <summary> /// <summary>
@ -288,12 +319,13 @@ public partial class FormWarshipCollection : Form
_storageCollection.LoadData(openFileDialog1.FileName); _storageCollection.LoadData(openFileDialog1.FileName);
MessageBox.Show("Загрузка прошла успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information); MessageBox.Show("Загрузка прошла успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information);
RerfreshListBoxItems(); RerfreshListBoxItems();
_logger.LogInformation("Загрузка из файла: {filename}", openFileDialog1.FileName); _logger.LogInformation("Сохранение в файл: {filename}", openFileDialog1.FileName);
} }
catch (Exception ex) catch (Exception ex)
{ {
MessageBox.Show(ex.Message, "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBox.Show("Не сохранилось", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error);
_logger.LogError("Ошибка: {Message}", ex.Message); _logger.LogError("Ошибка: {Message}", ex.Message);
} }
} }
} }

View File

@ -0,0 +1,14 @@
<?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="carlog-${shortdate}.log" />
</targets>
<rules>
<logger name ="*" minlevel="Debug" writeTo="tofile" />
</rules>
</nlog>
</configuration>