FirstCommit
This commit is contained in:
parent
117e711ccc
commit
8079e18f75
@ -18,6 +18,8 @@ namespace Lab.Generics
|
|||||||
private readonly int _placeSizeWidth = 110;
|
private readonly int _placeSizeWidth = 110;
|
||||||
private readonly int _placeSizeHeight = 80;
|
private readonly int _placeSizeHeight = 80;
|
||||||
private readonly SetGeneric<T> _collection;
|
private readonly SetGeneric<T> _collection;
|
||||||
|
|
||||||
|
public IEnumerable<T?> GetCars => _collection.GetCars();
|
||||||
public CarsGenericCollection(int picWidth, int picHeight)
|
public CarsGenericCollection(int picWidth, int picHeight)
|
||||||
{
|
{
|
||||||
int width = picWidth / _placeSizeWidth;
|
int width = picWidth / _placeSizeWidth;
|
||||||
|
@ -15,6 +15,11 @@ namespace Lab.Generics
|
|||||||
public List<string> Keys => _carStorages.Keys.ToList();
|
public List<string> Keys => _carStorages.Keys.ToList();
|
||||||
private readonly int _pictureWidth;
|
private readonly int _pictureWidth;
|
||||||
private readonly int _pictureHeight;
|
private readonly int _pictureHeight;
|
||||||
|
|
||||||
|
private static readonly char _separatorForKeyValue = '|';
|
||||||
|
private readonly char _separatorRecords = ';';
|
||||||
|
private static readonly char _separatorForObject = ':';
|
||||||
|
|
||||||
public CarsGenericStorage(int pictureWidth, int pictureHeight)
|
public CarsGenericStorage(int pictureWidth, int pictureHeight)
|
||||||
{
|
{
|
||||||
_carStorages = new Dictionary<string, CarsGenericCollection<DrawTanker, DrawingObjectTanker>>();
|
_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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
42
Lab/CollectionsFrame.Designer.cs
generated
42
Lab/CollectionsFrame.Designer.cs
generated
@ -41,6 +41,10 @@
|
|||||||
CarTextBox = new TextBox();
|
CarTextBox = new TextBox();
|
||||||
label1 = new Label();
|
label1 = new Label();
|
||||||
DrawTank = new PictureBox();
|
DrawTank = new PictureBox();
|
||||||
|
openFileDialog = new OpenFileDialog();
|
||||||
|
saveFileDialog = new SaveFileDialog();
|
||||||
|
SaveButton = new Button();
|
||||||
|
LoadButton = new Button();
|
||||||
panel1.SuspendLayout();
|
panel1.SuspendLayout();
|
||||||
panel2.SuspendLayout();
|
panel2.SuspendLayout();
|
||||||
((System.ComponentModel.ISupportInitialize)DrawTank).BeginInit();
|
((System.ComponentModel.ISupportInitialize)DrawTank).BeginInit();
|
||||||
@ -48,6 +52,8 @@
|
|||||||
//
|
//
|
||||||
// panel1
|
// panel1
|
||||||
//
|
//
|
||||||
|
panel1.Controls.Add(LoadButton);
|
||||||
|
panel1.Controls.Add(SaveButton);
|
||||||
panel1.Controls.Add(panel2);
|
panel1.Controls.Add(panel2);
|
||||||
panel1.Controls.Add(UpdateButton);
|
panel1.Controls.Add(UpdateButton);
|
||||||
panel1.Controls.Add(DeleteButton);
|
panel1.Controls.Add(DeleteButton);
|
||||||
@ -120,7 +126,7 @@
|
|||||||
//
|
//
|
||||||
// UpdateButton
|
// UpdateButton
|
||||||
//
|
//
|
||||||
UpdateButton.Location = new Point(10, 401);
|
UpdateButton.Location = new Point(6, 383);
|
||||||
UpdateButton.Name = "UpdateButton";
|
UpdateButton.Name = "UpdateButton";
|
||||||
UpdateButton.Size = new Size(228, 37);
|
UpdateButton.Size = new Size(228, 37);
|
||||||
UpdateButton.TabIndex = 4;
|
UpdateButton.TabIndex = 4;
|
||||||
@ -130,7 +136,7 @@
|
|||||||
//
|
//
|
||||||
// DeleteButton
|
// DeleteButton
|
||||||
//
|
//
|
||||||
DeleteButton.Location = new Point(10, 358);
|
DeleteButton.Location = new Point(6, 340);
|
||||||
DeleteButton.Name = "DeleteButton";
|
DeleteButton.Name = "DeleteButton";
|
||||||
DeleteButton.Size = new Size(228, 37);
|
DeleteButton.Size = new Size(228, 37);
|
||||||
DeleteButton.TabIndex = 3;
|
DeleteButton.TabIndex = 3;
|
||||||
@ -140,7 +146,7 @@
|
|||||||
//
|
//
|
||||||
// AddButton
|
// AddButton
|
||||||
//
|
//
|
||||||
AddButton.Location = new Point(10, 282);
|
AddButton.Location = new Point(6, 264);
|
||||||
AddButton.Name = "AddButton";
|
AddButton.Name = "AddButton";
|
||||||
AddButton.Size = new Size(228, 37);
|
AddButton.Size = new Size(228, 37);
|
||||||
AddButton.TabIndex = 2;
|
AddButton.TabIndex = 2;
|
||||||
@ -150,7 +156,7 @@
|
|||||||
//
|
//
|
||||||
// CarTextBox
|
// CarTextBox
|
||||||
//
|
//
|
||||||
CarTextBox.Location = new Point(10, 325);
|
CarTextBox.Location = new Point(6, 307);
|
||||||
CarTextBox.Name = "CarTextBox";
|
CarTextBox.Name = "CarTextBox";
|
||||||
CarTextBox.Size = new Size(228, 27);
|
CarTextBox.Size = new Size(228, 27);
|
||||||
CarTextBox.TabIndex = 1;
|
CarTextBox.TabIndex = 1;
|
||||||
@ -173,6 +179,30 @@
|
|||||||
DrawTank.TabIndex = 1;
|
DrawTank.TabIndex = 1;
|
||||||
DrawTank.TabStop = false;
|
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
|
// CollectionsFrame
|
||||||
//
|
//
|
||||||
AutoScaleDimensions = new SizeF(8F, 20F);
|
AutoScaleDimensions = new SizeF(8F, 20F);
|
||||||
@ -205,5 +235,9 @@
|
|||||||
private Button AddCollectButton;
|
private Button AddCollectButton;
|
||||||
private TextBox SetTextBox;
|
private TextBox SetTextBox;
|
||||||
private Label label2;
|
private Label label2;
|
||||||
|
private OpenFileDialog openFileDialog;
|
||||||
|
private SaveFileDialog saveFileDialog;
|
||||||
|
private Button LoadButton;
|
||||||
|
private Button SaveButton;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -16,17 +16,11 @@ namespace Lab
|
|||||||
public partial class CollectionsFrame : Form
|
public partial class CollectionsFrame : Form
|
||||||
{
|
{
|
||||||
private readonly CarsGenericStorage _storage;
|
private readonly CarsGenericStorage _storage;
|
||||||
/// <summary>
|
|
||||||
/// Конструктор
|
|
||||||
/// </summary>
|
|
||||||
public CollectionsFrame()
|
public CollectionsFrame()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
_storage = new CarsGenericStorage(DrawTank.Width, DrawTank.Height);
|
_storage = new CarsGenericStorage(DrawTank.Width, DrawTank.Height);
|
||||||
}
|
}
|
||||||
/// <summary>
|
|
||||||
/// Заполнение listBoxObjects
|
|
||||||
/// </summary>
|
|
||||||
private void ReloadObjects()
|
private void ReloadObjects()
|
||||||
{
|
{
|
||||||
int index = CollectionListBox.SelectedIndex;
|
int index = CollectionListBox.SelectedIndex;
|
||||||
@ -46,11 +40,6 @@ namespace Lab
|
|||||||
CollectionListBox.SelectedIndex = index;
|
CollectionListBox.SelectedIndex = index;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/// <summary>
|
|
||||||
/// Добавление набора в коллекцию
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="sender"></param>
|
|
||||||
/// <param name="e"></param>
|
|
||||||
private void ButtonAddObject_Click(object sender, EventArgs e)
|
private void ButtonAddObject_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(SetTextBox.Text))
|
if (string.IsNullOrEmpty(SetTextBox.Text))
|
||||||
@ -62,22 +51,12 @@ namespace Lab
|
|||||||
_storage.AddSet(SetTextBox.Text);
|
_storage.AddSet(SetTextBox.Text);
|
||||||
ReloadObjects();
|
ReloadObjects();
|
||||||
}
|
}
|
||||||
/// <summary>
|
|
||||||
/// Выбор набора
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="sender"></param>
|
|
||||||
/// <param name="e"></param>
|
|
||||||
private void ListBoxObjects_SelectedIndexChanged(object sender,
|
private void ListBoxObjects_SelectedIndexChanged(object sender,
|
||||||
EventArgs e)
|
EventArgs e)
|
||||||
{
|
{
|
||||||
DrawTank.Image =
|
DrawTank.Image =
|
||||||
_storage[CollectionListBox.SelectedItem?.ToString() ?? string.Empty]?.ShowCars();
|
_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)
|
private void ButtonDelObject_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (CollectionListBox.SelectedIndex == -1)
|
if (CollectionListBox.SelectedIndex == -1)
|
||||||
@ -92,11 +71,6 @@ namespace Lab
|
|||||||
ReloadObjects();
|
ReloadObjects();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/// <summary>
|
|
||||||
/// Добавление объекта в набор
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="sender"></param>
|
|
||||||
/// <param name="e"></param>
|
|
||||||
|
|
||||||
private void AddTanker(DrawTanker tanker)
|
private void AddTanker(DrawTanker tanker)
|
||||||
{
|
{
|
||||||
@ -126,11 +100,6 @@ namespace Lab
|
|||||||
form.Show();
|
form.Show();
|
||||||
form.AddEvent(AddTanker);
|
form.AddEvent(AddTanker);
|
||||||
}
|
}
|
||||||
/// <summary>
|
|
||||||
/// Удаление объекта из набора
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="sender"></param>
|
|
||||||
/// <param name="e"></param>
|
|
||||||
private void ButtonRemoveCar_Click(object sender, EventArgs e)
|
private void ButtonRemoveCar_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (CollectionListBox.SelectedIndex == -1)
|
if (CollectionListBox.SelectedIndex == -1)
|
||||||
@ -159,11 +128,6 @@ namespace Lab
|
|||||||
MessageBox.Show("Не удалось удалить объект");
|
MessageBox.Show("Не удалось удалить объект");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/// <summary>
|
|
||||||
/// Обновление рисунка по набору
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="sender"></param>
|
|
||||||
/// <param name="e"></param>
|
|
||||||
private void ButtonRefreshCollection_Click(object sender, EventArgs
|
private void ButtonRefreshCollection_Click(object sender, EventArgs
|
||||||
e)
|
e)
|
||||||
{
|
{
|
||||||
@ -179,5 +143,35 @@ namespace Lab
|
|||||||
}
|
}
|
||||||
DrawTank.Image = obj.ShowCars();
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -117,4 +117,10 @@
|
|||||||
<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>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>
|
</root>
|
50
Lab/ExtentionDrawingTanker.cs
Normal file
50
Lab/ExtentionDrawingTanker.cs
Normal 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}";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user