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 _placeSizeHeight = 80;
|
||||
private readonly SetGeneric<T> _collection;
|
||||
|
||||
public IEnumerable<T?> GetCars => _collection.GetCars();
|
||||
public CarsGenericCollection(int picWidth, int picHeight)
|
||||
{
|
||||
int width = picWidth / _placeSizeWidth;
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
42
Lab/CollectionsFrame.Designer.cs
generated
42
Lab/CollectionsFrame.Designer.cs
generated
@ -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;
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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>
|
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