Advertisement
NikaBang

Автосервис

Sep 24th, 2022 (edited)
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 10.83 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. internal class Program
  5. {
  6.  
  7.     //У вас есть автосервис, в который приезжают люди, чтобы починить свои автомобили.
  8.     //У вашего автосервиса есть баланс денег и склад деталей.
  9.     //Когда приезжает автомобиль, у него сразу ясна его поломка, и эта поломка отображается у вас в консоли
  10.     //вместе с ценой за починку(цена за починку складывается из цены детали + цена за работу).
  11.     //Поломка всегда чинится заменой детали, но количество деталей ограничено тем, что находится на вашем складе деталей.
  12.     //Если у вас нет нужной детали на складе, то вы можете отказать клиенту, и в этом случае вам придется выплатить штраф.
  13.     //Если вы замените не ту деталь, то вам придется возместить ущерб клиенту.
  14.     //За каждую удачную починку вы получаете выплату за ремонт, которая указана в чек-листе починки.
  15.  
  16.     static void Main()
  17.     {
  18.         new CarService().Start();
  19.     }
  20. }
  21.  
  22. class CarService
  23. {
  24.     private int _money;
  25.     private int _fine;
  26.     private List<Inventory> _spareParts;
  27.     private List<string> _listProblems;
  28.     private List<MechanicsJob> _listOfSolutionsProblems;
  29.     private Car _car;
  30.  
  31.     private int GetMoney
  32.     {
  33.         get
  34.         {
  35.             if (_money < 0)
  36.             {
  37.                 _money = 0;
  38.             }
  39.  
  40.             return _money;
  41.         }
  42.     }
  43.  
  44.     public void Start()
  45.     {
  46.         Initialize();
  47.  
  48.         bool inCycle = true;
  49.  
  50.         while (inCycle)
  51.         {
  52.             Console.Clear();
  53.  
  54.             if (GetMoney > 0)
  55.             {
  56.                 if (_spareParts.Count > 0)
  57.                 {
  58.                     RemoveNonExistentDetails();
  59.  
  60.                     _car = new Car(_listProblems);
  61.                     int problemIndex = _listProblems.IndexOf(_car.Problem);
  62.  
  63.                     ShowSpareParts();
  64.  
  65.                     ShowInfoService();
  66.  
  67.                     if (problemIndex < _spareParts.Count)
  68.                     {
  69.                         Console.Write("Выберите необходимую деталь: ");
  70.                         int indexSelectionByUser = GetNumber() - 1;
  71.                         Console.WriteLine($"Выбрано: {_spareParts[indexSelectionByUser].SparePart.Name}");
  72.  
  73.                         if (indexSelectionByUser == problemIndex)
  74.                         {
  75.                             ShowTrueMechanicsWork();
  76.                         }
  77.                         else if (indexSelectionByUser != problemIndex)
  78.                         {
  79.                             ShowFalseMechanicsWork(indexSelectionByUser);
  80.                         }
  81.                     }
  82.                     else
  83.                     {
  84.                         Console.WriteLine($"Клиенту отказано в сервисе, ввиду отсутствия небходимой запчасти\n" +
  85.                             $"Сервис потерял клиента и потерпел убытки в размере {_fine}р");
  86.                         _money -= _fine;
  87.                     }
  88.  
  89.                     Console.WriteLine("\nСледующий клиент...");
  90.                     Console.ReadKey();
  91.                 }
  92.                 else
  93.                 {
  94.                     inCycle = false;
  95.                     Console.WriteLine($"Деталей больше нет...");
  96.                 }
  97.             }
  98.             else
  99.             {
  100.                 inCycle = false;
  101.                 Console.WriteLine($"Автосервис обанкротился...");
  102.             }
  103.         }
  104.     }
  105.  
  106.     private void RemoveNonExistentDetails()
  107.     {
  108.         List<Inventory> bufList = new List<Inventory>();
  109.  
  110.         foreach (Inventory part in _spareParts)
  111.         {
  112.             if (part.Count > 0)
  113.             {
  114.                 bufList.Add(part);
  115.             }
  116.         }
  117.  
  118.         _spareParts.Clear();
  119.         _spareParts = bufList;
  120.     }
  121.  
  122.  
  123.     public void ShowSpareParts()
  124.     {
  125.         Console.WriteLine("Склад запчастей:\n");
  126.  
  127.         for (int i = 0; i < _spareParts.Count; i++)
  128.         {
  129.             Console.WriteLine($"{i + 1}. {_spareParts[i].GetInfo()}");
  130.         }
  131.  
  132.         Console.Write("\n");
  133.     }
  134.  
  135.  
  136.     public void ShowInfoService()
  137.     {
  138.         int index = _listProblems.IndexOf(_car.Problem);
  139.  
  140.         Console.WriteLine($"Деньги автосервиса: {GetMoney}\n" +
  141.             $"Проблема клиента: {_car.Problem}\n" +
  142.             $"Решение механика: {_listOfSolutionsProblems[index].SolvingProblem} - {_listOfSolutionsProblems[index].Price}р\n");
  143.     }
  144.  
  145.     public void ShowTrueMechanicsWork()
  146.     {
  147.         int index = _listProblems.IndexOf(_car.Problem);
  148.  
  149.         _spareParts[index].RemovePart();
  150.  
  151.         Console.WriteLine($"\nМеханик использовал деталь \"{_spareParts[index].SparePart.Name}\"\n" +
  152.             $"Проблема \"{_car.Problem}\" устранена\n" +
  153.             $"Клиент заплатил за работу механика и \"{_spareParts[index].SparePart.Name}\": {_listOfSolutionsProblems[index].Price} + {_spareParts[index].SparePart.Price} = " +
  154.             $"{_listOfSolutionsProblems[index].Price + _spareParts[index].SparePart.Price}р");
  155.  
  156.         _money += _listOfSolutionsProblems[index].Price + _spareParts[index].SparePart.Price;
  157.     }
  158.  
  159.     public void ShowFalseMechanicsWork(int userIndex)
  160.     {
  161.         int index = _listProblems.IndexOf(_car.Problem);
  162.  
  163.         _spareParts[index].RemovePart();
  164.         _spareParts[userIndex].RemovePart();
  165.  
  166.         Console.WriteLine($"\nМеханик использовал неподходящую деталь \"{_spareParts[userIndex].SparePart.Name}\"\n" +
  167.             $"Проблема \"{_car.Problem}\" устранена за счет сервиса, использована деталь \"{_spareParts[index].SparePart.Name}\"\n" +
  168.             $"Клиент ничего не заплатил\n" +
  169.             $"Сервис потерпел двойные убытки за использованные детали: {_spareParts[userIndex].SparePart.Price} + {_spareParts[index].SparePart.Price} = " +
  170.             $"{_spareParts[userIndex].SparePart.Price + _spareParts[index].SparePart.Price}р\n" +
  171.             $"И выплатил клиенту штраф за недобросовестный ремонт {_fine}р");
  172.  
  173.         _money -= _spareParts[userIndex].SparePart.Price + _spareParts[index].SparePart.Price + _fine;
  174.     }
  175.  
  176.     private int GetNumber()
  177.     {
  178.         int number = 0;
  179.         bool inCycle = true;
  180.  
  181.         while (inCycle)
  182.         {
  183.             string inputUser = Console.ReadLine();
  184.  
  185.             if (int.TryParse(inputUser, out number) && number > 0 && number <= _spareParts.Count)
  186.             {
  187.                 inCycle = false;
  188.             }
  189.             else
  190.             {
  191.                 Console.Write("Введите число: ");
  192.             }
  193.         }
  194.  
  195.         return number;
  196.     }
  197.  
  198.     private void Initialize()
  199.     {
  200.         _money = 3000;
  201.         _fine = 500;
  202.  
  203.         _listProblems = new List<string>()
  204.             {
  205.                 "Не заводится",
  206.                 "Коробка \"пинается\"",
  207.                 "Не горит фара",
  208.                 "Плохо тормозит",
  209.                 "Трещина на лобовом стекле",
  210.                 "Подвеска скрипит",
  211.                 "Поменять масло в двигателе"
  212.             };
  213.  
  214.         _spareParts = new List<Inventory>
  215.             {
  216.                 new Inventory(new SparePart("Комплект свечей зажигания", 450), 10),
  217.                 new Inventory(new SparePart("Канистра с маслом для коробки", 3000), 5),
  218.                 new Inventory(new SparePart("Лампочка", 200), 20),
  219.                 new Inventory(new SparePart("Комплект тормозных колодок", 6000), 7),
  220.                 new Inventory(new SparePart("Лобовое стекло", 8000), 2),
  221.                 new Inventory(new SparePart("Комплект сайлентблоков", 2400), 12),
  222.                 new Inventory(new SparePart("Канистра с маслом для двигателя", 3000), 4),
  223.             };
  224.  
  225.         _listOfSolutionsProblems = new List<MechanicsJob>()
  226.             {
  227.                 new MechanicsJob("Замена свечей", 100),
  228.                 new MechanicsJob("Замена масла в коробке", 500),
  229.                 new MechanicsJob("Замена лампочки", 100),
  230.                 new MechanicsJob("Замена тормозных колодок", 1200),
  231.                 new MechanicsJob("Замена лобового стекла", 2500),
  232.                 new MechanicsJob("Замена сайлентблоков", 2200),
  233.                 new MechanicsJob("Замена масла в двигателе", 1500)
  234.             };
  235.  
  236.         _car = null;
  237.     }
  238. }
  239.  
  240. class MechanicsJob
  241. {
  242.     public string SolvingProblem { get; private set; }
  243.     public int Price { get; private set; }
  244.  
  245.     public MechanicsJob(string solvingProblem, int price)
  246.     {
  247.         SolvingProblem = solvingProblem;
  248.         Price = price;
  249.     }
  250. }
  251.  
  252. class Inventory
  253. {
  254.     public SparePart SparePart { get; private set; }
  255.     public int Count { get; private set; }
  256.  
  257.     public Inventory(SparePart sparePart, int count)
  258.     {
  259.         SparePart = sparePart;
  260.         Count = count;
  261.     }
  262.  
  263.     public void RemovePart()
  264.     {
  265.         Count--;
  266.     }
  267.  
  268.     public string GetInfo()
  269.     {
  270.         return $"{SparePart.GetInfo()}, {Count} шт";
  271.     }
  272. }
  273.  
  274. class SparePart
  275. {
  276.     public string Name { get; private set; }
  277.     public int Price { get; private set; }
  278.  
  279.     public SparePart(string partName, int price)
  280.     {
  281.         Name = partName;
  282.         Price = price;
  283.     }
  284.  
  285.     public string GetInfo()
  286.     {
  287.         return $"{Name}, {Price}р";
  288.     }
  289. }
  290.  
  291. class Car
  292. {
  293.     private static readonly Random _random = new Random();
  294.     public string Problem { get; private set; }
  295.  
  296.     public Car(List<string> list)
  297.     {
  298.         Problem = GetRandomProblem(list);
  299.     }
  300.  
  301.     private string GetRandomProblem(List<string> list)
  302.     {
  303.         return list[_random.Next(0, list.Count)];
  304.     }
  305. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement