Advertisement
Guest User

MilitaryElite

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