PIbd-21. Makarov D.V. Lab work 06 #6
@ -1,5 +1,6 @@
|
|||||||
using AirplaneWithRadar.PaintObjects;
|
using AirplaneWithRadar.PaintObjects;
|
||||||
using AirplaneWithRadar.MovementStrategy;
|
using AirplaneWithRadar.MovementStrategy;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
namespace AirplaneWithRadar.Generics
|
namespace AirplaneWithRadar.Generics
|
||||||
{
|
{
|
||||||
@ -22,7 +23,6 @@ namespace AirplaneWithRadar.Generics
|
|||||||
collection = new SetGeneric<T>(width * height);
|
collection = new SetGeneric<T>(width * height);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int? operator +(AirplanesGenericCollection<T, U> collect, T? obj)
|
public static int? operator +(AirplanesGenericCollection<T, U> collect, T? obj)
|
||||||
{
|
{
|
||||||
if (obj == null)
|
if (obj == null)
|
||||||
@ -89,5 +89,7 @@ namespace AirplaneWithRadar.Generics
|
|||||||
j--;
|
j--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public IEnumerable<T?> GetAirplanes => collection.GetAirplanes();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using AirplaneWithRadar.PaintObjects;
|
using AirplaneWithRadar.PaintObjects;
|
||||||
using AirplaneWithRadar.MovementStrategy;
|
using AirplaneWithRadar.MovementStrategy;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
namespace AirplaneWithRadar.Generics
|
namespace AirplaneWithRadar.Generics
|
||||||
{
|
{
|
||||||
@ -9,12 +10,93 @@ namespace AirplaneWithRadar.Generics
|
|||||||
public List<string> Keys => airplaneStorages.Keys.ToList();
|
public List<string> Keys => airplaneStorages.Keys.ToList();
|
||||||
private readonly int pictWidth;
|
private readonly int pictWidth;
|
||||||
private readonly int pictHeight;
|
private readonly int pictHeight;
|
||||||
|
|
||||||
|
private static readonly char separatorForKeyValue = '|';
|
||||||
|
private readonly char separatorRecords = ';';
|
||||||
|
private static readonly char separatorForObject = ':';
|
||||||
public AirplanesGenericStorage(int pictureWidth, int pictureHeight)
|
public AirplanesGenericStorage(int pictureWidth, int pictureHeight)
|
||||||
{
|
{
|
||||||
airplaneStorages = new Dictionary<string, AirplanesGenericCollection<PaintAirplane, PaintObjectAirplane>>();
|
airplaneStorages = new Dictionary<string, AirplanesGenericCollection<PaintAirplane, PaintObjectAirplane>>();
|
||||||
pictWidth = pictureWidth;
|
pictWidth = pictureWidth;
|
||||||
pictHeight = pictureHeight;
|
pictHeight = pictureHeight;
|
||||||
}
|
}
|
||||||
|
public bool SaveData(string filename)
|
||||||
|
{
|
||||||
|
if (File.Exists(filename))
|
||||||
|
{
|
||||||
|
File.Delete(filename);
|
||||||
|
}
|
||||||
|
StringBuilder data = new();
|
||||||
|
foreach (KeyValuePair<string, AirplanesGenericCollection<PaintAirplane, PaintObjectAirplane>> record in airplaneStorages)
|
||||||
|
{
|
||||||
|
StringBuilder records = new();
|
||||||
|
foreach (PaintAirplane? elem in record.Value.GetAirplanes)
|
||||||
|
{
|
||||||
|
records.Append($"{elem?.GetDataForSave(separatorForObject)}{separatorRecords}");
|
||||||
|
}
|
||||||
|
data.AppendLine($"{record.Key}{separatorForKeyValue}{records}");
|
||||||
|
}
|
||||||
|
if (data.Length == 0)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
string strs = data.ToString();
|
||||||
|
using (StreamWriter sr = new StreamWriter(filename)) {
|
||||||
|
sr.WriteLine("AirplaneStorage");
|
||||||
|
sr.WriteLine(strs);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
public bool LoadData(string filename)
|
||||||
|
{
|
||||||
|
if (!File.Exists(filename))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
using (StreamReader reader = new StreamReader(filename))
|
||||||
|
{
|
||||||
|
string checker = reader.ReadLine();
|
||||||
|
if (checker == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!checker.StartsWith("AirplaneStorage"))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
airplaneStorages.Clear();
|
||||||
|
string strs;
|
||||||
|
bool firstinit = true;
|
||||||
|
while ((strs = reader.ReadLine()) != null)
|
||||||
|
{
|
||||||
|
if (strs == null && firstinit)
|
||||||
|
return false;
|
||||||
|
if (strs == null)
|
||||||
|
break;
|
||||||
|
if (strs == String.Empty)
|
||||||
|
break;
|
||||||
|
firstinit = false;
|
||||||
|
string name = strs.Split('|')[0];
|
||||||
|
AirplanesGenericCollection<PaintAirplane, PaintObjectAirplane> collection = new(pictWidth, pictHeight);
|
||||||
|
foreach (string data in strs.Split('|')[1].Split(';'))
|
||||||
|
{
|
||||||
|
PaintAirplane? airplane =
|
||||||
|
data?.CreatePaintAirplane(separatorForObject, pictWidth, pictHeight);
|
||||||
|
if (airplane != null)
|
||||||
|
{
|
||||||
|
if (collection + airplane == -1)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
airplaneStorages.Add(name, collection);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void AddSet(string name)
|
public void AddSet(string name)
|
||||||
{
|
{
|
||||||
|
@ -0,0 +1,45 @@
|
|||||||
|
using AirplaneWithRadar.Entities;
|
||||||
|
|
||||||
|
namespace AirplaneWithRadar.PaintObjects
|
||||||
|
{
|
||||||
|
public static class ExtentionPaintAirplane
|
||||||
|
{
|
||||||
|
public static PaintAirplane? CreatePaintAirplane(this string info, char separatorForObject, int width, int height)
|
||||||
|
{
|
||||||
|
string[] strs = info.Split(separatorForObject);
|
||||||
|
if (strs.Length == 3)
|
||||||
|
{
|
||||||
|
return new PaintAirplane(Convert.ToInt32(strs[0]),
|
||||||
|
Convert.ToInt32(strs[1]), Color.FromName(strs[2]), width, height);
|
||||||
|
}
|
||||||
|
if (strs.Length == 6)
|
||||||
|
{
|
||||||
|
return new PaintAirplaneWithRadar(Convert.ToInt32(strs[0]),
|
||||||
|
Convert.ToInt32(strs[1]),
|
||||||
|
Color.FromName(strs[2]),
|
||||||
|
Color.FromName(strs[3]),
|
||||||
|
Convert.ToBoolean(strs[4]),
|
||||||
|
Convert.ToBoolean(strs[5]), width, height);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
public static string GetDataForSave(this PaintAirplane paintAirplane, char separatorForObject)
|
||||||
|
{
|
||||||
|
var airplane = paintAirplane.AirplaneEntity;
|
||||||
|
if (airplane == null)
|
||||||
|
{
|
||||||
|
return string.Empty;
|
||||||
|
}
|
||||||
|
var str = $"{airplane.Speed}{separatorForObject}{airplane.Weight}{separatorForObject}{airplane.BodyColor.Name}";
|
||||||
|
if (airplane is not AirplaneWithRadarEntity airplaneWithRadar)
|
||||||
|
{
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
return $"{str}{separatorForObject}{airplaneWithRadar.AdditColor.Name}{separatorForObject}{airplaneWithRadar.RadarOnBoard}" +
|
||||||
|
$"{separatorForObject}{airplaneWithRadar.AdditFuelPod}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -39,9 +39,19 @@
|
|||||||
ButtonDeleteAirplane = new Button();
|
ButtonDeleteAirplane = new Button();
|
||||||
ButtonAddAirplane = new Button();
|
ButtonAddAirplane = new Button();
|
||||||
pictureBoxCollection = new PictureBox();
|
pictureBoxCollection = new PictureBox();
|
||||||
|
openFileDialog = new OpenFileDialog();
|
||||||
|
saveFileDialog = new SaveFileDialog();
|
||||||
|
menuStrip1 = new MenuStrip();
|
||||||
|
файлToolStripMenuItem1 = new ToolStripMenuItem();
|
||||||
|
сохранитьToolStripMenuItem1 = new ToolStripMenuItem();
|
||||||
|
загрузитьToolStripMenuItem1 = new ToolStripMenuItem();
|
||||||
|
сохранитьToolStripMenuItem = new ToolStripMenuItem();
|
||||||
|
загрузитьToolStripMenuItem = new ToolStripMenuItem();
|
||||||
|
файлToolStripMenuItem = new ToolStripMenuItem();
|
||||||
groupBox1.SuspendLayout();
|
groupBox1.SuspendLayout();
|
||||||
groupBox2.SuspendLayout();
|
groupBox2.SuspendLayout();
|
||||||
((System.ComponentModel.ISupportInitialize)pictureBoxCollection).BeginInit();
|
((System.ComponentModel.ISupportInitialize)pictureBoxCollection).BeginInit();
|
||||||
|
menuStrip1.SuspendLayout();
|
||||||
SuspendLayout();
|
SuspendLayout();
|
||||||
//
|
//
|
||||||
// groupBox1
|
// groupBox1
|
||||||
@ -53,7 +63,7 @@
|
|||||||
groupBox1.Controls.Add(ButtonAddAirplane);
|
groupBox1.Controls.Add(ButtonAddAirplane);
|
||||||
groupBox1.Location = new Point(749, 9);
|
groupBox1.Location = new Point(749, 9);
|
||||||
groupBox1.Name = "groupBox1";
|
groupBox1.Name = "groupBox1";
|
||||||
groupBox1.Size = new Size(223, 440);
|
groupBox1.Size = new Size(223, 452);
|
||||||
groupBox1.TabIndex = 0;
|
groupBox1.TabIndex = 0;
|
||||||
groupBox1.TabStop = false;
|
groupBox1.TabStop = false;
|
||||||
groupBox1.Text = "Инструменты";
|
groupBox1.Text = "Инструменты";
|
||||||
@ -148,12 +158,72 @@
|
|||||||
// pictureBoxCollection
|
// pictureBoxCollection
|
||||||
//
|
//
|
||||||
pictureBoxCollection.Dock = DockStyle.Fill;
|
pictureBoxCollection.Dock = DockStyle.Fill;
|
||||||
pictureBoxCollection.Location = new Point(0, 0);
|
pictureBoxCollection.Location = new Point(0, 24);
|
||||||
pictureBoxCollection.Name = "pictureBoxCollection";
|
pictureBoxCollection.Name = "pictureBoxCollection";
|
||||||
pictureBoxCollection.Size = new Size(984, 461);
|
pictureBoxCollection.Size = new Size(984, 437);
|
||||||
pictureBoxCollection.TabIndex = 1;
|
pictureBoxCollection.TabIndex = 1;
|
||||||
pictureBoxCollection.TabStop = false;
|
pictureBoxCollection.TabStop = false;
|
||||||
//
|
//
|
||||||
|
// openFileDialog
|
||||||
|
//
|
||||||
|
openFileDialog.FileName = "openFileDialog1";
|
||||||
|
openFileDialog.Filter = "txt file | *.txt";
|
||||||
|
//
|
||||||
|
// saveFileDialog
|
||||||
|
//
|
||||||
|
saveFileDialog.Filter = "txt file | *.txt";
|
||||||
|
//
|
||||||
|
// menuStrip1
|
||||||
|
//
|
||||||
|
menuStrip1.Items.AddRange(new ToolStripItem[] { файлToolStripMenuItem1 });
|
||||||
|
menuStrip1.Location = new Point(0, 0);
|
||||||
|
menuStrip1.Name = "menuStrip1";
|
||||||
|
menuStrip1.Size = new Size(984, 24);
|
||||||
|
menuStrip1.TabIndex = 2;
|
||||||
|
menuStrip1.Text = "menuStrip1";
|
||||||
|
//
|
||||||
|
// файлToolStripMenuItem1
|
||||||
|
//
|
||||||
|
файлToolStripMenuItem1.DropDownItems.AddRange(new ToolStripItem[] { сохранитьToolStripMenuItem1, загрузитьToolStripMenuItem1 });
|
||||||
|
файлToolStripMenuItem1.Name = "файлToolStripMenuItem1";
|
||||||
|
файлToolStripMenuItem1.Size = new Size(48, 20);
|
||||||
|
файлToolStripMenuItem1.Text = "Файл";
|
||||||
|
//
|
||||||
|
// сохранитьToolStripMenuItem1
|
||||||
|
//
|
||||||
|
сохранитьToolStripMenuItem1.Name = "сохранитьToolStripMenuItem1";
|
||||||
|
сохранитьToolStripMenuItem1.Size = new Size(180, 22);
|
||||||
|
сохранитьToolStripMenuItem1.Text = "Сохранить";
|
||||||
|
сохранитьToolStripMenuItem1.Click += SaveToolStripMenuItem_Click;
|
||||||
|
//
|
||||||
|
// загрузитьToolStripMenuItem1
|
||||||
|
//
|
||||||
|
загрузитьToolStripMenuItem1.Name = "загрузитьToolStripMenuItem1";
|
||||||
|
загрузитьToolStripMenuItem1.Size = new Size(180, 22);
|
||||||
|
загрузитьToolStripMenuItem1.Text = "Загрузить";
|
||||||
|
загрузитьToolStripMenuItem1.Click += LoadToolStripMenuItem_Click;
|
||||||
|
//
|
||||||
|
// сохранитьToolStripMenuItem
|
||||||
|
//
|
||||||
|
сохранитьToolStripMenuItem.Name = "сохранитьToolStripMenuItem";
|
||||||
|
сохранитьToolStripMenuItem.Size = new Size(133, 22);
|
||||||
|
сохранитьToolStripMenuItem.Text = "Сохранить";
|
||||||
|
//
|
||||||
|
// загрузитьToolStripMenuItem
|
||||||
|
//
|
||||||
|
загрузитьToolStripMenuItem.Name = "загрузитьToolStripMenuItem";
|
||||||
|
загрузитьToolStripMenuItem.Size = new Size(133, 22);
|
||||||
|
загрузитьToolStripMenuItem.Text = "Загрузить";
|
||||||
|
//
|
||||||
|
// файлToolStripMenuItem
|
||||||
|
//
|
||||||
|
файлToolStripMenuItem.Checked = true;
|
||||||
|
файлToolStripMenuItem.CheckState = CheckState.Checked;
|
||||||
|
файлToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { сохранитьToolStripMenuItem, загрузитьToolStripMenuItem });
|
||||||
|
файлToolStripMenuItem.Name = "файлToolStripMenuItem";
|
||||||
|
файлToolStripMenuItem.Size = new Size(48, 20);
|
||||||
|
файлToolStripMenuItem.Text = "Файл";
|
||||||
|
//
|
||||||
// FormAirplaneCollection
|
// FormAirplaneCollection
|
||||||
//
|
//
|
||||||
AutoScaleDimensions = new SizeF(7F, 15F);
|
AutoScaleDimensions = new SizeF(7F, 15F);
|
||||||
@ -161,6 +231,7 @@
|
|||||||
ClientSize = new Size(984, 461);
|
ClientSize = new Size(984, 461);
|
||||||
Controls.Add(groupBox1);
|
Controls.Add(groupBox1);
|
||||||
Controls.Add(pictureBoxCollection);
|
Controls.Add(pictureBoxCollection);
|
||||||
|
Controls.Add(menuStrip1);
|
||||||
Name = "FormAirplaneCollection";
|
Name = "FormAirplaneCollection";
|
||||||
Text = "FormAirplaneCollection";
|
Text = "FormAirplaneCollection";
|
||||||
groupBox1.ResumeLayout(false);
|
groupBox1.ResumeLayout(false);
|
||||||
@ -168,7 +239,10 @@
|
|||||||
groupBox2.ResumeLayout(false);
|
groupBox2.ResumeLayout(false);
|
||||||
groupBox2.PerformLayout();
|
groupBox2.PerformLayout();
|
||||||
((System.ComponentModel.ISupportInitialize)pictureBoxCollection).EndInit();
|
((System.ComponentModel.ISupportInitialize)pictureBoxCollection).EndInit();
|
||||||
|
menuStrip1.ResumeLayout(false);
|
||||||
|
menuStrip1.PerformLayout();
|
||||||
ResumeLayout(false);
|
ResumeLayout(false);
|
||||||
|
PerformLayout();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
@ -184,5 +258,14 @@
|
|||||||
private Button buttonDelObject;
|
private Button buttonDelObject;
|
||||||
private Button buttonAddObject;
|
private Button buttonAddObject;
|
||||||
private TextBox textBoxStorageName;
|
private TextBox textBoxStorageName;
|
||||||
|
private OpenFileDialog openFileDialog;
|
||||||
|
private SaveFileDialog saveFileDialog;
|
||||||
|
private MenuStrip menuStrip1;
|
||||||
|
private ToolStripMenuItem файлToolStripMenuItem1;
|
||||||
|
private ToolStripMenuItem сохранитьToolStripMenuItem;
|
||||||
|
private ToolStripMenuItem загрузитьToolStripMenuItem;
|
||||||
|
private ToolStripMenuItem файлToolStripMenuItem;
|
||||||
|
private ToolStripMenuItem сохранитьToolStripMenuItem1;
|
||||||
|
private ToolStripMenuItem загрузитьToolStripMenuItem1;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -51,7 +51,7 @@ namespace AirplaneWithRadar
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (MessageBox.Show($"Удалить объект {listBoxStorages.SelectedItem}?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
|
if (MessageBox.Show($"Удалить объект {listBoxStorages.SelectedItem}?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
|
||||||
{
|
{
|
||||||
storage.DelSet(listBoxStorages.SelectedItem.ToString() ?? string.Empty);
|
storage.DelSet(listBoxStorages.SelectedItem.ToString() ?? string.Empty);
|
||||||
ReloadObjects();
|
ReloadObjects();
|
||||||
}
|
}
|
||||||
@ -131,5 +131,39 @@ namespace AirplaneWithRadar
|
|||||||
}
|
}
|
||||||
pictureBoxCollection.Image = obj.ShowAirplanes();
|
pictureBoxCollection.Image = obj.ShowAirplanes();
|
||||||
}
|
}
|
||||||
|
private void SaveToolStripMenuItem_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (saveFileDialog.ShowDialog() == DialogResult.OK)
|
||||||
|
{
|
||||||
|
if (storage.SaveData(saveFileDialog.FileName))
|
||||||
|
{
|
||||||
|
MessageBox.Show("Сохранение прошло успешно",
|
||||||
|
"Результат", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MessageBox.Show("Не сохранилось", "Результат",
|
||||||
|
MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private void LoadToolStripMenuItem_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (openFileDialog.ShowDialog() == DialogResult.OK)
|
||||||
|
{
|
||||||
|
if (storage.LoadData(openFileDialog.FileName))
|
||||||
|
{
|
||||||
|
MessageBox.Show("Загрузка произошла успешно",
|
||||||
|
"Результат", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MessageBox.Show("Не загузилось", "Результат",
|
||||||
|
MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||||
|
}
|
||||||
|
ReloadObjects();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
<data name="Color1" type="System.Drawing.Color, System.Drawing"">Blue</data>
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
</data>
|
</data>
|
||||||
@ -117,4 +117,13 @@
|
|||||||
<resheader name="writer">
|
<resheader name="writer">
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
|
<metadata name="openFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>172, 17</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="saveFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>305, 17</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="menuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>434, 17</value>
|
||||||
|
</metadata>
|
||||||
</root>
|
</root>
|
Loading…
x
Reference in New Issue
Block a user