Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- internal class Program
- {
- //У вас есть автосервис, в который приезжают люди, чтобы починить свои автомобили.
- //У вашего автосервиса есть баланс денег и склад деталей.
- //Когда приезжает автомобиль, у него сразу ясна его поломка, и эта поломка отображается у вас в консоли
- //вместе с ценой за починку(цена за починку складывается из цены детали + цена за работу).
- //Поломка всегда чинится заменой детали, но количество деталей ограничено тем, что находится на вашем складе деталей.
- //Если у вас нет нужной детали на складе, то вы можете отказать клиенту, и в этом случае вам придется выплатить штраф.
- //Если вы замените не ту деталь, то вам придется возместить ущерб клиенту.
- //За каждую удачную починку вы получаете выплату за ремонт, которая указана в чек-листе починки.
- static void Main()
- {
- new CarService().Start();
- }
- }
- class CarService
- {
- private int _money;
- private int _fine;
- private List<Inventory> _spareParts;
- private List<string> _listProblems;
- private List<MechanicsJob> _listOfSolutionsProblems;
- private Car _car;
- private int GetMoney
- {
- get
- {
- if (_money < 0)
- {
- _money = 0;
- }
- return _money;
- }
- }
- public void Start()
- {
- Initialize();
- bool inCycle = true;
- while (inCycle)
- {
- Console.Clear();
- if (GetMoney > 0)
- {
- if (_spareParts.Count > 0)
- {
- RemoveNonExistentDetails();
- _car = new Car(_listProblems);
- int problemIndex = _listProblems.IndexOf(_car.Problem);
- ShowSpareParts();
- ShowInfoService();
- if (problemIndex < _spareParts.Count)
- {
- Console.Write("Выберите необходимую деталь: ");
- int indexSelectionByUser = GetNumber() - 1;
- Console.WriteLine($"Выбрано: {_spareParts[indexSelectionByUser].SparePart.Name}");
- if (indexSelectionByUser == problemIndex)
- {
- ShowTrueMechanicsWork();
- }
- else if (indexSelectionByUser != problemIndex)
- {
- ShowFalseMechanicsWork(indexSelectionByUser);
- }
- }
- else
- {
- Console.WriteLine($"Клиенту отказано в сервисе, ввиду отсутствия небходимой запчасти\n" +
- $"Сервис потерял клиента и потерпел убытки в размере {_fine}р");
- _money -= _fine;
- }
- Console.WriteLine("\nСледующий клиент...");
- Console.ReadKey();
- }
- else
- {
- inCycle = false;
- Console.WriteLine($"Деталей больше нет...");
- }
- }
- else
- {
- inCycle = false;
- Console.WriteLine($"Автосервис обанкротился...");
- }
- }
- }
- private void RemoveNonExistentDetails()
- {
- List<Inventory> bufList = new List<Inventory>();
- foreach (Inventory part in _spareParts)
- {
- if (part.Count > 0)
- {
- bufList.Add(part);
- }
- }
- _spareParts.Clear();
- _spareParts = bufList;
- }
- public void ShowSpareParts()
- {
- Console.WriteLine("Склад запчастей:\n");
- for (int i = 0; i < _spareParts.Count; i++)
- {
- Console.WriteLine($"{i + 1}. {_spareParts[i].GetInfo()}");
- }
- Console.Write("\n");
- }
- public void ShowInfoService()
- {
- int index = _listProblems.IndexOf(_car.Problem);
- Console.WriteLine($"Деньги автосервиса: {GetMoney}\n" +
- $"Проблема клиента: {_car.Problem}\n" +
- $"Решение механика: {_listOfSolutionsProblems[index].SolvingProblem} - {_listOfSolutionsProblems[index].Price}р\n");
- }
- public void ShowTrueMechanicsWork()
- {
- int index = _listProblems.IndexOf(_car.Problem);
- _spareParts[index].RemovePart();
- Console.WriteLine($"\nМеханик использовал деталь \"{_spareParts[index].SparePart.Name}\"\n" +
- $"Проблема \"{_car.Problem}\" устранена\n" +
- $"Клиент заплатил за работу механика и \"{_spareParts[index].SparePart.Name}\": {_listOfSolutionsProblems[index].Price} + {_spareParts[index].SparePart.Price} = " +
- $"{_listOfSolutionsProblems[index].Price + _spareParts[index].SparePart.Price}р");
- _money += _listOfSolutionsProblems[index].Price + _spareParts[index].SparePart.Price;
- }
- public void ShowFalseMechanicsWork(int userIndex)
- {
- int index = _listProblems.IndexOf(_car.Problem);
- _spareParts[index].RemovePart();
- _spareParts[userIndex].RemovePart();
- Console.WriteLine($"\nМеханик использовал неподходящую деталь \"{_spareParts[userIndex].SparePart.Name}\"\n" +
- $"Проблема \"{_car.Problem}\" устранена за счет сервиса, использована деталь \"{_spareParts[index].SparePart.Name}\"\n" +
- $"Клиент ничего не заплатил\n" +
- $"Сервис потерпел двойные убытки за использованные детали: {_spareParts[userIndex].SparePart.Price} + {_spareParts[index].SparePart.Price} = " +
- $"{_spareParts[userIndex].SparePart.Price + _spareParts[index].SparePart.Price}р\n" +
- $"И выплатил клиенту штраф за недобросовестный ремонт {_fine}р");
- _money -= _spareParts[userIndex].SparePart.Price + _spareParts[index].SparePart.Price + _fine;
- }
- private int GetNumber()
- {
- int number = 0;
- bool inCycle = true;
- while (inCycle)
- {
- string inputUser = Console.ReadLine();
- if (int.TryParse(inputUser, out number) && number > 0 && number <= _spareParts.Count)
- {
- inCycle = false;
- }
- else
- {
- Console.Write("Введите число: ");
- }
- }
- return number;
- }
- private void Initialize()
- {
- _money = 3000;
- _fine = 500;
- _listProblems = new List<string>()
- {
- "Не заводится",
- "Коробка \"пинается\"",
- "Не горит фара",
- "Плохо тормозит",
- "Трещина на лобовом стекле",
- "Подвеска скрипит",
- "Поменять масло в двигателе"
- };
- _spareParts = new List<Inventory>
- {
- new Inventory(new SparePart("Комплект свечей зажигания", 450), 10),
- new Inventory(new SparePart("Канистра с маслом для коробки", 3000), 5),
- new Inventory(new SparePart("Лампочка", 200), 20),
- new Inventory(new SparePart("Комплект тормозных колодок", 6000), 7),
- new Inventory(new SparePart("Лобовое стекло", 8000), 2),
- new Inventory(new SparePart("Комплект сайлентблоков", 2400), 12),
- new Inventory(new SparePart("Канистра с маслом для двигателя", 3000), 4),
- };
- _listOfSolutionsProblems = new List<MechanicsJob>()
- {
- new MechanicsJob("Замена свечей", 100),
- new MechanicsJob("Замена масла в коробке", 500),
- new MechanicsJob("Замена лампочки", 100),
- new MechanicsJob("Замена тормозных колодок", 1200),
- new MechanicsJob("Замена лобового стекла", 2500),
- new MechanicsJob("Замена сайлентблоков", 2200),
- new MechanicsJob("Замена масла в двигателе", 1500)
- };
- _car = null;
- }
- }
- class MechanicsJob
- {
- public string SolvingProblem { get; private set; }
- public int Price { get; private set; }
- public MechanicsJob(string solvingProblem, int price)
- {
- SolvingProblem = solvingProblem;
- Price = price;
- }
- }
- class Inventory
- {
- public SparePart SparePart { get; private set; }
- public int Count { get; private set; }
- public Inventory(SparePart sparePart, int count)
- {
- SparePart = sparePart;
- Count = count;
- }
- public void RemovePart()
- {
- Count--;
- }
- public string GetInfo()
- {
- return $"{SparePart.GetInfo()}, {Count} шт";
- }
- }
- class SparePart
- {
- public string Name { get; private set; }
- public int Price { get; private set; }
- public SparePart(string partName, int price)
- {
- Name = partName;
- Price = price;
- }
- public string GetInfo()
- {
- return $"{Name}, {Price}р";
- }
- }
- class Car
- {
- private static readonly Random _random = new Random();
- public string Problem { get; private set; }
- public Car(List<string> list)
- {
- Problem = GetRandomProblem(list);
- }
- private string GetRandomProblem(List<string> list)
- {
- return list[_random.Next(0, list.Count)];
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement