Advertisement
ZhongNi

AnarchyHospital

Dec 18th, 2024
42
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 8.56 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Linq;
  5.  
  6. namespace AnarchyHospital
  7. {
  8.     internal class Program
  9.     {
  10.         static void Main()
  11.         {
  12.             Hospital hospital = new Hospital();
  13.             hospital.Work();
  14.         }
  15.     }
  16.  
  17.     public class Hospital
  18.     {
  19.         private const string ExitCommand = "Exit";
  20.  
  21.         private readonly Manager _manager;
  22.         private readonly List<Patient> _patients;
  23.  
  24.         public Hospital()
  25.         {
  26.             _manager = new Manager();
  27.             _patients = _manager.Fill();
  28.         }
  29.  
  30.         public void Work()
  31.         {
  32.             _manager.ShowPatients(_patients);
  33.             Console.WriteLine("\nPress something for menu..");
  34.             Console.ReadKey();
  35.  
  36.             bool isWorking = true;
  37.  
  38.             while (isWorking)
  39.             {
  40.                 Console.Clear();
  41.                 string typeSort = ProcessMenu();
  42.  
  43.                 if (typeSort.ToLower() == ExitCommand.ToLower())
  44.                 {
  45.                     isWorking = false;
  46.                 }
  47.                 else if (Validate(typeSort))
  48.                 {
  49.                     List<Patient> sortedPatients = _manager.SortPatients(_patients, typeSort);
  50.                     _manager.ShowPatients(sortedPatients);
  51.                 }
  52.  
  53.                 Console.WriteLine("\nPress something..");
  54.                 Console.ReadKey();
  55.             }
  56.         }
  57.  
  58.         private string ProcessMenu()
  59.         {
  60.             Console.WriteLine($"Select command: " +
  61.                 $"\nsort by name - {Manager.NameSortCommand}" +
  62.                 $"\nsort by age - {Manager.AgeSortCommand}" +
  63.                 $"\nor the name of the disease to bring out patients with this disease" +
  64.                 $"\n\"{ExitCommand}\" for exit");
  65.  
  66.             Console.WriteLine($"\nList of all diseases that patients have: {string.Join(", ", _manager.GetAllDiseases(_patients))}");
  67.  
  68.             return Console.ReadLine();
  69.         }
  70.  
  71.         private bool Validate(string typeSort)
  72.         {
  73.             if (typeSort == Manager.NameSortCommand)
  74.             {
  75.                 return true;
  76.             }
  77.             else if (typeSort == Manager.AgeSortCommand)
  78.             {
  79.                 return true;
  80.             }
  81.             else if (_manager.GetAllDiseases(_patients).Contains(typeSort.ToLower()))
  82.             {
  83.                 return true;
  84.             }
  85.  
  86.             Console.WriteLine("\nUnknown command or disease. Press something..");
  87.             Console.ReadKey();
  88.  
  89.             return false;
  90.         }
  91.     }
  92.  
  93.     public class Manager
  94.     {
  95.         public const string NameSortCommand = "1";
  96.         public const string AgeSortCommand = "2";
  97.  
  98.         public List<Patient> Fill()
  99.         {
  100.             PatientFactory patientFactory = new PatientFactory();
  101.  
  102.             return patientFactory.Create().ToList();
  103.         }
  104.  
  105.         public void ShowPatients(List<Patient> patients)
  106.         {
  107.             foreach (Patient patient in patients)
  108.             {
  109.                 string name = $"{patient.Name} {patient.Surname}";
  110.                 string age = patient.Age.ToString();
  111.                 string disease = string.Join(", ", patient.GetDiseases());
  112.  
  113.                 string tabulation = "\t";
  114.                 int maxLength = 15;
  115.  
  116.                 if (name.Length <= maxLength)
  117.                 {
  118.                     tabulation += tabulation;
  119.                 }
  120.  
  121.                 Console.WriteLine($"{name}{tabulation}age: {age}\t\tdiagnostic: {disease}");
  122.             }
  123.         }
  124.  
  125.         public List<string> GetAllDiseases(List<Patient> patients)
  126.         {
  127.             List<string> diseaseList = new List<string>();
  128.  
  129.             foreach (Patient patient in patients)
  130.             {
  131.                 diseaseList.AddRange(patient.GetDiseases().ToList().Except(diseaseList).ToList());
  132.             }
  133.  
  134.             return diseaseList;
  135.         }
  136.  
  137.         public List<Patient> SortPatients(List<Patient> patients, string typeSort)
  138.         {
  139.             List<Patient> selectedPatients = null;
  140.  
  141.             switch (typeSort)
  142.             {
  143.                 case NameSortCommand:
  144.                     selectedPatients = patients.OrderBy(patient => patient.Surname).ToList();
  145.                     break;
  146.  
  147.                 case AgeSortCommand:
  148.                     selectedPatients = patients.OrderBy(patient => patient.Age).ToList();
  149.                     break;
  150.  
  151.                 default:
  152.                     selectedPatients = patients.Where(patient => patient.GetDiseases().Contains(typeSort)).ToList();
  153.                     break;
  154.             }
  155.  
  156.             return selectedPatients.ToList();
  157.         }
  158.     }
  159.  
  160.     public class PatientFactory
  161.     {
  162.         private readonly ListProvider _listProvider;
  163.         private readonly Random _random;
  164.         public PatientFactory()
  165.         {
  166.             _listProvider = new ListProvider();
  167.             _random = new Random();
  168.         }
  169.  
  170.         public List<Patient> Create()
  171.         {
  172.             List<Patient> patients = new List<Patient>();
  173.             int patientsCount = 20;
  174.  
  175.             for (int i = 0; i < patientsCount; i++)
  176.             {
  177.                 patients.Add(new Patient(GetName(_listProvider.GetName()), GetName(_listProvider.GetSurname()), GetAge(), GetDisease()));
  178.             }
  179.  
  180.             return patients;
  181.         }
  182.  
  183.         private string GetName(List<string> values)
  184.         {
  185.             string value = values[_random.Next(values.Count)];
  186.  
  187.             return value;
  188.         }
  189.  
  190.         private List<string> GetDisease()
  191.         {
  192.             int minDiseaseCount = 1;
  193.             int maxDiseaseCount = 3;
  194.             List<string> diseases = new List<string>();
  195.  
  196.             for (int i = 0; i < _random.Next(minDiseaseCount, maxDiseaseCount + 1);)
  197.             {
  198.                 string disease = _listProvider.GetDisease()[_random.Next(_listProvider.GetDisease().Count)];
  199.  
  200.                 if (diseases.Contains(disease) == false)
  201.                 {
  202.                     diseases.Add(disease);
  203.                     i++;
  204.                 }
  205.             }
  206.  
  207.             return diseases;
  208.         }
  209.  
  210.         private int GetAge()
  211.         {
  212.             int minAge = 1;
  213.             int maxAge = 90;
  214.  
  215.             int age = _random.Next(minAge, maxAge);
  216.  
  217.             return age;
  218.         }
  219.     }
  220.  
  221.     public class ListProvider
  222.     {
  223.         private readonly List<string> _names;
  224.         private readonly List<string> _surnames;
  225.         private readonly List<string> _disease;
  226.  
  227.         public ListProvider()
  228.         {
  229.             _names = new List<string>{"Aleksandr", "Nikolaj", "Ivan", "Sergej", "Vladimir", "Mikhail", "Vasilij", "Aleksej", "Andrej",                "Dmitrij", "Viktor", "Yurij", "Petr", "Anatolij", "Pavel", "Igor", "Evgenij", "Oleg", "Valerij", "Vitalij", "Grigorij",
  230.                 "Fedor", "Boris", "Gennadij", "Leonid", "Konstantin", "Vyacheslav", "Georgij", "Denis", "Valentin", "Maksim", "Vadim",
  231.                 "Roman", "Ilya", "Ruslan", "Stepan", "Semen", "Anton", "Eduard", "Stanislav"};
  232.             _surnames = new List<string> {"Ivanov", "Kuznetsov", "Smirnov", "Popov", "Petrov", "Vasilev", "Kozlov", "Novikov", "Sokolov",                 "Volkov", "Fedorov", "Mikhajlov", "Semenov", "Pavlov", "Morozov", "Zajtsev", "Stepanov", "Andreev", "Egorov", "Nikitin",
  233.                 "Zakharov", "Makarov", "Alekseev", "Yakovlev", "Kovalenko", "Nikolaev", "Solovev", "Bondarenko", "Kovalev", "Lebedev",
  234.                 "Shevchenko", "Vorobev", "Romanov", "Sergeev", "Grigorev", "Kiselev", "Kravchenko", "Baranov", "Kuzmin", "Frolov"};
  235.             _disease = new List<string> { "bronchitis", "diabetes", "migraine", "asthma", "allergy" };
  236.         }
  237.  
  238.         public List<string> GetName()
  239.         {
  240.             return _names.ToList();
  241.         }
  242.  
  243.         public List<string> GetSurname()
  244.         {
  245.             return _surnames.ToList();
  246.         }
  247.  
  248.         public List<string> GetDisease()
  249.         {
  250.             return _disease.ToList();
  251.         }
  252.     }
  253.  
  254.     public class Patient
  255.     {
  256.         private readonly List<string> _diseases;
  257.  
  258.         public Patient(string name, string surname, int age, List<string> diseases)
  259.         {
  260.             Name = name;
  261.             Surname = surname;
  262.             Age = age;
  263.             _diseases = diseases;
  264.         }
  265.  
  266.         public string Name { get; private set; }
  267.         public string Surname { get; private set; }
  268.         public int Age { get; private set; }
  269.  
  270.         public List<string> GetDiseases()
  271.         {
  272.             return _diseases.ToList();
  273.         }
  274.     }
  275. }
  276.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement