This commit is contained in:
ivans 2024-05-22 11:19:12 +04:00
parent d052f9a608
commit 760763c667
27 changed files with 105 additions and 46 deletions

Binary file not shown.

View File

@ -1,7 +1,9 @@
{ {
"ExpandedNodes": [ "ExpandedNodes": [
"" "",
"\\KursiveWork",
"\\KursiveWork\\KursiveWork"
], ],
"SelectedNode": "\\C:\\Users\\ivans\\Source\\Repos\\KurseWork", "SelectedNode": "\\KursiveWork\\KursiveWork\\infoform.cs",
"PreviewInSolutionExplorer": false "PreviewInSolutionExplorer": false
} }

Binary file not shown.

Binary file not shown.

View File

@ -58,12 +58,13 @@ public class LinkedList
{ {
return new LinkedListState(this); return new LinkedListState(this);
} }
// Метод для возврата в определенное состояние // Метод для возврата в определенное состояние
public void RestoreState(LinkedListState state) public void RestoreState(LinkedListState state)
{ {
head = state.Head; head = state.Head;
} }
// Метод для выполнения шага операции // Метод для выполнения шага операции
public void PerformStep(LinkedListParameters parameters) public void PerformStep(LinkedListParameters parameters)

View File

@ -57,20 +57,57 @@ public class LinkedListStorage
} }
// Метод возврата в начальное состояние // Метод возврата в начальное состояние
public void Reset() public LinkedListState Reset()
{ {
currentIndex = -1; currentIndex = 0;
// Проверка, не пуст ли список состояний
if (states.Count > 0)
{
return states[currentIndex]; // Возвращаем первое состояние
}
else
{
return null; // Возвращаем null, если список пуст
}
} }
// Метод сохранения состояний в файл // Метод сохранения состояний в файл
// Вспомогательный метод для сохранения узла
private void SaveNode(BinaryWriter writer, Node node)
{
if (node != null)
{
writer.Write(node.Data); // Записываем данные узла в двоичном формате
SaveNode(writer, node.Next);
}
else
{
writer.Write(-1); // Используем -1 как маркер конца списка
}
}
public void Save(string filename)
{
using (BinaryWriter writer = new BinaryWriter(File.Open(filename, FileMode.Create)))
{
writer.Write(states.Count); // Записываем количество состояний в двоичном формате
foreach (LinkedListState state in states)
{
SaveNode(writer, state.Head);
}
}
}
public List<LinkedListState> Load(string filename) public List<LinkedListState> Load(string filename)
{ {
states.Clear(); states.Clear();
currentIndex = -1; currentIndex = 0;
using (StreamReader reader = new StreamReader(filename)) using (BinaryReader reader = new BinaryReader(File.Open(filename, FileMode.Open)))
{ {
int count = int.Parse(reader.ReadLine()); // Читаем количество состояний int count = reader.ReadInt32(); // Читаем количество состояний
for (int i = 0; i < count; i++) for (int i = 0; i < count; i++)
{ {
states.Add(new LinkedListState(LoadNode(reader))); states.Add(new LinkedListState(LoadNode(reader)));
@ -80,24 +117,9 @@ public class LinkedListStorage
return states; return states;
} }
// Вспомогательный метод для сохранения узла private Node LoadNode(BinaryReader reader)
private void SaveNode(StreamWriter writer, Node node)
{ {
if (node != null) int data = reader.ReadInt32(); // Читаем данные узла
{
writer.WriteLine(node.Data); // Записываем данные узла в отдельной строке
SaveNode(writer, node.Next);
}
else
{
writer.WriteLine(-1); // Используем -1 как маркер конца списка
}
}
// Вспомогательный метод для загрузки узла
private Node LoadNode(StreamReader reader)
{
int data = int.Parse(reader.ReadLine()); // Читаем данные узла из строки
if (data == -1) if (data == -1)
{ {
return null; return null;
@ -108,18 +130,7 @@ public class LinkedListStorage
} }
} }
// Метод сохранения состояний в файл
public void Save(string filename)
{
using (StreamWriter writer = new StreamWriter(filename))
{
writer.WriteLine(states.Count); // Записываем количество состояний
foreach (LinkedListState state in states)
{
SaveNode(writer, state.Head);
}
}
}
} }

View File

@ -39,6 +39,7 @@
LoadToolStripMenuItem = new ToolStripMenuItem(); LoadToolStripMenuItem = new ToolStripMenuItem();
InfoToolStripMenuItem = new ToolStripMenuItem(); InfoToolStripMenuItem = new ToolStripMenuItem();
toolTip1 = new ToolTip(components); toolTip1 = new ToolTip(components);
buttonReset = new Button();
((System.ComponentModel.ISupportInitialize)pictureBox).BeginInit(); ((System.ComponentModel.ISupportInitialize)pictureBox).BeginInit();
menuSaveLoad.SuspendLayout(); menuSaveLoad.SuspendLayout();
SuspendLayout(); SuspendLayout();
@ -73,7 +74,7 @@
// //
// buttonNextStep // buttonNextStep
// //
buttonNextStep.Location = new Point(553, 368); buttonNextStep.Location = new Point(553, 342);
buttonNextStep.Name = "buttonNextStep"; buttonNextStep.Name = "buttonNextStep";
buttonNextStep.Size = new Size(85, 23); buttonNextStep.Size = new Size(85, 23);
buttonNextStep.TabIndex = 5; buttonNextStep.TabIndex = 5;
@ -123,11 +124,22 @@
InfoToolStripMenuItem.ToolTipText = "Настоятельно рекомендуется к прочтению"; InfoToolStripMenuItem.ToolTipText = "Настоятельно рекомендуется к прочтению";
InfoToolStripMenuItem.Click += InfoToolStripMenuItem_Click; InfoToolStripMenuItem.Click += InfoToolStripMenuItem_Click;
// //
// buttonReset
//
buttonReset.Location = new Point(553, 369);
buttonReset.Name = "buttonReset";
buttonReset.Size = new Size(85, 23);
buttonReset.TabIndex = 8;
buttonReset.Text = "Начало";
buttonReset.UseVisualStyleBackColor = true;
buttonReset.Click += buttonReset_Click;
//
// MainForm // MainForm
// //
AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font; AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(800, 450); ClientSize = new Size(800, 450);
Controls.Add(buttonReset);
Controls.Add(buttonPreviousStep); Controls.Add(buttonPreviousStep);
Controls.Add(buttonNextStep); Controls.Add(buttonNextStep);
Controls.Add(ButtonSearch); Controls.Add(ButtonSearch);
@ -156,5 +168,6 @@
private ToolStripMenuItem LoadToolStripMenuItem; private ToolStripMenuItem LoadToolStripMenuItem;
private ToolStripMenuItem InfoToolStripMenuItem; private ToolStripMenuItem InfoToolStripMenuItem;
private ToolTip toolTip1; private ToolTip toolTip1;
private Button buttonReset;
} }
} }

View File

@ -18,7 +18,7 @@ namespace KursiveWork
private LinkedList list; private LinkedList list;
private LinkedListVisualizer visualizer; private LinkedListVisualizer visualizer;
private LinkedListManager manager; private LinkedListManager manager;
private LinkedListParameters parameters; private LinkedListParameters parameters;
@ -27,7 +27,8 @@ namespace KursiveWork
InitializeComponent(); InitializeComponent();
list = new LinkedList(); list = new LinkedList();
visualizer = new LinkedListVisualizer(); visualizer = new LinkedListVisualizer();
MessageBox.Show("Настоятельно рекомендуется ознакомиться с информацией с помощью меню сверху");
//MessageBox.Show("Настоятельно рекомендуется ознакомиться с информацией с помощью меню сверху");
manager = new LinkedListManager(parameters); manager = new LinkedListManager(parameters);
Controls.Add(pictureBox); Controls.Add(pictureBox);
pictureBox.Image = visualizer.Visualize(list.CreateState()); pictureBox.Image = visualizer.Visualize(list.CreateState());
@ -115,7 +116,7 @@ namespace KursiveWork
private void SaveToolStripMenuItem_Click(object sender, EventArgs e) private void SaveToolStripMenuItem_Click(object sender, EventArgs e)
{ {
SaveFileDialog saveFileDialog = new SaveFileDialog(); SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "Файл состояний (*.txt)|*.txt"; // Изменяем фильтр на *.txt saveFileDialog.Filter = "Файл состояний (*.dat)|*.dat"; // Изменяем фильтр на *.txt
saveFileDialog.Title = "Сохранить состояния"; saveFileDialog.Title = "Сохранить состояния";
saveFileDialog.ShowDialog(); saveFileDialog.ShowDialog();
@ -128,7 +129,7 @@ namespace KursiveWork
private void LoadToolStripMenuItem_Click(object sender, EventArgs e) private void LoadToolStripMenuItem_Click(object sender, EventArgs e)
{ {
OpenFileDialog openFileDialog = new OpenFileDialog(); OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "Файл состояний (*.txt)|*.txt"; // Изменяем фильтр на *.txt openFileDialog.Filter = "Файл состояний (*.dat)|*.dat"; // Изменяем фильтр на *.txt
openFileDialog.Title = "Загрузить состояния"; openFileDialog.Title = "Загрузить состояния";
openFileDialog.ShowDialog(); openFileDialog.ShowDialog();
@ -142,6 +143,10 @@ namespace KursiveWork
// Восстанавливаем первое состояние в списке list // Восстанавливаем первое состояние в списке list
list.RestoreState(firstState); list.RestoreState(firstState);
manager.storage.currentIndex = 0; manager.storage.currentIndex = 0;
for (int i = 0; i < loadedStates.Count; i++)
{
}
pictureBox.Image = visualizer.Visualize(firstState); pictureBox.Image = visualizer.Visualize(firstState);
} }
} }
@ -151,5 +156,14 @@ namespace KursiveWork
infoform infoform = new infoform(); infoform infoform = new infoform();
infoform.ShowDialog(); infoform.ShowDialog();
} }
private void buttonReset_Click(object sender, EventArgs e)
{
manager.storage.currentIndex = 1;
list.RestoreState(manager.storage.GetPreviousState());
manager.storage.currentIndex = 1;
LinkedListState state = manager.storage.GetPreviousState();
pictureBox.Image = visualizer.Visualize(state);
}
} }
} }

