Exemple #1
0
        /// <summary>
        /// Schreibt den Anwendungstitel in
        /// einem Rechteck auf den Bildschirm.
        /// </summary>
        private static void ZeichneTitel()
        {
            Anwendung.Ausgeben("ZeichneTitel startet...", debug: true);

            const string Titel       = "Einführung in die objektorientierte Programmierung mit C# und .Net";
            const string TitelMuster = "{0}{1}{2}{3}{4}{3}{5}{1}{6}";

            var InnenBreite = System.Console.WindowWidth - 2;

            Anwendung.Ausgeben(
                string.Format(
                    TitelMuster,
                    Rahmen.LinksOben,                           // {0}
                    new string(Rahmen.Horizontal, InnenBreite), // {1}
                    Rahmen.RechtsOben,                          // {2}
                    Rahmen.Vertikal,                            // {3}
                    //der Text ist im Rahmen zentriert...
                    Titel.PadLeft((InnenBreite - Titel.Length) / 2 + Titel.Length)
                    .PadRight(InnenBreite),                     // {4}
                    //---
                    Rahmen.LinksUnten,                          // {5}
                    Rahmen.RechtsUnten                          // {6}
                    ));

            Anwendung.Ausgeben("ZeichneTitel beendet.", debug: true);
        }
Exemple #2
0
        /// <summary>
        /// Fragt die Benutzer nach den Namen
        /// und begrüßt sie passend zur aktuellen Stunde.
        /// </summary>
        private static void Begrüßen()
        {
            Anwendung.Ausgeben("Begrüßen startet...", debug: true);

            //Kommt später aus einer lokalisierten Ressource...
            const string Frage = "Wie heißen Sie? ";

            //                                   ^-> damit zur Antwort ein
            //                                       Abstand ist.

            Anwendung.Ausgeben(Frage, AusgabeModus.NormalOhneVorschub);

            var Name = System.Console.ReadLine().Trim();

            //                                      ^-> damit überflüssige Leerzeichen
            //                                          vorne und hinten entfernt werden

            //Falls sich der Benutzer nicht
            //identifiziert, den Loginnamen benutzen...
            if (Name.Length == 0)
            {
                Name = System.Environment.UserName;
            }

            //Den Benutzer persönlich zur aktuellen Stunde begrüßen
            Anwendung.Ausgeben(Algorithmus.ErmittleBegrüßung(System.DateTime.Now.Hour).Replace("!", ", " + Name + "!"));
            //                                                    <----------- || ------------>
            //                                                      Anweisungen müssen von innen nach außen
            //                                                            "gelesen", aufgelöst werden

            Anwendung.Ausgeben("Begrüßen beendet.", debug: true);
        }
Exemple #3
0
        /// <summary>
        /// Schreibt die Programmpunkte auf den Bildschirm.
        /// </summary>
        private static void ZeigeMenü()
        {
            Anwendung.Ausgeben("ZeigeMenü startet...", debug: true);

            if (Anwendung._MenüInhalt == null)
            {
                var Text = new System.Text.StringBuilder();

                Text.AppendLine("Algorithmen Bausteine:");
                Text.AppendLine();
                Text.AppendLine(" 1. Die Sequenz");
                Text.AppendLine(" 2. Die Binärentscheidung");
                Text.AppendLine(" 3. Die Fallentscheidung");
                Text.AppendLine(" 4. Die Zählschleife");
                Text.AppendLine(" 5. Die Abweiseschleife");
                Text.AppendLine(" 6. Die Durchlaufeschleife");
                Text.AppendLine();
                Text.AppendLine(" 9. Beenden");

                Anwendung._MenüInhalt = Text.ToString();
                Anwendung.Ausgeben("Die Anwendung hat die Programmpunkte gecacht...", AusgabeModus.Debug);;
            }

            Anwendung.Ausgeben(Anwendung._MenüInhalt);

            Anwendung.Ausgeben("ZeigeMenü beendet.", debug: true);
        }
