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.
185 lines
5.9 KiB
185 lines
5.9 KiB
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include "iut.h"
|
|
|
|
|
|
|
|
|
|
//Fonction qui teste si la liste est vide ou non, et renvoie 'Vrai si la liste est vide', sinon 'Faux'
|
|
Booleen testVide(VilleIUT V){
|
|
if(V.ville == NULL)
|
|
return vrai;
|
|
return faux;
|
|
}
|
|
|
|
//chargement Ville+iut
|
|
int chargement(VilleIUT *tiut[],int tmax){
|
|
int i = 0, j=0;
|
|
int nbDep = 0;
|
|
VilleIUT V;
|
|
MaillonDept m;
|
|
FILE *fe;
|
|
fe=fopen("ville.don","r");
|
|
if(fe==NULL){
|
|
printf("Problème d'ouverture du fichier");
|
|
return-1;
|
|
}
|
|
V = lireVille(fe, &nbDep);
|
|
|
|
while(!feof(fe)){
|
|
tiut[i] = (VilleIUT*)malloc(sizeof(VilleIUT));
|
|
if(tiut[i]==NULL){
|
|
printf("Problème de malloc");
|
|
return -3;
|
|
}
|
|
*tiut[i] = V;
|
|
for(j = 0; j < nbDep; j++){
|
|
|
|
m = lireDep(fe);
|
|
tiut[i]->ldept = Insertion(tiut[i]->ldept, m.departement, m.nbP, m.resp, m.AouD);
|
|
}
|
|
V = lireVille(fe, &nbDep);
|
|
i++;
|
|
}
|
|
fclose(fe);
|
|
return i;
|
|
}
|
|
VilleIUT lireVille(FILE *fe, int *nbDep){
|
|
VilleIUT V;
|
|
V.ldept = NULL;
|
|
fscanf(fe,"%s %d", V.ville, nbDep);
|
|
return V;
|
|
}
|
|
|
|
MaillonDept lireDep(FILE *fe){
|
|
MaillonDept m;
|
|
fscanf(fe,"%s %d %s %c", m.departement, &m.nbP, m.resp, &m.AouD);
|
|
return m;
|
|
}
|
|
|
|
ListeD InsertionTete(ListeD ld, char *departement, int nbP,char *resp, char AouD){
|
|
MaillonDept *m;
|
|
m = (MaillonDept*)malloc(sizeof(MaillonDept));
|
|
if(m==NULL){
|
|
printf("Problème malloc m");
|
|
exit(1);}
|
|
strcpy(m->departement, departement);
|
|
m->nbP = nbP;
|
|
strcpy(m->resp, resp);
|
|
m->AouD = AouD;
|
|
m->suivant = ld;
|
|
return m;
|
|
}
|
|
|
|
ListeD Insertion(ListeD ld, char *departement, int nbP,char *resp, char AouD){
|
|
if(ld==NULL)
|
|
return InsertionTete(ld, departement, nbP, resp, AouD);
|
|
if(strcmp(ld->departement, departement)<0)
|
|
return InsertionTete(ld, departement, nbP, resp, AouD);
|
|
ld->suivant = Insertion(ld->suivant, departement, nbP, resp, AouD);
|
|
return ld;
|
|
}
|
|
//affichage Ville+departement..
|
|
void affichage (VilleIUT *tiut[],int n){
|
|
int i;
|
|
for(i=0;i<n;i++){
|
|
printf("\n%s\n", tiut[i]->ville);
|
|
affichageListe(tiut[i]->ldept);
|
|
}
|
|
}
|
|
void affichageListe(ListeD ld){
|
|
while(ld!=NULL){
|
|
printf("%s\t",ld->departement);
|
|
printf("%d\t",ld->nbP);
|
|
printf("%s\t",ld->resp);
|
|
printf("%c\n",ld->AouD);
|
|
ld = ld->suivant;}
|
|
}
|
|
//chargement candidat
|
|
int chargementcandidat(Candidat *tcandidat[],int tmax){
|
|
int i = 0, j=0;
|
|
int nbChoix = 0;
|
|
Candidat C;
|
|
Choix ch;
|
|
FILE *fe1;
|
|
fe1=fopen("Candidat.don","r");
|
|
if(fe1==NULL){
|
|
printf("Problème d'ouverture du fichier Candidat");
|
|
return-1;
|
|
}
|
|
C = lireCandidat(fe1, &nbChoix);
|
|
|
|
while(!feof(fe1)){
|
|
tcandidat[i] = (Candidat*)malloc(sizeof(Candidat));
|
|
if(tcandidat[i]==NULL){
|
|
printf("Problème de malloc");
|
|
return -3;
|
|
}
|
|
*tcandidat[i] = C;
|
|
for(j = 0; j < nbChoix; j++){
|
|
|
|
ch = lireChoix(fe1);
|
|
tcandidat[i]->lchoix = InsertionCandidat(tcandidat[i]->lchoix, ch.ville, ch.departement, ch.decision, ch.validation);
|
|
}
|
|
C = lireCandidat(fe1, &nbChoix);
|
|
i++;
|
|
}
|
|
fclose(fe1);
|
|
return i;
|
|
}
|
|
Candidat lireCandidat(FILE *fe1, int *nbChoix){
|
|
Candidat C;
|
|
C.lchoix = NULL;
|
|
fscanf(fe1,"%d %s %s %f %f %f %d", &C.numero, C.nom, C.prenom, &C.note.Francais, &C.note.Maths, &C.note.Anglais, &C.nb_choix);
|
|
*nbChoix=C.nb_choix;
|
|
return C;
|
|
}
|
|
Choix lireChoix(FILE *fe1){
|
|
Choix ch;
|
|
fscanf(fe1,"%s %s %d %d", ch.ville, ch.departement, &ch.decision, &ch.validation);
|
|
return ch;
|
|
}
|
|
ListeC InsertionTeteCandidat(ListeC ld, char *ville, char *departement, int decision, int validation){
|
|
Choix *ch;
|
|
ch = (Choix*)malloc(sizeof(Choix));
|
|
if(ch==NULL){
|
|
printf("Problème malloc m");
|
|
exit(1);}
|
|
strcpy(ch->ville, ville);
|
|
strcpy(ch->departement, departement);
|
|
ch->decision = decision;
|
|
ch->validation = validation;
|
|
ch->suivant = ld;
|
|
return ch;
|
|
}
|
|
ListeC InsertionCandidat(ListeC ld, char *ville, char *departement, int decision, int validation){
|
|
if(ld==NULL)
|
|
return InsertionTeteCandidat(ld, ville, departement, decision, validation);
|
|
if(strcmp(ld->ville, ville)<0)
|
|
return InsertionTeteCandidat(ld, ville, departement, decision, validation);
|
|
ld->suivant = InsertionCandidat(ld->suivant, ville, departement, decision, validation);
|
|
return ld;
|
|
}
|
|
//affichage Candidat+choix
|
|
void affichageCandidatchoix(Candidat *tcandidat[],int n){
|
|
int i;
|
|
for(i=0;i<n;i++){
|
|
printf("\n%d\t", tcandidat[i]->numero);
|
|
printf("%s ", tcandidat[i]->nom);
|
|
printf("%s\t", tcandidat[i]->prenom);
|
|
printf("%.2f\t", tcandidat[i]->note.Francais);
|
|
printf("%.2f\t", tcandidat[i]->note.Maths);
|
|
printf("%.2f\t", tcandidat[i]->note.Anglais);
|
|
printf("%d\n", tcandidat[i]->nb_choix);
|
|
affichageListeCandidatchoix(tcandidat[i]->lchoix);
|
|
}
|
|
}
|
|
void affichageListeCandidatchoix(ListeC ld){
|
|
while(ld!=NULL){
|
|
printf("%s\t",ld->ville);
|
|
printf("%s\t",ld->departement);
|
|
printf("%d\t",ld->decision);
|
|
printf("%d\n",ld->validation);
|
|
ld = ld->suivant;}
|
|
} |