Namensammlung

  • VB6

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Namensammlung

    Hallo,

    vor ein paar Wochen hatte ich ja schon mal ein paar Fragen zur Namensammlung gestellt. Mein Programm funktioniert jetzt so wie es funktionieren soll, allerdings soll ich noch ein paar Änderungen vornehmen.
    Zur Erklärung des Programms:
    Man gibt am Anfang die Daten (Name, Geburtsdatum, Haarfarbe) von 5 Personen ein. Diese kann man sich dann auf einer 2ten Form anzeigen lassen. Nun hat man 5 Personen mit möglicherweise 5 verschiedenen Nachnamen. Nun gibt es auf der 2ten Form einen Button der "Heiraten" heißt, womit man 2 Personen der 5 Personen "heiraten" lassen kann. Dabei kann man auswählen, ob der Nachname des Mannes übernommen wird, der Nachname der Frau, oder ob ein Doppelname angenommen wird. Das ganze habe ich jetzt relativ umständlich so umgesetzt:

    Visual Basic-Quellcode

    1. ​Dim p(5) As New Personen
    2. Dim a As Integer 'Person 1
    3. Dim b As Integer 'Person 2
    4. Dim tb(5) As TextBox 'textboxen des Nachnamens
    5. Dim tbb(5) As TextBox 'textboxen des Geschlechts
    6. Private Sub cbSpeichern_Click()
    7. p(a).Geschlecht = tbb(a).Text
    8. p(b).Geschlecht = tbb(b).Text
    9. p(a).Nachname = tb(a).Text
    10. p(b).Nachname = tb(b).Text
    11. If ob1 = True Then
    12. If p(a).Geschlecht = 1 Then
    13. p(b).Nachname = p(a).Nachname
    14. tb(b).Text = p(b).Nachname
    15. Else
    16. p(a).Nachname = p(b).Nachname
    17. tb(a).Text = p(a).Nachname
    18. End If
    19. Else
    20. End If
    21. If ob2 = True Then
    22. If p(a).Geschlecht = 0 Then
    23. p(b).Nachname = p(a).Nachname
    24. tb(b).Text = p(b).Nachname
    25. Else
    26. p(a).Nachname = p(b).Nachname
    27. tb(a).Text = p(a).Nachname
    28. End If
    29. Else
    30. End If
    31. If ob3 = True Then
    32. p(a).Nachname = p(a).Nachname
    33. p(b).Nachname = p(b).Nachname
    34. tb(a).Text = p(a).Nachname & "-" & p(b).Nachname
    35. tb(b).Text = p(b).Nachname & "-" & p(a).Nachname
    36. Else
    37. End If
    38. End Sub
    39. Private Sub Form_Load()
    40. a = InputBox("Gib die Nummer der ersten Person ein, die heiratet.")
    41. b = InputBox("Gib die Nummer der zweiten Person ein, die heiratet.")
    42. Set tb(1) = Form2.p1nach
    43. Set tb(2) = Form2.p2nach
    44. Set tb(3) = Form2.p3nach
    45. Set tb(4) = Form2.p4nach
    46. Set tb(5) = Form2.p5nach
    47. Set tbb(1) = Form2.p1ges
    48. Set tbb(2) = Form2.p2ges
    49. Set tbb(3) = Form2.p3ges
    50. Set tbb(4) = Form2.p4ges
    51. Set tbb(5) = Form2.p5ges
    52. End Sub


    Ich soll das ganze nun in eine Class schreiben (welche schon existiert). Diese sieht immoment so aus:

    Visual Basic-Quellcode

    1. ​Private Kdatum As Date
    2. Private Khaarfarbe As String
    3. Private Khaarfarbe1 As String
    4. Private Kvorname As String
    5. Private Knachname As String
    6. Private Kgeschlecht As Integer
    7. 'geschlecht
    8. Public Property Let Geschlecht(ByVal Pgeschlecht As Integer)
    9. Kgeschlecht = Pgeschlecht
    10. End Property
    11. Public Property Get Geschlecht() As Integer
    12. Geschlecht = Kgeschlecht
    13. End Property
    14. 'datum
    15. Public Property Let Datum(ByVal Pdatum As Date)
    16. Kdatum = Pdatum
    17. End Property
    18. Public Property Get Datum() As Date
    19. Datum = Kdatum
    20. End Property
    21. 'haarfarbe
    22. Public Property Let Haarfarbe(ByVal Phaarfarbe As String)
    23. Khaarfarbe = Phaarfarbe
    24. End Property
    25. Public Property Get Haarfarbe() As String
    26. Haarfarbe = Khaarfarbe
    27. End Property
    28. 'haarfarbe 1
    29. Public Property Let haarfarbe1(ByVal Phaarfarbe1 As String)
    30. Khaarfarbe1 = Phaarfarbe1
    31. End Property
    32. Public Property Get haarfarbe1() As String
    33. haarfarbe1 = Khaarfarbe1
    34. End Property
    35. 'alter
    36. Public Function alter() As Integer
    37. alter = (Date - Datum) / 365
    38. End Function
    39. 'vorname
    40. Public Property Let Vorname(ByVal Pvorname As String)
    41. Kvorname = Pvorname
    42. End Property
    43. Public Property Get Vorname() As String
    44. Vorname = Kvorname
    45. End Property
    46. 'nachname
    47. Public Property Let Nachname(ByVal Pnachname As String)
    48. Knachname = Pnachname
    49. End Property
    50. Public Property Get Nachname() As String
    51. Nachname = Knachname
    52. End Property


    Am Ende soll man im Prinzip also einfach in den Code schreiben können "Doppelname" und dann wird der Doppelname gebildet. Allerdings weiß ich gar nicht wie das in die Class reingeschrieben werden soll. Als Function oder als Public Sub? Was bietet sich da an?

    Mit freundlichem Gruß
    Das würde ich gar nicht in der Klasse machen.
    Das ist keine Funktion einer einzelnen Person, sondern etwas von aussen, das den Nachnamen von bis zu zwei Personen beeinflusst.

    Außerdem gibt es schon allein beim Doppelnamen theoretisch zwei verschiedene Varianten (Müller-Maier vs. Maier-Müller).

    Willst du dein Programm aber der rechtlichen Grundlage anpassen, solltest du mal nachlesen.
    berlin.de/special/finanzen-und…h-heirat-diese-moegl.html

    Auch Sonderfälle wie "Hans Müller heiratet Verena Müller" solltest du berücksichtigen.
    Das einzige, was tatsächlich in die Klasse der einzelnen Person gehört, ist eine Liste von Ex-Namen und deren zeitliche Gültigkeit.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „petaod“ ()

    Da sieht man mal wieder, wie gut unsere Lehrer ausgebildet sind.
    Und wie weit weg sie von der Realität sind.
    Dann schreib halt eine Sub

    Visual Basic-Quellcode

    1. ​Sub ErzeugeDoppelnamen(ByVal PartnerName As String)
    2. Nachname = Nachname & "-" & PartnerName
    3. End Sub
    Hauptsache, dein Lehrer ist zufrieden.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Danke, aber wenn ich das ganze so schreibe:

    Visual Basic-Quellcode

    1. 'Doppelname
    2. Sub Doppelname(ByVal Partnername As String, Nachname As String)
    3. Nachname = Nachname & "-" & Partnername
    4. End Sub


    und dann im Code so aufrufe

    Visual Basic-Quellcode

    1. If ob3 = True Then
    2. Doppelname(p(b).Nachname, p(a).Nachname)
    3. Else
    4. End If


    Kommt die Fehlermeldung "Sub or Function not defined."
    Wo ist denn nun deine Sub Doppelname drin? Im gleichen Modul (Modul, Form, Klassenmodul) wie dein Aufruf? Vmtl. nicht, sonst würde es gehen. Wenn die in der Klasse ist und dein Aufruf nicht, so muss du die Klasseninstanz angeben, z. B. p.Doppelname. Ich gehe davon aus, dass die Sub dann auch als Public deklariert werden muss.

    Zudem kann es soweit ich weiß in VB6 keine Klammern um die Parameter geben, solange man die Sub oder Function ohne was davor aufruft. Also subname param oder Call subname(param) oder x = function(param).
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum

    lang11 schrieb:

    Sub Doppelname(ByVal Partnername As String, Nachname As String)
    Nachname = Nachname & "-" & Partnername
    End Sub

    Du darfst Nachname nicht als Parameter angeben.
    Der ist ja schon in der Klasse definiert.

    Die Sub musst du in der Instanz aufrufen.

    Wenn Person1 den Namen von Person2 zusätzlich bekommen soll:

    Visual Basic-Quellcode

    1. p(1).Doppelname p(2).Nachname


    Im übrigen ist deine Sub ungünstig benannt.
    Wenn du sie wie in meinem Beispiel benennst, dann ist das Programm wesentlich lesbarer.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „petaod“ ()