Autor Beitrag
Domi2k8
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mi 23.12.09 02:01 
Hier zunächst die Angabe:
Aufgabe

Hey Leute... Ich stehe vor einem Problem das ich ohne meinem Professor gar nicht hätte
Also: Ich bin seit Freitag durch eine Grippe verhindert und kann dadurch nicht in die Schule...
Wir nehmen gerade den Stoff der Objekt orientieren Programmierung durch ich habe durch meine Grippe
den Teil des "Objekt Broker" nicht mitbekommen...
Die Aufgabe "Das Selbe und das Gleiche" habe ich bereits gelöst dafür gibt es auch gleich den Source Code von mir.

Ich will nicht das mir jemand den/die/das Obejkt Broker (ich hab echt 0 Plan was das sein soll) Programmiert sondern ich hätte
gerne eine hilfe damit ich verstehe wie ich von der Klassenmethode
(wie ich mich erkundigt habe wird sie so deklariert( public static void(etc.) "Klassenname"(Parameter)...
Auf das Dictionary zugreifen kann bzw wie ich das erstellen kann beim Kapitel Dictionary (falls es das gab...) war ich leider nicht da...
Wurde uns anscheinend erst am Montag beigebracht. Ich hoffe ihr könnt mir iwie helfen hier erstmal einpaar infos zu mir.

Ich gehe in die 2. Klasse einer HTL (Höheren Technischen Lehranstalt) für EDV & Organisation
Lerne seit der 1. Klasse C# (Projektorientiert) und seit Ende September dieses Jahres C# (Objektorientiert) und C.

Mein Projekt in als Projekt ist unten zum Download bereit.

Ich entschuldige mich schoneinmal dafür das wir die Setter und Getter selbst programmieren müssen und nicht einfach die Propertiers verwenden dürfen...

Person.cs
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
using System;
using System.Collections.Generic;
using System.Text;

namespace dSudGPerson
{
    /// <summary>
    /// Person
    /// </summary>
    /// <para>
    /// Die Klasse Person ist ein Stempel für verschiedene Personen
    /// Es gibt eine Methode "Equals" in der wird der Nachnamen der
    /// Person a mit dem Nachnamen der Person b vergliechen und ein
    /// boolscher Wert zurückgeliefert.
    /// </para>
    class Person
    {
        /// <summary>
        /// Nachname Attribut
        /// </summary>
        private string nName;

        /// <summary>
        /// Vorname Attribut
        /// </summary>
        private string vName;

        /// <summary>
        /// Telefonnummer Attribut
        /// </summary>
        private string telNr;

        /// <summary>
        /// Konstruktor für die Klasse Person
        /// </summary>
        /// <param name="vName">Vorname</param>
        /// <param name="nName">Nachname</param>
        /// <param name="telNr">Telefonnummer</param>
        public Person(string vName, string nName, string telNr)
        {
            SetNName(nName);
            SetVName(vName);
            SetTelNr(telNr);
        }

        /// <summary>
        /// Setter für den Nachnamen
        /// </summary>
        /// <param name="nName">Nachname</param>
        public void SetNName(string nName)
        {
            this.nName = nName;
        }
        /// <summary>
        /// Getter für den Nachnamen
        /// </summary>
        /// <returns>Gibt den Nachnamen zurück</returns>
        public string GetNName()
        {
            return nName;
        }

        /// <summary>
        /// Setter für den Vornamen
        /// </summary>
        /// <param name="vName">Vorname</param>
        public void SetVName(string vName)
        {
            this.vName = vName;
        }
        /// <summary>
        /// Getter für den Vornamen
        /// </summary>
        /// <returns>Gibt den Vornamen zurück</returns>
        public string GetVName()
        {
            return vName;
        }

        /// <summary>
        /// Setter für die Telefonnummer
        /// </summary>
        /// <param name="telNr">Telefonnummer</param>
        public void SetTelNr(string telNr)
        {
            this.telNr = telNr;
        }
        /// <summary>
        /// Getter für die Telefonnummer
        /// </summary>
        /// <returns>Gibt die Telefonnummer zurück</returns>
        public string GetTelNr()
        {
            return telNr;
        }

        /// <summary>
        /// Equals
        /// </summary>
        /// <para>
        /// Vergleicht den Nachnamen eines Objekts mit dem Nachnamen eines anderen Objekts
        /// </para>
        /// <param name="person">Person</param>
        /// <returns>true falls der Nachname gleich ist, false falls der Nachname ungleich ist</returns>
        public bool Equals(Person person)
        {
            string nName = person.GetNName().ToUpper();
            if (this.nName.ToUpper() == nName)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        /// <summary>
        /// ToString Methode
        /// </summary>
        /// <para>
        /// Liefert einen formatierten String der Person///
        /// </para>      
        /// <returns>"Personendanten: "vorname", "nachname", "telefonnummer"."</returns>
        public override string ToString()
        {
            return "Personendaten: "+ vName + ", " + nName + ", " + telNr + ".";
        }
    }
}


Habe dazu noch einen einfachen Tester erstellt:

Test.cs
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
using System;
using System.Collections.Generic;
using System.Text;
using dSudGPerson;

namespace dSudGTest
{
    /// <summary>
    /// Test
    /// </summary>
    /// <para>
    /// Testet die Klasse Person durch einen Tester der verschiedene Personen miteinander vergleicht.
    /// Falls True  --> "Gleichheit gegeben"
    /// Falls False --> "Gleichheit nicht gegeben"
    /// Um Codevermehrung zu verhindern wird dies in der Funktion Check durchgeführt!
    /// </para>
    class Test
    {
        /// <summary>
        /// Main
        /// </summary>
        /// <para>
        /// Test für den Benützer
        /// Erstellt 5 Personen
        /// Stellt alle 5 Personen vor (verwerden der ToString Methoden)
        /// Vergleich der Personen durch die Funktion Check mit verschiedenen Personen
        /// </para>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            
            Person a = new Person("hans""peter""0654 5456441");     // Person a
            Person b = new Person("hans""peter""0643 5675315");     // Person b
            Person c = new Person("günter""jakob""0657 5375155");   // Person c
            Person d = new Person("günter""JAKOB""0672 3158s75");   // Person d
            Person e = new Person("franz""Josef""0341 3242154");    // Person e
            Console.ForegroundColor = ConsoleColor.White; 
            Console.WriteLine("Personenvorstellung:");                  // Personen werden vorgestellt
            Console.ForegroundColor = ConsoleColor.Gray;
            Console.WriteLine("Person a = " + a);                       // Person a.ToString() wird ausgegeben
            Console.WriteLine("Person b = " + b);                       // --||-- b-------------||------------
            Console.WriteLine("Person c = " + c);                       // --||-- c-------------||------------
            Console.WriteLine("Person d = " + d);                       // --||-- d-------------||------------
            Console.WriteLine("Person e = " + e);                       // --||-- e-------------||------------
            Console.WriteLine();
            Console.ForegroundColor = ConsoleColor.White; 
            Console.WriteLine("Personenvergleich...");                  // Personen werden vergliechen

            Console.WriteLine("...zwischen a und b");                   // a mit b
            Check(a, b);                                                // Funktionsaufruf von Check mit den Parametern a und b

            Console.WriteLine("...zwischen c und d");                   // c mit d
            Check(c, d);                                                // Funktionsaufruf von Check mit den Parametern c und d

            Console.WriteLine("...zwischen b und c");                   // b mit c
            Check(b, c);                                                // Funktionsaufruf von Check mit den Parametern b und c

            Console.WriteLine("...zwischen d und e");                   // d mit e 
            Check(d, e);                                                // Funktionsaufruf von Check mit den Parametern d und e

            Console.WriteLine("...zwischen a und e");                   // a mit e
            Check(a, e);                                                // Funktionsaufruf von Check mit den Parametern a und e
        }

        /// <summary>
        /// Check
        /// </summary>
        /// <para>
        /// Um Codewiederholung zu vermeiden wurde die Funktion Check erstellt
        ///     1.  Farbe auf grau ändern
        ///     2.  Person 1 ausgeben
        ///     3.  Person 2 ausgeben
        ///     4.  Eine IF Verzweigung mit dem Inhalt "Parameter1.Equals(Parameter2)"
        ///                                            "Person1   .Equals(Person2   )"
        ///                                            "a         .Equals(b         )"
        /// Falls Equals return --> TRUE
        ///     5a. Farbe auf grün ändern
        ///     6a. "Gleicheit gegeben" ausgeben
        /// Falls Equals return --> FALSE
        ///     5b. Farbe auf rot ändern
        ///     6b. "Gleichehit nicht gegeben" ausgeben
        ///     7.  Farbe auf weiß ändern 
        /// </para>
        /// <param name="a">Person 1 zum vergleich durch Equals</param>
        /// <param name="b">Person 2 zum vergleich durch Equals</param>
        public static void Check(Person a, Person b)
        {
            Console.ForegroundColor = ConsoleColor.Gray;            // 1.
            Console.WriteLine("Person 1: " + a);                     // 2.
            Console.WriteLine("Person 2: " + b);                     // 3.
            if (a.Equals(b))                                        // 4.
            {
                Console.ForegroundColor = ConsoleColor.Green;       // 5a.
                Console.WriteLine("Gleichheit gegeben");              // 6a.
            }
            else
            {
                Console.ForegroundColor = ConsoleColor.Red;         // 5b.
                Console.WriteLine("Gleichheit nicht gegeben");        // 6b.
            }
            Console.ForegroundColor = ConsoleColor.White;           // 7
        }
    }
}


Download: Moderiert von user profile iconNarses: Archiv als Anhang hochgeladen.

Ich wäre echt auch noch interessiert wie ihr meinen Programmierstil haltet.

Vielen Dank schoneinmal für eure Hilfe.

Domi
Einloggen, um Attachments anzusehen!


Zuletzt bearbeitet von Domi2k8 am Fr 25.12.09 16:51, insgesamt 1-mal bearbeitet
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Mi 23.12.09 11:15 
Hallo Domi,

zu erst mal zu deinem Programmierstil:
Das mit den Gettern-Settern tut den Augen schon weh :) Aber das weißt du ja selber. Dir Variablen/Membernamen gefallen mir auch nicht - sind aber ja auch vorgegeben. Kommentar sind schön überall vorhanden. Allerdings sind die Methoden toString und equals nicht schön überschrieben. Strings sollte man nicht mit dem + Operator verbinden, sondern mit concat, StringBuilder oder string.Format. Ich würde dir in deinem Fall zu letzterem raten. Die Equals-Methode ist auch sehr unschön. Zum einen hat die Klasse string bereits eine Funktion um Strings zu vergleichen mit oder ohne Beachtung der Groß/Kleinschreibung. Darüberhinaus vergleicht dein Equals nur den Nachnamen, d.h. Stefanie Müller und Daniel Müller sind gleich. Deshalb mein Vorschlag gebe direkt die Auswertung einer Bedingung zurück, die den Vornamen und den Nachnamen CaseInsensetiv überprüft. Sprich etwas if (b.equals(true)) return true; else return false ist nicht wirklich sinnvoll und leserlich :D
Ahja da fällt mir noch auf Gleichheit != Selbe und bei der Equals überprüfst du den Namen string gleich mal auf das Gleiche :) Verwende einfach immer die equals Methode. Wenn sie für ein Objekt nicht implementiert ist, verhält sie sich ja eh wie == ;)


Zum Objekt-Broker:
In der Aufgabe steht ja beschrieben was du machen sollst:
1) Sperre den Konstruktor (das macht man indem man in privat macht)
2) Erstelle eine create Methode (da es keine Instanzen gibt muss sie statisch erreichbar sein)
3) Überprüfe ob das Dictionary bereits den Namen beinhaltet (Dictionary hat eine Funktion dafür)
Ggf Exepction werfen
4) Speichere in einem Dictionary die Namen die über die create Methode erstellt wurden.

Das wars ja schon :) Hoff das hilf dir.

Viel Spaß und Gruß
Daniel
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 23.12.09 12:27 
Hallo,

bitte ändere den Titel des Topics, da er wenig über das eigentlich Thema verrät. Hier der entsprechende Absatz aus den Richtlinien:

1.2 Beiträge:
Bitte formuliere den Betreff Deiner Beiträge so, dass andere Mitglieder anhand dieser bereits das eigentliche Thema festmachen können. Beiträge wie etwa "Eine Anfängerfrage" oder "Weiß jemand, wie das geht?" lassen den Leser im Unklaren darüber, was das Thema der Diskussion ist.[...]


Einfach oben bei Deinem ersten Beitrag auf user defined image oder user defined image klicken und den Titel ändern. Danke Dir!

Viele Grüße,
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mi 23.12.09 17:53 
user profile icondanielf hat schon gute Hinweise für die zweite Aufgabe geliefert, mit seinem ersten Teil bin ich aber nicht ganz einverstanden :D .

user profile icondanielf hat folgendes geschrieben Zum zitierten Posting springen:
Strings sollte man nicht mit dem + Operator verbinden, sondern mit concat, StringBuilder oder string.Format.
Format ist meistens hübscher, ok, aber a) wird hier schon Concat emittiert und b) dürfte StringBuilder in diesem Fall langsamer sein. Wenn es um Performance geht, ist der Code so also optimal.

user profile icondanielf hat folgendes geschrieben Zum zitierten Posting springen:
Darüberhinaus vergleicht dein Equals nur den Nachnamen, d.h. Stefanie Müller und Daniel Müller sind gleich.
Wie gefordert ... ;)

user profile icondanielf hat folgendes geschrieben Zum zitierten Posting springen:
Ahja da fällt mir noch auf Gleichheit != Selbe und bei der Equals überprüfst du den Namen string gleich mal auf das Gleiche :)
Das hab ich nicht wirklich verstanden :gruebel: .

user profile icondanielf hat folgendes geschrieben Zum zitierten Posting springen:
Verwende einfach immer die equals Methode.
Wir sind hier doch nicht bei Java :P . Die Designer von C# haben sich schon etwas gedacht, als sie == überladbar gemacht haben, allem voran Lesbarkeit.

Die Überladbarkeit ist auch der Grund, weshalb == nicht unbedingt nur auf Identität überprüft - sicher ist da nur object.ReferenceEquals.

_________________
>λ=
Domi2k8 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Fr 25.12.09 16:52 
Vielen dank für eure Hilfe

Problem gelöst ;)