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.

224 lines
5.1 KiB

#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include"part4.h"
Filechx initchx (void){// initialise une file choix a NULL
Filechx f;
f.kechx = NULL;
f.ttchx = NULL;
return f;
}
Filecand initcand (void){// initialise une file candidat a NULL
Filecand f;
f.kecand = NULL;
f.ttcand = NULL;
return f;
}
int testVideCand (Filecand f){// fonction test si la Filecand est vide return 1 sinon 0
if (f.ttcand == NULL) return 1;
return 0;
}
int testVideChx (Filechx f){// fonction test si la Filechx est vide return 1 sinon 0
if (f.ttchx == NULL) return 1;
return 0;
}
Candidat lireCa(FILE *fe)// lit un candidat dans un fichier
{
Candidat c;//candidat que l'on retournera
Choix chx;//pour la création de maillons
int cpt = 0;//qui servira à compter le nombre de choix
fscanf(fe,"%d", c.nEtu);
fgets(c.nom, 23, fe);
c.nom[strlen(c.nom)-1]= '\0';
fgets(c.prenom, 23, fe);
c.prenom[strlen(c.prenom)-1]= '\0';
fscanf(fe, "%f %f %f %f %d%*c", c.moymat, c.moyfr, c.moyen, c.moyspe, c.nbchx);
c.lchx = init();//initialisation de la liste
return c;
}
// FAIRE LECTURE CHOIX POUR METTRE EN PARAMETRE PLUTOT QUE LE FE
Filechx enfilechx ( Filechx f , File *fe){//fonction enfile un maillon choix en fin de file Choix
Maillonchx *mch;
int nbchoix, i, nbcand, numCand;
char nom[30], prenom[30];
float nmat, nfr, nen, nspe, nDoss;
mch = (Maillonchx*) malloc ( sizeof (Maillonchx));
if ( mch == NULL ){
printf("Probleme malloc");
return -1;
}
fscanf ( fe , "%d %d %s %s %f %f %f %f %f %d", &nbcand, &numCand, nom, prenom, &nmat, &nfr, &nen, &nspe, &nDoss, &nbchoix );
for ( i = 0 ; i < nbchoix ; i++ ){
fscanf( fe, "%s %s %d %d", mch->chx.ville, mch->chx.dptmt, mch->chx.dec, mch->chx.valid);
if ( testVideChx (f)){
f.ttchx = mch;
f.kechx = mch;
}
else{
f.kechx->suivchx = mch;
f.kechx = mch
}
}
return f;
}
// FAIRE LECTURE CANDIDAT POUR METTRE EN PARALLELE
Filecand enfilecand (Filecand f, FILE *fe){// fonction enfile un maillon cand en fin de file Candidat
Mailloncand *mc;
int nbchoix, i nbcand;
mc = (Mailloncand*) malloc (sizeof (Mailloncand));
if ( mc == NULL ){
printf("probleme malloc");
return -1;
}
mc->cand = lireCa (fe);
//fscanf(fe, "%d %d %s %s %f %f %f %f %f %d",&nbcand, &mc->cand.nEtu, mc->cand.nom, mc->cand.prenom, &mc->cand.moymat, &mc->cand.moyfr, &mc->cand.moyen, &mc->cand.moyspe, &mc->cand.noteDoss, &nbchoix);
mc->suivcand = NULL;
if ( testVideCand (f)){
f.ttcand = mc;
f.kecand = mc;
}
else{
f.kecand->suivant = mc;
f.kecand = mc;
}
return f;
}
int chargement (void){// chargement des files cand et chx
}
Choix lireC(FILE *fe)//fonction extraite de la partie 2
{
Choix c;
fscanf(fe, "%s%*c", c.ville);
fgets(c.dptmt, 26, fe);
c.dptmt[strlen(c.dptmt)-1]= '\0';
fscanf(fe, "%d %d%*c", &c.dec, &c.valid);
return c;
}
Listechx InsertTC(Listechx list, Choix m)//Insert en tête de la liste
{
Maillonchx *mchx;
mchx = (Maillonchx*)malloc(sizeof(Maillonchx));
if (mchx == NULL){printf("pb malloc"); exit(-1);}
mchx->chx = m;
mchx->suivchx = list;
return mchx;
}
Listechx InsertC(Listechx list, Choix m)//insert globalement dans liste de choix
{
if (list == NULL){return InsertTC(list, m);}
if (strcmp(list->chx.dptmt, m.dptmt)>0){return InsertTC(list, m);}
list->suivchx = InsertC(list->suivchx, m);
return list;
}
Listecand InsertT(Listecand list, Candidat c)//Insert en tête de la liste
{
Mailloncand *c1;
c1 = (Mailloncand*)malloc(sizeof(Mailloncand));
if (c1 == NULL){printf("pb malloc"); exit;}
c1->cand.nEtu = c.nEtu;
strcpy(c1->cand.nom, c.nom);
strcpy(c1->cand.prenom, c.prenom);
c1->cand.moymat = c.moymat;
c1->cand.moyfr = c.moyfr;
c1->cand.moyen = c.moyen;
c1->cand.moyspe = c.moyspe;
c1->cand.noteDoss = c.noteDoss;
c1->cand.nbchx = c.nbchx;
c1->cand.lchx = c.lchx;
c1->suivcand = list;
return c1;
}
Listecand Insert(Listecand list, Candidat c)//insert globalement
{
if (list == NULL){return InsertT(list, c);}
if (strcmp(list->cand.nom, c.nom)>0){return InsertT(list, c);}
list->suivcand = Insert(list->suivcand, c);
return list;
}
Listecand InsertN(Listecand list, Candidat c)//insert globalement en fonction de la note
{
if (list == NULL){return InsertT(list, c);}
if (list->cand.noteDoss <=+ c.noteDoss){return InsertT(list, c);}
list->suivcand = InsertN(list->suivcand, c);
return list;
}
Listecand Chargementlistecandidat(FILE *fe, Listecand lC, int *nbC)// fonction de chargement de la liste des candidats
{
int cpt, j;
fscanf(fe, "%d", nbC);
for (j = 1; j <= *nbC; j++)
{
Candidat Ca;
fscanf(fe, "%d %s%*c", &Ca.nEtu, Ca.nom);
fgets(Ca.prenom, 26, fe);
Ca.prenom[strlen(Ca.prenom)-1]= '\0';
fscanf(fe,"%f %f %f %f %f %d%*c", &Ca.moymat, &Ca.moyfr, &Ca.moyen, &Ca.moyspe, &Ca.noteDoss, &Ca.nbchx);
Ca.lchx=NULL;
for (cpt = Ca.nbchx; cpt >= 1; cpt--)
{
Choix c;
c = lireC(fe);//lire le maillon avec la fonction plus haut
Ca.lchx = InsertC(Ca.lchx, c);//insert le maillon à sa bonne place
}
lC = Insert(lC, Ca);
}
return lC;
}
void test (void){
FILE *fe;
fe = fopen( "part4.don", "r");
if ( fe == NULL ){
printf(" probleme d'ouverture de fichier");
return -1;
}
}