Laba6 KozyrevSS PIbd-21 GasolineTanker Base #7

Closed
Serxionaft wants to merge 4 commits from Laba6 into Laba5
6 changed files with 213 additions and 42 deletions
Showing only changes of commit 8079e18f75 - Show all commits

View File

@ -18,6 +18,8 @@ namespace Lab.Generics
private readonly int _placeSizeWidth = 110;
private readonly int _placeSizeHeight = 80;
private readonly SetGeneric<T> _collection;
public IEnumerable<T?> GetCars => _collection.GetCars();
public CarsGenericCollection(int picWidth, int picHeight)
{
int width = picWidth / _placeSizeWidth;

View File

@ -15,6 +15,11 @@ namespace Lab.Generics
public List<string> Keys => _carStorages.Keys.ToList();
private readonly int _pictureWidth;
private readonly int _pictureHeight;
private static readonly char _separatorForKeyValue = '|';
private readonly char _separatorRecords = ';';
private static readonly char _separatorForObject = ':';
public CarsGenericStorage(int pictureWidth, int pictureHeight)
{
_carStorages = new Dictionary<string, CarsGenericCollection<DrawTanker, DrawingObjectTanker>>();
@ -43,5 +48,85 @@ namespace Lab.Generics
}
}
public bool SaveData(string filename)
{
if (File.Exists(filename))
{
File.Delete(filename);
}
StringBuilder data = new();
foreach (KeyValuePair<string, CarsGenericCollection<DrawTanker, DrawingObjectTanker>> record in _carStorages)
{
StringBuilder records = new();
foreach (DrawTanker? elem in record.Value.GetCars)
{
records.Append($"{elem?.GetDataForSave(_separatorForObject)}{_separatorRecords}");
}
data.AppendLine($"{record.Key}{_separatorForKeyValue}{records}");
}
if (data.Length == 0)
{
return false;
}
using FileStream fs = new(filename, FileMode.Create);
byte[] info = new
UTF8Encoding(true).GetBytes($"CarStorage{Environment.NewLine}{data}");
fs.Write(info, 0, info.Length);
return true;
}
public bool LoadData(string filename)
{
if (!File.Exists(filename))
{
return false;
}
string bufferTextFromFile = "";
using (FileStream fs = new(filename, FileMode.Open))
{
byte[] b = new byte[fs.Length];
UTF8Encoding temp = new(true);
while (fs.Read(b, 0, b.Length) > 0)
{
bufferTextFromFile += temp.GetString(b);
}
}
var strs = bufferTextFromFile.Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries);
if (strs == null || strs.Length == 0)
{
return false;
}
if (!strs[0].StartsWith("CarStorage"))
{
return false;
}
_carStorages.Clear();
foreach (string data in strs)
{
string[] record = data.Split(_separatorForKeyValue, StringSplitOptions.RemoveEmptyEntries);
if (record.Length != 2)
{
continue;
}
CarsGenericCollection<DrawTanker, DrawingObjectTanker> collection = new(_pictureWidth, _pictureHeight);
string[] set = record[1].Split(_separatorRecords, StringSplitOptions.RemoveEmptyEntries);
foreach (string elem in set)
{
DrawTanker? car =
elem?.CreateDrawTanker(_separatorForObject, _pictureWidth, _pictureHeight);
if (car != null)
{
if (!(collection + car))
{
return false;
}
}
}
_carStorages.Add(record[0], collection);
}
return true;
}
}
}

View File

@ -41,6 +41,10 @@
CarTextBox = new TextBox();
label1 = new Label();
DrawTank = new PictureBox();
openFileDialog = new OpenFileDialog();
saveFileDialog = new SaveFileDialog();
SaveButton = new Button();
LoadButton = new Button();
panel1.SuspendLayout();
panel2.SuspendLayout();
((System.ComponentModel.ISupportInitialize)DrawTank).BeginInit();
@ -48,6 +52,8 @@
//
// panel1
//
panel1.Controls.Add(LoadButton);
panel1.Controls.Add(SaveButton);
panel1.Controls.Add(panel2);
panel1.Controls.Add(UpdateButton);
panel1.Controls.Add(DeleteButton);
@ -120,7 +126,7 @@
//
// UpdateButton
//
UpdateButton.Location = new Point(10, 401);
UpdateButton.Location = new Point(6, 383);
UpdateButton.Name = "UpdateButton";
UpdateButton.Size = new Size(228, 37);
UpdateButton.TabIndex = 4;
@ -130,7 +136,7 @@
//
// DeleteButton
//
DeleteButton.Location = new Point(10, 358);
DeleteButton.Location = new Point(6, 340);
DeleteButton.Name = "DeleteButton";
DeleteButton.Size = new Size(228, 37);
DeleteButton.TabIndex = 3;
@ -140,7 +146,7 @@
//
// AddButton
//
AddButton.Location = new Point(10, 282);
AddButton.Location = new Point(6, 264);
AddButton.Name = "AddButton";
AddButton.Size = new Size(228, 37);
AddButton.TabIndex = 2;
@ -150,7 +156,7 @@
//
// CarTextBox
//
CarTextBox.Location = new Point(10, 325);
CarTextBox.Location = new Point(6, 307);
CarTextBox.Name = "CarTextBox";
CarTextBox.Size = new Size(228, 27);
CarTextBox.TabIndex = 1;
@ -173,6 +179,30 @@
DrawTank.TabIndex = 1;
DrawTank.TabStop = false;
//
// openFileDialog
//
openFileDialog.FileName = "openFileDialog1";
//
// SaveButton
//
SaveButton.Location = new Point(6, 426);
SaveButton.Name = "SaveButton";
SaveButton.Size = new Size(109, 44);
SaveButton.TabIndex = 6;
SaveButton.Text = "Сохранить";
SaveButton.UseVisualStyleBackColor = true;
SaveButton.Click += SaveToolStripMenuItem_Click;
//
// LoadButton
//
LoadButton.Location = new Point(121, 426);
LoadButton.Name = "LoadButton";
LoadButton.Size = new Size(113, 44);
LoadButton.TabIndex = 7;
LoadButton.Text = "Загрузить";
LoadButton.UseVisualStyleBackColor = true;
LoadButton.Click += LoadToolStripMenuItem_Click;
//
// CollectionsFrame
//
AutoScaleDimensions = new SizeF(8F, 20F);
@ -205,5 +235,9 @@
private Button AddCollectButton;
private TextBox SetTextBox;
private Label label2;
private OpenFileDialog openFileDialog;
private SaveFileDialog saveFileDialog;
private Button LoadButton;
private Button SaveButton;
}
}

