Nivikantavo

CarService

Dec 8th, 2021
837
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. namespace Avtoservis
  5. {
  6.     class Program
  7.     {
  8.         static void Main(string[] args)
  9.         {
  10.             Detail cardanShaft = new Detail(3200, "Карданный вал");
  11.             Detail crankshaftSeals = new Detail(200, "Сальники коленвала");
  12.             Detail gasolinePump = new Detail(5400, "Бензонасос");
  13.             Detail stoppingSupport = new Detail(2900, "Тормозной суппорт");
  14.             Detail ignitionSwitch  = new Detail(300, "Выключатель зажигания");
  15.  
  16.             Dictionary<Detail, int> details = new Dictionary<Detail, int>();
  17.  
  18.             details.Add(cardanShaft, 3);
  19.             details.Add(crankshaftSeals, 50);
  20.             details.Add(gasolinePump, 1);
  21.             details.Add(stoppingSupport, 8);
  22.  
  23.             CarService carService = new CarService(new Balance(1000), new Warehouse(details));
  24.  
  25.             Car car1 = new Car(new Breaking(cardanShaft, 2000, -1500, "Повреждение крданного вала."));
  26.             Car car2 = new Car(new Breaking(ignitionSwitch, 500, -500, "Не заводится."));
  27.  
  28.             carService.TakeCar(car1);
  29.             Console.WriteLine();
  30.             carService.TakeCar(car2);
  31.         }
  32.     }
  33.  
  34.     class CarService
  35.     {
  36.         private Balance _balance;
  37.         private Warehouse _warehouse;
  38.  
  39.         public CarService(Balance balance, Warehouse warehouse)
  40.         {
  41.             _balance = balance;
  42.             _warehouse = warehouse;
  43.         }
  44.  
  45.         public void TakeCar(Car car)
  46.         {
  47.             Console.WriteLine($"Поступила машина. Поломка: {car.Breaking.Name}, необходимая деталь: {car.Breaking.NecessaryDetail.Name}");
  48.  
  49.             if (_warehouse.CheckAvailabilityDetail(car.Breaking.NecessaryDetail))
  50.             {
  51.                 RenovateCar(car);
  52.             }
  53.             else
  54.             {
  55.                 RefuseToRepair(car);
  56.             }
  57.         }
  58.  
  59.         private void RenovateCar(Car car)
  60.         {
  61.             Console.WriteLine("Машина принята в ремонт.");
  62.  
  63.             _warehouse.TakeDetail(car.Breaking.NecessaryDetail);
  64.  
  65.             int paid = car.Breaking.NecessaryDetail.Price + car.Breaking.PriceForWork;
  66.  
  67.             Console.WriteLine("Ремонт выполнен.");
  68.             _balance.CalculateTheClient(paid);
  69.         }
  70.  
  71.         private void RefuseToRepair(Car car)
  72.         {
  73.             Console.WriteLine("В ремонте отказано.");
  74.             _balance.CalculateTheClient(car.Breaking.RefusalPenalty);
  75.         }
  76.     }
  77.  
  78.     class Balance
  79.     {
  80.         public int MoneyCount {get; private set;}
  81.  
  82.         public void CalculateTheClient(int paid)
  83.         {
  84.             MoneyCount += paid;
  85.  
  86.             if(paid > 0)
  87.             {
  88.                 Console.WriteLine($"Получена плата в размере: {paid}. Баланс: {MoneyCount}");
  89.             }
  90.             else
  91.             {
  92.                 Console.WriteLine($"Уплачен штраф в размере: {paid}. Баланс: {MoneyCount}");
  93.             }
  94.         }
  95.  
  96.         public Balance(int money)
  97.         {
  98.             MoneyCount = money;
  99.         }
  100.     }
  101.    
  102.     class Warehouse
  103.     {
  104.         private Dictionary<Detail, int> _details;
  105.  
  106.         public Warehouse(Dictionary<Detail, int> details)
  107.         {
  108.             _details = details;
  109.         }
  110.  
  111.         public bool CheckAvailabilityDetail(Detail detail)
  112.         {
  113.             if (_details.ContainsKey(detail) && _details[detail] > 0)
  114.             {
  115.                 Console.WriteLine($"Деталь '{detail.Name}' есть в наличии.");
  116.                 return true;
  117.             }
  118.             else
  119.             {
  120.                 Console.WriteLine($"Детали '{detail.Name}' нет в наличии.");
  121.                 return false;
  122.             }
  123.         }
  124.  
  125.         public void TakeDetail(Detail detail)
  126.         {
  127.             _details[detail] -= 1;
  128.         }
  129.     }
  130.    
  131.     class Detail
  132.     {
  133.         public int Price { get; private set;}
  134.         public string Name { get; private set;}
  135.  
  136.         public Detail(int price, string name)
  137.         {
  138.             Price = price;
  139.             Name = name;
  140.         }
  141.     }
  142.    
  143.     class Car
  144.     {
  145.         public Breaking Breaking { get; private set; }
  146.  
  147.         public Car(Breaking breaking)
  148.         {
  149.             Breaking = breaking;
  150.         }
  151.     }
  152.    
  153.     class Breaking
  154.     {
  155.         private int _refusalPenalty;
  156.         public Detail NecessaryDetail { get; private set; }
  157.         public int PriceForWork { get; private set; }
  158.         public string Name { get; private set; }
  159.         public int RefusalPenalty
  160.         {
  161.             get
  162.             {  
  163.                 return _refusalPenalty;
  164.             }
  165.             private set
  166.             {
  167.                 if (value <= 0)
  168.                     _refusalPenalty = value;
  169.                 else
  170.                     _refusalPenalty = -value;
  171.             }
  172.         }
  173.  
  174.         public Breaking(Detail detail, int price, int fine, string name)
  175.         {
  176.             NecessaryDetail = detail;
  177.             PriceForWork = price;
  178.             RefusalPenalty = fine;
  179.             Name = name;
  180.         }
  181.     }
  182. }
RAW Paste Data