Laba6 KozyrevSS PIbd-21 GasolineTanker Base #7
@ -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>>();
|
||||
@ -42,6 +47,80 @@ namespace Lab.Generics
|
||||
return null;
|
||||
}
|
||||
}
|
||||
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 (StreamWriter writer = new StreamWriter(filename))
|
||||
{
|
||||
writer.WriteLine("CarStorage");
|
||||
writer.Write(data.ToString());
|
||||
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("CarStorage"))
|
||||
return false;
|
||||
_carStorages.Clear();
|
||||
string strs;
|
||||
bool firstinit = true;
|
||||
while ((strs = reader.ReadLine()) != null)
|
||||
{
|
||||
if (strs == null && firstinit)
|
||||
return false;
|
||||
if (strs == null )
|
||||
break;
|
||||
firstinit = false;
|
||||
string name = strs.Split('|')[0];
|
||||
CarsGenericCollection<DrawTanker, DrawingObjectTanker> collection = new(_pictureWidth, _pictureHeight);
|
||||
foreach (string data in strs.Split('|')[1].Split(';'))
|
||||
{
|
||||
DrawTanker? car =
|
||||
data?.CreateDrawTanker(_separatorForObject, _pictureWidth, _pictureHeight);
|
||||
if (car != null)
|
||||
{
|
||||
if (!(collection + car))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
_carStorages.Add(name, collection);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
62
Lab/CollectionsFrame.Designer.cs
generated
62
Lab/CollectionsFrame.Designer.cs
generated
@ -41,9 +41,16 @@
|
||||
CarTextBox = new TextBox();
|
||||
label1 = new Label();
|
||||
DrawTank = new PictureBox();
|
||||
openFileDialog = new OpenFileDialog();
|
||||
saveFileDialog = new SaveFileDialog();
|
||||
menuStrip1 = new MenuStrip();
|
||||
StripMenu = new ToolStripMenuItem();
|
||||
SaveItem = new ToolStripMenuItem();
|
||||
LoadItem = new ToolStripMenuItem();
|
||||
panel1.SuspendLayout();
|
||||
panel2.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)DrawTank).BeginInit();
|
||||
menuStrip1.SuspendLayout();
|
||||
SuspendLayout();
|
||||
//
|
||||
// panel1
|
||||
@ -54,6 +61,7 @@
|
||||
panel1.Controls.Add(AddButton);
|
||||
panel1.Controls.Add(CarTextBox);
|
||||
panel1.Controls.Add(label1);
|
||||
panel1.Controls.Add(menuStrip1);
|
||||
panel1.Dock = DockStyle.Right;
|
||||
panel1.Location = new Point(550, 0);
|
||||
panel1.Name = "panel1";
|
||||
@ -120,7 +128,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 +138,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 +148,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 +158,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;
|
||||
@ -158,7 +166,7 @@
|
||||
// label1
|
||||
//
|
||||
label1.AutoSize = true;
|
||||
label1.Location = new Point(2, 2);
|
||||
label1.Location = new Point(144, 0);
|
||||
label1.Name = "label1";
|
||||
label1.Size = new Size(103, 20);
|
||||
label1.TabIndex = 0;
|
||||
@ -173,6 +181,41 @@
|
||||
DrawTank.TabIndex = 1;
|
||||
DrawTank.TabStop = false;
|
||||
//
|
||||
// openFileDialog
|
||||
//
|
||||
openFileDialog.FileName = "openFileDialog1";
|
||||
//
|
||||
// menuStrip1
|
||||
//
|
||||
menuStrip1.ImageScalingSize = new Size(20, 20);
|
||||
menuStrip1.Items.AddRange(new ToolStripItem[] { StripMenu });
|
||||
menuStrip1.Location = new Point(0, 0);
|
||||
menuStrip1.Name = "menuStrip1";
|
||||
menuStrip1.Size = new Size(250, 28);
|
||||
menuStrip1.TabIndex = 6;
|
||||
menuStrip1.Text = "menuStrip1";
|
||||
//
|
||||
// StripMenu
|
||||
//
|
||||
StripMenu.DropDownItems.AddRange(new ToolStripItem[] { SaveItem, LoadItem });
|
||||
StripMenu.Name = "StripMenu";
|
||||
StripMenu.Size = new Size(59, 24);
|
||||
StripMenu.Text = "Файл";
|
||||
//
|
||||
// SaveItem
|
||||
//
|
||||
SaveItem.Name = "SaveItem";
|
||||
SaveItem.Size = new Size(224, 26);
|
||||
SaveItem.Text = "Сохранить";
|
||||
SaveItem.Click += SaveToolStripMenuItem_Click;
|
||||
//
|
||||
// LoadItem
|
||||
//
|
||||
LoadItem.Name = "LoadItem";
|
||||
LoadItem.Size = new Size(224, 26);
|
||||
LoadItem.Text = "Загрузить";
|
||||
LoadItem.Click += LoadToolStripMenuItem_Click;
|
||||
//
|
||||
// CollectionsFrame
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(8F, 20F);
|
||||
@ -180,6 +223,7 @@
|
||||
ClientSize = new Size(800, 514);
|
||||
Controls.Add(DrawTank);
|
||||
Controls.Add(panel1);
|
||||
MainMenuStrip = menuStrip1;
|
||||
Name = "CollectionsFrame";
|
||||
Text = "Гаражи бензовозов";
|
||||
panel1.ResumeLayout(false);
|
||||
@ -187,6 +231,8 @@
|
||||
panel2.ResumeLayout(false);
|
||||
panel2.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)DrawTank).EndInit();
|
||||
menuStrip1.ResumeLayout(false);
|
||||
menuStrip1.PerformLayout();
|
||||
ResumeLayout(false);
|
||||
}
|
||||
|
||||
@ -205,5 +251,11 @@
|
||||
private Button AddCollectButton;
|
||||
private TextBox SetTextBox;
|
||||
private Label label2;
|
||||
private OpenFileDialog openFileDialog;
|
||||
private SaveFileDialog saveFileDialog;
|
||||
private MenuStrip menuStrip1;
|
||||
private ToolStripMenuItem StripMenu;
|
||||
private ToolStripMenuItem SaveItem;
|
||||
private ToolStripMenuItem LoadItem;
|
||||
}
|
||||
}
|
@ -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,13 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="menuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>344, 17</value>
|
||||
</metadata>
|
||||
<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}";
|
||||
}
|
||||
|
||||
}
|
||||
}
|
4
Lab/FormTankerConfig.Designer.cs
generated
4
Lab/FormTankerConfig.Designer.cs
generated
@ -131,7 +131,7 @@
|
||||
//
|
||||
// PurplePanel
|
||||
//
|
||||
PurplePanel.BackColor = Color.FromArgb(192, 0, 192);
|
||||
PurplePanel.BackColor = Color.Purple;
|
||||
PurplePanel.Location = new Point(182, 65);
|
||||
PurplePanel.Name = "PurplePanel";
|
||||
PurplePanel.Size = new Size(50, 50);
|
||||
@ -179,7 +179,7 @@
|
||||
//
|
||||
// GreenPanel
|
||||
//
|
||||
GreenPanel.BackColor = Color.FromArgb(0, 192, 0);
|
||||
GreenPanel.BackColor = Color.Green;
|
||||
GreenPanel.Location = new Point(70, 9);
|
||||
GreenPanel.Name = "GreenPanel";
|
||||
GreenPanel.Size = new Size(50, 50);
|
||||
|
@ -49,12 +49,16 @@ namespace Lab.Generics
|
||||
{
|
||||
if (position < 0 || position > _maxCount)
|
||||
return null;
|
||||
if (_places.Count <= position)
|
||||
return null;
|
||||
return _places[position];
|
||||
}
|
||||
set
|
||||
{
|
||||
if (position < 0 || position > _maxCount)
|
||||
return;
|
||||
if (_places.Count <= position)
|
||||
return;
|
||||
_places[position] = value;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user