Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace Home_Work
- {
- class Program
- {
- static void Main()
- {
- CarService carService = new CarService();
- carService.Work();
- }
- }
- class CarService
- {
- private List<StackOfSpareParts> _warehouse;
- private Queue<Car> _clients;
- private int _money;
- public CarService()
- {
- _money = 0;
- _clients = new Queue<Car>();
- _warehouse = new List<StackOfSpareParts>();
- CreateQueue();
- FillWarehouse();
- }
- public void Work()
- {
- while (_clients.Count > 0)
- {
- Car client;
- SparePart brokenPart;
- SparePart newPart;
- int fine = 500;
- Console.WriteLine("Сервис работает.");
- Console.WriteLine($"Сервис заработал сегодня: {_money}.");
- Console.WriteLine("К вам приехал новый клиент.");
- client = _clients.Dequeue();
- brokenPart = client.BrokenPart;
- Console.WriteLine($"\nКлиенту нужна замена: {brokenPart.Id}-{brokenPart.Name}.\n");
- newPart = PickUpSparePartFromWarehouse();
- if (newPart == null)
- {
- _money -= fine;
- Console.WriteLine($"У вас не оказалось нужной детали и вы отказали клиенту в ремонте. Получите штраф в размере {fine}");
- }
- else
- {
- TryReplacePart(client, brokenPart, newPart);
- }
- Console.ReadKey();
- Console.Clear();
- }
- Console.WriteLine("Клиенты закончились.");
- ShowResultsOfDay();
- }
- private void ShowResultsOfDay()
- {
- if (_money >= 0)
- {
- Console.WriteLine($"Вы заработали сегодня {_money}. Сервис сможет продолжить работу завтра.");
- }
- else
- {
- Console.WriteLine($"Вы потеряли сегодня {_money}. Придётся закрыть сервис.");
- }
- Console.ReadKey();
- Console.Clear();
- }
- private void TryReplacePart(Car client, SparePart brokenPart, SparePart newPart)
- {
- int divider = 2;
- int priceWork = newPart.Price / divider;
- if (brokenPart.Id == newPart.Id)
- {
- int purchase;
- client.ReplacePart(newPart);
- purchase = priceWork + newPart.Price;
- _money += purchase;
- Console.WriteLine($"Вы успешно заменили деталь и заработали {purchase}.");
- }
- else
- {
- int fine = 5000;
- fine += priceWork + newPart.Price;
- _money -= fine;
- Console.WriteLine($"Вы заменили не ту деталь. Клиент отказался платить и подал в суд. Вы потеряли {fine}.");
- }
- }
- private SparePart PickUpSparePartFromWarehouse()
- {
- SparePart needPart = null;
- bool isSelected = false;
- ShowWarehouse();
- Console.WriteLine("Или введите 0 для выхода.");
- Console.WriteLine("Введите индекс нужной детали.");
- while (isSelected == false)
- {
- if (Int32.TryParse(Console.ReadLine(), out int index) == true)
- {
- if (index >= 0 && index <= _warehouse.Count)
- {
- if (index == 0)
- {
- isSelected = true;
- Console.WriteLine("Вы не нашли на складе подходящей детали.");
- }
- else if (_warehouse[index - 1].IsEmpty == false)
- {
- isSelected = true;
- needPart = _warehouse[index - 1].GetPart();
- Console.WriteLine($"Вы забрали {needPart.Name}.");
- }
- else
- {
- Console.WriteLine("К сожалению данная запчасть закончилась.");
- }
- }
- else
- {
- Console.WriteLine("Нужно ввести порядковый номер детали или 0.");
- }
- }
- else
- {
- Console.WriteLine("Нужно ввести целое число.");
- }
- }
- return needPart;
- }
- private void ShowWarehouse()
- {
- int index = 1;
- foreach (var part in _warehouse)
- {
- Console.WriteLine($"{index}. {part.Id} - {part.Name} . {part.Count} шт.");
- index++;
- }
- }
- private void CreateQueue()
- {
- int clientsCount = 10;
- for (int i = 0; i < clientsCount; i++)
- {
- _clients.Enqueue(new Car());
- }
- }
- private void FillWarehouse()
- {
- DatabasaParts databasaParts = new DatabasaParts();
- int maxCountParts = 4;
- _warehouse = databasaParts.SendSparePartsToWarehouse(maxCountParts);
- }
- }
- class Car
- {
- private SparePart _brokenPart;
- public Car()
- {
- DatabasaParts dataBasaParts = new DatabasaParts();
- _brokenPart = dataBasaParts.GetRandomPart();
- _brokenPart.Breake();
- }
- public SparePart BrokenPart => _brokenPart;
- public void ReplacePart(SparePart newPart)
- {
- _brokenPart = newPart;
- Console.WriteLine("Деталь заменена.");
- }
- }
- class StackOfSpareParts
- {
- private SparePart _sparePart;
- private int _count;
- public StackOfSpareParts(SparePart sparePart, int count)
- {
- _sparePart = sparePart;
- _count = count;
- }
- public int Id => _sparePart.Id;
- public string Name => _sparePart.Name;
- public int Count => _count;
- public bool IsEmpty => _count < 1;
- public SparePart GetPart()
- {
- _count--;
- return _sparePart;
- }
- }
- class SparePart
- {
- private int _id;
- private int _price;
- private string _name;
- private bool _isBroken;
- public SparePart(string name, int id, int price)
- {
- _id = id;
- _price = price;
- _name = name;
- _isBroken = false;
- }
- public string Name => _name;
- public int Price => _price;
- public int Id => _id;
- public void Breake()
- {
- _isBroken = true;
- }
- }
- class DatabasaParts
- {
- private List<SparePart> _allParts;
- public DatabasaParts()
- {
- Fill();
- }
- public SparePart GetRandomPart()
- {
- Random random = new Random();
- return _allParts[random.Next(_allParts.Count)];
- }
- public List<StackOfSpareParts> SendSparePartsToWarehouse(int maxCountParts)
- {
- List<StackOfSpareParts> purchaseForService = new List<StackOfSpareParts>();
- Random random = new Random();
- foreach (var part in _allParts)
- {
- purchaseForService.Add(new StackOfSpareParts(part, random.Next(maxCountParts)));
- }
- return purchaseForService;
- }
- private void Fill()
- {
- _allParts = new List<SparePart>();
- _allParts.Add(new SparePart("Шина Nokian", 10009652, 4000));
- _allParts.Add(new SparePart("Двигатель 1.6L", 8929341, 70000));
- _allParts.Add(new SparePart("Двигатель 2.0L", 8939345, 100000));
- _allParts.Add(new SparePart("Шина Матадор", 1231323, 1000));
- _allParts.Add(new SparePart("АКПП", 654142, 50000));
- _allParts.Add(new SparePart("МКПП", 654130, 35000));
- }
- }
- }
Add Comment
Please, Sign In to add comment