Advertisement
Nivikantavo

Untitled

Dec 11th, 2021 (edited)
1,488
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.75 KB | None | 0 0
  1. namespace Avtoservis
  2. {
  3.     class Program
  4.     {
  5.         static void Main(string[] args)
  6.         {
  7.             Detail cardanShaft = new Detail(3200, "Карданный вал");
  8.             Detail crankshaftSeals = new Detail(200, "Сальники коленвала");
  9.             Detail gasolinePump = new Detail(5400, "Бензонасос");
  10.             Detail stoppingSupport = new Detail(2900, "Тормозной суппорт");
  11.             Detail ignitionSwitch  = new Detail(300, "Выключатель зажигания");
  12.  
  13.             BoxOfDitails cardanShaftsBox = new BoxOfDitails(cardanShaft, 3);
  14.             BoxOfDitails crankshaftSealsBox = new BoxOfDitails(crankshaftSeals, 3);
  15.             BoxOfDitails gasolinePumpBox = new BoxOfDitails(gasolinePump, 3);
  16.             BoxOfDitails stoppingSupportBox = new BoxOfDitails(stoppingSupport, 3);
  17.             BoxOfDitails ignitionSwitchBox = new BoxOfDitails(ignitionSwitch, 3);
  18.  
  19.             List<BoxOfDitails> boxOfDitails = new List<BoxOfDitails> { cardanShaftsBox, crankshaftSealsBox, gasolinePumpBox , stoppingSupportBox , ignitionSwitchBox };
  20.  
  21.             Breaking brokenCardanShaft = new Breaking(cardanShaft, 2000, "");
  22.             Breaking brokenCrankshaftSeals = new Breaking(cardanShaft, 2000, "");
  23.             Breaking brokenGasolinePump = new Breaking(cardanShaft, 2000, "");
  24.             Breaking brokenStoppingSupport = new Breaking(cardanShaft, 2000, "");
  25.  
  26.             List<Breaking> breakings = new List<Breaking> { brokenCardanShaft, brokenCrankshaftSeals, brokenGasolinePump , brokenStoppingSupport };
  27.  
  28.             CarService carService = new CarService(1000, new Warehouse(boxOfDitails), breakings, -500);
  29.  
  30.             Car car1 = new Car(cardanShaft);
  31.             Car car2 = new Car(ignitionSwitch);
  32.  
  33.             carService.ServeCar(car1);
  34.             Console.WriteLine();
  35.             carService.ServeCar(car2);
  36.         }
  37.     }
  38.  
  39.         class CarService
  40.     {
  41.         private int _balance;
  42.         private Warehouse _warehouse;
  43.         private List<Breaking> _breakings;
  44.         private int _refusalPenalty;
  45.  
  46.         public CarService(int balance, Warehouse warehouse, List<Breaking> breakings, int refusalPenalty)
  47.         {
  48.             _balance = balance;
  49.             _warehouse = warehouse;
  50.             _breakings = breakings;
  51.             _refusalPenalty = refusalPenalty;
  52.         }
  53.  
  54.         public void ServeCar(Car car)
  55.         {
  56.             Breaking breaking = IdentifyBrakedown(car.BrokenDetal);
  57.  
  58.             if(breaking != null)
  59.             {
  60.                 Console.WriteLine($"Поступила машина. Поломка: {car.BrokenDetal.Name}, необходимая деталь: {car.BrokenDetal.Name}");
  61.  
  62.                 if (_warehouse.CheckAvailabilityDetail(car.BrokenDetal))
  63.                 {
  64.                     RenovateCar(breaking);
  65.                     return;
  66.                 }
  67.             }
  68.  
  69.             RefuseToRepair();
  70.         }
  71.  
  72.         public void CalculateTheClient(int paid)
  73.         {
  74.             _balance += paid;
  75.  
  76.             if (paid > 0)
  77.             {
  78.                 Console.WriteLine($"Получена плата в размере: {paid}. Баланс: {_balance}");
  79.             }
  80.             else
  81.             {
  82.                 Console.WriteLine($"Уплачен штраф в размере: {paid}. Баланс: {_balance}");
  83.             }
  84.         }
  85.  
  86.         private void RenovateCar(Breaking breaking)
  87.         {
  88.             Console.WriteLine("Машина принята в ремонт.");
  89.  
  90.             _warehouse.TakeDetail(breaking.NecessaryDetail);
  91.  
  92.             int paid = breaking.NecessaryDetail.Price + breaking.PriceForWork;
  93.  
  94.             Console.WriteLine("Ремонт выполнен.");
  95.             CalculateTheClient(paid);
  96.         }
  97.  
  98.         private void RefuseToRepair()
  99.         {
  100.             Console.WriteLine("В ремонте отказано.");
  101.             CalculateTheClient(_refusalPenalty);
  102.         }
  103.  
  104.         private Breaking IdentifyBrakedown(Detail detail)
  105.         {
  106.             foreach (var breaking in _breakings)
  107.             {
  108.                 if(breaking.NecessaryDetail.Name == detail.Name)
  109.                 {
  110.                     return breaking;
  111.                 }
  112.             }
  113.             return null;
  114.         }
  115.     }
  116.  
  117.     class Warehouse
  118.     {
  119.         private List<BoxOfDitails> _boxesWithDetails;
  120.  
  121.         public Warehouse(List<BoxOfDitails> details)
  122.         {
  123.             _boxesWithDetails = details;
  124.         }
  125.  
  126.         public bool CheckAvailabilityDetail(Detail detail)
  127.         {
  128.             for (int i = 0; i < _boxesWithDetails.Count; i++)
  129.             {
  130.                 if (_boxesWithDetails[i].Detail.Name == detail.Name)
  131.                 {
  132.                     if (_boxesWithDetails[i].CountDetails > 0)
  133.                     {
  134.                         Console.WriteLine($"Деталь '{detail}' есть в наличии.");
  135.                         return true;
  136.                     }
  137.                     else
  138.                     {
  139.                         break;
  140.                     }
  141.                 }
  142.             }
  143.             Console.WriteLine($"Детали '{detail}' нет в наличии.");
  144.             return false;
  145.         }
  146.  
  147.         public void TakeDetail(Detail detail)
  148.         {
  149.             for (int i = 0; i < _boxesWithDetails.Count; i++)
  150.             {
  151.                 if(_boxesWithDetails[i].Detail.Name == detail.Name)
  152.                 {
  153.                     _boxesWithDetails[i].TakeOneDetail();
  154.                 }
  155.             }
  156.         }
  157.     }
  158.     class BoxOfDitails
  159.     {
  160.         public Detail Detail { get; private set; }
  161.         public int CountDetails { get; private set; }
  162.  
  163.         public BoxOfDitails(Detail detail, int countDetails)
  164.         {
  165.             Detail = detail;
  166.             CountDetails = countDetails;
  167.         }
  168.  
  169.         public void TakeOneDetail()
  170.         {
  171.             CountDetails -= 1;
  172.         }
  173.     }
  174.     class Breaking
  175.     {
  176.         public Detail NecessaryDetail { get; private set; }
  177.         public int PriceForWork { get; private set; }
  178.         public string Name { get; private set; }
  179.  
  180.         public Breaking(Detail detail, int price, string name)
  181.         {
  182.             NecessaryDetail = detail;
  183.             PriceForWork = price;
  184.             Name = name;
  185.         }
  186.     }
  187.     class Detail
  188.     {
  189.         public int Price { get; private set;}
  190.         public string Name { get; private set;}
  191.  
  192.         public Detail(int price, string name)
  193.         {
  194.             Price = price;
  195.             Name = name;
  196.         }
  197.     }
  198.     class Car
  199.     {
  200.         public Detail BrokenDetal { get; private set; }
  201.  
  202.         public Car(Detail brokenDetail)
  203.         {
  204.             BrokenDetal = brokenDetail;
  205.         }
  206.     }
  207. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement