From 108233b501a254d64cb9946ba2edee8e2fc40c8b Mon Sep 17 00:00:00 2001 From: DavidMakarov Date: Fri, 17 Nov 2023 17:50:03 +0400 Subject: [PATCH] =?UTF-8?q?=D0=BB=D0=B0=D0=B1=D0=BE=D1=80=D0=B0=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=BD=D0=B0=D1=8F=206?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AirplanesGenericCollection.cs | 4 +- .../AirplanesGenericStorage.cs | 82 +++++++++++++++++ .../ExtentionPaintAirplane.cs | 45 ++++++++++ .../FormAirplaneCollection.Designer.cs | 89 ++++++++++++++++++- .../FormAirplaneCollection.cs | 36 +++++++- .../FormAirplaneCollection.resx | 11 ++- 6 files changed, 261 insertions(+), 6 deletions(-) create mode 100644 AirplaneWithRadar/AirplaneWithRadar/ExtentionPaintAirplane.cs diff --git a/AirplaneWithRadar/AirplaneWithRadar/AirplanesGenericCollection.cs b/AirplaneWithRadar/AirplaneWithRadar/AirplanesGenericCollection.cs index 04f5daf..17c0f56 100644 --- a/AirplaneWithRadar/AirplaneWithRadar/AirplanesGenericCollection.cs +++ b/AirplaneWithRadar/AirplaneWithRadar/AirplanesGenericCollection.cs @@ -1,5 +1,6 @@ using AirplaneWithRadar.PaintObjects; using AirplaneWithRadar.MovementStrategy; +using System.Text; namespace AirplaneWithRadar.Generics { @@ -22,7 +23,6 @@ namespace AirplaneWithRadar.Generics collection = new SetGeneric(width * height); } - public static int? operator +(AirplanesGenericCollection collect, T? obj) { if (obj == null) @@ -89,5 +89,7 @@ namespace AirplaneWithRadar.Generics j--; } } + + public IEnumerable GetAirplanes => collection.GetAirplanes(); } } diff --git a/AirplaneWithRadar/AirplaneWithRadar/AirplanesGenericStorage.cs b/AirplaneWithRadar/AirplaneWithRadar/AirplanesGenericStorage.cs index 8a99bfb..59a6996 100644 --- a/AirplaneWithRadar/AirplaneWithRadar/AirplanesGenericStorage.cs +++ b/AirplaneWithRadar/AirplaneWithRadar/AirplanesGenericStorage.cs @@ -1,5 +1,6 @@ using AirplaneWithRadar.PaintObjects; using AirplaneWithRadar.MovementStrategy; +using System.Text; namespace AirplaneWithRadar.Generics { @@ -9,12 +10,93 @@ namespace AirplaneWithRadar.Generics public List Keys => airplaneStorages.Keys.ToList(); private readonly int pictWidth; private readonly int pictHeight; + + private static readonly char separatorForKeyValue = '|'; + private readonly char separatorRecords = ';'; + private static readonly char separatorForObject = ':'; public AirplanesGenericStorage(int pictureWidth, int pictureHeight) { airplaneStorages = new Dictionary>(); pictWidth = pictureWidth; pictHeight = pictureHeight; } + public bool SaveData(string filename) + { + if (File.Exists(filename)) + { + File.Delete(filename); + } + StringBuilder data = new(); + foreach (KeyValuePair> 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 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) { diff --git a/AirplaneWithRadar/AirplaneWithRadar/ExtentionPaintAirplane.cs b/AirplaneWithRadar/AirplaneWithRadar/ExtentionPaintAirplane.cs new file mode 100644 index 0000000..17ad953 --- /dev/null +++ b/AirplaneWithRadar/AirplaneWithRadar/ExtentionPaintAirplane.cs @@ -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}"; + } + } + +} + + diff --git a/AirplaneWithRadar/AirplaneWithRadar/FormAirplaneCollection.Designer.cs b/AirplaneWithRadar/AirplaneWithRadar/FormAirplaneCollection.Designer.cs index ca4c9ed..4b003e6 100644 --- a/AirplaneWithRadar/AirplaneWithRadar/FormAirplaneCollection.Designer.cs +++ b/AirplaneWithRadar/AirplaneWithRadar/FormAirplaneCollection.Designer.cs @@ -39,9 +39,19 @@ ButtonDeleteAirplane = new Button(); ButtonAddAirplane = new Button(); 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(); groupBox2.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)pictureBoxCollection).BeginInit(); + menuStrip1.SuspendLayout(); SuspendLayout(); // // groupBox1 @@ -53,7 +63,7 @@ groupBox1.Controls.Add(ButtonAddAirplane); groupBox1.Location = new Point(749, 9); groupBox1.Name = "groupBox1"; - groupBox1.Size = new Size(223, 440); + groupBox1.Size = new Size(223, 452); groupBox1.TabIndex = 0; groupBox1.TabStop = false; groupBox1.Text = "Инструменты"; @@ -148,12 +158,72 @@ // pictureBoxCollection // pictureBoxCollection.Dock = DockStyle.Fill; - pictureBoxCollection.Location = new Point(0, 0); + pictureBoxCollection.Location = new Point(0, 24); pictureBoxCollection.Name = "pictureBoxCollection"; - pictureBoxCollection.Size = new Size(984, 461); + pictureBoxCollection.Size = new Size(984, 437); pictureBoxCollection.TabIndex = 1; 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 // AutoScaleDimensions = new SizeF(7F, 15F); @@ -161,6 +231,7 @@ ClientSize = new Size(984, 461); Controls.Add(groupBox1); Controls.Add(pictureBoxCollection); + Controls.Add(menuStrip1); Name = "FormAirplaneCollection"; Text = "FormAirplaneCollection"; groupBox1.ResumeLayout(false); @@ -168,7 +239,10 @@ groupBox2.ResumeLayout(false); groupBox2.PerformLayout(); ((System.ComponentModel.ISupportInitialize)pictureBoxCollection).EndInit(); + menuStrip1.ResumeLayout(false); + menuStrip1.PerformLayout(); ResumeLayout(false); + PerformLayout(); } #endregion @@ -184,5 +258,14 @@ private Button buttonDelObject; private Button buttonAddObject; 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; } } \ No newline at end of file diff --git a/AirplaneWithRadar/AirplaneWithRadar/FormAirplaneCollection.cs b/AirplaneWithRadar/AirplaneWithRadar/FormAirplaneCollection.cs index e407259..3684cb5 100644 --- a/AirplaneWithRadar/AirplaneWithRadar/FormAirplaneCollection.cs +++ b/AirplaneWithRadar/AirplaneWithRadar/FormAirplaneCollection.cs @@ -51,7 +51,7 @@ namespace AirplaneWithRadar return; } if (MessageBox.Show($"Удалить объект {listBoxStorages.SelectedItem}?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) -{ + { storage.DelSet(listBoxStorages.SelectedItem.ToString() ?? string.Empty); ReloadObjects(); } @@ -131,5 +131,39 @@ namespace AirplaneWithRadar } 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(); + } + + } } } diff --git a/AirplaneWithRadar/AirplaneWithRadar/FormAirplaneCollection.resx b/AirplaneWithRadar/AirplaneWithRadar/FormAirplaneCollection.resx index a395bff..7bf303f 100644 --- a/AirplaneWithRadar/AirplaneWithRadar/FormAirplaneCollection.resx +++ b/AirplaneWithRadar/AirplaneWithRadar/FormAirplaneCollection.resx @@ -18,7 +18,7 @@ System.Resources.ResXResourceReader, System.Windows.Forms, ... System.Resources.ResXResourceWriter, System.Windows.Forms, ... this is my long stringthis is a comment - Blue + Blue [base64 mime encoded serialized .NET Framework object] @@ -117,4 +117,13 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 172, 17 + + + 305, 17 + + + 434, 17 + \ No newline at end of file -- 2.25.1