View File

@ -16,17 +16,11 @@ namespace Lab
public partial class CollectionsFrame : Form
{
private readonly CarsGenericStorage _storage;
/// <summary>
/// Конструктор
/// </summary>
public CollectionsFrame()
{
InitializeComponent();
_storage = new CarsGenericStorage(DrawTank.Width, DrawTank.Height);
}
/// <summary>
/// Заполнение listBoxObjects
/// </summary>
private void ReloadObjects()
{
int index = CollectionListBox.SelectedIndex;
@ -46,11 +40,6 @@ namespace Lab
CollectionListBox.SelectedIndex = index;
}
}
/// <summary>
/// Добавление набора в коллекцию
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ButtonAddObject_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(SetTextBox.Text))
@ -62,22 +51,12 @@ namespace Lab
_storage.AddSet(SetTextBox.Text);
ReloadObjects();
}
/// <summary>
/// Выбор набора
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ListBoxObjects_SelectedIndexChanged(object sender,
EventArgs e)
{
DrawTank.Image =
_storage[CollectionListBox.SelectedItem?.ToString() ?? string.Empty]?.ShowCars();
}
/// <summary>
/// Удаление набора
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ButtonDelObject_Click(object sender, EventArgs e)
{
if (CollectionListBox.SelectedIndex == -1)
@ -92,15 +71,10 @@ namespace Lab
ReloadObjects();
}
}
/// <summary>
/// Добавление объекта в набор
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void AddTanker(DrawTanker tanker)
{
var obj = _storage[CollectionListBox.SelectedItem.ToString() ?? string.Empty];
if (obj == null)
{
@ -126,11 +100,6 @@ namespace Lab
form.Show();
form.AddEvent(AddTanker);
}
/// <summary>
/// Удаление объекта из набора
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ButtonRemoveCar_Click(object sender, EventArgs e)
{
if (CollectionListBox.SelectedIndex == -1)
@ -159,11 +128,6 @@ namespace Lab
MessageBox.Show("Не удалось удалить объект");
}
}
/// <summary>
/// Обновление рисунка по набору
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ButtonRefreshCollection_Click(object sender, EventArgs
e)
{
@ -179,5 +143,35 @@ namespace Lab
}
DrawTank.Image = obj.ShowCars();
}
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))
{
ReloadObjects();
MessageBox.Show("Загрузка прошла успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show("Не загрузилось", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
}

View File

@ -117,4 +117,10 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="openFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="saveFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>187, 17</value>
</metadata>
</root>

View File

@ -0,0 +1,50 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Lab.Entities;
using Lab.DrawningObjects;
namespace Lab
{
public static class ExtentionDrawingTanker
{
public static DrawTanker? CreateDrawTanker(this string info, char separatorForObject, int width, int height)
{
string[] strs = info.Split(separatorForObject);
if (strs.Length == 3)
{
return new DrawTanker(Convert.ToInt32(strs[0]),
Convert.ToInt32(strs[1]), Color.FromName(strs[2]), width, height);
}
if (strs.Length == 7)
{
return new DrawGasolineTanker(Convert.ToInt32(strs[0]),
Convert.ToInt32(strs[1]),
Color.FromName(strs[2]),
Color.FromName(strs[3]),
Convert.ToBoolean(strs[4]),
Convert.ToBoolean(strs[5]),
Convert.ToBoolean(strs[6]), width, height);
}
return null;
}
public static string GetDataForSave(this DrawTanker tanker, char separatorForObject)
{
var Tanker = tanker._gasolineTanker;
if (Tanker == null)
{
return string.Empty;
}
var str = $"{Tanker.Speed}{separatorForObject}{Tanker.Weight}{separatorForObject}{Tanker.BodyColor.Name}";
if (Tanker is not GasolineTanker gasTanker)
{
return str;
}
return $"{str}{separatorForObject}{gasTanker.AdditionalColor.Name}{separatorForObject}{gasTanker.BodyKit}{separatorForObject}{gasTanker.Wing}{separatorForObject}{gasTanker.SportLine}";
}
}
}