Created
June 17, 2025 00:36
-
-
Save emak4rov/a0f4b6453561808723668428e1e6c46d to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
namespace HWFindingACriminal | |
{ | |
internal class Program | |
{ | |
static void Main(string[] args) | |
{ | |
DefaultCriminalsListFactory factory = new DefaultCriminalsListFactory(); | |
List<Criminal> criminals = factory.Create(); | |
DetectiveInterface userInterface = new DetectiveInterface(); | |
userInterface.Work(criminals.ToList()); | |
} | |
} | |
class DetectiveInterface | |
{ | |
public void Work(List<Criminal> criminals) | |
{ | |
string newSearchCommand = "да"; | |
do | |
{ | |
Console.Clear(); | |
SearchParameters parameters = GetParameters(); | |
IEnumerable<Criminal> results = FindCriminals(criminals.ToList(), parameters); | |
DisplayResults(results); | |
Console.WriteLine($"Поискать ещё кого-нибудь? ({newSearchCommand}/anykey)"); | |
} | |
while (Console.ReadLine().ToLower() == newSearchCommand); | |
} | |
private void DisplayResults(IEnumerable<Criminal> criminals) | |
{ | |
if (criminals.Any() == false) | |
{ | |
Console.WriteLine("Подходящих по описанию преступников не обнаружено(возможно, всех уже переловили)."); | |
} | |
else | |
{ | |
Console.WriteLine("Следующие подходящие под описание преступники всё ещё на свободе:"); | |
foreach (var criminal in criminals) | |
{ | |
Console.WriteLine($"{criminal.FullName}, Рост: {criminal.Height} см, Вес: {criminal.FullName} кг, {criminal.Nationality}"); | |
} | |
} | |
} | |
private IEnumerable<Criminal> FindCriminals(List<Criminal> criminals, SearchParameters parameters) | |
{ | |
return criminals.Where(criminal => | |
criminal.Height == parameters.Height | |
&& criminal.Weight == parameters.Weight | |
&& criminal.Nationality.Equals(parameters.Nationality, StringComparison.OrdinalIgnoreCase) | |
&& criminal.IsImprisoned == false); | |
} | |
private SearchParameters GetParameters() | |
{ | |
Console.WriteLine("Введите параметры для поиска:"); | |
Console.WriteLine("Рост: "); | |
int height = UserUtils.ReadInt(); | |
Console.WriteLine("Вес: "); | |
int weight = UserUtils.ReadInt(); | |
Console.WriteLine("Национальность"); | |
string nation = Console.ReadLine(); | |
return new SearchParameters(height, weight, nation); | |
} | |
} | |
class SearchParameters | |
{ | |
public SearchParameters(int height, int weight, string nationality) | |
{ | |
Height = height; | |
Weight = weight; | |
Nationality = nationality; | |
} | |
public int Height { get; private set; } | |
public int Weight { get; private set; } | |
public string Nationality { get; private set; } | |
} | |
class DefaultCriminalsListFactory | |
{ | |
public List<Criminal> Create() | |
{ | |
List<Criminal> criminals = new List<Criminal> | |
{ | |
new Criminal("Француа Эмануэльевич Макрон", "Француз", false, 175, 80), | |
new Criminal("Лео Рафаэльевич Гудрон", "Француз", false, 170, 85), | |
new Criminal("Луи Бернардович Шеврон", "Француз", false, 170, 85), | |
new Criminal("Луи Джулсович Рулон", "Француз", true, 180, 75), | |
new Criminal("Ганс Христианович Андерсон", "Немец", true, 181, 77), | |
new Criminal("Фриц Карлович Пинкертон", "Немец", true, 177, 73), | |
new Criminal("Фридрих Михаэльевич Гавриштерн", "Немец", false, 171, 79), | |
new Criminal("Джонн Смитович Калифорнийский", "Американец", true, 168, 90), | |
new Criminal("Смитт Джоннович Айовский", "Американец", false, 175, 99), | |
new Criminal("Билл Джекович Вашинингтонский", "Американец", true, 179, 109), | |
new Criminal("Руссо Туристо Обликоморале", "Беларус", false, 175, 77) | |
}; | |
return criminals; | |
} | |
} | |
class Criminal | |
{ | |
public Criminal(string name, string nationality, bool isInPrison, int height, int weight) | |
{ | |
FullName = name; | |
Nationality = nationality; | |
IsImprisoned = isInPrison; | |
Height = height; | |
Weight = weight; | |
} | |
public string FullName { get; private set; } | |
public string Nationality { get; private set; } | |
public bool IsImprisoned { get; private set; } | |
public int Height { get; private set; } | |
public int Weight { get; private set; } | |
} | |
public static class UserUtils | |
{ | |
public static int ReadInt() | |
{ | |
int number; | |
while (int.TryParse(Console.ReadLine(), out number) == false) | |
{ | |
Console.WriteLine("Ошибка! Введите целое число."); | |
} | |
return number; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment