1
0
Files
OAiP-Presnyakov_Ilya-Practi…/Program.cs
Debug_pro d47bde6c27 upload
2026-06-07 18:27:45 +03:00

308 lines
12 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
namespace Prac8
{
internal class Program
{
private static void Main()
{
Console.OutputEncoding = Encoding.UTF8;
MyList<GymEquipment> equipmentList = new MyList<GymEquipment>();
bool isRunning = true;
while (isRunning)
{
PrintMenu();
Console.Write("Выберите действие: ");
string choice = Console.ReadLine();
Console.WriteLine();
try
{
switch (choice)
{
case "1":
equipmentList.Add(ReadEquipment());
Console.WriteLine("Тренажёр добавлен в конец списка.");
break;
case "2":
{
int index = ReadInt("Введите индекс для вставки: ");
equipmentList.Insert(index, ReadEquipment());
Console.WriteLine("Тренажёр вставлен по указанному индексу.");
break;
}
case "3":
{
int index = ReadInt("Введите индекс изменяемого элемента: ");
equipmentList[index] = ReadEquipment();
Console.WriteLine("Элемент успешно изменён.");
break;
}
case "4":
equipmentList.RemoveLast();
Console.WriteLine("Последний элемент удалён.");
break;
case "5":
{
int index = ReadInt("Введите индекс удаляемого элемента: ");
equipmentList.RemoveAt(index);
Console.WriteLine("Элемент удалён.");
break;
}
case "6":
Console.WriteLine($"Количество элементов: {equipmentList.Count}");
break;
case "7":
equipmentList.Print();
break;
case "8":
{
int index = ReadInt("Введите индекс элемента: ");
Console.WriteLine(equipmentList.Get(index));
break;
}
case "9":
AddRangeInteractive(equipmentList);
break;
case "10":
InsertRangeInteractive(equipmentList);
break;
case "11":
{
int firstIndex = ReadInt("Введите первый индекс: ");
int secondIndex = ReadInt("Введите второй индекс: ");
equipmentList.RemoveRange(firstIndex, secondIndex);
Console.WriteLine("Диапазон элементов удалён.");
break;
}
case "12":
FindEquipment(equipmentList);
break;
case "13":
{
int sortMode = ReadInt("Введите 1 для сортировки по возрастанию или 0 для сортировки по убыванию: ");
equipmentList.Sort(sortMode);
Console.WriteLine("Список отсортирован.");
break;
}
case "14":
equipmentList.Reverse();
Console.WriteLine("Список развёрнут.");
break;
case "15":
equipmentList.Distinct();
Console.WriteLine("Дубликаты удалены.");
break;
case "16":
equipmentList.Clear();
Console.WriteLine("Список очищен.");
break;
case "17":
PrintWithForeach(equipmentList);
break;
case "0":
isRunning = false;
Console.WriteLine("Программа завершена.");
break;
default:
Console.WriteLine("Такого пункта меню нет. Люди, как обычно, выбирают что попало.");
break;
}
}
catch (Exception ex)
{
Console.WriteLine($"Ошибка: {ex.Message}");
}
if (isRunning)
{
Pause();
Console.Clear();
}
}
}
private static void PrintMenu()
{
Console.WriteLine("Меню работы с MyList<Тренажёр>:");
Console.WriteLine("1 - Добавить элемент в конец");
Console.WriteLine("2 - Добавить элемент по индексу");
Console.WriteLine("3 - Изменить элемент по индексу");
Console.WriteLine("4 - Удалить последний элемент");
Console.WriteLine("5 - Удалить элемент по индексу");
Console.WriteLine("6 - Получить количество элементов");
Console.WriteLine("7 - Вывести список");
Console.WriteLine("8 - Вывести элемент по индексу");
Console.WriteLine("9 - Добавить диапазон элементов в конец");
Console.WriteLine("10 - Вставить диапазон элементов по индексу");
Console.WriteLine("11 - Удалить диапазон элементов");
Console.WriteLine("12 - Найти элемент по условию");
Console.WriteLine("13 - Сортировать список");
Console.WriteLine("14 - Развернуть список");
Console.WriteLine("15 - Удалить дубликаты");
Console.WriteLine("16 - Очистить список");
Console.WriteLine("17 - Вывести список через foreach");
Console.WriteLine("0 - Выход");
Console.WriteLine();
}
private static GymEquipment ReadEquipment()
{
Console.WriteLine("Введите данные тренажёра:");
int number = ReadInt("№: ");
string name = ReadRequiredString("Название: ");
string type = ReadRequiredString("Тип: ");
string condition = ReadRequiredString("Состояние: ");
string place = ReadRequiredString("Место: ");
return new GymEquipment(number, name, type, condition, place);
}
private static void AddRangeInteractive(MyList<GymEquipment> equipmentList)
{
int count = ReadInt("Сколько элементов нужно добавить в конец: ");
if (count <= 0)
{
Console.WriteLine("Количество должно быть больше нуля.");
return;
}
MyList<GymEquipment> tempList = new MyList<GymEquipment>(count);
for (int i = 0; i < count; i++)
{
Console.WriteLine($"\nЭлемент {i + 1} из {count}:");
tempList.Add(ReadEquipment());
}
equipmentList.AddRange(tempList);
Console.WriteLine("Диапазон элементов добавлен в конец списка.");
}
private static void InsertRangeInteractive(MyList<GymEquipment> equipmentList)
{
int index = ReadInt("Введите индекс для вставки диапазона: ");
int count = ReadInt("Сколько элементов нужно вставить: ");
if (count <= 0)
{
Console.WriteLine("Количество должно быть больше нуля.");
return;
}
MyList<GymEquipment> tempList = new MyList<GymEquipment>(count);
for (int i = 0; i < count; i++)
{
Console.WriteLine($"\nЭлемент {i + 1} из {count}:");
tempList.Add(ReadEquipment());
}
equipmentList.InsertRange(index, tempList);
Console.WriteLine("Диапазон элементов вставлен.");
}
private static void FindEquipment(MyList<GymEquipment> equipmentList)
{
if (equipmentList.Count == 0)
{
Console.WriteLine("Список пуст.");
return;
}
string fragment = ReadRequiredString("Введите текст для поиска (по названию, типу, состоянию или месту): ");
GymEquipment found = equipmentList.Find(item =>
item.Name.IndexOf(fragment, StringComparison.OrdinalIgnoreCase) >= 0
|| item.Type.IndexOf(fragment, StringComparison.OrdinalIgnoreCase) >= 0
|| item.Condition.IndexOf(fragment, StringComparison.OrdinalIgnoreCase) >= 0
|| item.Place.IndexOf(fragment, StringComparison.OrdinalIgnoreCase) >= 0);
if (found == null)
{
Console.WriteLine("Подходящий элемент не найден.");
}
else
{
Console.WriteLine("Найденный элемент:");
Console.WriteLine(found);
}
}
private static void PrintWithForeach(MyList<GymEquipment> equipmentList)
{
if (equipmentList.Count == 0)
{
Console.WriteLine("Список пуст.");
return;
}
int index = 0;
foreach (GymEquipment equipment in equipmentList)
{
Console.WriteLine($"[{index}] {equipment}");
index++;
}
}
private static int ReadInt(string message)
{
while (true)
{
Console.Write(message);
string input = Console.ReadLine();
if (int.TryParse(input, out int value))
{
return value;
}
Console.WriteLine("Введите целое число.");
}
}
private static string ReadRequiredString(string message)
{
while (true)
{
Console.Write(message);
string input = Console.ReadLine();
if (!string.IsNullOrWhiteSpace(input))
{
return input.Trim();
}
Console.WriteLine("Строка не должна быть пустой.");
}
}
private static void Pause()
{
Console.WriteLine();
Console.WriteLine("Нажмите Enter, чтобы продолжить...");
Console.ReadLine();
}
}
}