#include "Jsae.h" int chargement(VilleIUT *tiut[],int *tMax) { FILE *flot; VilleIUT *v; MaillonDept *m; int nb = 0, pos, trouve; flot = fopen("IUT.don", "r"); if(flot == NULL) { printf("Problème d'ouverture du fichier\n"); fclose(flot); return -1; } while(!feof(flot)) { if(nb == *tMax) { tiut = reallocation(tiut,tMax); } v = (VilleIUT *)malloc(sizeof(VilleIUT)); if(v == NULL) { printf("Problème allocation ville lors de la lecture du fichier\n"); fclose(flot); return -2; } fscanf(flot, "%s", v->nom); printf("Nom de la ville : %s\n", v->nom); pos = rechercheIUT(tiut, nb, v->nom, &trouve); m = (MaillonDept *)malloc(sizeof(MaillonDept)); if(m == NULL) { printf("Problème allocation département lors de la lecture du fichier\n"); fclose(flot); return -3; } *m = lireDep(flot); if(trouve == 1) { insererDept(*(tiut[pos]), m); } else { m->suiv = NULL; v->lDept = m; tiut[nb] = v; nb++; } free(v); free(m); } return nb; } MaillonDept lireDep(FILE *flot) { MaillonDept m; fscanf(flot,"%s%d", m.dept, &m.nbP); fgets(m.respAd,31,flot); m.respAd[strlen(m.respAd) - 1] = '\0'; afficherDep(m); return m; } void afficherDep(MaillonDept m) { printf("\t%s\t%d\t%s\n", m.dept, m.nbP, m.respAd); } void afficherVille(VilleIUT v) { printf("%s", v.nom); while(v.lDept != NULL) { afficherDep(*(v.lDept)); v.lDept = v.lDept->suiv; } } void afficherTIUT(VilleIUT *tiut[], int tLog) { int i = 0; for(i = 0; i < tLog; i++) { afficherVille(*(tiut[i])); } } int rechercheIUT(VilleIUT *tiut[], int tLog, char ville[], int *trouve) { int inf,sup,t; inf = 0; sup = tLog - 1; while(inf <= sup) { t = (inf + sup) / 2; if(strcmp(ville, tiut[t]->nom) == 0) { *trouve = 1; return t; } if(strcmp(ville, tiut[t]->nom) < 0) { sup = t - 1; } else { inf = t + 1; } } *trouve = 0; return inf; } int insererDept(VilleIUT v, MaillonDept *m) { int trouve; MaillonDept *pos; pos = rechercheDept(v.lDept,&trouve,m->dept); printf("Valeur de trouve : %d", trouve); if(trouve == 1) { printf("\nDépartement déjà présent dans cet IUT\n"); return -1; } m->suiv = pos; pos = m; return 1; } MaillonDept* rechercheDept(ListeDept lDept, int *trouve, char nom[]) { while(lDept->suiv != NULL) { if(strcmp(nom,lDept->dept) == 0) { *trouve = 1; return lDept; } if(strcmp(nom,lDept->dept) < 0) { *trouve=0; return lDept; } lDept = lDept->suiv; } *trouve = 0; return lDept; } VilleIUT** reallocation(VilleIUT *tiut[], int *tMax) { VilleIUT **aux; aux = (VilleIUT **)realloc(tiut, (sizeof(VilleIUT *) * (*tMax)) + 5); *tMax = *tMax + 5; return aux; } void globale(void) { int tLog, tMax = 10; VilleIUT **tiut; tiut = (VilleIUT **)malloc(sizeof(VilleIUT *) * 10); if(tiut == NULL) { printf("Problème d'allocation mémoire du tableau tiut\n"); exit(1); } tLog = chargement(tiut,&tMax); if(tLog < 0) { printf("Le programme ne peut pas fonctionner\n"); exit(1); } afficherTIUT(tiut, tLog); }