Lösung: Reflexive Assoziation
Completion requirements
- class Program
- {
- static void Main(string[] args)
- {
- Person p1 = new Person("Chef");
- Person p11 = new Person("Abteilungsleiter - Einkauf", p1);
- Person p111 = new Person("Einkäufer A", p11);
- Person p112 = new Person("Einkäufer B", p11);
- Person p12 = new Person("Abteilungsleiter - IT", p1);
- Person p121 = new Person("Programmierer", p12);
- Person p122 = new Person("Administrator", p12);
- Console.WriteLine("Vorgesetzte von: " + p121.Name);
- Program.showVorgesetzte(p121);
- Console.WriteLine("\nMitarbeiter von " + p1.Name + ": ");
- Program.showMitarbeiter(p1, 0);
- }
- static private void showVorgesetzte(Person p) // ohne Rekursion möglich
- {
- while(p.Vorgesetzter != null)
- {
- Console.WriteLine(p.Vorgesetzter.Name);
- p = p.Vorgesetzter;
- }
- }
- static private void showMitarbeiter(Person p, int recDepth)
- {
- if (p.Mitarbeiter.Count > 0)
- {
- recDepth++;
- foreach (Person person in p.Mitarbeiter)
- {
- for (int i = 0; i < recDepth; i++)
- Console.Write("\t");
- Console.WriteLine(person.Name + " ");
- Program.showMitarbeiter(person, recDepth); // rekursiver Aufruf
- }
- }
- }
- }
- class Person
- {
- public string Name { get; set; }
- public Person Vorgesetzter { get; set; } // doppelt verkettet = beide Navigationsrichtungen
- public List<Person> Mitarbeiter { get; set; }
- public Person(string name, Person vorgesetzter = null) // 2. Parameter mit default-Wert
- {
- Name = name;
- Mitarbeiter = new List<Person>();
- if (vorgesetzter != null) // Vorgesetzter vorhanden = nicht Chef
- {
- Vorgesetzter = vorgesetzter;
- vorgesetzter.Mitarbeiter.Add(this);
- }
- else
- Vorgesetzter = null;
- }
- }
Last modified: Saturday, 3 February 2018, 7:18 PM