static void Main(string[] args) { var input = Console.ReadLine(); var myArmy = new List <Soldier>(); var myPrivateArmy = new List <Private>(); while (input != "End") { var currentSoldier = input.Split(" ").ToArray(); var typeOfSoldier = currentSoldier[0]; var id = currentSoldier[1]; var firstName = currentSoldier[2]; var lastName = currentSoldier[3]; switch (typeOfSoldier) { case "Private": var salary = decimal.Parse(currentSoldier[4]); var currentPrivate = new Private(id, firstName, lastName, salary); myArmy.Add(currentPrivate); myPrivateArmy.Add(currentPrivate); break; case "LieutenantGeneral": salary = decimal.Parse(currentSoldier[4]); var general = new LieutenantGeneral(id, firstName, lastName, salary); if (currentSoldier.Length > 4) { for (int i = 5; i < currentSoldier.Length; i++) { var currentId = currentSoldier[i]; var foundPrivate = myPrivateArmy.FirstOrDefault(x => x.Id == currentId); if (foundPrivate != null) { general.Privates.Add(foundPrivate); } } } myArmy.Add(general); break; case "Spy": var codeName = int.Parse(currentSoldier[4]); var spy = new Spy(id, firstName, lastName, codeName); myArmy.Add(spy); break; case "Engineer": salary = decimal.Parse(currentSoldier[4]); var corps = currentSoldier[5]; try { var engineer = new Engineer(id, firstName, lastName, salary, corps); if (currentSoldier.Length > 7) { for (int i = 6; i < currentSoldier.Length; i += 2) { var currentRepair = new Repair(currentSoldier[i], int.Parse(currentSoldier[i + 1])); engineer.Repairs.Add(currentRepair); } } myArmy.Add(engineer); } catch (Exception ex) { input = Console.ReadLine(); continue; } break; case "Commando": salary = decimal.Parse(currentSoldier[4]); corps = currentSoldier[5]; try { var commando = new Commando(id, firstName, lastName, salary, corps); if (currentSoldier.Length > 7) { for (int i = 6; i < currentSoldier.Length; i += 2) { try { var currentMission = new Mission(currentSoldier[i], currentSoldier[i + 1]); commando.Missions.Add(currentMission); } catch (Exception) { continue; } } } myArmy.Add(commando); } catch (Exception) { input = Console.ReadLine(); continue; } break; } input = Console.ReadLine(); } foreach (var soldier in myArmy) { Console.WriteLine(soldier.ToString()); } }
static void Main(string[] args) { var soldiers = new List <ISoldier>(); string input; while ((input = Console.ReadLine()) != "End") { var tokens = input.Split(); var soldierType = tokens[0]; int id = int.Parse(tokens[1]); var firstName = tokens[2]; var lastName = tokens[3]; var salary = decimal.Parse(tokens[4]); ISoldier soldier = null; try { switch (soldierType) { case "Private": soldier = new Private(id, firstName, lastName, salary); break; case "LeutenantGeneral": var leutenant = new LeutenantGeneral(id, firstName, lastName, salary); for (int i = 5; i < tokens.Length; i++) { var privateId = int.Parse(tokens[i]); ISoldier @private = soldiers.FirstOrDefault(p => p.Id == privateId); leutenant.AddPivate(@private); } soldier = leutenant; break; case "Engineer": var engineerCorps = tokens[5]; var enginner = new Engineer(id, firstName, lastName, salary, engineerCorps); for (int i = 6; i < tokens.Length; i++) { var partName = tokens[i]; var hoursWorked = int.Parse(tokens[++i]); IRepair repair = new Repair(partName, hoursWorked); enginner.AddRepair(repair); } soldier = enginner; break; case "Commando": var commandoCorps = tokens[5]; var commando = new Commando(id, firstName, lastName, salary, commandoCorps); for (int i = 6; i < tokens.Length; i++) { var codeName = tokens[i]; var missionState = tokens[++i]; try { IMission mission = new Mission(codeName, missionState); commando.AddMission(mission); } catch { } } soldier = commando; break; case "Spy": int codeNumber = (int)salary; soldier = new Spy(id, firstName, lastName, codeNumber); break; default: throw new ArgumentException("Invalid soldier type!"); } soldiers.Add(soldier); } catch (Exception) { } } foreach (var s in soldiers) { Console.WriteLine(s); } }
public void CompleteMission(Mission mission) { mission.State = "Finished"; }