public static void Main()
var skigym = new Serie("Skigymnastik", "Antje", 10, new DateTime(2017,10,10));
var hupf = new Serie("Rumhupf", "DrillSarge", -5, DateTime.Now);
var muscle = new Serie("Mehr Muskeln", "Arnie Schwarzenegger", 4, new DateTime(2017,02,03));
var SkigymDauer = new Dauer(skigym);
var print = new Printer();
public class Serie : Printer
public string KursTitel {get; private set;}
public string TrainerName {get; private set;}
public int AnzahlSessions {get; private set;}
public DateTime StartTermin {get; private set;}
public StringBuilder sb = new StringBuilder();
public Serie(string kurs, string trainer, int anzahlSessions, DateTime start)
this.TrainerName = trainer;
this.StartTermin = start;
sb.AppendFormat("Kurs {0}: No sessions planned!", this.KursTitel);
this.AnzahlSessions = anzahlSessions;
public override void Print()
private StringBuilder GatherKursInfo()
sb.AppendFormat("Kurs: {0}. ", this.KursTitel);
sb.AppendFormat("Trainer: {0}. ", this.TrainerName);
sb.AppendFormat("Sessions: {0}. ", this.AnzahlSessions);
sb.AppendFormat("Start: {0:dd-MMM-yyyy}. ", this.StartTermin);
public class Dauer : Printer
public StringBuilder sb = new StringBuilder();
public Dauer (Serie kurs)
this.EndDate = CalculateEndDate();
private DateTime CalculateEndDate()
DateTime heute = DateTime.Now;
var StartTermin = this.Kurs.StartTermin;
var DauerInTagen = (this.Kurs.AnzahlSessions-1) * 7;
var DeltaInMonaten = DauerInTagen / 28;
var RestDeltaInTagen = DauerInTagen % 28;
var EndTermin = new DateTime(StartTermin.Year, StartTermin.Month + DeltaInMonaten, StartTermin.Day + RestDeltaInTagen);
public override void Print()
Console.WriteLine(KursDauer());
private StringBuilder KursDauer()
sb.AppendFormat("Kurs: {0}. ", this.Kurs.KursTitel);
sb.AppendFormat("Sessions: {0}. ", this.Kurs.AnzahlSessions);
sb.AppendFormat("Start: {0:dd-MMM-yyyy}. ", this.Kurs.StartTermin);
sb.AppendFormat("Ende: {0:dd-MMM-yyyy}. ", this.EndDate);
public virtual void Print()