2010-12-26 5 views
6

Ich erstelle ein Familienstammbaum-Programm in Java, oder versuche es zumindest. Ich habe mehrere Klassen entwickelt:Logik für Stammbaumprogramm

  • Person - Getter und Setter für Name Geschlecht Alter usw.
  • Family - die mehrere besteht aus - Person Getter und Setter für die Einstellung Eltern und Kinder
  • Familie erweitert Familienmitglieder und Methoden zum Hinzufügen Entfernen von Mitgliedern
  • FamilyTree, die die Hauptklasse zum Festlegen von Beziehungen ist.

Ich habe zwei Hauptprobleme:

1) ich die Beziehungen zwischen den Menschen einstellen müssen. Derzeit mache ich:

FamilyMember A, FamilyMember B 
B.setMother(A); 
A.setChild(B); 

Das obige Beispiel ist für die Einstellung einer Mutter Kind Beziehung.

Das scheint sehr klobig. Es wird sehr langwierig, alle Beziehungen zu implementieren. Irgendwelche Ideen, wie man multiple Beziehungen in weniger prozeduraler Weise umsetzen kann?

2) Ich muss in der Lage sein, den Stammbaum anzuzeigen. Wie kann ich das machen? Gibt es irgendwelche benutzerdefinierten Klassen da draußen, um das Leben einfacher zu machen?

Vielen Dank für Ihre Zeit ...

+0

Wie möchten Sie es anzeigen? – Roman

Antwort

4

Hinsichtlich Um die Struktur zu zeichnen, ist es schwierig, Kollisionen (Linien kreuz und quer) zu vermeiden, wenn mehr als 2 Generationen angezeigt werden. Also, wenn Ihre Anwendung es erlaubt, es auf zwei zu halten, das ist großartig. Ich habe eine Reihe von Programmen geschrieben, die diese Art einer Darstellung verwenden, entweder vertikal:

alt text

oder horizontal:

alt text

Wenn Sie auf einmal angezeigt mehr Generationen benötigen, können Sie Ich muss mir andere Darstellungen einfallen lassen und sie werden vielleicht ziemlich spärlich, nur damit du jeden in der gleichen Generation auf dem gleichen Level zeigen kannst.

In Bezug auf wie die Beziehungen als Datenstrukturen darstellen - nun, es ist chaotisch. Die einfachste, sauberste Sache ist, dass zwei Individuen, die Mutter und Vater derselben Person sind, "verheiratet" sind. Aber wie möchten Sie mehrere Partner, Stiefkinder und dergleichen repräsentieren? Das ist schwer zu beantworten, ohne mehr darüber zu wissen, was genau dein Programm tun soll. Vielleicht hat Ihr Datensatz diese Komplikationen nicht. Wenn es jedoch so ist, ist es besser, zuerst die komplizierten Fälle zu durchdenken - die einfachen Darstellungen eignen sich nicht für eine einfache Erweiterung, um die schweren Fälle abzudecken.

Zeichnen Sie (von Hand) einige der schwierigsten Fälle, die Sie erwarten; das wird vorschlagen, welche Art von Daten Sie aufzeichnen müssen und wie Sie sie organisieren. Die Auswahl, die Sie beim Zeichnen treffen (wer zuerst kommt, welche Symbole und Texte an den einzelnen Knoten verwendet werden usw.), wird Ihre Entscheidungen zur Datenstruktur beeinflussen.

Das Setzen von B's Mutter und A's Kind scheint redundant zu sein - und Redundanz führt zu Fehlern - wähle eins. Welcher? Nun, es gibt mehr Informationen, wenn Sie B's Mutter (A's Geschlecht) einstellen, und wir wissen, dass jede Person genau zwei Elternteile braucht, verglichen mit einer 0 oder mehr Kindern. Also würde ich dazu neigen, mit nur Einstellung B Mutter gehen; Sie können immer die Kinder eines beliebigen Individuums herausfinden, indem Sie über alles iterieren, um das Set auszuwählen, dessen Elternteil dem betreffenden Individuum entspricht. Und tatsächlich speichern Mutter & Vater Beziehungen (gegenüber einfachen Eltern-Beziehungen) kann Doppelarbeit reduzieren (vorausgesetzt, Sie speichern Geschlecht mit den Personen).

0

so etwas wie unten Klasse (dies ist ein Pseudo-Code nicht eine echte Java-Klasse)

class Node 
{ 

    public Node Parent { get;set;} 

    public List<Node> Childs {get;set;} 

} 

verwendet

 Node ultimateGrandParent = new Node(); 
    ultimateGrandParent.Parent = null; 
    ultimateGrandParent.Childs = new List<Node>(); 
+0

Ich möchte es in einer Baumstruktur anzeigen. Mein Hauptproblem ist das Festlegen von Beziehungen. Ich habe eine Familienmitgliedsklasse, die einer Person erlaubt, einen anderen Vater und viele Kinder zu haben. Ich bin nicht sicher, wie man Ehen einführt und auch, Einstellungsbeziehungen für viele Kinder mit dem gleichen Elternteil zu implementieren ... Danke für solch eine schnelle Antwort !! – dr85

0

Irgendwelche Ideen auf, wie mehrere Beziehungen in einem weniger verfahrens Art und Weise zu implementieren?

Ja, Sie können die Beziehungen selbst als Objekte darstellen. Zwei beliebige Personen können keine oder mehrere Beziehungen haben.

Vor Jahren arbeitete ich an einem polizeilichen Aktensystem, das dies allgemeiner für Verbindungen zwischen irgendwelchen zwei Leuten in seinem Vorlagennamenindex tat.

Beziehungen können gerichtet sein. Mutter --- ist-Mutter-von -> Kind.

Beziehungen können hierarchisch sein. Eine Mutter ist ein Elternteil.

2) Ich muss in der Lage sein, den Stammbaum anzuzeigen. Wie kann ich das machen? Sind da irgendwelche benutzerdefinierten Klassen da draußen das Leben leichter machen?

Ja, es gibt einen vorhandenen Code, der die Anzeige von Graphen unterstützt. Ich persönlich hatte eine gute Erfahrung mit der prefuse visualization toolkit arbeiten.

Sie können die Prefuse Treeview von Interesse finden; Klicken Sie auf die Knoten in this example. (Wenn Sie jedoch beabsichtigen, dass Ihre Software für andere als Ihre eigenen Familien verwendet wird, reicht möglicherweise ein Baum nicht aus.)