Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- namespace Avtoservis
- {
- class Program
- {
- static void Main(string[] args)
- {
- Detail cardanShaft = new Detail(3200, "Карданный вал");
- Detail crankshaftSeals = new Detail(200, "Сальники коленвала");
- Detail gasolinePump = new Detail(5400, "Бензонасос");
- Detail stoppingSupport = new Detail(2900, "Тормозной суппорт");
- Detail ignitionSwitch = new Detail(300, "Выключатель зажигания");
- Dictionary<Detail, int> details = new Dictionary<Detail, int>();
- details.Add(cardanShaft, 3);
- details.Add(crankshaftSeals, 50);
- details.Add(gasolinePump, 1);
- details.Add(stoppingSupport, 8);
- CarService carService = new CarService(new Balance(1000), new Warehouse(details));
- Car car1 = new Car(new Breaking(cardanShaft, 2000, -1500, "Повреждение крданного вала."));
- Car car2 = new Car(new Breaking(ignitionSwitch, 500, -500, "Не заводится."));
- carService.TakeCar(car1);
- Console.WriteLine();
- carService.TakeCar(car2);
- }
- }
- class CarService
- {
- private Balance _balance;
- private Warehouse _warehouse;
- public CarService(Balance balance, Warehouse warehouse)
- {
- _balance = balance;
- _warehouse = warehouse;
- }
- public void TakeCar(Car car)
- {
- Console.WriteLine($"Поступила машина. Поломка: {car.Breaking.Name}, необходимая деталь: {car.Breaking.NecessaryDetail.Name}");
- if (_warehouse.CheckAvailabilityDetail(car.Breaking.NecessaryDetail))
- {
- RenovateCar(car);
- }
- else
- {
- RefuseToRepair(car);
- }
- }
- private void RenovateCar(Car car)
- {
- Console.WriteLine("Машина принята в ремонт.");
- _warehouse.TakeDetail(car.Breaking.NecessaryDetail);
- int paid = car.Breaking.NecessaryDetail.Price + car.Breaking.PriceForWork;
- Console.WriteLine("Ремонт выполнен.");
- _balance.CalculateTheClient(paid);
- }
- private void RefuseToRepair(Car car)
- {
- Console.WriteLine("В ремонте отказано.");
- _balance.CalculateTheClient(car.Breaking.RefusalPenalty);
- }
- }
- class Balance
- {
- public int MoneyCount {get; private set;}
- public void CalculateTheClient(int paid)
- {
- MoneyCount += paid;
- if(paid > 0)
- {
- Console.WriteLine($"Получена плата в размере: {paid}. Баланс: {MoneyCount}");
- }
- else
- {
- Console.WriteLine($"Уплачен штраф в размере: {paid}. Баланс: {MoneyCount}");
- }
- }
- public Balance(int money)
- {
- MoneyCount = money;
- }
- }
- class Warehouse
- {
- private Dictionary<Detail, int> _details;
- public Warehouse(Dictionary<Detail, int> details)
- {
- _details = details;
- }
- public bool CheckAvailabilityDetail(Detail detail)
- {
- if (_details.ContainsKey(detail) && _details[detail] > 0)
- {
- Console.WriteLine($"Деталь '{detail.Name}' есть в наличии.");
- return true;
- }
- else
- {
- Console.WriteLine($"Детали '{detail.Name}' нет в наличии.");
- return false;
- }
- }
- public void TakeDetail(Detail detail)
- {
- _details[detail] -= 1;
- }
- }
- class Detail
- {
- public int Price { get; private set;}
- public string Name { get; private set;}
- public Detail(int price, string name)
- {
- Price = price;
- Name = name;
- }
- }
- class Car
- {
- public Breaking Breaking { get; private set; }
- public Car(Breaking breaking)
- {
- Breaking = breaking;
- }
- }
- class Breaking
- {
- private int _refusalPenalty;
- public Detail NecessaryDetail { get; private set; }
- public int PriceForWork { get; private set; }
- public string Name { get; private set; }
- public int RefusalPenalty
- {
- get
- {
- return _refusalPenalty;
- }
- private set
- {
- if (value <= 0)
- _refusalPenalty = value;
- else
- _refusalPenalty = -value;
- }
- }
- public Breaking(Detail detail, int price, int fine, string name)
- {
- NecessaryDetail = detail;
- PriceForWork = price;
- RefusalPenalty = fine;
- Name = name;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement