diff --git a/part1.c b/part1.c index 5fcf1b2..49d3de2 100644 --- a/part1.c +++ b/part1.c @@ -3,14 +3,28 @@ #include #include"part1.h" -void lireM(FILE *f, MaillonDept * m)//lire maillon + +MaillonDept lireM(FILE *f)//lire maillon { - fscanf(f, "%s %d", m->departement, &m->nbP); - fgets(m->respAd, 31, f); - m->respAd[strlen(m->respAd)-1]='\0'; + MaillonDept m; + fscanf(f, "%s %d", m.departement, &m.nbP); + fgets(m.respAd, 31, f); + m.respAd[strlen(m.respAd)-1]='\0'; + return m; } - +MaillonDept lireStdin(void) +{ + MaillonDept m; + printf("Département :\t"); + fscanf(stdin, "%s", m.departement); + printf("Nombre de places :\t"); + fscanf(stdin, "%d%*c", &m.nbP); + printf("Chef de département :\t"); + fgets(m.respAd, 31, stdin); + m.respAd[strlen(m.respAd)-1]='\0'; + return m; +} int Exists(char *st1, char *st2)// servira à trouver si le nom de la ville existe déjà donc il suffira d'ajouter un maillon à la chaîne { @@ -21,29 +35,32 @@ int Exists(char *st1, char *st2)// servira à trouver si le nom de la ville exis } -ListDept InsertT(ListDept list, MaillonDept * m)//Insert en tête de la liste +ListDept InsertT(ListDept list, MaillonDept m)//Insert en tête de la liste { MaillonDept *mins; mins = (MaillonDept*)malloc(sizeof(MaillonDept)); if (mins == NULL){printf("pb malloc"); exit;} - strcpy(mins->departement, m->departement); - mins->nbP = m->nbP; - strcpy(mins->respAd, m->respAd); + strcpy(mins->departement, m.departement); + mins->nbP = m.nbP; + strcpy(mins->respAd, m.respAd); mins->suiv = list; return mins; } -ListDept Insert(ListDept list, MaillonDept *m)//insert globalement +ListDept Insert(ListDept list, MaillonDept m)//insert globalement { if (list == NULL){return InsertT(list, m);} - if (strcmp(list->departement, m->departement)>0){return InsertT(list, m);} + if (strcmp(list->departement, m.departement)>0){return InsertT(list, m);} list->suiv = Insert(list->suiv, m); return list; } + + + /*étapes pour le chargement: 1) pour chaque ville : malloc VilleIUT ->initialisation à NULL de la liste et fscanf la ville 2) récup le nb pour faire une boucle @@ -56,23 +73,24 @@ int Chargement(VilleIUT **tV, int tmax, char *nameFile) int i = 0, cpt; f = fopen(nameFile, "r"); if (f == NULL){printf("pb ouv file"); return -1;} + VilleIUT v; + + fscanf(f, "%s %d", v.ville, &cpt); while (!feof(f)) { - VilleIUT *v; - v = (VilleIUT *)malloc(sizeof(VilleIUT)); - if (v == NULL){printf("pb malloc");exit;} - fscanf(f, "%s %d", v->ville, &cpt); + tV[i] = (VilleIUT *)malloc(sizeof(VilleIUT)); + if (tV[i] == NULL){printf("pb malloc");exit;} + strcpy(tV[i]->ville, v.ville); + tV[i]->ldept = NULL; for (cpt; cpt > 0; cpt--) { - MaillonDept *m; - m = (MaillonDept*)malloc(sizeof(MaillonDept));//création du maillon - if (m == NULL){printf("pb malloc"); exit;} - lireM(f, m);//lire le maillon avec la fonction plus haut - v->ldept = Insert(v->ldept, m);//insert le maillon à sa bonne place + MaillonDept m; + m = lireM(f);//lire le maillon avec la fonction plus haut + tV[i]->ldept = Insert(tV[i]->ldept, m);//insert le maillon à sa bonne place } - tV[i] = v; + fscanf(f, "%s %d", v.ville, &cpt); i++; } return i; @@ -98,7 +116,7 @@ void afficheIUT (VilleIUT *iut)//Affiche un iut avec ses départements -void Affichetableau(VilleIUT ** TabIUT, int n )//Affiche le tableau des iuts avec lerus départements +void Affichetableau(VilleIUT ** TabIUT, int n )//Affiche le tableau des iuts avec leurs départements { int i; for ( i = 0 ; i < n ; i++ ) @@ -116,7 +134,7 @@ chercher dpt changer nbP return tV le tableau de VilleIUT mis à jour */ -VilleIUT** MaJnbP(VilleIUT **tV, int nb) +void MaJnbP(VilleIUT **tV, int nb) { char ville[31], dpt[31], reponse[31]; int newnbP; @@ -144,7 +162,7 @@ VilleIUT** MaJnbP(VilleIUT **tV, int nb) fgets(dpt, 31, stdin); dpt[strlen(dpt)-1] = '\0'; - elt = recherche(tV[v]->ldept, dpt); + elt = recherche(tV[v]->ldept, dpt);//on recherche le maillon while(elt == NULL)//tant que le nom du département n'est pas bon { @@ -160,7 +178,7 @@ VilleIUT** MaJnbP(VilleIUT **tV, int nb) printf("Nouveau nombre de places disponibles : \t"); scanf("%d", &newnbP); elt->nbP = newnbP; - return tV; + } @@ -187,16 +205,139 @@ int searchVille(VilleIUT ** tV, char *ville, int nbV)//recherche du nom de la vi +void createIUT(VilleIUT **tV, int nb)//crée un IUT dans la ville souhaitée. +{ + char reponse[31]; + MaillonDept m; + + + int v;//la position de la ville dans le tableau + char ville[31];//la ville répondue + + printf("Dans quelle ville souhaitez vous ajouter un département?\n"); + scanf("%s%*c", ville); + + v = searchVille(tV, ville, nb); + + while(v == -1)//tant que le nom de la ville n'est pas bon + { + printf("Ville non trouvée ...Rentrez une autre ville ou tapez 0 pour quitter\n"); + scanf("%s", reponse); + if (strcmp(reponse, 0)==0) + { + exit; + } + v = searchVille(tV, ville, nb); + } + + m = lireStdin();//on lit un maillon sur l'entrée standard + + tV[v]->ldept = Insert(tV[v]->ldept, m);//et on l'insert dans la liste du tableau +} +ListDept SuppT(ListDept ld)//supprime la tête d'une liste +{ + MaillonDept *tmp; + printf("Suppression du maillon\n"); + tmp = ld->suiv; + free(ld); + return tmp; +} +ListDept Supp(ListDept ldp, char *nomdpt)//supprime normal +{ + if (ldp == NULL){return ldp;} + if (strcmp(nomdpt, ldp->departement)==0)return SuppT(ldp); + if (strcmp(nomdpt, ldp->departement)<0)return ldp; + ldp->suiv = Supp(ldp->suiv, nomdpt); + return ldp; +} +void deleteIUT(VilleIUT **tV, int nb)//crée un IUT dans la ville souhaitée. +{ + char reponse[31]; + MaillonDept m; + + + int v;//la position de la ville dans le tableau + char ville[31];//la ville souhaitée + char tosuppr[31];//la ville à supprimer + + printf("Dans quelle ville souhaitez vous supprimer un département?\n"); + scanf("%s%*c", ville);//la ville + + v = searchVille(tV, ville, nb); + + while(v == -1)//tant que le nom de la ville n'est pas bon + { + printf("Ville non trouvée ...Rentrez une autre ville ou tapez 0 pour quitter\n"); + scanf("%s%*c", reponse); + if (strcmp(reponse, "0")==0) + { + exit; + } + v = searchVille(tV, reponse, nb); + } + + printf("Quel département souhaitez-vous supprimer ?\n"); + fgets(tosuppr, 31, stdin);//on récupère dans le tosuppr, le nom de la ville à supprimer + tosuppr[strlen(tosuppr)-1]='\0'; + + tV[v]->ldept = Supp(tV[v]->ldept, tosuppr);//et on la supprime de la liste du tableau +} +void MaJnameC(VilleIUT **tV, int nb)//mise à jour du nom du chef de département +{ + char ville[31], dpt[31], reponse[31];//la ville, le département et la réponse + char newName[31]; + int v; + ListDept elt; + + printf("De quels département et ville souhaitez vous modifier le nom du chef ?\n"); + printf("Ville : \t"); + scanf("%s%*c", ville); + + v = searchVille(tV, ville, nb);//recherche de la ville + + while(v == -1)//tant que le nom de la ville n'est pas bon + { + printf("Ville non trouvée ...Rentrez une autre ville ou tapez 0 pour quitter\n"); + scanf("%s%*c", reponse); + if (strcmp(reponse, "0")==0) + { + exit; + } + v = searchVille(tV, reponse, nb); + } + printf("Département : \t");//demande le département + fgets(dpt, 31, stdin); + dpt[strlen(dpt)-1] = '\0'; + + elt = recherche(tV[v]->ldept, dpt);//on recherche le maillon + + while(elt == NULL)//tant que le nom du département n'est pas bon + { + printf("Département non trouvé ...Rentrez un autre département ou tapez 0 pour quitter\n"); + scanf("%s", reponse); + if (strcmp(reponse, 0)==0) + { + exit; + } + elt = recherche(tV[v]->ldept, dpt); + } + + printf("Nouveau nom du chef de département : \t"); + fgets(newName, 31, stdin); + newName[strlen(newName)-1]='\0'; + strcpy(elt->respAd, newName); +} + diff --git a/part1.h b/part1.h index 9daf9a7..c770852 100644 --- a/part1.h +++ b/part1.h @@ -18,14 +18,20 @@ typedef struct{ typedef MaillonDept * ListDept; -void lireM(FILE *f, MaillonDept * m);//lire maillon -int Exists(char *st1, char *st2); -ListDept InsertT(ListDept list, MaillonDept * m); -ListDept Insert(ListDept list, MaillonDept *m); -int Chargement(VilleIUT **tV, int tmax, char *nameFile); -void AfficheDpmt ( MaillonDept *dpt ); -void afficheIUT (VilleIUT *iut); -void Affichetableau(VilleIUT ** TabIUT, int n ); -ListDept recherche (ListDept l, char *nom ); -VilleIUT** MaJnbP(VilleIUT **tV, int nb); -int searchVille(VilleIUT ** tV, char *ville, int nbV); +MaillonDept lireM(FILE *f);//lire maillon +int Exists(char *st1, char *st2);// servira à trouver si le nom de la ville existe déjà donc il suffira d'ajouter un maillon à la chaîne +ListDept InsertT(ListDept list, MaillonDept m);//Insert en tête de la liste +ListDept Insert(ListDept list, MaillonDept m);//insert globalement +int Chargement(VilleIUT **tV, int tmax, char *nameFile);//charge le fichier dans le tableau +void AfficheDpmt ( MaillonDept *dpt );//Affiche un département d'une liste +void afficheIUT (VilleIUT *iut);//Affiche un iut avec ses départements +void Affichetableau(VilleIUT ** TabIUT, int n );//Affiche le tableau des iuts avec leurs départements +ListDept recherche (ListDept l, char *nom );//recherche du nom de département dans la liste +void MaJnbP(VilleIUT **tV, int nb);//mise à jour du nombre de places +int searchVille(VilleIUT ** tV, char *ville, int nbV);//recherche du nom de la ville dans le tableau +void createIUT(VilleIUT **tV, int nb);//crée un IUT dans la ville souhaitée. +MaillonDept lireStdin(void); +ListDept SuppT(ListDept ld);//supprime la tête d'une liste +ListDept Supp(ListDept ldp, char *nomdpt);//supprime normal +void deleteIUT(VilleIUT **tV, int nb);//crée un IUT dans la ville souhaitée. +void MaJnameC(VilleIUT **tV, int nb);//mise à jour du nom du chef de département diff --git a/test b/test index b4c7d02..f44aaa9 100755 Binary files a/test and b/test differ diff --git a/tpart1.c b/tpart1.c index 01457a9..995d5ac 100644 --- a/tpart1.c +++ b/tpart1.c @@ -17,7 +17,15 @@ int main(void) printf("%s", v->ville); l = recherche(v->ldept, "Informatique"); printf("%s", l->departement);*/ - MaJnbP(tV, nb); + //MaJnbP(tV, nb); + //Affichetableau(tV, nb); + //createIUT(tV, nb); + //Affichetableau(tV, nb); + printf("\n\n\n"); + //deleteIUT(tV, nb); + + Affichetableau(tV, nb); + MaJnameC(tV, nb); Affichetableau(tV, nb); return 0;