Advertisement
Rodunskiy

Untitled

Aug 1st, 2023
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.44 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. class Program
  5. {
  6.     static void Main(string[] args)
  7.     {
  8.         CarService carService = new CarService();
  9.         bool isWorking = true;
  10.  
  11.         while (isWorking)
  12.         {
  13.             carService.Work();
  14.         }
  15.     }
  16. }
  17.  
  18. class CarService
  19. {
  20.     private DetailsStorage _detailsStorage;
  21.     private List<Breakage> _listBreakages = new List<Breakage>();
  22.  
  23.     private int _breakageIndex;
  24.     private int _moneyBalance = 0;
  25.  
  26.     public CarService()
  27.     {
  28.         _detailsStorage = new DetailsStorage();
  29.         AddBreakage();
  30.     }
  31.  
  32.     public void Work()
  33.     {
  34.         int sumFine = 10;
  35.  
  36.         _detailsStorage.ShowDetails();
  37.  
  38.         _breakageIndex = Utils.GetRandomNumber(_listBreakages.Count - 1);
  39.         string typeBreakage = _listBreakages[_breakageIndex].TypeBreakage;
  40.         int priceForTheBreakage = _listBreakages[_breakageIndex].Price;
  41.         int priceForTheDetails = _detailsStorage.GivePrice(_breakageIndex);
  42.         int priceForTheWork = priceForTheBreakage + priceForTheDetails;
  43.  
  44.         Console.SetCursorPosition(0, 14);
  45.         Console.WriteLine($"Банк:{_moneyBalance}\nВ автосервис заехал автомобиль.\n\n|Тип поломки:{typeBreakage}\n|Цена:{priceForTheWork} монет\n\nВведите номер детали для починки или если нужной детали нет, введите 404 и заплатите штраф.");
  46.  
  47.         int usetInput = Utils.ConvertToInt();
  48.  
  49.         if (usetInput == 404)
  50.         {
  51.             _moneyBalance -= sumFine;
  52.         }
  53.         else
  54.         {
  55.             if (isDetailsSuit(usetInput))
  56.             {
  57.                 _detailsStorage.RemoveDetail(usetInput);
  58.                 _moneyBalance += priceForTheWork;
  59.                 Console.WriteLine($"Починка прошла успешно! Автосервис заработал {priceForTheWork} монет.");
  60.             }
  61.             else
  62.             {
  63.                 _detailsStorage.RemoveDetail(usetInput);
  64.                 _moneyBalance -= priceForTheDetails;
  65.                 Console.WriteLine($"Вы заменили не ту деталь. Вам придется возместить клиенту {priceForTheDetails} монет.");
  66.             }
  67.         }
  68.  
  69.         Console.ReadKey();
  70.         Console.Clear();
  71.     }
  72.  
  73.     public void AddBreakage()
  74.     {
  75.         _listBreakages.Add(new Breakage("Сломалось колесо", 20, 0));
  76.         _listBreakages.Add(new Breakage("Сломался кондиционер", 30, 1));
  77.         _listBreakages.Add(new Breakage("Сломалась коробка передач", 60, 2));
  78.     }
  79.  
  80.     public bool isDetailsSuit(int index)
  81.     {
  82.         if (_listBreakages[index].TypeIndex == _detailsStorage.GiveIndex(_breakageIndex))
  83.         {
  84.             return true;
  85.         }
  86.        
  87.         return false;
  88.     }
  89. }
  90.  
  91. class DetailsStorage
  92. {
  93.     private static Random _random = new Random();
  94.  
  95.     private List<Detail> _details = new List<Detail>();
  96.  
  97.     public DetailsStorage()
  98.     {
  99.         AddToDetails(new Wheel());
  100.         AddToDetails(new Conditioner());
  101.         AddToDetails(new Transmission());
  102.     }
  103.  
  104.     public void AddToDetails(Detail detail)
  105.     {
  106.         int minIndex = 1;
  107.         int maxIndex = 5;
  108.         int maxDetails = _random.Next(minIndex, maxIndex);
  109.  
  110.         for (int i = 0; i < maxDetails; i++)
  111.         {
  112.             _details.Add(detail.Clone());
  113.         }
  114.     }
  115.  
  116.     public void ShowDetails()
  117.     {
  118.         Console.WriteLine("Кол-во деталей на складе:");
  119.         foreach (var detail in _details)
  120.         {
  121.             detail.ShowInfo();
  122.         }
  123.     }
  124.  
  125.     public void RemoveDetail(int index)
  126.     {
  127.         Detail detail = null;
  128.  
  129.         foreach (var item in _details)
  130.         {
  131.             if(item.TypeIndex == index)
  132.             {
  133.                 detail = item;
  134.             }
  135.         }
  136.  
  137.         _details.Remove(detail);
  138.     }
  139.  
  140.     public int GiveIndex(int index)
  141.     {
  142.         int typeIndex = 0;
  143.  
  144.         foreach (var detail in _details)
  145.         {
  146.             if (detail.TypeIndex == index)
  147.             {
  148.                 typeIndex = detail.TypeIndex;
  149.                 break;
  150.             }
  151.         }
  152.  
  153.         return typeIndex;
  154.     }
  155.  
  156.     public int GivePrice(int index)
  157.     {
  158.         int price = 0;
  159.  
  160.         foreach (var detail in _details)
  161.         {
  162.             if (detail.TypeIndex == index)
  163.             {
  164.                 price = detail.Price;
  165.             }
  166.         }
  167.  
  168.         return price;
  169.     }
  170. }
  171.  
  172. class Detail
  173. {
  174.     public Detail(string name, int price, int typeIndex)
  175.     {
  176.         Name = name;
  177.         Price = price;
  178.         TypeIndex = typeIndex;
  179.  
  180.     }
  181.     public string Name { get; private set; }
  182.     public int Price { get; private set; }
  183.     public int TypeIndex { get; private set; }
  184.  
  185.     public virtual Detail Clone()
  186.     {
  187.         return new Detail(Name, Price, TypeIndex);
  188.     }
  189.  
  190.     public void ShowInfo()
  191.     {
  192.         Console.WriteLine($"{TypeIndex}|{Name}|Цена:{Price}");
  193.     }
  194. }
  195.  
  196. class Wheel : Detail
  197. {
  198.     public override Detail Clone()
  199.     {
  200.         return new Wheel();
  201.     }
  202.  
  203.     public Wheel() : base ("Колесо", 10, 0) { }
  204. }
  205.  
  206. class Conditioner : Detail
  207. {
  208.     public override Detail Clone()
  209.     {
  210.         return new Conditioner();
  211.     }
  212.  
  213.     public Conditioner() : base("Кондеционер", 15, 1) { }
  214. }
  215.  
  216. class Transmission : Detail
  217. {
  218.     public override Detail Clone()
  219.     {
  220.         return new Transmission();
  221.     }
  222.  
  223.     public Transmission() : base("Коробка передач", 30, 2) { }
  224. }
  225.  
  226. class Breakage
  227. {
  228.     public Breakage(string typeBreakage, int price, int typeIndex)
  229.     {
  230.         TypeBreakage = typeBreakage;
  231.         Price = price;
  232.         TypeIndex = typeIndex;
  233.     }
  234.  
  235.     public string TypeBreakage { get; private set; }
  236.     public int Price { get; private set; }
  237.     public int TypeIndex { get; private set; }
  238. }
  239.  
  240. class Utils
  241. {
  242.     private static Random _random = new Random();
  243.  
  244.     public static int GetRandomNumber(int max)
  245.     {
  246.         return _random.Next(max + 1);
  247.     }
  248.  
  249.     public static int ConvertToInt()
  250.     {
  251.         int templateNumber;
  252.         string userInput = string.Empty;
  253.  
  254.         while (int.TryParse(userInput, out templateNumber) == false)
  255.         {
  256.             userInput = Console.ReadLine();
  257.         }
  258.  
  259.         return templateNumber;
  260.     }
  261. }
  262.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement