Gestion d'erreurs

master
Louis GERMAIN 2 years ago
parent 86da6f1e12
commit 9c3688163d

BIN
SAE2

Binary file not shown.

@ -24,6 +24,7 @@ comusolisme
10000
Structure
Eiffage Construction Auvergne
12, avenue Joseph Girod 63000 Clermont-Ferrand
300000
40
20000
@ -89,4 +90,4 @@ RéussiteFinale
18, Rue de la Réussite 63300 Thiers
120000
25
15000
1500

@ -4,39 +4,39 @@
// Chargements
char *readAdress(FILE *flot);
Offre *initTabTravaux(void);
Offre *loadOffre(void);
Devis loadDevis(FILE *devisFile, Offre tabTravaux[]);
Tache **loadTaches(Offre *tabTravaux[]);
Offre **initTabTravaux(void);
Offre **loadOffre(void);
void loadDevis(FILE *devisFile, Offre **tabTravaux);
Tache **loadTaches(Offre **tabTravaux);
Precedence *loadPrec(int *tmax, int *tlog);
// Recherches et tri
int rechTravaux(char *travauxName, Offre tabTravaux[]);
void minTravaux(Offre *tabTravaux[]);
int rechTravaux(char *travauxName, Offre **tabTravaux);
void minTravaux(Offre **tabTravaux);
void freeListeDevis(ListeDevis *ldevis);
void fusionDevisElements(ListeDevis *R, int *tlogR, ListeDevis *S, int *tlogS, ListeDevis *mergedList, ListeDevis *last, int *k);
void gestionElementsRestants(ListeDevis *mergedList, ListeDevis *last, ListeDevis *source, int *tlogSource, int *k);
void fusionMaillonDevis(ListeDevis R, int tlogR, ListeDevis S, int tlogS, ListeDevis *T);
void triFusionListeDevis(ListeDevis *ldevis, int tlog);
void triFusionListeDevis(ListeDevis ldevis, int tlog);
// Fonctions de base
int lenListeDevis(ListeDevis l);
int nombrePred(char travaux[], Precedence prec[], int tlog);
int lenListeDevis(ListeDevis l);
int nombrePred(char travaux[], Precedence prec[], int tlog);
void displayDevis(Devis d);
void displayOffre(Offre *o);
void displayListeDevis(ListeDevis l);
Offre newOffre(char *travauxName);
Offre *newOffre(char *travauxName);
Booleen emptyListe(ListeDevis l);
Booleen emptyOffre(Offre *o);
Liste newListe(void);
Liste insertSucc(Liste l, char travaux[]);
Liste lstSucc(char travaux[], Precedence prec[], int tlog);
ListeDevis delete(ListeDevis l);
ListeDevis del(ListeDevis l);
ListeDevis insert(ListeDevis l, Devis d);
ListeDevis newListeDevis(void);
int longueurMaxNomEntreprise(ListeDevis ldevis);
void afficherDevisEntreprise(Offre *tabTravaux);
int longueurMaxNomEntreprise(ListeDevis ldevis);
void afficherDevisEntreprise(Offre **tabTravaux);

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

