Skip to content

Instantly share code, notes, and snippets.

@QRemark
Created July 17, 2024 17:40
Show Gist options
  • Save QRemark/07ef04456201e683cf289e2edcb3b79f to your computer and use it in GitHub Desktop.
Save QRemark/07ef04456201e683cf289e2edcb3b79f to your computer and use it in GitHub Desktop.
Перевод бойцов
using System;
using System.Collections.Generic;
using System.Linq;
namespace Linq
{
internal class Program
{
static void Main(string[] args)
{
SoldierFactory soldierFactory = new SoldierFactory();
Army army = new Army(soldierFactory);
army.Work();
}
}
class Army
{
private List<Soldier> _platoonAlpha;
private List<Soldier> _platoonBetta;
private string _litera = "Б";
public Army(SoldierFactory soldierFactory)
{
_platoonAlpha = soldierFactory.CreatePlatoonAlfa();
_platoonBetta = soldierFactory.CreatePlatoonBetta();
}
public void Work()
{
const string CommandShowPlatoons = "1";
const string CommandMakeTransfer = "2";
const string CommandExit = "3";
bool isRunning = true;
string userInput;
while (isRunning)
{
Console.WriteLine("Добро пожаловать в отчет о вооружении! \nВам доступно: ");
Console.WriteLine($"{CommandShowPlatoons} - посмотреть списоки отрядов");
Console.WriteLine($"{CommandMakeTransfer} - произвести перевод на букву {_litera}");
Console.WriteLine($"{CommandExit} - выйти из приложения");
Console.Write("Выберите действие: ");
userInput = Console.ReadLine();
switch (userInput)
{
case CommandShowPlatoons:
ShowShowPlatoons();
break;
case CommandMakeTransfer:
MakeTransfer();
break;
case CommandExit:
isRunning = false;
break;
default:
UserUtils.HandleInvalidInput();
break;
}
Console.Clear();
}
Console.WriteLine("Всего доброго! \nДля закрытия приложения нажмите любую кнопку...");
Console.ReadKey();
}
private void Show(List<Soldier> soldiers)
{
int number = 1;
UserUtils.ShowLine();
foreach (var soldier in soldiers)
{
Console.Write(number++ + ") ");
soldier.ShowStats();
}
UserUtils.ShowLine();
}
private void MakeTransfer()
{
Console.WriteLine($"Вы решили перевести бойцов на букву {_litera} во второй отряд ");
var soldiersToTransfer = _platoonAlpha.Where(soldier => soldier.Name.StartsWith(_litera)).ToList();
_platoonAlpha = _platoonAlpha.Except(soldiersToTransfer).ToList();
_platoonBetta = _platoonBetta.Union(soldiersToTransfer).ToList();
Console.WriteLine("ВЫ перели солдат! Вот результат: ");
ShowShowPlatoons();
}
private void ShowShowPlatoons()
{
Console.WriteLine("Вы выбрали посмотреть списки всех солдат: ");
Console.WriteLine("Отряд 1");
Show(_platoonAlpha);
Console.WriteLine("Отряд 2");
Show(_platoonBetta);
Console.WriteLine("Для продолжения нажмите любую клавишу...");
Console.ReadKey();
}
}
class SoldierFactory
{
public List<Soldier> CreatePlatoonBetta()
{
List<Soldier> soldiers = new List<Soldier>
{
new Soldier("Иванов", "пистолет", "майор", 150),
new Soldier("Петров", "штурмовая винтовка", "полковник", 110),
new Soldier("Сидоров", "пистолет-пулемет", "сержант", 20),
new Soldier("Савельев", "РПГ", "рядовой", 7),
new Soldier("Морозова", "пулимет", "сержант", 10),
new Soldier("Пушкина", "снайперская винтовка", "младший сержант", 7),
new Soldier("Ложная", "автомат", "рядовой", 3),
};
return new List<Soldier>(soldiers);
}
public List<Soldier> CreatePlatoonAlfa()
{
List<Soldier> soldiers = new List<Soldier>
{
new Soldier("Иванов", "пистолет", "майор", 150),
new Soldier("Буйнов", "штурмовая винтовка", "полковник", 110),
new Soldier("Брайно", "пистолет-пулемет", "сержант", 20),
new Soldier("Савельев", "РПГ", "рядовой", 7),
new Soldier("Морозова", "пулимет", "сержант", 10),
new Soldier("Булатов", "снайперская винтовка", "младший сержант", 7),
new Soldier("Борн", "автомат", "рядовой", 3),
};
return new List<Soldier>(soldiers);
}
}
class Soldier
{
public Soldier(string name, string weapon, string rank, int date)
{
Name = name;
Weapon = weapon;
Rank = rank;
Date = date;
}
public string Name { get; private set; }
public string Weapon { get; private set; }
public string Rank { get; private set; }
public int Date { get; private set; }
public void ShowStats()
{
Console.WriteLine($"Имя: {Name}, Вооружение: {Weapon}, Звание: {Rank}, Срок службы: {Date} месяцев");
}
}
static class UserUtils
{
public static void HandleInvalidInput()
{
Console.Clear();
Console.WriteLine("Команда не была распознана, нажмите любую клавишу для продолжения...");
Console.ReadKey();
}
public static void ShowLine() => Console.WriteLine("\n** " + new string('-', 40) + " **");
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment