Advertisement
Guest User

Untitled

a guest
Sep 18th, 2019
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.30 KB | None | 0 0
  1. Упражнения: Полиморфизъм I
  2. 1.  Превозни средства
  3.  
  4. class Car : Vehicle
  5. {
  6.         private const double AirConditionPrice = 0.9;
  7.  
  8.         public Car(double fuelQuantity, double fuelConsumation) :
  9.             base(fuelQuantity, fuelConsumation,true)
  10.         {
  11.         }
  12.  
  13.         protected override double AirCondition => AirConditionPrice;
  14.  
  15.         public override string Name =>"Car" ; //this.GetType().Name
  16.  
  17.         public override string Drive(double km)
  18.         {
  19.             if (IsAirConditionOn)
  20.             {
  21.                 this.FuelConsumation += AirCondition;
  22.             }
  23.             return base.Drive(km);
  24.         }
  25. }
  26.  
  27.  
  28. class Truck : Vehicle
  29. {
  30.         private const double AirConditionPrice = 1.6;
  31.  
  32.         public Truck(double fuelQuantity, double fuelConsumation) :
  33.             base(fuelQuantity, fuelConsumation, true)
  34.         {
  35.         }
  36.  
  37.         public override string Name => "Truck";
  38.  
  39.         protected override double AirCondition => AirConditionPrice;
  40.  
  41.         public override string Drive(double km)
  42.         {
  43.             if (IsAirConditionOn)
  44.             {
  45.                 FuelConsumation += AirCondition;
  46.             }
  47.             return base.Drive(km);
  48.         }
  49.  
  50.         public override void Refuel(double liters)
  51.         {
  52.             this.FuelQuantity += liters * 0.95;
  53.         }
  54. }
  55.  
  56. abstract class Vehicle
  57. {
  58.         public double FuelQuantity { get; set; }
  59.  
  60.         public double FuelConsumation { get; set; }
  61.  
  62.         public  bool IsAirConditionOn { get;  set; }
  63.  
  64.         protected abstract double AirCondition { get; }
  65.  
  66.         public abstract string Name { get; }
  67.  
  68.         protected Vehicle(double fuelQuantity,double fuelConsumation,
  69.             bool isAirConditionOn)
  70.         {
  71.             this.FuelQuantity = fuelQuantity;
  72.             this.FuelConsumation = fuelConsumation;
  73.             this.IsAirConditionOn = isAirConditionOn;
  74.         }
  75.  
  76.         public virtual string Drive(double km)
  77.         {
  78.             var neededFuel =this.FuelConsumation * km;
  79.             if (neededFuel>FuelQuantity)
  80.             {
  81.                 return $"{Name} needs refueling";
  82.             }
  83.             else
  84.             {
  85.                 this.FuelQuantity -= neededFuel;
  86.                 return $"{Name} travelled {km} km";
  87.             }
  88.         }
  89.  
  90.         public virtual void Refuel(double liters)
  91.         {
  92.             this.FuelQuantity += liters;
  93.         }
  94.  
  95.         public override string ToString()
  96.         {
  97.             return $"{Name}: {this.FuelQuantity:f2}";
  98.         }
  99. }
  100.  
  101.  
  102. static void Main(string[] args)
  103. {
  104.             List<Vehicle> vehicle = new List<Vehicle>();
  105.  
  106.             for (int i = 0; i < 2; i++)
  107.             {
  108.                 var line = Console.ReadLine().Split();
  109.  
  110.                 var type = line[0];
  111.                 var quantity = double.Parse(line[1]);
  112.                 var consumation = double.Parse(line[2]);
  113.  
  114.                 switch (type)
  115.                 {
  116.                     case "Car":
  117.                         vehicle.Add(new Car(quantity,consumation));
  118.                         break;
  119.                     case "Truck":
  120.                         vehicle.Add(new Truck(quantity, consumation));
  121.                         break;
  122.                     default:
  123.                         break;
  124.                 }
  125.             }
  126.  
  127.             int n = int.Parse(Console.ReadLine());
  128.  
  129.             for (int i = 0; i < n; i++)
  130.             {
  131.                 var line = Console.ReadLine().Split();
  132.  
  133.                 var comand = line[0];
  134.                 var type = line[1];
  135.  
  136.                 string result;
  137.  
  138.                 var vehicleType = vehicle.FirstOrDefault(x => x.Name == type);
  139.  
  140.                 switch (comand)
  141.                 {
  142.                     case "Drive":
  143.                         double km = double.Parse(line[2]);
  144.                         result= vehicleType.Drive(km);
  145.                         Console.WriteLine(result);
  146.                         break;
  147.                     case "Refuel":
  148.                         double liters = double.Parse(line[2]);
  149.                         vehicleType.Refuel(liters);
  150.                         break;
  151.                     default:
  152.                         break;
  153.                 }
  154.             }
  155.  
  156.             vehicle.ForEach(Console.WriteLine);
  157. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement