Advertisement
silvi81

_08.MilitaryElite

Jul 25th, 2016
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 12.29 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace _08.MilitaryElite
  7. {
  8.     public interface IRepair
  9.     {
  10.         string PartName { get; }
  11.  
  12.         int HoursWorked { get; }
  13.     }
  14.  
  15.     public interface IMission
  16.     {
  17.         string CodeName { get; }
  18.  
  19.         string State { get; }
  20.     }
  21.  
  22.     public interface ISoldier
  23.     {
  24.         string FirstName { get; }
  25.  
  26.         string LastName { get; }
  27.  
  28.         string Id { get; }
  29.     }
  30.  
  31.     public interface IPrivate : ISoldier
  32.     {
  33.         double Salary { get; }
  34.     }
  35.  
  36.     public interface ISpy : ISoldier
  37.     {
  38.         int CodeNumber { get; }
  39.     }
  40.  
  41.     public interface ILeutenantGeneral : IPrivate
  42.     {
  43.         IEnumerable<IPrivate> Privates { get; }
  44.  
  45.         void AddPrivate(IPrivate privat);
  46.     }
  47.  
  48.     public interface ISpecialisedSoldier : IPrivate
  49.     {
  50.         string Corps { get; }
  51.     }
  52.  
  53.     public interface ICommando : ISpecialisedSoldier
  54.     {
  55.         IEnumerable<IMission> Missions { get; }
  56.  
  57.         void AddMission(IMission mission);
  58.     }
  59.  
  60.     public interface IEngineer : ISpecialisedSoldier
  61.     {
  62.         IEnumerable<IRepair> Repairs { get; }
  63.  
  64.         void AddRepair(IRepair repair);
  65.     }
  66.  
  67.     public class Repair : IRepair
  68.     {
  69.         public Repair(string partName, int hoursWorked)
  70.         {
  71.             this.PartName = partName;
  72.             this.HoursWorked = hoursWorked;
  73.         }
  74.  
  75.         public string PartName { get; private set; }
  76.  
  77.         public int HoursWorked { get; private set; }
  78.  
  79.         public override string ToString()
  80.         {
  81.             var result = new StringBuilder();
  82.  
  83.             result.Append($"  Part Name: {PartName} Hours Worked: {HoursWorked}");
  84.  
  85.             return result.ToString();
  86.         }
  87.     }
  88.  
  89.     public class Mission : IMission
  90.     {
  91.         private string state;
  92.  
  93.         public Mission(string codeName, string state)
  94.         {
  95.             this.CodeName = codeName;
  96.             this.State = state;
  97.         }
  98.  
  99.         public string CodeName { get; set; }
  100.  
  101.         public string State
  102.         {
  103.             get
  104.             {
  105.                 return this.state;
  106.             }
  107.  
  108.             set
  109.             {
  110.                 if (value == "inProgress" || value == "Finished")
  111.                 {
  112.                     this.state = value;
  113.                 }
  114.                 else
  115.                 {
  116.                     throw new ArgumentOutOfRangeException("mission state", "Mission state is not valid");
  117.                 }
  118.             }
  119.         }
  120.        
  121.         public override string ToString()
  122.         {
  123.             var result = new StringBuilder();
  124.  
  125.             result.Append($"  Code Name: {CodeName} State: {state}");
  126.  
  127.             return result.ToString();
  128.         }
  129.     }
  130.  
  131.     public class Soldier : ISoldier
  132.     {
  133.         public Soldier(string firstName, string id, string lastName)
  134.         {
  135.             this.FirstName = firstName;
  136.             this.Id = id;
  137.             this.LastName = lastName;
  138.         }
  139.  
  140.         public string FirstName { get; private set; }
  141.  
  142.         public string LastName { get; private set; }
  143.  
  144.         public string Id { get; private set; }
  145.  
  146.         public override string ToString()
  147.         {
  148.             var result = new StringBuilder();
  149.  
  150.             result.Append($"Name: {this.FirstName} {LastName} Id: {Id}");
  151.  
  152.             return result.ToString();
  153.         }
  154.     }
  155.  
  156.     public class Private : Soldier, IPrivate
  157.     {
  158.         public Private(string firstName, string id, string lastName, double salary)
  159.             : base(firstName, id, lastName)
  160.         {
  161.             this.Salary = salary;
  162.         }
  163.  
  164.         public double Salary { get; private set; }
  165.  
  166.         public override string ToString()
  167.         {
  168.             var result = new StringBuilder();
  169.  
  170.             result.Append(base.ToString());
  171.             result.Append($" Salary: {Salary:F2}");
  172.  
  173.             return result.ToString();
  174.         }
  175.     }
  176.  
  177.     public class Spy : Soldier, ISpy
  178.     {
  179.         public Spy(string firstName, string id, string lastName, int codeNumber)
  180.             : base(firstName, id, lastName)
  181.         {
  182.             this.CodeNumber = codeNumber;
  183.         }
  184.  
  185.         public int CodeNumber { get; private set; }
  186.  
  187.         public override string ToString()
  188.         {
  189.             var result = new StringBuilder();
  190.  
  191.             result.AppendLine(base.ToString());
  192.             result.Append($"Code Number: {CodeNumber}");
  193.  
  194.             return result.ToString();
  195.         }
  196.     }
  197.  
  198.     public class LeutenantGeneral : Private, ILeutenantGeneral
  199.     {
  200.         private List<IPrivate> privates;
  201.  
  202.         public LeutenantGeneral(string firstName, string id, string lastName, double salary)
  203.              : base(firstName, id, lastName, salary)
  204.         {
  205.             this.privates = new List<IPrivate>();
  206.         }
  207.  
  208.         public IEnumerable<IPrivate> Privates => this.privates;
  209.  
  210.         public void AddPrivate(IPrivate privat)
  211.         {
  212.             if (privat == null)
  213.             {
  214.                 throw new ArgumentNullException("privat", "private cannot be null");
  215.             }
  216.  
  217.             this.privates.Add(privat);
  218.         }
  219.  
  220.         public override string ToString()
  221.         {
  222.             var result = new StringBuilder();
  223.  
  224.             result.AppendLine(base.ToString());
  225.             result.AppendLine("Privates:");
  226.  
  227.             foreach (var priv in Privates)
  228.             {
  229.                 result.AppendLine(priv.ToString());
  230.             }
  231.  
  232.             return result.ToString().Trim();
  233.         }
  234.     }
  235.  
  236.     public class Commando : SpecialisedSoldier, ICommando
  237.     {
  238.         private List<IMission> missions;
  239.  
  240.         public Commando(string firstName, string id, string lastName, double salary, string corps)
  241.             : base(firstName, id, lastName, salary, corps)
  242.         {
  243.             this.missions = new List<IMission>();
  244.         }
  245.  
  246.         public IEnumerable<IMission> Missions => this.missions;
  247.  
  248.         public void AddMission(IMission mission)
  249.         {
  250.             this.missions.Add(mission);
  251.         }
  252.  
  253.         public override string ToString()
  254.         {
  255.             var result = new StringBuilder();
  256.  
  257.             result.AppendLine(base.ToString());
  258.             result.AppendLine("Missions:");
  259.  
  260.             foreach (var priv in Missions)
  261.             {
  262.                 result.AppendLine(priv.ToString());
  263.             }
  264.  
  265.             return result.ToString().Trim();
  266.         }
  267.     }
  268.  
  269.     public class SpecialisedSoldier : Private, ISpecialisedSoldier
  270.     {
  271.         private string corps;
  272.  
  273.         public SpecialisedSoldier(string firstName, string id, string lastName, double salary, string corps)
  274.             : base(firstName, id, lastName, salary)
  275.         {
  276.             this.Corps = corps;
  277.         }
  278.  
  279.         public string Corps
  280.         {
  281.             get
  282.             {
  283.                 return this.corps;
  284.             }
  285.  
  286.             set
  287.             {
  288.                 if (value == "Airforces" || value == "Marines")
  289.                 {
  290.                     this.corps = value;
  291.                 }
  292.                 else
  293.                 {
  294.                     throw new ArgumentOutOfRangeException("corps", "Corps is not valid");
  295.                 }
  296.             }
  297.         }
  298.  
  299.         public override string ToString()
  300.         {
  301.             var result = new StringBuilder();
  302.  
  303.             result.AppendLine(base.ToString());
  304.             result.Append($"Corps: {Corps}");
  305.  
  306.             return result.ToString();
  307.         }
  308.     }
  309.  
  310.     public class Engineer : SpecialisedSoldier, IEngineer
  311.     {
  312.         private List<IRepair> repairs;
  313.  
  314.         public Engineer(string firstName, string id, string lastName, double salary, string corps)
  315.             : base(firstName, id, lastName, salary, corps)
  316.         {
  317.             this.repairs = new List<IRepair>();
  318.         }
  319.  
  320.         public IEnumerable<IRepair> Repairs => this.repairs;
  321.  
  322.         public void AddRepair(IRepair repair)
  323.         {
  324.             this.repairs.Add(repair);
  325.         }
  326.  
  327.         public override string ToString()
  328.         {
  329.             var result = new StringBuilder();
  330.  
  331.             result.AppendLine(base.ToString());
  332.             result.AppendLine("Repairs:");
  333.  
  334.             foreach (var priv in Repairs)
  335.             {
  336.                 result.AppendLine(priv.ToString());
  337.             }
  338.  
  339.             return result.ToString().Trim();
  340.         }
  341.     }
  342.  
  343.     class Program
  344.     {
  345.         static void Main(string[] args)
  346.         {
  347.             var result = new StringBuilder();
  348.  
  349.             string line = Console.ReadLine();
  350.  
  351.             List<Private> privates = new List<Private>();
  352.  
  353.             while (line != "End")
  354.             {
  355.                 string[] inputArgs = line.Split();
  356.  
  357.                 string soldierType = inputArgs[0];
  358.  
  359.                 switch (soldierType)
  360.                 {
  361.                     case "Private":
  362.                         Private privat = new Private(inputArgs[2], inputArgs[1], inputArgs[3], double.Parse(inputArgs[4]));
  363.                         privates.Add(privat);
  364.                         result.AppendLine(privat.ToString());
  365.                         break;
  366.                     case "LeutenantGeneral":
  367.                         LeutenantGeneral leutenant = new LeutenantGeneral(inputArgs[2], inputArgs[1], inputArgs[3], double.Parse(inputArgs[4]));
  368.  
  369.                         for (int i = 5; i < inputArgs.Length; i++)
  370.                         {
  371.                             string privateId = inputArgs[i];
  372.  
  373.                             Private privSoldier = privates.FirstOrDefault(p => p.Id == privateId);
  374.  
  375.                             if (privSoldier != null)
  376.                             {
  377.                                 leutenant.AddPrivate(privSoldier);
  378.                             }
  379.                         }
  380.  
  381.                         result.AppendLine(leutenant.ToString());
  382.                         break;
  383.                     case "Engineer":
  384.                         try
  385.                         {
  386.                             Engineer engineer = new Engineer(inputArgs[2], inputArgs[1], inputArgs[3], double.Parse(inputArgs[4]), inputArgs[5]);
  387.  
  388.                             for (int i = 6; i < inputArgs.Length - 1; i += 2)
  389.                             {
  390.                                 string repairPart = inputArgs[i];
  391.                                 int repairHours = int.Parse(inputArgs[i + 1]);
  392.  
  393.                                 var repair = new Repair(repairPart, repairHours);
  394.  
  395.                                 engineer.AddRepair(repair);
  396.                             }
  397.  
  398.                             result.AppendLine(engineer.ToString());
  399.                         }
  400.                         catch (ArgumentOutOfRangeException)
  401.                         {
  402.                         }
  403.                         break;
  404.                     case "Commando":
  405.                         try
  406.                         {
  407.                             Commando comando = new Commando(inputArgs[2], inputArgs[1], inputArgs[3], double.Parse(inputArgs[4]), inputArgs[5]);
  408.  
  409.                             for (int i = 6; i < inputArgs.Length - 1; i += 2)
  410.                             {
  411.                                 string repairPart = inputArgs[i];
  412.                                 string repairHours = inputArgs[i + 1];
  413.  
  414.                                 try
  415.                                 {
  416.                                     var mission = new Mission(repairPart, repairHours);
  417.                                     comando.AddMission(mission);
  418.                                 }
  419.                                 catch (ArgumentOutOfRangeException)
  420.                                 {
  421.                                 }
  422.                             }
  423.  
  424.                             result.AppendLine(comando.ToString());
  425.                         }
  426.                         catch (ArgumentOutOfRangeException)
  427.                         {
  428.                         }
  429.                         break;
  430.                     case "Spy":
  431.                         Spy spy = new Spy(inputArgs[2], inputArgs[1], inputArgs[3], int.Parse(inputArgs[4]));
  432.                         result.AppendLine(spy.ToString());
  433.                         break;
  434.                 }
  435.  
  436.                 line = Console.ReadLine();
  437.             }
  438.  
  439.             Console.WriteLine(result.ToString());
  440.         }
  441.     }
  442. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement