[C] Problème Listes chainées Structure conten

Fermé
loco_info - 16 mai 2007 à 23:46
Al_25 Messages postés 9 Date d'inscription dimanche 6 mai 2007 Statut Membre Dernière intervention 17 mai 2007 - 17 mai 2007 à 16:36
Salut tout le monde;
un problème de gestion de l'école avec l'utilisation des listes chainnées:
Problème Listes chainées Structure contenant des structures
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <windows.h>

// Structure pour renseignements sur les eleves 
typedef struct ListeEleves
{   char Nom[20];
    char Prenom[20];
    char Sexe[1];    
    float Notes[4];
    float Moyenne;
    struct ListeEleves *next;
}ListeEleves;
typedef struct ListeEleves *Eleve_l;

// Structure pour renseignements sur les profs 
typedef struct ListeProfs
{   char Nom[20];
    char Prenom[20];
    char Module[20];
    char Sexe[1];    
    struct ListeProfs *next;
}ListeProfs;
typedef struct ListeProfs *Prof_l;

// Structure pour renseignements sur les classes 
typedef struct ListeClasses
{   char Nom[20];
    Eleve_l *ListeEleve;
    Prof_l *ListeProf;
    struct ListeClasses *next;
}ListeClasses;
typedef struct ListeClasses *Classe_l;

// Structure pour les renseignements d'une ecole 
typedef struct Ecoles
{   
    char R_Sociale[20];
    int Nb_Classes;
    int Nb_Prof;
    int Nb_Eleves;
    Classe_l *ListeClasse;
}Ecoles;
typedef struct Ecoles *Ecole;

Eleve_l Creer_Eleve()
{
    int i=0, Somme=0;
	Eleve_l E=NULL;

		E=(Eleve_l)malloc(sizeof(ListeEleves));
		printf("\n\n\n");
        puts("                    ***Les informations d'eleve***");
        puts("==>Nom: ");
		gets(E->Nom);
		puts("==>Prenom: ");
		gets(E->Prenom);
		puts("==>Sexe (f ou m): ");
		gets(E->Sexe);
		for(i=0;i<4;i++)
        {printf("==>Note %d: ", i+1); scanf("%f",&E->Notes[i]); Somme+=Somme;}
        E->Moyenne=Somme/4;
		E->next=NULL;

	return E;
}

Prof_l Creer_Prof()
{
	Prof_l P=NULL;

		P=(Prof_l)malloc(sizeof(ListeProfs));
		printf("\n\n\n");
        puts("                    ***Les informations de prof***");
		puts("==>Nom: ");
		gets(P->Nom);
		puts("==>Prenom: ");
		gets(P->Prenom);
        puts("==>Sexe (f ou m): ");
		gets(P->Sexe);
        puts("==>Module: "); 
        gets(P->Module);
		P->next=NULL;

	return P;
}

Classe_l Creer_Classe()
{
	Classe_l C=NULL, nouveau;

		nouveau=(Classe_l)malloc(sizeof(ListeClasses));
		printf("\n\n\n");
        puts("                    ***Les informations de classe***");
        puts("==>Nom de la Classe: ");
		gets(nouveau->Nom);
		*nouveau->ListeEleve=Creer_Eleve();
                *nouveau->ListeProf=Creer_Prof();
        

//le problème est ici ici ici !!!!!!!
...........
...........
}




le problème est de créer une école contenant des classes des profs et des élèves, (et que les classes contenant les élèves et les profs)
je suis en 1er jour de manipulation, et je veux que vous m'aidez. C'est urgent!!
A voir également:

6 réponses

Al_25 Messages postés 9 Date d'inscription dimanche 6 mai 2007 Statut Membre Dernière intervention 17 mai 2007 1
16 mai 2007 à 23:57
POur moi la seul chose qui reste à faire c'est :

*nouveau->next=NULL;

return nouveau;
}

et c'est tous bon!

