Pharaohpharaoh1=newPharaoh("Tuti",-490,-400);pharaoh1.AddAchievement("Built pyramid");pharaoh1.AddAchievement("Killed slaves");Pharaohpharaoh2=newPharaoh("Seth",-550,-490);pharaoh2.AddAchievement("Killed other slaves");pharaoh2.AddAchievement("Built small pyramid");Dynastydynasty1=newDynasty(){ StartYear =-600, EndYear =-500};try{Console.WriteLine($"Adding {pharaoh1.Name}");dynasty1.AddPharaoh(pharaoh1);}catch(Exceptione){Console.WriteLine(e.Message);}try{Console.WriteLine($"Adding {pharaoh2.Name}");dynasty1.AddPharaoh(pharaoh2);}catch(Exceptione){Console.WriteLine(e.Message);}Console.WriteLine($"\nDuration dynasty {dynasty1.Name}:{dynasty1.CalculateDuration()}");Console.WriteLine("\nEvents from this dynasty:");dynasty1.ShowEvents();
class Pharaoh
{
public Pharaoh(string nameIn, int reignStartIn, int reignEndIn)
{
Name = nameIn;
if (reignStartIn > reignEndYear)
{
ReignStartYear = reignEndIn;
ReignEndYear = reignStartIn;
}
else
{
ReignStartYear = reignStartIn;
ReignEndYear = reignEndIn;
}
}
public Pharaoh(string nameIn, int reignStartIn) : this(nameIn, reignStartIn, 0)
{
}
public string Name { get; set; }
private int reignStartYear;
public int ReignStartYear
{
get { return reignStartYear; }
set
{
if (value < 0)
reignStartYear = value;
}
}
private int reignEndYear;
public int ReignEndYear
{
get { return reignEndYear; }
set
{
if (value < 0 && value > ReignStartYear)
reignEndYear = value;
}
}
private List<string> achievements = new List<string>();
public int CalculateReignLength()
{
return Math.Abs(ReignStartYear - ReignEndYear);
}
public void AddAchievement(string achievement)
{
achievements.Add(achievement);
}
public void ShowAchievements()
{
foreach (var achievement in achievements)
{
Console.WriteLine(achievement);
}
}
}
class Dynasty
{
public string Name { get; set; }
private int startYear;
public int StartYear
{
get { return startYear; }
set
{
if (value < 0)
startYear = value;
}
}
private int endYear;
public int EndYear
{
get { return endYear; }
set
{
if (value < 0 && value > StartYear)
endYear = value;
}
}
private List<Pharaoh> pharoahs = new List<Pharaoh>();
public void AddPharaoh(Pharaoh pharaohToAdd)
{
if (pharaohToAdd.ReignEndYear < this.StartYear || pharaohToAdd.ReignStartYear > this.EndYear)
{
throw new Exception("This Pharaoh has no overlapping reign period with this dynasty");
}
pharoahs.Add(pharaohToAdd);
}
public int CalculateDuration()
{
return Math.Abs(StartYear - EndYear);
}
public void ShowEvents()
{
ShowData(true);
}
public void ShowPharaohs()
{
ShowData(false);
}
private void ShowData(bool showAchievements)
{
foreach (var pharaoh in pharoahs)
{
Console.WriteLine($"{pharaoh.Name}");
if (showAchievements)
pharaoh.ShowAchievements();
}
}
}