Advertisement
silvi81

MilitaryElite

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