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); }
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); } }
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()); } }
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); } }