RedFlys

Home work - car service

Jan 20th, 2022 (edited)
929
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 9.01 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 Home_Work
  8. {
  9.     class Program
  10.     {
  11.         static void Main()
  12.         {
  13.             CarService carService = new CarService();
  14.             carService.Work();
  15.         }
  16.     }
  17.  
  18.     class CarService
  19.     {
  20.         private List<StackOfSpareParts> _warehouse;
  21.         private Queue<Car> _clients;
  22.         private int _money;
  23.  
  24.         public CarService()
  25.         {
  26.             _money = 0;
  27.             _clients = new Queue<Car>();
  28.             _warehouse = new List<StackOfSpareParts>();
  29.  
  30.             CreateQueue();
  31.             FillWarehouse();
  32.         }
  33.  
  34.         public void Work()
  35.         {
  36.             while (_clients.Count > 0)
  37.             {
  38.                 Car client;
  39.                 SparePart brokenPart;
  40.                 SparePart newPart;
  41.                 int fine = 500;
  42.  
  43.                 Console.WriteLine("Сервис работает.");
  44.                 Console.WriteLine($"Сервис заработал сегодня: {_money}.");
  45.                 Console.WriteLine("К вам приехал новый клиент.");
  46.  
  47.                 client = _clients.Dequeue();
  48.                 brokenPart = client.BrokenPart;
  49.  
  50.                 Console.WriteLine($"\nКлиенту нужна замена: {brokenPart.Id}-{brokenPart.Name}.\n");
  51.  
  52.                 newPart = PickUpSparePartFromWarehouse();
  53.  
  54.                 if (newPart == null)
  55.                 {
  56.                     _money -= fine;
  57.  
  58.                     Console.WriteLine($"У вас не оказалось нужной детали и вы отказали клиенту в ремонте. Получите штраф в размере {fine}");
  59.                 }
  60.                 else
  61.                 {
  62.                     TryReplacePart(client, brokenPart, newPart);
  63.                 }
  64.  
  65.                 Console.ReadKey();
  66.                 Console.Clear();
  67.             }
  68.  
  69.             Console.WriteLine("Клиенты закончились.");
  70.  
  71.             ShowResultsOfDay();
  72.         }
  73.  
  74.         private void ShowResultsOfDay()
  75.         {
  76.             if (_money >= 0)
  77.             {
  78.                 Console.WriteLine($"Вы заработали сегодня {_money}. Сервис сможет продолжить работу завтра.");
  79.             }
  80.             else
  81.             {
  82.                 Console.WriteLine($"Вы потеряли сегодня {_money}. Придётся закрыть сервис.");
  83.             }
  84.  
  85.             Console.ReadKey();
  86.             Console.Clear();
  87.         }
  88.  
  89.         private void TryReplacePart(Car client, SparePart brokenPart, SparePart newPart)
  90.         {
  91.             int divider = 2;
  92.             int priceWork = newPart.Price / divider;
  93.  
  94.             if (brokenPart.Id == newPart.Id)
  95.             {
  96.                 int purchase;
  97.  
  98.                 client.ReplacePart(newPart);
  99.  
  100.                 purchase = priceWork + newPart.Price;
  101.                 _money += purchase;
  102.  
  103.                 Console.WriteLine($"Вы успешно заменили деталь и заработали {purchase}.");
  104.             }
  105.             else
  106.             {
  107.                 int fine = 5000;
  108.  
  109.                 fine += priceWork + newPart.Price;
  110.                 _money -= fine;
  111.  
  112.                 Console.WriteLine($"Вы заменили не ту деталь. Клиент отказался платить и подал в суд. Вы потеряли {fine}.");
  113.             }
  114.         }
  115.  
  116.         private SparePart PickUpSparePartFromWarehouse()
  117.         {
  118.             SparePart needPart = null;
  119.             bool isSelected = false;
  120.  
  121.             ShowWarehouse();
  122.             Console.WriteLine("Или введите 0 для выхода.");
  123.             Console.WriteLine("Введите индекс нужной детали.");
  124.  
  125.             while (isSelected == false)
  126.             {
  127.                 if (Int32.TryParse(Console.ReadLine(), out int index) == true)
  128.                 {
  129.                     if (index >= 0 && index <= _warehouse.Count)
  130.                     {
  131.                         if (index == 0)
  132.                         {
  133.                             isSelected = true;
  134.  
  135.                             Console.WriteLine("Вы не нашли на складе подходящей детали.");
  136.                         }
  137.                         else if (_warehouse[index - 1].IsEmpty == false)
  138.                         {
  139.                             isSelected = true;
  140.  
  141.                             needPart = _warehouse[index - 1].GetPart();
  142.  
  143.                             Console.WriteLine($"Вы забрали {needPart.Name}.");
  144.                         }
  145.                         else
  146.                         {
  147.                             Console.WriteLine("К сожалению данная запчасть закончилась.");
  148.                         }
  149.                     }
  150.                     else
  151.                     {
  152.                         Console.WriteLine("Нужно ввести порядковый номер детали или 0.");
  153.                     }
  154.                 }
  155.                 else
  156.                 {
  157.                     Console.WriteLine("Нужно ввести целое число.");
  158.                 }
  159.             }
  160.  
  161.             return needPart;
  162.         }
  163.  
  164.         private void ShowWarehouse()
  165.         {
  166.             int index = 1;
  167.  
  168.             foreach (var part in _warehouse)
  169.             {
  170.                 Console.WriteLine($"{index}. {part.Id} - {part.Name} . {part.Count} шт.");
  171.  
  172.                 index++;
  173.             }
  174.         }
  175.  
  176.         private void CreateQueue()
  177.         {
  178.             int clientsCount = 10;
  179.  
  180.             for (int i = 0; i < clientsCount; i++)
  181.             {
  182.                 _clients.Enqueue(new Car());
  183.             }
  184.         }
  185.  
  186.         private void FillWarehouse()
  187.         {
  188.             DatabasaParts databasaParts = new DatabasaParts();
  189.             int maxCountParts = 4;
  190.  
  191.             _warehouse = databasaParts.SendSparePartsToWarehouse(maxCountParts);
  192.         }
  193.     }
  194.  
  195.     class Car
  196.     {
  197.         private SparePart _brokenPart;
  198.  
  199.         public Car()
  200.         {
  201.             DatabasaParts dataBasaParts = new DatabasaParts();
  202.             _brokenPart = dataBasaParts.GetRandomPart();
  203.             _brokenPart.Breake();
  204.         }
  205.  
  206.         public SparePart BrokenPart => _brokenPart;
  207.  
  208.         public void ReplacePart(SparePart newPart)
  209.         {
  210.             _brokenPart = newPart;
  211.  
  212.             Console.WriteLine("Деталь заменена.");
  213.         }
  214.     }
  215.  
  216.     class StackOfSpareParts
  217.     {
  218.         private SparePart _sparePart;
  219.         private int _count;
  220.  
  221.         public StackOfSpareParts(SparePart sparePart, int count)
  222.         {
  223.             _sparePart = sparePart;
  224.             _count = count;
  225.         }
  226.  
  227.         public int Id => _sparePart.Id;
  228.         public string Name => _sparePart.Name;
  229.         public int Count => _count;
  230.         public bool IsEmpty => _count < 1;
  231.  
  232.         public SparePart GetPart()
  233.         {
  234.             _count--;
  235.             return _sparePart;
  236.         }
  237.     }
  238.  
  239.     class SparePart
  240.     {
  241.         private int _id;
  242.         private int _price;
  243.         private string _name;
  244.         private bool _isBroken;
  245.  
  246.         public SparePart(string name, int id, int price)
  247.         {
  248.             _id = id;
  249.             _price = price;
  250.             _name = name;
  251.             _isBroken = false;
  252.         }
  253.  
  254.         public string Name => _name;
  255.         public int Price => _price;
  256.         public int Id => _id;
  257.  
  258.         public void Breake()
  259.         {
  260.             _isBroken = true;
  261.         }
  262.     }
  263.  
  264.     class DatabasaParts
  265.     {
  266.         private List<SparePart> _allParts;
  267.  
  268.         public DatabasaParts()
  269.         {
  270.             Fill();
  271.         }
  272.  
  273.         public SparePart GetRandomPart()
  274.         {
  275.             Random random = new Random();
  276.  
  277.             return _allParts[random.Next(_allParts.Count)];
  278.         }
  279.  
  280.         public List<StackOfSpareParts> SendSparePartsToWarehouse(int maxCountParts)
  281.         {
  282.             List<StackOfSpareParts> purchaseForService = new List<StackOfSpareParts>();
  283.             Random random = new Random();
  284.  
  285.             foreach (var part in _allParts)
  286.             {
  287.                 purchaseForService.Add(new StackOfSpareParts(part, random.Next(maxCountParts)));
  288.             }
  289.  
  290.             return purchaseForService;
  291.         }
  292.  
  293.         private void Fill()
  294.         {
  295.             _allParts = new List<SparePart>();
  296.             _allParts.Add(new SparePart("Шина Nokian", 10009652, 4000));
  297.             _allParts.Add(new SparePart("Двигатель 1.6L", 8929341, 70000));
  298.             _allParts.Add(new SparePart("Двигатель 2.0L", 8939345, 100000));
  299.             _allParts.Add(new SparePart("Шина Матадор", 1231323, 1000));
  300.             _allParts.Add(new SparePart("АКПП", 654142, 50000));
  301.             _allParts.Add(new SparePart("МКПП", 654130, 35000));
  302.         }
  303.     }
  304. }
Add Comment
Please, Sign In to add comment