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