You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
178 lines
3.0 KiB
178 lines
3.0 KiB
#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);
|
|
} |