2010-12-26 4 views
6

Je crée un programme d'arbre généalogique en Java, ou du moins en essayant de le faire. J'ai développé plusieurs classes:Logique pour le programme d'arbre généalogique

  • personne - getter et setter pour le nom âge sexe, etc.
  • familymember - étend personne getters et setters pour fixer les parents et enfants
  • famille - qui se compose de plusieurs membres de la famille et méthodes d'ajout suppression des membres
  • FamilyTree qui est la classe principale pour définir des relations.

J'ai deux principaux problèmes:

1) Je dois définir les relations entre les personnes. Actuellement je fais:

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

L'exemple ci-dessus est pour établir une relation mère-enfant.

Cela semble très maladroit. Il devient très long de mettre en œuvre toutes les relations. Des idées sur la façon de mettre en œuvre des relations multiples d'une manière moins procédurale?

2) Je dois pouvoir afficher l'arbre généalogique. Comment puis-je faire ceci? Y a-t-il des cours sur mesure pour vous faciliter la vie?

Merci pour votre temps ...

+0

Comment voulez-vous l'afficher? – Roman

Répondre

4

En ce qui concerne Pour dessiner la structure, il est difficile d'éviter les collisions (lignes entrecroisées) si vous avez plus de 2 générations affichées. Donc, si votre demande vous permet de réduire à deux, c'est génial. J'ai écrit un certain nombre de programmes qui utilisent ce genre de représentation, soit verticalement:

alt text

ou horizontalement:

alt text

Si vous avez besoin de plus les générations affichées à la fois, vous Il va falloir trouver d'autres représentations, et elles peuvent commencer à être assez éparses juste pour que vous puissiez montrer tout le monde dans la même génération au même niveau.

En ce qui concerne la façon de représenter les relations en tant que structures de données - eh bien, c'est en désordre. La chose la plus simple et la plus propre est que deux personnes qui sont respectivement la mère et le père du même individu sont «mariées». Mais comment voulez-vous représenter plusieurs partenaires, beaux-enfants et autres? C'est difficile de répondre sans en savoir plus sur ce que votre programme est censé faire. Peut-être que votre ensemble de données n'a pas ces complications. Si c'est le cas, cependant, il est préférable de penser d'abord aux cas difficiles - les représentations simples ne se prêtent pas à une extension facile pour couvrir les cas difficiles.Dessinez (à la main) quelques-uns des cas les plus difficiles que vous anticipez; Cela vous indiquera quel type de données vous devez enregistrer et comment l'organiser. Les choix que vous faites au fur et à mesure que vous dessinez (qui vient en premier, quels symboles et quel texte utiliser à chaque nœud, etc.) éclaireront vos décisions de structure de données.

La définition de la mère de B et de l'enfant de A semble redondante - et la redondance entraîne des erreurs - choisissez-en une. Laquelle? Eh bien, il y a plus d'informations quand vous définissez la mère de B (sexe de A) et nous savons que toute personne aura exactement besoin de deux parents, par rapport à un nombre d'enfants de 0 ou plus. Donc, je voudrais aller avec juste la définition de la mère de B; vous pouvez toujours découvrir les enfants de n'importe quel individu en itérant sur tout pour choisir l'ensemble dont le parent est égal à l'individu en question. Et en réalité, le fait d'emmagasiner la mère & Les relations avec le père (par rapport aux simples relations avec le parent) peuvent réduire la duplication (en supposant que vous stockez le genre avec les individus).

0

quelque chose comme ci-dessous classe (ce qui est un code pseudo pas une vraie classe Java)

class Node 
{ 

    public Node Parent { get;set;} 

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

} 

utilise

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

Je veux l'afficher dans une arborescence. Mon problème principal est la mise en relation. J'ai un groupe de membres de la famille qui permet à une personne d'avoir un autre père et de nombreux enfants. Je ne sais pas comment mettre en œuvre les mariages et aussi comment mettre en œuvre des relations de réglage pour de nombreux enfants avec le même parent ... Merci pour une réponse si rapide !! – dr85

0

Toutes les idées sur la façon de mettre en œuvre plusieurs relations d'une manière moins procédurale?

Oui, vous pouvez représenter les relations elles-mêmes en tant qu'objets. Deux personnes peuvent avoir zéro ou plusieurs relations.

Il ya quelques années, j'ai travaillé sur un système de dossiers de police qui le faisait plus généralement pour les associations entre deux personnes dans son index de nom de maître.

Les relations peuvent être dirigées. Mère --- est-mère-de -> Enfant.

Les relations peuvent être hiérarchiques. Une mère est un parent.

2) Je dois être en mesure d'afficher l'arbre généalogique . Comment puis-je faire ceci? Est-ce que y a-t-il des classes personnalisées là-bas pour pour vous faciliter la vie?

Oui, il existe un code qui prend en charge l'affichage des graphiques. Personnellement, j'ai eu une bonne expérience de travail avec le prefuse visualization toolkit.

Vous pouvez trouver le prefuse treeview d'intérêt; essayez de cliquer sur les noeuds dans this example. (Cependant, si vous avez l'intention de faire utiliser votre logiciel par d'autres familles que la vôtre, un arbre peut être insuffisant.)

Questions connexes