Exemple #4
0
        /// <summary>
        /// Stellt den Einstiegspunkt
        /// in eine .Net Anwendung bereit.
        /// </summary>
        private static void Main()
        //         ^-> MUSS UNBEDINGT statisch sein,
        //             d.h. der Klasse gehören und nicht
        //                  dem Objekt.
        //-> Modifizierer beim Main() egal
        {
            //In einer stastischen Methode können
            //nur andere Mitglieder direkt aufgerufen
            //werden, wenn diese ebenfalls statisch sind.

            Anwendung.ZeichneTitel();
            Anwendung.Begrüßen();
            Anwendung.ZeigeMenü();

            //Wo ist die ZeigeSequenz() Methode?
            //Algorithmus.ZeigeSe...
            //              eine nicht statische Methode,
            //              gehört einem Objekt
            //   ^-> eine Klasse (Bauplan)

            //=> Ein Objekt ist notwendig (in 99,999% der Fälle)
            //   (statisch ist ganz selten)

            //=== Standardablauf zum Benutzen einer Klasse als Objekt

            //(1) Speicher für die Objektadresse reservieren
            Algorithmus AlgoObjekt = null;

            //(2) Die Klasse initialisieren, das Objekt bauen
            AlgoObjekt = new Algorithmus();
            //                           ^-> Schnittstelle vom Konstruktor
            //            ^-> ruft den Konstruktor der Klasse auf,
            //                erstellt irgendwo im Speicher das Objekt
            //                und gibt die Start-Speicheradresse zurück
            //                (Verweistyp)
            //            ===========
            //            Das Initialisieren, das Bauen eines Objekts,
            //            ist extram langsam. Möglichst sparsam einsetzen.
            //            Erst dannn ein Objekt bauen, wenn klar ist,
            //            dass es wirklich benötigt wird und cachen.
            //            ===========
            //          ^-> Wertzuweisungsoperator zum Merken
            //-> der Speicheradresse in der AlgoObjekt-Variablen
            //   damit wir über diese mit Objekt arbeiten können

            //(3) Das Objekt benutzen
            //Die Benutzer sollen den Programm auswählen
            //AlgoObjekt.ZeigeSequenz();
            //AlgoObjekt.ZeigeFall();
            //AlgoObjekt.ZeigeBinär();
            ////Zum Testen vom eindeutigen Zufallsgenerator
            //AlgoObjekt.ZeigeBinär();
            //AlgoObjekt.ZeigeFall();
            //AlgoObjekt.ZeigeZählen();

            const string Prompt = "C#> ";
            //                        ^-> damit ein Abstand zur Eingabe ist
            string Programmpunkt = null;

            //          ^-> muss vor der Schleife deklariert werden
            //              weil mit der geschweiften Klammer eine
            //              neue Gültigkeit beginnt!

            do
            { //<- Hier beginnt die Gültigkeit
                Anwendung.Ausgeben(Prompt, AusgabeModus.NormalOhneVorschub);
                Programmpunkt = System.Console.ReadLine().Trim().ToLower();

                switch (Programmpunkt)
                {
                case "hallo":
                case "1":
                    AlgoObjekt.ZeigeSequenz();
                    break;

                case "if":
                case "2":
                    AlgoObjekt.ZeigeBinär();
                    break;

                case "switch":
                case "3":
                    AlgoObjekt.ZeigeFall();
                    break;

                case "for":
                case "foreach":
                case "4":
                    AlgoObjekt.ZeigeZählen();
                    break;

                case "while":
                case "5":
                    AlgoObjekt.ZeigeAbweisen();
                    break;

                case "do":
                case "6":
                    AlgoObjekt.ZeigeDurchlaufen();
                    break;

                case "?":
                    Anwendung.ZeigeMenü();

                    break;

                case "9":
                case "":

                    //Leereingaben und Beenden mit 9 sollen
                    //zu keinem Fehler führen.

                    //Deshalb leerer Fall

                    break;

                case "exit":
                    Programmpunkt = "9";
                    break;

                default:
                    Anwendung.Ausgeben(
                        "Eingabe nicht erkannt! Fragezeichen ? für Hilfe tippen...",
                        AusgabeModus.Fehler);
                    break;
                }

                //<- Hier endet die Gültigkeit
            } while (Programmpunkt != "9");

            //(4) Den benötigten Speicher wieder freigeben
            //    (Für die Freigabe kennzeichnen, auf Dispose prüfen)
            //AlgoObjekt.di... kein Dispose

            //Der Garbage Collection helfen...
            AlgoObjekt = null;

#if DEBUG
            //=> NUR ZU DEMO-ZWECKEN:
            //Speicher wird von der Garbage Collection freigegeben.
            //Diese Garbage Collection in Ruhe lassen!!!
            //-> manuelle Garbage Collection
            System.GC.Collect();
            System.GC.WaitForPendingFinalizers();


            //Damit das Konsolenfenster offen bleibt...
            Anwendung.Ausgeben("Die Eingabetaste zum Beenden tippen...", debug: true);
            System.Console.ReadLine();
#endif
        }