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
| struct s_personne {
char* nom;
char* prenom;
struct s_personne* gauche;
struct s_personne* droite;
struct s_livre *livre;
};
struct s_livre {
char* nom;
char* date;
struct s_livre *next;
};
void ajouter_membre(struct s_personne* base, char* nom, char* prenom);
void afficher(struct s_personne* base);
void ajouter_livre(struct s_personne* membre, char* nomLivre, char* date);
int moyenne_livre(struct s_personne* base);
void main() {
struct s_personne* base;
base = NULL;
printf("1\n");
afficher(base);
printf("2\n");
ajouter_membre(base, "Jean-Guy", "Toto");
printf("3\n");
afficher(base);
}
void ajouter_membre(struct s_personne* base, char* nom, char* prenom) {
int nbr, nbr2;
struct s_personne test;
// Si l'element n'existe pas, on le créé
printf("20\n");
if (base==NULL) {
printf("21\n");
base = (struct s_personne*) malloc(sizeof(struct s_personne));
printf("211\n");
base->nom = (char*) malloc(sizeof(nom)*sizeof(char));
strcpy(base->nom, nom);
printf("212\n");
base->prenom = (char*) malloc(sizeof(prenom)*sizeof(char));
strcpy(base->prenom, prenom);
base->gauche=NULL;
base->droite=NULL;
base->livre=NULL;
printf("213");
} else {
printf("22\n");
// Sinon on compare les noms
nbr = strcmpi(base->nom, nom);
// Ajout a gauche : comparaison négative
if (nbr < 0) {
ajouter_membre(base->gauche, nom, prenom);
}
printf("23\n");
// Ajout a droite : comparaison positive
if (nbr > 0) {
ajouter_membre(base->droite, nom, prenom);
}
printf("24\n");
// Les noms sont identique
if (nbr == 0) {
// On compare les prénoms
nbr2 = strcmpi(base->prenom, prenom);
// Ajout a gauche : comparaison négative
if (nbr2 < 0) {
ajouter_membre(base->gauche, nom, prenom);
}
// Ajout a droite : comparaison positive
if (nbr2 > 0) {
ajouter_membre(base->droite, nom, prenom);
}
// Prénoms aussi identique: erreur ! on ne fait rien
if (nbr2 == 0) {
printf("Erreur, le nom et le prenom existent deja");
}
}
}
}
void afficher(struct s_personne* base) {
struct s_livre* livre;
printf("11\n");
if (base != NULL) {
printf("12\n");
if (base->gauche != NULL) {
afficher(base->gauche);
}
printf("13\n");
printf("Nom : %s - Prenom: %s\n", base->nom, base->prenom);
livre = base->livre;
// Affichage des livres tant que next != null
while(livre != NULL) {
printf("-> Livre : nom: %s - date: %s", livre->nom, livre->date);
// On définit le livre suivant => livre->next
livre = livre->next;
}
if (base->droite != NULL) {
afficher(base->droite);
}
printf("14\n");
}
printf("15\n");
} |
Partager