PS:je viens de voir un truc : il me semble que *nouveau->next ça ne marche pas,soit tu fais *nouveau.next soit nouveau->next mais c'est a verifier...
0
merci mon frère mais il reste de creer une liste des eleve et une liste de profs et les mettre dans une classe et cette dernière dans un école!!
0
le problème de créer une liste de classe et chaque classe a son nom et sa liste des eleves et liste des profs
gets(nouveau->Nom);
*nouveau->ListeEleve=Creer_Eleve();
*nouveau->ListeProf=Creer_Prof();
ça marche pas après la compilation
et je veux une solution de création des classes des ecoles (ce n'est pas les classes d'orienté objet)
0
Al_25 Messages postés 9 Date d'inscription dimanche 6 mai 2007 Statut Membre Dernière intervention 17 mai 2007 1
17 mai 2007 à 11:09
Vu que creer_eleve et creer prof te renvoi un pointeur vers un eleve ou un prof,tu n'as qu'a les appeler n fois puis les lier les un aux autres tous en gardant un pointeur vers le premier element de ta liste que tu mettras dans nouveau->ListeEleve
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
voila merci pour tous, mais encore des problèmes (c'est la vie hahaha)

j'ai réorganiser le code, et j'ai créé une fonction qui créer liste des eleves et une autre créer liste des profs.
aprés l'execution tout ça marche bien mais quand la liste des classe arrive à pointer sur la liste des eleves crées ça bloqué et doit fermer.
voici le code modifié:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <windows.h>

// Structure pour renseignements sur les eleves 
typedef struct ListeEleves
{   char Nom[20];
    char Prenom[20];
    char Sexe[1];    
    float Notes[4];
    float Moyenne;
    struct ListeEleves *next;
}ListeEleves;
typedef struct ListeEleves *Eleve_l;

// Structure pour renseignements sur les profs 
typedef struct ListeProfs
{   char Nom[20];
    char Prenom[20];
    char Module[20];
    char Sexe[1];    
    struct ListeProfs *next;
}ListeProfs;
typedef struct ListeProfs *Prof_l;

// Structure pour renseignements sur les classes 
typedef struct ListeClasses
{   char Nom[20];
    Eleve_l *ListeEleve;
    Prof_l *ListeProf;
    struct ListeClasses *next;
}ListeClasses;
typedef struct ListeClasses *Classe_l;

// Structure pour les renseignements d'une ecole 
typedef struct Ecoles
{   
    char R_Sociale[20];
    int Nb_Classes;
    int Nb_Prof;
    int Nb_Eleves;
    struct Classe_l *ListeClasse;
}Ecoles;
typedef struct Ecoles *Ecole;

Eleve_l Creer_Eleve()
{
    int rep, i=0, Somme=0;
	Eleve_l E=NULL, nouveau;
    do
	{
		nouveau=(Eleve_l)malloc(sizeof(ListeEleves));
		printf("\n\n\n");
        puts("                    ***Les informations d'eleve***");
        puts("==>Nom: ");fflush(stdin);
		gets(nouveau->Nom);
		puts("==>Prenom: ");fflush(stdin);
		gets(nouveau->Prenom);
		puts("==>Sexe (f ou m): ");fflush(stdin);
		gets(nouveau->Sexe);
		for(i=0;i<4;i++)
        {printf("==>Note %d: ", i+1); scanf("%f",&nouveau->Notes[i]); Somme+=Somme;}
        nouveau->Moyenne=Somme/4;
		nouveau->next=E;
		E=nouveau;
		printf("Voulez-vous ajouter un autre eleve? (0 sinon)");
		scanf("%d",&rep);
    }
    while (rep!=0);
	return E;
}

Prof_l Creer_Prof()
{
	int rep;
    Prof_l P=NULL, nouveau;
    do
	{
		nouveau=(Prof_l)malloc(sizeof(ListeProfs));
		printf("\n\n\n");
        puts("                    ***Les informations de prof***");
		puts("==>Nom: ");fflush(stdin);
		gets(nouveau->Nom);
		puts("==>Prenom: ");fflush(stdin);
		gets(nouveau->Prenom);
        puts("==>Sexe (f ou m): ");fflush(stdin);
		gets(nouveau->Sexe);
        puts("==>Module: ");fflush(stdin); 
        gets(nouveau->Module);
		nouveau->next=P;
		P=nouveau;
		printf("Voulez-vous ajouter un autre prof? (0 sinon)");
		scanf("%d",&rep);
    }
    while (rep!=0);
	return P;
}

Classe_l Creer_Classe()
{
	Classe_l C=NULL, nouveau;

		nouveau=(Classe_l)malloc(sizeof(ListeClasses));
		printf("\n\n\n");
        puts("                    ***Les informations de classe***");
        puts("==>Nom de la Classe: ");fflush(stdin);
		gets(nouveau->Nom);
		*nouveau->ListeEleve=Creer_Eleve();fflush(stdin);
		*nouveau->ListeProf=Creer_Prof();        
		nouveau->next=C;
		C=nouveau;

	return C;
}

int main()
{
Classe_l BM=NULL;
BM=Creer_Classe();


getchar();
return 0;
}
0
Al_25 Messages postés 9 Date d'inscription dimanche 6 mai 2007 Statut Membre Dernière intervention 17 mai 2007 1
17 mai 2007 à 16:36
Es tu sur que :

*nouveau->ListeEleve=Creer_Eleve();fflush(stdin);
*nouveau->ListeProf=Creer_Prof();

est correct?

il me semble qu'il faut enlever les * et mettre juste :

nouveau->ListeEleve=Creer_Eleve();fflush(stdin);
nouveau->ListeProf=Creer_Prof();
0