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); } }
static void Main() { var somting = Assembly.GetExecutingAssembly(); var soldiersList = new List <Soldier>(); string soldierInfo = Console.ReadLine(); while (soldierInfo != "End") { var info = soldierInfo.Split(" ", StringSplitOptions.RemoveEmptyEntries); string id = info[1]; string firstName = info[2]; string lastName = info[3]; decimal salary = 0; string corps = string.Empty; switch (info[0]) { case "Private": salary = decimal.Parse(info[4]); Private @private = new Private(id, firstName, lastName, salary); soldiersList.Add(@private); break; case "LieutenantGeneral": salary = decimal.Parse(info[4]); LieutenantGeneral general = new LieutenantGeneral(id, firstName, lastName, salary); var targetId = info.Skip(5); foreach (var currentID in targetId) { var currentSoldier = soldiersList.Where(x => x.Id == currentID).FirstOrDefault(); if (currentSoldier != null) { var type = currentSoldier.GetType().Name; if (type == "Private") { general.AddSoldier((Private)currentSoldier); } } } soldiersList.Add(general); break; case "Engineer": salary = decimal.Parse(info[4]); corps = info[5]; if (corps == "Airforces" || corps == "Marines") { Engineer engineer = new Engineer(id, firstName, lastName, salary, corps); var repaiers = info.Skip(6).ToArray(); while (repaiers.Length != 0) { var repaierInfo = repaiers.Take(2).ToArray(); Repairs repairs = new Repairs(repaierInfo[0], int.Parse(repaierInfo[1])); engineer.AddRepairs(repairs); repaiers = repaiers.Skip(2).ToArray(); } soldiersList.Add(engineer); } break; case "Commando": salary = decimal.Parse(info[4]); corps = info[5]; if (corps == "Airforces" || corps == "Marines") { Commando commando = new Commando(id, firstName, lastName, salary, corps); var missions = info.Skip(6).ToArray(); while (missions.Length != 0) { var missionInfo = missions.Take(2).ToArray(); Missions missions1 = new Missions(missionInfo[0], missionInfo[1]); if (missions1.State == "Finished" || missions1.State == "inProgress") { commando.AddMission(missions1); } missions = missions.Skip(2).ToArray(); } soldiersList.Add(commando); } break; case "Spy": string codeNumber = info[4]; Spy spy = new Spy(id, firstName, lastName, int.Parse(codeNumber)); soldiersList.Add(spy); break; default: break; } soldierInfo = Console.ReadLine(); } soldiersList.ForEach(Console.WriteLine); }