@ -3,11 +3,11 @@
// l'initialisation est temporaire, je ne savais pas comment tu voulais la faire
// initialisation des travaux
Offre *initTabTravaux(void)
Offre **initTabTravaux(void)
{
Offre *tabTravaux;
Offre **tabTravaux;
tabTravaux = (Offre *)malloc(TMAXTRAV* sizeof(Offre));
tabTravaux = (Offre **)malloc(TMAXTRAV* sizeof(Offre *));
if (!tabTravaux)
{
printf("\033[0;31mErreur: \033[0mmalloc tableau tabTravaux\n");
@ -24,7 +24,7 @@ Offre *initTabTravaux(void)
tabTravaux[6] = newOffre("Sols");
tabTravaux[7] = newOffre("Structure");
return (tabTravaux);
return tabTravaux;
}
/*---------------devis---------------*/
@ -32,39 +32,38 @@ Offre *initTabTravaux(void)
// Chargement d'une chaine de caracteres depuis un fichier
char *readFromFile(FILE *file)
{
char *str;
char *buf;
int len = 0;
int size = 5;
int add = 5;
str = malloc(size);
if (!str)
char *str, *buf, s[6];
int i=0, tmax = 5;
str = (char *)malloc(tmax*sizeof(char));
if (str == NULL)
{
printf("\033[0;31mErreur: \033[0mmalloc readFromFile");
exit(1);
while (str[len] != '\n')
}
fgets(str, tmax, file);
while(str[strlen(str)-1]!='\n')
{
len = strlen(str);
if (len >= size - 1)
if (i==tmax)
{
size += add;
buf = realloc(str, size);
if (!buf)
tmax+=5;
buf=realloc(str, tmax*sizeof(char));
if (buf==NULL)
{
printf("\033[0;31mErreur: \033[0mrealloc readFromFile");
free(str);
exit(1);
}
str = buf;
fgets(s, 5, file);
strcat(str, s);
}
fgets(str + len, size - len, file);
len = strlen(str) - 1;
printf("%s\n",str);
i++;
}
str[len] = '\0';
return (str);
return str;
}
// Chargement d'un devis depuis un fichier
Devis loadDevis(FILE *devisFile, Offre *tabTravaux)
void loadDevis(FILE *devisFile, Offre **tabTravaux)
{
int index;
char *travaux;
@ -86,20 +85,18 @@ Devis loadDevis(FILE *devisFile, Offre *tabTravaux)
d.adresse = readFromFile(devisFile);
fscanf(devisFile, "%d\n%d\n%d%*c", &d.capital, &d.duree, &d.prix);
nouveauMaillon->dev = d;
tabTravaux[index].ldevis = insert(tabTravaux[index].ldevis, d);
return (d);
tabTravaux[index]->ldevis = insert(tabTravaux[index]->ldevis, d);
}
// Chagement des ofrres depuis le fichier devis.txt
Offre *loadOffre(void)
Offre **loadOffre(void)
{
Offre *tabTravaux = initTabTravaux();
Offre **tabTravaux = initTabTravaux();
FILE *devisFile;
devisFile = fopen("files/devis.txt", "r");
if (!devisFile)
if (!devisFile) //ERREUR
exit(1);
while (!feof(devisFile))

@ -2,18 +2,16 @@
int main()
{
Offre *tabTravaux;
Offre **tabTravaux;
tabTravaux = loadOffre();
for (int i = 0; i < TMAXTRAV; i++)
{
triFusionListeDevis(&tabTravaux[i].ldevis, lenListeDevis(tabTravaux[i].ldevis));
displayOffre(&tabTravaux[i]);
displayOffre(tabTravaux[i]);
printf("\n");
}
afficherDevisEntreprise(tabTravaux);
minTravaux(tabTravaux);
return 0;
}

@ -4,7 +4,7 @@
// Recherche d'une offre dans le tableau de travaux
// Retourne l'indice de l'offre dans le tableau si elle est trouvée, sinon retourne -1
int rechTravaux(char *travauxName, Offre *tabTravaux)
int rechTravaux(char *travauxName, Offre **tabTravaux)
{
//On utilise la taille max de travaux car travaux est un tableau constant, sa taille max est égale à sa taille logique.
int deb=0, end=TMAXTRAV-1, mid;
@ -12,9 +12,9 @@ int rechTravaux(char *travauxName, Offre *tabTravaux)
while(deb<=end)
{
mid = (deb+end) /2;
if (strcmp(travauxName, tabTravaux[mid].travaux)==0)
if (strcmp(travauxName, tabTravaux[mid]->travaux)==0)
return mid;
if (strcmp(travauxName, tabTravaux[mid].travaux) < 0)
if (strcmp(travauxName, tabTravaux[mid]->travaux) < 0)
end=mid-1;
else
deb=mid+1;
@ -29,27 +29,42 @@ int rechTravaux(char *travauxName, Offre *tabTravaux)
void minTravaux(Offre *tabTravaux[])
{
int i;
ListeDevis l, minl;
for (i=0; i<TMAXTRAV; i++)
MaillonDevis *minDev, *md, *s;
for(i=0; i<TMAXTRAV; i++)
{
l=tabTravaux[i]->ldevis;
minl=l;
while(l)
md = tabTravaux[i]->ldevis;
minDev=md;
while(minDev->suiv != NULL)
{
if(l->dev.prix < minl->dev.prix)
if ((md->dev).prix < (minDev->dev).prix)
{
l=delete(minl);
minl=l;
s=minDev;
minDev=md;
}
else
l=delete(l);
l=l->suiv;
else if ((md->dev).prix > (minDev->dev).prix)
s=md;
else
{
if ((md->dev).capital < (minDev->dev).capital)
{
s=minDev;
minDev=md;
}
else // On met else et pas else if car on ne peut pas garder 2 égaux, il faut qd même en supprimer un
s=md;
}
displayOffre(tabTravaux[i]);
md=md->suiv;
del(s);
printf("HELLO3\n");
}
displayOffre(tabTravaux[i]);
}
}
/*---------------tri------------------*/
//on la met dans struct.c ?
@ -141,13 +156,13 @@ void fusionMaillonDevis(ListeDevis R, int tlogR, ListeDevis S, int tlogS, ListeD
}
// Tri fusion sur une liste de devis
void triFusionListeDevis(ListeDevis *ldevis, int tlog)
void triFusionListeDevis(ListeDevis ldevis, int tlog)
{
ListeDevis p;
ListeDevis q;
ListeDevis qTemp;
p = *ldevis;
p = ldevis;
q = p->suiv;
if (tlog <= 1)
return;
@ -159,8 +174,8 @@ void triFusionListeDevis(ListeDevis *ldevis, int tlog)
qTemp = p->suiv;
p->suiv = NULL;
triFusionListeDevis(ldevis, tlog / 2);
triFusionListeDevis(&qTemp, tlog - tlog / 2);
triFusionListeDevis(qTemp, tlog - tlog / 2);
ListeDevis mergedList = NULL;
fusionMaillonDevis(*ldevis, tlog / 2, qTemp, tlog - tlog / 2, &mergedList);
*ldevis = mergedList;
fusionMaillonDevis(ldevis, tlog / 2, qTemp, tlog - tlog / 2, &mergedList);
ldevis = mergedList;
}

@ -9,11 +9,12 @@ ListeDevis newListeDevis(void)
}
// Initialise une nouvelle offre
Offre newOffre(char *travauxName)
Offre *newOffre(char *travauxName)
{
Offre o;
strcpy(o.travaux, travauxName);
o.ldevis=newListeDevis();
Offre *o;
o = (Offre *)malloc(sizeof(Offre));
strcpy(o->travaux, travauxName);
o->ldevis=newListeDevis();
return o;
}
@ -74,7 +75,7 @@ Liste insertSucc(Liste l, char travaux[])
/*------------suppressions-------------*/
// Supprime le premier maillon de la liste de devis
ListeDevis delete(ListeDevis l)
ListeDevis del(ListeDevis l)
{
MaillonDevis *md;
if (l==NULL)
@ -85,8 +86,12 @@ ListeDevis delete(ListeDevis l)
if (l->suiv==NULL)
return newListeDevis();
md=l;
printf("HELLO\n");
l=l->suiv;
free(md->dev.nomE);
free(md->dev.adresse);
free(md);
printf("HELLO2\n");
return l;
}
@ -170,7 +175,7 @@ void displayListeDevis(ListeDevis l)
}
// Fonction pour afficher le devis d'une entreprise donnée pour un type de travaux donné
void afficherDevisEntreprise(Offre *tabTravaux)
void afficherDevisEntreprise(Offre **tabTravaux)
{
int indiceTravaux;
int maxlen;
@ -189,12 +194,12 @@ void afficherDevisEntreprise(Offre *tabTravaux)
return;
}
maxlen = lenMaxNomEntreprise(tabTravaux[indiceTravaux].ldevis);
maxlen = lenMaxNomEntreprise(tabTravaux[indiceTravaux]->ldevis);
nomEntreprise = malloc((maxlen + 1) * sizeof(char));
printf("Saisir le nom de l'entreprise : ");
fgets(nomEntreprise, maxlen + 1, stdin);
ListeDevis listeDevis = tabTravaux[indiceTravaux].ldevis;
ListeDevis listeDevis = tabTravaux[indiceTravaux]->ldevis;
while (listeDevis)
{
if (strcmp(listeDevis->dev.nomE, nomEntreprise) == 0)

Loading…
Cancel
Save