Question

Je suis en train de créer un programme d'arbre généalogique en Java, ou du moins essayer de. J'ai développé plusieurs classes:

  • personne - getter et setter pour nom âge de sexe, etc.
  • familymember - étend personne getters et setters pour les parents et la mise en enfants
  • Famille - qui se compose de plusieurs membres de la famille et des méthodes pour ajouter membres suppression
  • FamilyTree qui est la classe principale pour établir des relations.

J'ai deux problèmes principaux:

1) J'ai besoin de 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 d'établir une relation mère-enfant.

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

2) Je dois être en mesure d'afficher l'arbre généalogique. Comment puis-je faire ceci? Y a-t-il des classes personnalisées là-bas pour rendre la vie plus facile?

Merci pour votre temps ...

Était-ce utile?

La solution

En ce qui concerne l'élaboration de 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 application vous permet de le garder à deux, qui est grand. J'ai écrit un certain nombre de programmes qui utilisent ce type de représentation, soit verticalement:

text alt

ou horizontalement:

text alt

Si vous avez besoin de plus les générations affichées à la fois, vous aurez besoin de trouver d'autres représentations, et ils peuvent commencer à être assez clairsemée juste pour que vous puissiez montrer à tous dans la même génération au même niveau.

En ce qui concerne la façon de représenter les relations que les structures de données - bien, il est en désordre. Le plus simple, plus propre chose est que deux personnes qui sont respectivement la mère et le père de la même personne sont « mariés ». Mais comment voulez-vous représenter plusieurs partenaires, beaux-enfants, etc.? C'est difficile de répondre sans en savoir plus sur ce que votre programme est censé faire. Peut-être votre ensemble de données ne dispose pas de ces complications. Si elle le fait, cependant, il est préférable de penser à travers les cas difficiles premières -. Les simples représentations ne se prêtent pas à une extension facile à couvrir les cas difficiles

Dessine (à la main) quelques-unes des cas les plus difficiles que vous anticipez; qui suggéreront ce type de données, vous devez enregistrer, et comment l'organiser. Les choix que vous faites que vous dessinez (qui vient en premier, quels symboles et texte à utiliser à chaque noeud, etc.) seront vos décisions de structure de données.

Réglage à la fois la mère de B et l'enfant A semble redondant - conduit et de redondance d'erreurs - choisir un. Laquelle? Eh bien, il y a plus d'informations lorsque vous définissez la mère de B (le genre de la A) et nous savons toute personne aura besoin exactement deux parents par rapport à un 0 ou plus-nombre d'enfants. Donc, je aurais tendance à aller avec juste mettre la mère de B; vous pouvez toujours trouver les enfants de toute personne par itérer sur tous choisir l'ensemble dont le parent est égal à la personne en question. Et stocker en fait des relations Mère et Père (par rapport à de simples relations parents) peut réduire le double emploi (en supposant que vous stockez le sexe avec les individus).

Autres conseils

  

Toutes les idées sur la façon de mettre en œuvre plusieurs   Les relations dans une procédure moins   façon?

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

Il y a quelques années, je travaillais sur un système de dossiers de la police qui a fait plus généralement pour les associations entre deux personnes dans son index de nom maître.

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

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

  

2) Je dois être en mesure d'afficher la   arbre généalogique. Comment puis-je faire ceci? Sont   t-il des classes personnalisées là pour   rendre la vie plus facile?

Oui, il y a le code existant qui supporte l'affichage des graphiques. J'ai eu personnellement une bonne expérience de travail avec le Prefuse boîte à outils de visualisation .

Vous pouvez trouver le treeview Prefuse d'intérêt; essayez de cliquer sur les nœuds dans cet exemple . (Cependant, si vous envisagez votre logiciel pour une utilisation par les familles autres que le vôtre, un arbre peut être insuffisante.)

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>();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top