diff --git a/09-1 KeyValueList/KeyValueList.cs b/09-1 KeyValueList/KeyValueList.cs index 57610cadbcc84aba2e7a446782bd722139d13dc5..0ff2f7a013bda362d28568fc2db844b039a4e7c9 100644 --- a/09-1 KeyValueList/KeyValueList.cs +++ b/09-1 KeyValueList/KeyValueList.cs @@ -59,5 +59,11 @@ namespace _09_1_KeyValueList AddEnd(key, value); } } + public KeyValueList<K,V> Copy() + { + KeyValueList<K,V> res = new KeyValueList<K, V>(); + // ... + return res; + } } } diff --git a/09-1 KeyValueList/Program.cs b/09-1 KeyValueList/Program.cs index 3af63347deffaf7918e70326e3bc516e4bcbbd75..63124c8af766ec8e9d9ba54e0c06f074be5f5c6d 100644 --- a/09-1 KeyValueList/Program.cs +++ b/09-1 KeyValueList/Program.cs @@ -23,7 +23,6 @@ namespace _09_1_KeyValueList Console.WriteLine($"Telefonnummer von {item.key}: {item.val}"); } - List<string> termineMo = new List<string>(); termineMo.Add("08:00 Dig. Bildbearbeitung"); termineMo.Add("09:45 Prog2 Übung"); diff --git a/11-5 BinTreePersVerwaltung/BinTree.cs b/11-5 BinTreePersVerwaltung/BinTree.cs index fd655e47f9ec68e9d75dead8342de241f4010748..ea255b16c4356cf2ae5654d2816cba06b1da1016 100644 --- a/11-5 BinTreePersVerwaltung/BinTree.cs +++ b/11-5 BinTreePersVerwaltung/BinTree.cs @@ -5,7 +5,8 @@ using System.Text; namespace _11_5_BinTreePersVerwaltung { - class BinTree<T> where T:IComparable<T> + class BinTree<T> : IEnumerable + where T:IComparable<T> { class Node { diff --git a/11-5 BinTreePersVerwaltung/Personal.cs b/11-5 BinTreePersVerwaltung/Personal.cs index c394b7161b563a151e6c2d21f8d0a48f0a2d3f90..489c491e74cc7f864ca5dc585d2b875ce05ec14f 100644 --- a/11-5 BinTreePersVerwaltung/Personal.cs +++ b/11-5 BinTreePersVerwaltung/Personal.cs @@ -4,7 +4,7 @@ using System.Text; namespace _11_5_BinTreePersVerwaltung { - abstract class Personal + abstract class Personal : IComparable<Personal> { public virtual string Name { get; set; } @@ -16,16 +16,14 @@ namespace _11_5_BinTreePersVerwaltung //} public Personal (string Name) { this.Name = Name; } abstract public double Kosten { get; } + public int CompareTo(Personal other) => Name.CompareTo(other.Name); } class Mitarbeiter : Personal { protected double gehalt; public Mitarbeiter(string Name, double Gehalt) : base(Name) { gehalt = Gehalt; } public override double Kosten { get => 12.65 * gehalt; } - public override string ToString() - { - return base.ToString(); - } + public override string ToString() => $"{Name,-15} {Kosten,6}"; } class Führungskraft : Personal { @@ -37,6 +35,7 @@ namespace _11_5_BinTreePersVerwaltung erfolgsbeteiligung = Erfolgsbeteiligung; } public override double Kosten { get => 12.65 * gehalt + erfolgsbeteiligung; } + public override string ToString() => $"{Name,-15} {Kosten,6}"; } class Werkvertragler : Personal { @@ -46,5 +45,6 @@ namespace _11_5_BinTreePersVerwaltung betrag = Betrag; } public override double Kosten { get => betrag; } + public override string ToString() => $"{Name,-15} {Kosten,6}"; } } diff --git a/11-5 BinTreePersVerwaltung/Program.cs b/11-5 BinTreePersVerwaltung/Program.cs index 4a33340a65ec478e3869cb0271669fc58d54c62d..b50efcf0c5d60849f41195b1b569892cae5bf831 100644 --- a/11-5 BinTreePersVerwaltung/Program.cs +++ b/11-5 BinTreePersVerwaltung/Program.cs @@ -1,27 +1,78 @@ using System; +using System.Linq; namespace _11_5_BinTreePersVerwaltung { class Program { + static void InputData(BinTree<Personal> pt) + { + pt.Insert(new Mitarbeiter("Dieter", 2000)); + pt.Insert(new Führungskraft("Anton", 5000, 10000)); + pt.Insert(new Werkvertragler("Gustav", 12000)); + pt.Insert(new Mitarbeiter("Heiner", 2000)); + pt.Insert(new Werkvertragler("Berta", 10000)); + pt.Insert(new Werkvertragler("Ludwig", 12000)); + pt.Insert(new Mitarbeiter("Klaus", 2000)); + pt.Insert(new Mitarbeiter("Ida", 2000)); + pt.Insert(new Führungskraft("Charles", 5000, 10000)); + pt.Insert(new Werkvertragler("Johanna", 10000)); + pt.Insert(new Mitarbeiter("Emma", 2000)); + pt.Insert(new Mitarbeiter("Franz", 10000)); + pt.Insert(new Werkvertragler("Norbert", 10000)); + pt.Insert(new Werkvertragler("Willi", 10000)); + pt.Insert(new Mitarbeiter("Quasimodo", 2500)); + pt.Insert(new Führungskraft("Manni", 5200, 15000)); + pt.Insert(new Mitarbeiter("Otto", 10000)); + pt.Insert(new Werkvertragler("Uwe", 10000)); + pt.Insert(new Werkvertragler("Stefan", 10000)); + pt.Insert(new Mitarbeiter("Victoria", 2500)); + pt.Insert(new Mitarbeiter("Thorsten", 10000)); + pt.Insert(new Werkvertragler("Rainer", 10000)); + pt.Insert(new Werkvertragler("Zacharias", 10000)); + pt.Insert(new Mitarbeiter("Yvonne", 3000)); + pt.Insert(new Führungskraft("Volker", 5100, 10000)); + pt.Insert(new Mitarbeiter("Xaver", 2500)); + } static void Main(string[] args) { - BinTree<int> bt = new BinTree<int>(); - bt.Insert(50); - bt.Insert(25); - bt.Insert(40); + //BinTree<int> bt = new BinTree<int>(); + //bt.Insert(50); + //bt.Insert(25); + //bt.Insert(40); + + //foreach (var item in bt) + //{ + // Console.WriteLine(item); + //} + + BinTree<Personal> persBaum = new BinTree<Personal>(); + InputData(persBaum); + persBaum.Print(); - foreach (var item in bt) + var res = from Personal p in persBaum + where p is Führungskraft + orderby p.Kosten + select new { Name = p.Name.ToUpper(), Kosten = p.Kosten }; + foreach (var item in res) { Console.WriteLine(item); } - //Personal[] persFeld = new Personal[10]; - //persFeld[0] = new Mitarbeiter("Xaver", 3000); - //foreach (var item in persFeld) - //{ - // Console.WriteLine(item.Kosten); - //} + + double GesKosten = res.Sum(w => w.Kosten); + Console.WriteLine("Kosten für die Führungskräfte: "+GesKosten); + + int anz = res.Count(); + Console.WriteLine(anz + " Führungskräfte"); + + + var res2 = from Personal p in persBaum + where p.Kosten < 30000 + orderby p.Kosten descending, p.Name descending // Sortierung nach Kosten, dann Name + select new { Name = p.Name, K = p.Kosten }; + foreach (var item in res2) + Console.WriteLine(item.Name+": "+item.K); } } } diff --git a/12-3 VererbungRedo/12-3 VererbungRedo.csproj b/12-3 VererbungRedo/12-3 VererbungRedo.csproj new file mode 100644 index 0000000000000000000000000000000000000000..aac8227bde17c3a26a4d7f99a65a63aa701ad187 --- /dev/null +++ b/12-3 VererbungRedo/12-3 VererbungRedo.csproj @@ -0,0 +1,9 @@ +<Project Sdk="Microsoft.NET.Sdk"> + + <PropertyGroup> + <OutputType>Exe</OutputType> + <TargetFramework>netcoreapp3.1</TargetFramework> + <RootNamespace>_12_3_VererbungRedo</RootNamespace> + </PropertyGroup> + +</Project> diff --git a/12-3 VererbungRedo/Program.cs b/12-3 VererbungRedo/Program.cs new file mode 100644 index 0000000000000000000000000000000000000000..6615a04c013469e6c4ef01664ae5a59cfbfba12b --- /dev/null +++ b/12-3 VererbungRedo/Program.cs @@ -0,0 +1,48 @@ +using System; + +namespace _12_3_VererbungRedo +{ + class Basis + { + public virtual void Ausgabe(string s) + { + // virtual ~ Diese Methode KANN in abgeleiteten Klassen überschrieben werden + // abstract ~ Diese Methode MUSS in abgeleiteten Klassen überschrieben werden! + // Hier keine Implementierung! + Console.WriteLine("Ausgabe: "+s); + } + } + + class PKW:Basis + { + public override void Ausgabe(string s) + { + Console.WriteLine("Meine wunderschöne PKW-Ausgabe "+s); + } + } + class LKW : Basis + { + public override void Ausgabe(string s) + { + Console.WriteLine("Meine wunderschöne LKW-Ausgabe " + s); + } + } + class Program + { + static void Main(string[] args) + { + Basis[] f = new Basis[5]; + f[0] = new PKW(); + f[1] = new LKW(); + f[0].Ausgabe("Hallo"); + // Ohne virtual: + // Methodenauswahl gemäß des statischen Typs (hier: Basis) + //(f[0] as PKW).Ausgabe2("Hallo"); + + // Mit virtual plus override: + // Methodenauswahl gemäß des dynamischen Typs (hier: PKW.Ausgabe()) + f[1].Ausgabe("Hallo2"); + + } + } +} diff --git a/12-UbgTransformingServer-Di/Program.cs b/12-UbgTransformingServer-Di/Program.cs index 1b38873069dd5c396a70906706db9dd8b9da2359..087c8539969e454f9c4c6c5231ee9b07d0b8b699 100644 --- a/12-UbgTransformingServer-Di/Program.cs +++ b/12-UbgTransformingServer-Di/Program.cs @@ -8,10 +8,26 @@ namespace _12_UbgTransformingServer public Client(string Name) { this.Name = Name; } // ToDo: statische "Listener" Methode + public static void Ausgabe(string msg) + { + Console.WriteLine($"static: {msg}"); + } // ToDo: nicht-statische "Listener" Methode + public void Listen(string msg) + { + Console.WriteLine($"nicht-static: {Name}: {msg}"); + } } class Program { + static void OldNewCorp(ref string msg) + { + msg = msg.Replace("ZZZ", "AAA"); + } + static void Signature(ref string msg) + { + msg += "\npowered by wonderland server"; + } // ToDo: Realisieren Sie die folgenden Transformationen: // x Signature ( ... ) fügt der Nachricht eine Signatur an // x OldNewCorp ( ... ) ersetzt ZZZ durch AAA @@ -21,19 +37,28 @@ namespace _12_UbgTransformingServer MsgServer server = new MsgServer(); // ToDo: Fügen Sie einige Transformationen hinzu // msg --> OldNewCorp --> Signature - + server.Transformations += OldNewCorp; + server.Transformations += Signature; + Client mueller = new Client("Müller"); Client meier = new Client("Meier"); Client huber = new Client("Huber"); // ToDo: Registrieren Sie einige Listener + server.Notify += Client.Ausgabe; + server.Notify += meier.Listen; server.SendMsg("Herzlich Willkommen, liebe Kunden! ZZZ Corporation"); // ToDo: Registrieren Sie weitere Listener an und entfernen // Sie einen Listener - + server.Notify -= meier.Listen; + server.Notify += mueller.Listen; + server.Notify += huber.Listen; + Console.WriteLine("---------"); // ToDo: Entfernen Sie die Signature Transformation + server.Transformations -= Signature; + server.SendMsg("Wir wünschen einen erfolgreichen Tag, liebe Kunden, ZZZ Corporation"); } } diff --git a/12-UbgTransformingServer-Di/Server.cs b/12-UbgTransformingServer-Di/Server.cs index 1f864c85cf1e6313bea287688a0f1b09d67a5581..ca8bb6a258e635a14b04e20ee421c4d023be7c2c 100644 --- a/12-UbgTransformingServer-Di/Server.cs +++ b/12-UbgTransformingServer-Di/Server.cs @@ -4,19 +4,22 @@ using System.Text; namespace _12_UbgTransformingServer { - delegate void Callback(string notifier); + //delegate void Callback(string notifier); delegate void Transform(ref string msg); class MsgServer { // ToDo: Notify-Event anlegen + public event Action<string> Notify; // ToDo: Transformations-Event anlegen + public event Transform Transformations; public void SendMsg(string msg) { Console.WriteLine($"\n\n\nOriginal-Nachricht: {msg}"); // ToDo: Alle in Transformations gespeicherten Transformationen anwenden - + Transformations?.Invoke(ref msg); // ToDo: Den "transformierten" String an alle in Notify gespeicherten Listener versenden + Notify?.Invoke(msg); } } } diff --git a/Prog2WienkopSS2021.sln b/Prog2WienkopSS2021.sln index 191214ca32a0ade34a16e6e817ebc2088bda54e4..6c9328cf5c00fc8f9bc40d495d2e7c532c812229 100644 --- a/Prog2WienkopSS2021.sln +++ b/Prog2WienkopSS2021.sln @@ -107,6 +107,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "12-1 NewOverride", "12-1New EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "12-2 Delegateaufrufausbreitung", "12-2 Delegateaufrufausbreitung\12-2 Delegateaufrufausbreitung.csproj", "{30C34E16-FFAF-48A5-8F3F-AE3A7CF7B56D}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "12-3 VererbungRedo", "12-3 VererbungRedo\12-3 VererbungRedo.csproj", "{882C4C12-B62B-4BDB-A52C-C1D62E9B0D6A}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -321,6 +323,10 @@ Global {30C34E16-FFAF-48A5-8F3F-AE3A7CF7B56D}.Debug|Any CPU.Build.0 = Debug|Any CPU {30C34E16-FFAF-48A5-8F3F-AE3A7CF7B56D}.Release|Any CPU.ActiveCfg = Release|Any CPU {30C34E16-FFAF-48A5-8F3F-AE3A7CF7B56D}.Release|Any CPU.Build.0 = Release|Any CPU + {882C4C12-B62B-4BDB-A52C-C1D62E9B0D6A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {882C4C12-B62B-4BDB-A52C-C1D62E9B0D6A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {882C4C12-B62B-4BDB-A52C-C1D62E9B0D6A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {882C4C12-B62B-4BDB-A52C-C1D62E9B0D6A}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE