예제 #1
0
        private static List <ISoldier> GetSoldiers()
        {
            var soldiers = new List <ISoldier>();

            while (true)
            {
                var input = Console.ReadLine();
                if (input == "End")
                {
                    break;
                }

                var    soldierTokens = ParseInput(input);
                var    type          = soldierTokens[0];
                var    id            = soldierTokens[1];
                var    firstName     = soldierTokens[2];
                var    lastName      = soldierTokens[3];
                double salary        = 0;

                switch (type)
                {
                case "Private":
                    salary = double.Parse(soldierTokens[4]);
                    var privateSoldier = new Private(id, firstName, lastName, salary);
                    soldiers.Add(privateSoldier);
                    break;

                case "LeutenantGeneral":
                    salary = double.Parse(soldierTokens[4]);
                    var leutenantGeneral = new LeutenantGeneral(id, firstName, lastName, salary);
                    var privatesIds      = soldierTokens.Skip(5);
                    foreach (var privateId in privatesIds)
                    {
                        var priv = (Private)soldiers.FirstOrDefault(s => s.Id == privateId);
                        leutenantGeneral.Privates.Add(priv);
                    }
                    soldiers.Add(leutenantGeneral);
                    break;

                case "Engineer":
                    salary = double.Parse(soldierTokens[4]);
                    var corps = soldierTokens[5];
                    try
                    {
                        var engineer = new Engineer(id, firstName, lastName, salary, corps);
                        var repairs  = soldierTokens.Skip(6).ToList();
                        for (int i = 0; i < repairs.Count; i += 2)
                        {
                            var repair = new Repair(repairs[i], int.Parse(repairs[i + 1]));
                            engineer.Repairs.Add(repair);
                        }
                        soldiers.Add(engineer);
                    }
                    catch (Exception)
                    {
                        break;
                    }
                    break;

                case "Commando":
                    salary = double.Parse(soldierTokens[4]);
                    corps  = soldierTokens[5];
                    try
                    {
                        var commando = new Commando(id, firstName, lastName, salary, corps);
                        var missions = soldierTokens.Skip(6).ToList();
                        for (int i = 0; i < missions.Count; i += 2)
                        {
                            try
                            {
                                var mission = new Mission(missions[i], missions[i + 1]);
                                commando.Missions.Add(mission);
                            }
                            catch (Exception)
                            {
                                continue;
                            }
                        }
                        soldiers.Add(commando);
                    }
                    catch (Exception)
                    {
                        break;
                    }
                    break;

                case "Spy":
                    var codeNumber = int.Parse(soldierTokens[4]);
                    var spy        = new Spy(id, firstName, lastName, codeNumber);
                    soldiers.Add(spy);
                    break;

                default: break;
                }
            }

            return(soldiers);
        }
예제 #2
0
        public static void Main()
        {
            var input = Console.ReadLine();

            IList <Soldier> soldiers = new List <Soldier>();

            while (input != "End")
            {
                var command = input.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

                switch (command[0])
                {
                case "Private":
                    string id             = command[1];
                    string firstName      = command[2];
                    string lastName       = command[3];
                    double salary         = double.Parse(command[4]);
                    var    currentPrivate = new Private(id, firstName, lastName, salary);
                    soldiers.Add(currentPrivate);
                    break;

                case "LeutenantGeneral":
                    id        = command[1];
                    firstName = command[2];
                    lastName  = command[3];
                    salary    = double.Parse(command[4]);
                    var privateNumbers = new List <Private>();
                    for (int i = 5; i < command.Length; i++)
                    {
                        string privateId = command[i];

                        var searchedPrivate = soldiers.SingleOrDefault(s => s.Id == privateId);

                        if (searchedPrivate != null)
                        {
                            privateNumbers.Add(searchedPrivate as Private);
                        }
                    }

                    var currentLeutenant = new LeutenantGeneral(id, firstName, lastName, salary, privateNumbers);

                    soldiers.Add(currentLeutenant);

                    break;

                case "Engineer":
                    id        = command[1];
                    firstName = command[2];
                    lastName  = command[3];
                    salary    = double.Parse(command[4]);
                    string         corps   = command[5];
                    IList <Repair> repairs = new List <Repair>();

                    for (int i = 6; i < command.Length - 1; i += 2)
                    {
                        string repairName    = command[i];
                        int    repairHours   = int.Parse(command[i + 1]);
                        var    currentRepair = new Repair(repairName, repairHours);
                        repairs.Add(currentRepair);
                    }

                    try
                    {
                        var currentEngineer = new Engineer(id, firstName, lastName, salary, corps, repairs);

                        soldiers.Add(currentEngineer);
                    }
                    catch (ArgumentException)
                    {
                    }

                    break;

                case "Commando":
                    id        = command[1];
                    firstName = command[2];
                    lastName  = command[3];
                    salary    = double.Parse(command[4]);
                    corps     = command[5];
                    IList <Mission> missions = new List <Mission>();

                    for (int i = 6; i < command.Length - 1; i += 2)
                    {
                        string missionCodeName = command[i];
                        string missionState    = command[i + 1];
                        try
                        {
                            var currentMission = new Mission(missionCodeName, missionState);
                            missions.Add(currentMission);
                        }
                        catch (ArgumentException)
                        {
                        }
                    }

                    try
                    {
                        var currentCommando = new Commando(id, firstName, lastName, salary, corps, missions);
                        soldiers.Add(currentCommando);
                    }
                    catch (ArgumentException)
                    {
                    }
                    break;

                case "Spy":
                    id        = command[1];
                    firstName = command[2];
                    lastName  = command[3];
                    string codeNumbers = command[4];

                    var currentSpy = new Spy(id, firstName, lastName, codeNumbers);

                    soldiers.Add(currentSpy);
                    break;
                }

                input = Console.ReadLine();
            }

            foreach (var soldier in soldiers)
            {
                Console.WriteLine(soldier.ToString());
            }
        }
        static void Main(string[] args)
        {
            List <ISoldier> soldiers = new List <ISoldier>();

            string input = "";

            while ((input = Console.ReadLine()) != "End")
            {
                string[] splitInput = input.Split();

                string  soldierType = splitInput[0];
                int     id          = int.Parse(splitInput[1]);
                string  firstName   = splitInput[2];
                string  lastNames   = splitInput[3];
                decimal salary      = decimal.Parse(splitInput[4]);

                ISoldier soldier = null;
                try
                {
                    switch (splitInput[0])
                    {
                    case "Private":
                        soldier = new Private(id, firstName, lastNames, salary);
                        break;

                    case "Spy":
                        int codeNumber = (int)salary;
                        soldier = new Spy(id, firstName, lastNames, salary, codeNumber);
                        break;

                    case "LeutenantGeneral":
                        LeutenantGeneral leutenant = new LeutenantGeneral(id, firstName, lastNames, salary);
                        for (int i = 5; i < splitInput.Length; i++)
                        {
                            int      privateId = int.Parse(splitInput[i]);
                            ISoldier @private  = soldiers.First(x => x.Id == privateId);
                            leutenant.AddPrivate(@private);
                        }
                        soldier = leutenant;
                        break;

                    case "Engineer":
                        string   engineerCorps = splitInput[5];
                        Engineer engineer      = new Engineer(id, firstName, lastNames, salary, engineerCorps);

                        for (int i = 6; i < splitInput.Length; i++)
                        {
                            string partName    = splitInput[i];
                            int    hoursWorked = int.Parse(splitInput[++i]);
                            try
                            {
                                IRepair repair = new Repair(partName, hoursWorked);
                                engineer.AddRepairs(repair);
                            }
                            catch { }
                        }
                        soldier = engineer;
                        break;

                    case "Commando":
                        string   commandoCorps = splitInput[5];
                        Commando commando      = new Commando(id, firstName, lastNames, salary, commandoCorps);

                        for (int i = 6; i < splitInput.Length; i++)
                        {
                            string codeName     = splitInput[i];
                            string missionState = splitInput[++i];
                            try
                            {
                                IMission mission = new Mission(codeName, missionState);
                                commando.AddMissios(mission);
                            }
                            catch { }
                        }
                        soldier = commando;
                        break;

                    default: throw new ArgumentException("Invalid soldier type!");
                    }
                    soldiers.Add(soldier);
                }
                catch {  }
            }

            foreach (var soldier in soldiers)
            {
                Console.WriteLine(soldier);
            }
        }
예제 #4
0
        public void Run()
        {
            string command = Console.ReadLine();

            while (command != "End")
            {
                string[] commandArgs = command.Split();

                string  type      = commandArgs[0];
                int     id        = int.Parse(commandArgs[1]);
                string  firstName = commandArgs[2];
                string  lastName  = commandArgs[3];
                decimal salary    = decimal.Parse(commandArgs[4]);

                if (type == "Private")
                {
                    Private @private = new Private(id, firstName, lastName, salary);

                    this.army.Add(@private);
                }
                else if (type == "LieutenantGeneral")
                {
                    int[] privatesId = commandArgs
                                       .Skip(5)
                                       .Select(int.Parse)
                                       .ToArray();

                    LieutenantGeneral lieutenant = new LieutenantGeneral(id, firstName, lastName, salary);

                    foreach (var pid in privatesId)
                    {
                        ISoldier soldierToAdd = this.army
                                                .First(s => s.Id == pid);

                        lieutenant.AddPrivate((Private)soldierToAdd);
                    }

                    this.army.Add(lieutenant);
                }
                else if (type == "Engineer")
                {
                    try
                    {
                        string corps = commandArgs[5];

                        string[] repairArgs = commandArgs
                                              .Skip(6)
                                              .ToArray();

                        Engineer engineer = new Engineer(id, firstName, lastName, salary, corps);

                        for (int i = 0; i < repairArgs.Length; i += 2)
                        {
                            string partName    = repairArgs[i];
                            int    hoursWorked = int.Parse(repairArgs[i + 1]);

                            IRepair repair = new Repair(partName, hoursWorked);

                            engineer.AddRepair(repair);
                        }

                        this.army.Add(engineer);
                    }
                    catch (InvalidCorpsExceptions ice)
                    {
                    }
                }
                else if (type == "Commando")
                {
                    try
                    {
                        string corps = commandArgs[5];

                        ICommando comando = new Commando(id, firstName, lastName, salary, corps);

                        string[] missionsArgs = commandArgs
                                                .Skip(6)
                                                .ToArray();

                        for (int i = 0; i < missionsArgs.Length; i += 2)
                        {
                            try
                            {
                                string codeName = missionsArgs[i];
                                string state    = missionsArgs[i + 1];

                                IMission mission = new Mission(codeName, state);

                                comando.AddMission(mission);
                            }
                            catch (InvalidStatesExceptions ise)
                            {
                            }
                        }

                        this.army.Add(comando);
                    }
                    catch (InvalidCorpsExceptions ice)
                    {
                        continue;
                    }
                }
                else if (type == "Spy")
                {
                    int codeNumber = (int)salary;

                    ISpy spy = new Spy(id, firstName, lastName, codeNumber);

                    this.army.Add(spy);
                }

                command = Console.ReadLine();
            }

            foreach (var soldier in this.army)
            {
                Type type = soldier.GetType();

                Object actual = Convert.ChangeType(soldier, type);

                Console.WriteLine(soldier.ToString());
            }
        }
예제 #5
0
        static void Main(string[] args)
        {
            HashSet <Soldier> soldiers = new HashSet <Soldier>();
            string            input    = Console.ReadLine();

            while (input != "End")
            {
                string[] soldierTokens = input
                                         .Split();

                string  typeOfSoldier = soldierTokens[0];
                int     id            = int.Parse(soldierTokens[1]);
                string  firstName     = soldierTokens[2];
                string  lastName      = soldierTokens[3];
                decimal salary        = decimal.Parse(soldierTokens[4]);
                try
                {
                    if (typeOfSoldier == "Private")
                    {
                        var privateSoldier = new Private(id, firstName, lastName, salary);
                        soldiers.Add(privateSoldier);
                    }
                    else if (typeOfSoldier == "LieutenantGeneral")
                    {
                        List <int> privatesIds = soldierTokens.Skip(5).Select(int.Parse).ToList();

                        var lieutenant = new LieutanantGeneral(id, firstName, lastName, salary);

                        foreach (var currentId in privatesIds)
                        {
                            Private currentPrivate = (Private)soldiers.FirstOrDefault(x => x.Id == currentId);

                            lieutenant.Privates.Add(currentPrivate);
                        }

                        soldiers.Add(lieutenant);
                    }
                    else if (typeOfSoldier == "Engineer")
                    {
                        string corps    = soldierTokens[5];
                        var    engineer = new Engineer(id, firstName, lastName, salary, corps);

                        List <string> repairs = soldierTokens.Skip(6).ToList();

                        for (int i = 0; i < repairs.Count; i += 2)
                        {
                            string partName = repairs[i];
                            int    hours    = int.Parse(repairs[i + 1]);

                            Repair repair = new Repair(partName, hours);
                            engineer.Repairs.Add(repair);
                        }

                        soldiers.Add(engineer);
                    }
                    else if (typeOfSoldier == "Commando")
                    {
                        string corps    = soldierTokens[5];
                        var    commando = new Commando(id, firstName, lastName, salary, corps);

                        List <string> missions = soldierTokens.Skip(6).ToList();

                        for (int i = 0; i < missions.Count; i += 2)
                        {
                            try
                            {
                                string codeName = missions[i];
                                string state    = missions[i + 1];

                                Mission mission = new Mission(codeName, state);
                                commando.Missions.Add(mission);
                            }
                            catch (Exception)
                            {
                                continue;
                            }
                        }

                        soldiers.Add(commando);
                    }
                    else if (typeOfSoldier == "Spy")
                    {
                        int code = Convert.ToInt32(salary);
                        var spy  = new Spy(id, firstName, lastName, code);
                        soldiers.Add(spy);
                    }

                    input = Console.ReadLine();
                }
                catch (Exception ex)
                {
                    if (ex.Message == "invalid corps")
                    {
                        input = Console.ReadLine();
                    }
                }
            }

            foreach (var soldier in soldiers)
            {
                Console.WriteLine(soldier);
            }
        }