Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Text;
- namespace _08.MilitaryElite
- {
- public class StartUp
- {
- public static void Main(string[] args)
- {
- Dictionary<string, Soldier> soldiers = new Dictionary<string, Soldier>();
- string inputLine = Console.ReadLine();
- while (inputLine != "End")
- {
- AddSoldier(inputLine, soldiers);
- inputLine = Console.ReadLine();
- }
- foreach (var soldier in soldiers)
- {
- Console.WriteLine(soldier.Value);
- }
- }
- private static void AddSoldier(string inputLine, Dictionary<string, Soldier> soldiers)
- {
- string[] tokens = inputLine.Split();
- switch (tokens[0])
- {
- case "Private":
- soldiers.Add(tokens[1], CreatePrivate(tokens));
- break;
- case "LeutenantGeneral":
- soldiers.Add(tokens[1], CreateGeneral(tokens, soldiers));
- break;
- case "Spy":
- soldiers.Add(tokens[1], CreateSpy(tokens));
- break;
- case "Engineer":
- try
- {
- soldiers.Add(tokens[1], CreateEngineer(tokens));
- }
- catch (Exception)
- {
- }
- break;
- case "Commando":
- try
- {
- soldiers.Add(tokens[1], CreateCommando(tokens));
- }
- catch (Exception)
- {
- }
- break;
- }
- }
- private static Private CreatePrivate(string[] tokens)
- {
- string id = tokens[1];
- string firstName = tokens[2];
- string lastName = tokens[3];
- double salary = double.Parse(tokens[4]);
- Private privateSoldier = new Private(id, firstName, lastName, salary);
- return privateSoldier;
- }
- private static LeutenantGeneral CreateGeneral(string[] tokens, Dictionary<string, Soldier> soldiers)
- {
- string id = tokens[1];
- string firstName = tokens[2];
- string lastName = tokens[3];
- double salary = double.Parse(tokens[4]);
- LeutenantGeneral leutenantGeneral = new LeutenantGeneral(id, firstName, lastName, salary);
- if (tokens.Length > 5)
- {
- for (int i = 5; i < tokens.Length; i++)
- {
- leutenantGeneral.AddPrivate((Private)soldiers[tokens[i]]);
- }
- }
- return leutenantGeneral;
- }
- private static Engineer CreateEngineer(string[] tokens)
- {
- string id = tokens[1];
- string firstName = tokens[2];
- string lastName = tokens[3];
- double salary = double.Parse(tokens[4]);
- string corps = tokens[5];
- Engineer engineer = new Engineer(id, firstName, lastName, salary, corps);
- if (tokens.Length > 6)
- {
- for (int i = 6; i < tokens.Length - 1; i+=2)
- {
- engineer.AddRepair(new Repair(tokens[i], int.Parse(tokens[i + 1])));
- }
- }
- return engineer;
- }
- private static Commando CreateCommando(string[] tokens)
- {
- string id = tokens[1];
- string firstName = tokens[2];
- string lastName = tokens[3];
- double salary = double.Parse(tokens[4]);
- string corps = tokens[5];
- Commando commando = new Commando(id, firstName, lastName, salary, corps);
- if (tokens.Length > 6)
- {
- for (int i = 6; i < tokens.Length - 1; i+=2)
- {
- try
- {
- commando.AddMission(new Mission(tokens[i], tokens[i + 1]));
- }
- catch (ArgumentException)
- {
- }
- }
- }
- return commando;
- }
- private static Spy CreateSpy(string[] tokens)
- {
- string id = tokens[1];
- string firstName = tokens[2];
- string lastName = tokens[3];
- int codeNumber = int.Parse(tokens[4]);
- Spy spy = new Spy(id, firstName, lastName, codeNumber);
- return spy;
- }
- }
- public interface ISoldier
- {
- string FirstName { get; }
- string LastName { get; }
- string Id { get; }
- }
- public interface IPrivate : ISoldier
- {
- double Salary { get; }
- }
- public interface ISpy : ISoldier
- {
- int CodeNumber { get; }
- }
- public interface ILeutenantGeneral : IPrivate
- {
- List<Private> Privates { get; }
- }
- public interface ISpecialisedSoldier : IPrivate
- {
- string Corps { get; }
- }
- public interface IEngineer : ISpecialisedSoldier
- {
- List<Repair> Repairs { get; }
- }
- public interface IRepair
- {
- string PartName { get; }
- int HoursWorked { get; }
- }
- public interface ICommando : ISpecialisedSoldier
- {
- List<Mission> Missions { get; }
- }
- public interface IMission
- {
- string CodeName { get; }
- string State { get; }
- void CompleteMission();
- }
- public abstract class Soldier : ISoldier
- {
- public string FirstName { get; protected set; }
- public string LastName { get; protected set; }
- public string Id { get; protected set; }
- public Soldier(string id, string firstName, string lastName)
- {
- this.FirstName = firstName;
- this.LastName = lastName;
- this.Id = id;
- }
- }
- public class Private : Soldier, IPrivate
- {
- public double Salary { get; }
- public Private(string id, string firstName, string lastName, double salary)
- : base(id, firstName, lastName)
- {
- this.Salary = salary;
- }
- public override string ToString()
- {
- StringBuilder sb = new StringBuilder();
- sb.Append($"Name: {this.FirstName} {this.LastName} Id: {this.Id} Salary: {this.Salary:F2}");
- return sb.ToString();
- }
- }
- public class Spy : Soldier, ISpy
- {
- public int CodeNumber { get; private set; }
- public Spy(string id, string firstName, string lastName, int codeNumber) : base(id, firstName, lastName)
- {
- this.CodeNumber = codeNumber;
- }
- public override string ToString()
- {
- StringBuilder sb = new StringBuilder();
- sb.Append($"Name: {this.FirstName} {this.LastName} Id: {this.Id}")
- .Append(Environment.NewLine)
- .Append($"Code Number: {this.CodeNumber}");
- return sb.ToString();
- }
- }
- public class LeutenantGeneral : Private, ILeutenantGeneral
- {
- public LeutenantGeneral(string id, string firstName, string lastName, double salary)
- : base(id, firstName, lastName, salary)
- {
- this.Privates = new List<Private>();
- }
- public List<Private> Privates { get; private set; }
- public void AddPrivate(Private privateSoldier)
- {
- this.Privates.Add(privateSoldier);
- }
- public override string ToString()
- {
- StringBuilder sb = new StringBuilder();
- sb.Append(base.ToString())
- .Append(Environment.NewLine)
- .Append("Privates:");
- foreach (var soldier in Privates)
- {
- sb.Append(Environment.NewLine)
- .Append(" ")
- .Append(soldier);
- }
- return sb.ToString();
- }
- }
- public abstract class SpecialisedSoldier : Private, ISpecialisedSoldier
- {
- private string corps;
- public SpecialisedSoldier(string id, string firstName, string lastName, double salary, string corps)
- : base(id, firstName, lastName, salary)
- {
- this.Corps = corps;
- }
- public string Corps
- {
- get { return this.corps; }
- protected set
- {
- if (value != "Airforces" && value != "Marines")
- {
- throw new ArgumentException();
- }
- this.corps = value;
- }
- }
- public override string ToString()
- {
- StringBuilder sb = new StringBuilder();
- sb.Append(base.ToString())
- .Append(Environment.NewLine)
- .Append($"Corps: {this.Corps}");
- return sb.ToString();
- }
- }
- public class Engineer : SpecialisedSoldier, IEngineer
- {
- public List<Repair> Repairs { get; private set; }
- public Engineer(string id, string firstName, string lastName, double salary, string corps)
- : base(id, firstName, lastName, salary, corps)
- {
- this.Repairs = new List<Repair>();
- }
- public void AddRepair(Repair repair)
- {
- this.Repairs.Add(repair);
- }
- public override string ToString()
- {
- StringBuilder sb = new StringBuilder();
- sb.Append(base.ToString())
- .Append(Environment.NewLine)
- .Append("Repairs:");
- foreach (var repair in Repairs)
- {
- sb.Append(Environment.NewLine)
- .Append(repair);
- }
- return sb.ToString();
- }
- }
- public class Repair : IRepair
- {
- public string PartName { get; private set; }
- public int HoursWorked { get; private set; }
- public Repair(string partName, int hoursWorker)
- {
- this.PartName = partName;
- this.HoursWorked = hoursWorker;
- }
- public override string ToString()
- {
- return $" Part Name: {this.PartName} Hours Worked: {this.HoursWorked}";
- }
- }
- public class Commando : SpecialisedSoldier, ICommando
- {
- public Commando(string id, string firstName, string lastName, double salary, string corps) : base(id, firstName, lastName, salary, corps)
- {
- this.Missions = new List<Mission>();
- }
- public List<Mission> Missions { get; private set; }
- public void AddMission(Mission mission)
- {
- this.Missions.Add(mission);
- }
- public override string ToString()
- {
- StringBuilder sb = new StringBuilder();
- sb.Append(base.ToString())
- .Append(Environment.NewLine)
- .Append("Missions:");
- foreach (var mission in Missions)
- {
- sb.Append(Environment.NewLine)
- .Append(mission);
- }
- return sb.ToString();
- }
- }
- public class Mission : IMission
- {
- private string state;
- public string CodeName { get; private set; }
- public string State
- {
- get { return this.state; }
- private set
- {
- if (value != "inProgress" && value != "Finished")
- {
- throw new ArgumentException();
- }
- this.state = value;
- }
- }
- public Mission(string codeName, string state)
- {
- this.CodeName = codeName;
- this.State = state;
- }
- public void CompleteMission()
- {
- this.State = "Finished";
- }
- public override string ToString()
- {
- return $" Code Name: {this.CodeName} State: {this.State}";
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement