Advertisement
IGRODELOFF

Task50.3

Aug 3rd, 2022 (edited)
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 9.62 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace Task50
  8. {
  9.     internal class Program
  10.     {
  11.         static void Main(string[] args)
  12.         {
  13.             AutoService autoService = new AutoService();
  14.             autoService.Work();
  15.         }
  16.     }
  17.  
  18.     class AutoService
  19.     {
  20.         private Random _random = new Random();
  21.         private Storage _details;
  22.         private Queue<Car> _cars;
  23.         private float _money;
  24.  
  25.         public AutoService()
  26.         {
  27.             int minCountCar = 1;
  28.             int maxCountCar = 5;
  29.             int countCar = _random.Next(minCountCar, maxCountCar);
  30.             int minCountMoney = 2000;
  31.             int maxCountMoney = 10000;
  32.          
  33.             _money = _random.Next(minCountMoney, maxCountMoney);
  34.             _details = new Storage();
  35.             _cars = new Queue<Car>();
  36.  
  37.             AddCars(countCar);
  38.         }
  39.  
  40.         public void Work()
  41.         {
  42.             bool isExit = false;
  43.  
  44.             while (isExit == false && _cars.Count > 0)
  45.             {
  46.                 Console.WriteLine($"На вашем балансе - {_money} денег");
  47.                 Console.Write(
  48.                     $"У вас очередь в мастерской из {_cars.Count} машин, ожидающих ремонт\n" +
  49.                     $"Домтупные команды:\n" +
  50.                     $"Обслужить - обслужить машины\n" +
  51.                     $"Выход - закрыть мастерскую." +
  52.                     $"Введите действие: ");
  53.  
  54.                 string userInput = Console.ReadLine();
  55.  
  56.                 switch (userInput)
  57.                 {
  58.                     case "Обслужить":
  59.                         ServiceCar();
  60.                         break;
  61.                     case "Выход":
  62.                         isExit = true;
  63.                         break;
  64.                     default:
  65.                         Console.WriteLine("Такой команды нет.");
  66.                         break;
  67.                 }
  68.             }
  69.         }
  70.  
  71.         private void AddCars(int countCar)
  72.         {
  73.             for (int i = 0; i < countCar; i++)
  74.             {
  75.                 _cars.Enqueue(new Car());
  76.             }
  77.         }
  78.  
  79.         private void ShowBrokeDetail(Car car)
  80.         {
  81.             Console.WriteLine($"У автомобиля поломан(-о) - {car.BrokenDetail}.");
  82.             Console.WriteLine($"Цена за работу будет - {_details.GetRepairPrice(car)} денег.");
  83.         }
  84.  
  85.         private void ServiceCar()
  86.         {
  87.             Console.Clear();
  88.             Car car = _cars.Dequeue();
  89.  
  90.             ShowBrokeDetail(car);
  91.  
  92.             Console.Write(
  93.                 "У вас доступно два действия: \n" +
  94.                 "Ремонтировать и отказать\n" +
  95.                 "Введите действие: ");
  96.  
  97.             string userInput = Console.ReadLine();
  98.  
  99.             switch (userInput)
  100.             {
  101.                 case "Ремонтировать":
  102.                     Repair(car);
  103.                     break;
  104.                 case "Отказать":
  105.                     RefuseClient();
  106.                     break;
  107.                 default:
  108.                     Console.WriteLine("Такого действия нет.");
  109.                     break;
  110.             }
  111.         }
  112.  
  113.         private void Repair(Car car)
  114.         {
  115.             int indexDetail;
  116.             if (TryRepairCar(car, out indexDetail))
  117.             {
  118.                 Console.WriteLine($"Вы починили. Вам заплатили {_details.GetRepairPrice(car)} денег");
  119.                 _money += _details.GetRepairPrice(car);
  120.                 _details.RemoveAt(indexDetail);
  121.             }
  122.             else
  123.             {
  124.                 Console.WriteLine(
  125.                     $"Вы установили не ту деталь. \n" +
  126.                     $"Вы возместили ущерб в размере - {_details.GetRepairPrice(car)} денег");
  127.                 _money -= _details.GetRepairPrice(car);
  128.             }
  129.         }
  130.  
  131.         private void RefuseClient()
  132.         {
  133.             int fine = 500;
  134.  
  135.             Console.WriteLine($"Вы отказали клиенту и оплачиваете штраф в размере {fine} денег");
  136.             _money -= fine;
  137.         }
  138.  
  139.         private bool TryRepairCar(Car car, out int indexDetail)
  140.         {
  141.             _details.Show();
  142.  
  143.             string requestNumberIndexDetail =
  144.                 "Введите номер детали которую хотите заменить.";
  145.  
  146.             indexDetail = GetInt(requestNumberIndexDetail);
  147.  
  148.             if (indexDetail >= 0 && indexDetail <= _details.GetCount() - 1 && car.BrokenDetail == _details.GetName(indexDetail))
  149.             {
  150.                 return true;
  151.             }
  152.             else if (indexDetail >= 0 && indexDetail <= _details.GetCount() - 1)
  153.             {
  154.                 Console.WriteLine("Эта не та деталь.");
  155.                 return false;
  156.             }
  157.             else
  158.             {
  159.                 Console.WriteLine("Такой детали нет.");
  160.                 return false;
  161.             }
  162.         }
  163.  
  164.         private int GetInt(string requestInputNumber)
  165.         {
  166.             string errorConversion = "Ошибка,вы вели не цифры! Попробуйте снова.";
  167.             string userInput;
  168.  
  169.             bool resultConverted = false;
  170.  
  171.             int number = 0;
  172.  
  173.             while (resultConverted == false)
  174.             {
  175.                 Console.Write(requestInputNumber);
  176.                 userInput = Console.ReadLine();
  177.  
  178.                 resultConverted = int.TryParse(userInput, out int numberConvert);
  179.  
  180.                 if (resultConverted != true)
  181.                     Console.WriteLine(errorConversion);
  182.                 else
  183.                     number = numberConvert;
  184.             }
  185.             return number;
  186.         }
  187.     }
  188.  
  189.     class Car
  190.     {
  191.         private Random _random = new Random();
  192.         private List<string> _causeFailure = new List<string>();
  193.  
  194.         public string BrokenDetail { get; private set; }
  195.  
  196.         public Car()
  197.         {
  198.             AddCauseFailure();
  199.             CreateBrokenDetail();
  200.         }
  201.  
  202.         private void CreateBrokenDetail()
  203.         {
  204.             int detailIndex = _random.Next(0, _causeFailure.Count-1);
  205.  
  206.             BrokenDetail = GetBrokenDetail(detailIndex);
  207.         }
  208.  
  209.         private string GetBrokenDetail(int detailIndex)
  210.         {
  211.             return _causeFailure[detailIndex];
  212.         }
  213.  
  214.         private void AddCauseFailure()
  215.         {
  216.             _causeFailure.Add("Колесо");
  217.             _causeFailure.Add("Фары");
  218.             _causeFailure.Add("Коробка передач");
  219.             _causeFailure.Add("Тормоза");
  220.             _causeFailure.Add("Бампер");
  221.         }
  222.     }
  223.  
  224.     class Storage
  225.     {
  226.         private List<Detail> _storage = new List<Detail>();
  227.  
  228.         public Storage()
  229.         {
  230.             AddDetail();
  231.         }
  232.  
  233.         public void Show()
  234.         {
  235.             Console.WriteLine("Детали которые есть на складе: ");
  236.  
  237.             for (int i = 0; i < _storage.Count; i++)
  238.             {
  239.                 Console.WriteLine($"{i+1}. {_storage[i].Name} стоимостью - {_storage[i].Price}");
  240.             }
  241.         }
  242.  
  243.         public int GetRepairPrice(Car car)
  244.         {
  245.             int repairPrice = 0;
  246.             int costWork = 10;
  247.  
  248.             foreach (var detail in _storage)
  249.             {
  250.                 if (car.BrokenDetail == detail.Name)
  251.                 {
  252.                     repairPrice += detail.Price * costWork;
  253.                     break;
  254.                 }
  255.             }
  256.  
  257.             return repairPrice;
  258.         }
  259.  
  260.         public void RemoveAt(int index)
  261.         {
  262.             _storage.RemoveAt(index);
  263.         }
  264.  
  265.         public int GetCount()
  266.         {
  267.             return _storage.Count;
  268.         }
  269.  
  270.         public string GetName(int index)
  271.         {
  272.             return _storage[index].Name;
  273.         }
  274.  
  275.         private void AddDetail()
  276.         {
  277.             _storage.Add(new Detail("Колесо", 50));
  278.             _storage.Add(new Detail("Фары", 25));
  279.             _storage.Add(new Detail("Коробка передач", 85));
  280.             _storage.Add(new Detail("Тормоза", 60));
  281.             _storage.Add(new Detail("Бампер", 10));
  282.         }
  283.  
  284.         private int GetInt(string requestInputNumber)
  285.         {
  286.             string errorConversion = "Ошибка,вы вели не цифры! Попробуйте снова.";
  287.             string userInput;
  288.  
  289.             bool resultConverted = false;
  290.  
  291.             int number = 0;
  292.  
  293.             while (resultConverted == false)
  294.             {
  295.                 Console.Write(requestInputNumber);
  296.                 userInput = Console.ReadLine();
  297.  
  298.                 resultConverted = int.TryParse(userInput, out int numberConvert);
  299.  
  300.                 if (resultConverted != true)
  301.                     Console.WriteLine(errorConversion);
  302.                 else
  303.                     number = numberConvert;
  304.             }
  305.             return number;
  306.         }
  307.     }
  308.  
  309.     class Detail
  310.     {
  311.         public string Name { get; private set; }
  312.         public int Price { get; private set; }
  313.  
  314.         public Detail(string name, int price)
  315.         {
  316.             Name = name;
  317.             Price = price;
  318.         }
  319.     }
  320. }
  321.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement