public void Run() { List <ISoldier> soldiers = new List <ISoldier>(); string input = string.Empty; while ((input = Console.ReadLine()) != "End") { string[] elements = input .Split(" ", StringSplitOptions.RemoveEmptyEntries) .ToArray(); string typeSoldier = elements[0]; string id = elements[1]; string firstName = elements[2]; string lastName = elements[3]; ISoldier soldier = null; if (typeSoldier == "Private") { decimal salary = decimal.Parse(elements[4]); soldier = new Private(id, firstName, lastName, salary); } else if (typeSoldier == "LieutenantGeneral") { decimal salary = decimal.Parse(elements[4]); soldier = new LieutenantGeneral(id, firstName, lastName, salary); for (int i = 5; i < elements.Length; i++) { string targetId = elements[i]; IPrivate @private = (IPrivate)soldiers .FirstOrDefault(x => x.Id == targetId); ILieutenantGeneral lieutenantGeneral = soldier as ILieutenantGeneral; lieutenantGeneral.AddPrivate(@private); } } else if (typeSoldier == "Engineer") { decimal salary = decimal.Parse(elements[4]); string targetCorp = elements[5]; bool isCorpValid = Enum.TryParse <Corp>(targetCorp, out Corp corp); if (!isCorpValid) { continue; } soldier = new Engineer(id, firstName, lastName, salary, corp); IEngineer engineer = soldier as IEngineer; for (int i = 6; i < elements.Length; i += 2) { string partName = elements[i]; int hours = int.Parse(elements[i + 1]); IRepair repair = new Repair(partName, hours); engineer.AddRepair(repair); } } else if (typeSoldier == "Commando") { decimal salary = decimal.Parse(elements[4]); string targetCorp = elements[5]; bool isCorpValid = Enum.TryParse <Corp>(targetCorp, out Corp corp); if (!isCorpValid) { continue; } soldier = new Commando(id, firstName, lastName, salary, corp); ICommando commando = soldier as ICommando; for (int i = 6; i < elements.Length; i += 2) { string codeName = elements[i]; string targetMissionState = elements[i + 1]; bool isMissionStateValid = Enum.TryParse <MissionState>(targetMissionState, out MissionState missionState); if (!isMissionStateValid) { continue; } IMission mission = new Mission(codeName, missionState); commando.AddMission(mission); } } else if (typeSoldier == "Spy") { int codeNumber = int.Parse(elements[4]); soldier = new Spy(id, firstName, lastName, codeNumber); } soldiers.Add(soldier); } foreach (ISoldier soldier in soldiers) { Console.WriteLine(soldier); } }
public void Run() { string cmd; while ((cmd = this.reader.ReadLine()) != END_INPUT) { string[] args = cmd.Split(" ", StringSplitOptions.RemoveEmptyEntries).ToArray(); string soldierType = args[0]; int iD = int.Parse(args[1]); string firstName = args[2]; string lastName = args[3]; ISoldier soldier = null; switch (soldierType) { case "Private": decimal salary = decimal.Parse(args[4]); soldier = CreatePrivate(iD, firstName, lastName, salary); break; case "LieutenantGeneral": salary = decimal.Parse(args[4]); ILieutenantGeneral general = CreateLieutenant(args, iD, firstName, lastName, salary); soldier = general; break; case "Engineer": salary = decimal.Parse(args[4]); string corps = args[5]; try { IEngineer engineer = CreateEngineer(args, iD, firstName, lastName, salary, corps); soldier = engineer; } catch (InvalideCorpsException) { continue; } break; case "Commando": salary = decimal.Parse(args[4]); corps = args[5]; try { ICommando commando = CreateCommando(args, iD, firstName, lastName, salary, corps); soldier = commando; } catch (InvalideCorpsException) { continue; } break; case "Spy": int codeNumber = int.Parse(args[4]); soldier = new Spy(iD, firstName, lastName, codeNumber); break; } if (soldier != null) { this.soldiers.Add(soldier); } } foreach (var soldier in this.soldiers) { this.writer.Writeline(soldier.ToString()); } }
public static string Stringify(this ILieutenantGeneral soldier) => $"{Stringify((IPrivate) soldier)}\r\nPrivates:\r\n {string.Join("\r\n ", soldier.Privates)}".TrimEnd();