View File

@ -16,3 +16,21 @@ C:\Users\ivans\source\repos\KursiveWork\KursiveWork\obj\Debug\net7.0-windows\ref
C:\Users\ivans\source\repos\KursiveWork\KursiveWork\obj\Debug\net7.0-windows\KursiveWork.MainForm.resources C:\Users\ivans\source\repos\KursiveWork\KursiveWork\obj\Debug\net7.0-windows\KursiveWork.MainForm.resources
C:\Users\ivans\source\repos\KursiveWork\KursiveWork\obj\Debug\net7.0-windows\KursiveWork.infoform.resources C:\Users\ivans\source\repos\KursiveWork\KursiveWork\obj\Debug\net7.0-windows\KursiveWork.infoform.resources
C:\Users\ivans\source\repos\KursiveWork\KursiveWork\obj\Debug\net7.0-windows\KursiveWork.Inputform.resources C:\Users\ivans\source\repos\KursiveWork\KursiveWork\obj\Debug\net7.0-windows\KursiveWork.Inputform.resources
C:\Users\ivans\Source\Repos\KurseWork\KursiveWork\KursiveWork\bin\Debug\net7.0-windows\KursiveWork.exe
C:\Users\ivans\Source\Repos\KurseWork\KursiveWork\KursiveWork\bin\Debug\net7.0-windows\KursiveWork.deps.json
C:\Users\ivans\Source\Repos\KurseWork\KursiveWork\KursiveWork\bin\Debug\net7.0-windows\KursiveWork.runtimeconfig.json
C:\Users\ivans\Source\Repos\KurseWork\KursiveWork\KursiveWork\bin\Debug\net7.0-windows\KursiveWork.dll
C:\Users\ivans\Source\Repos\KurseWork\KursiveWork\KursiveWork\bin\Debug\net7.0-windows\KursiveWork.pdb
C:\Users\ivans\Source\Repos\KurseWork\KursiveWork\KursiveWork\obj\Debug\net7.0-windows\KursiveWork.infoform.resources
C:\Users\ivans\Source\Repos\KurseWork\KursiveWork\KursiveWork\obj\Debug\net7.0-windows\KursiveWork.Inputform.resources
C:\Users\ivans\Source\Repos\KurseWork\KursiveWork\KursiveWork\obj\Debug\net7.0-windows\KursiveWork.MainForm.resources
C:\Users\ivans\Source\Repos\KurseWork\KursiveWork\KursiveWork\obj\Debug\net7.0-windows\KursiveWork.csproj.GenerateResource.cache
C:\Users\ivans\Source\Repos\KurseWork\KursiveWork\KursiveWork\obj\Debug\net7.0-windows\KursiveWork.GeneratedMSBuildEditorConfig.editorconfig
C:\Users\ivans\Source\Repos\KurseWork\KursiveWork\KursiveWork\obj\Debug\net7.0-windows\KursiveWork.AssemblyInfoInputs.cache
C:\Users\ivans\Source\Repos\KurseWork\KursiveWork\KursiveWork\obj\Debug\net7.0-windows\KursiveWork.AssemblyInfo.cs
C:\Users\ivans\Source\Repos\KurseWork\KursiveWork\KursiveWork\obj\Debug\net7.0-windows\KursiveWork.csproj.CoreCompileInputs.cache
C:\Users\ivans\Source\Repos\KurseWork\KursiveWork\KursiveWork\obj\Debug\net7.0-windows\KursiveWork.dll
C:\Users\ivans\Source\Repos\KurseWork\KursiveWork\KursiveWork\obj\Debug\net7.0-windows\refint\KursiveWork.dll
C:\Users\ivans\Source\Repos\KurseWork\KursiveWork\KursiveWork\obj\Debug\net7.0-windows\KursiveWork.pdb
C:\Users\ivans\Source\Repos\KurseWork\KursiveWork\KursiveWork\obj\Debug\net7.0-windows\KursiveWork.genruntimeconfig.cache
C:\Users\ivans\Source\Repos\KurseWork\KursiveWork\KursiveWork\obj\Debug\net7.0-windows\ref\KursiveWork.dll

View File

@ -1 +1 @@
bd82fc72bf5bf9486a74f04096b102bf02a148cd d6f8afed7b6068eca92bf941c29c08f3033fcca7