mise aux normes, début et4

master
Louis GERMAIN 1 year ago
commit 555c6f5aee

@ -1,10 +1,10 @@
Plomberie
Pros De Leau
Plomberie
Pros De Leau
12, Av. la république 63000 Clermont-Ferrand
500000
35
25000
Electricité
Electricite
Electro Maître
50, zone industrielle sud 15000 Aurillac
450000
@ -22,12 +22,12 @@ comusolisme
70000
10
10000
Structure
Structure
Eiffage Construction Auvergne
300000
40
20000
Peinture
Peinture
Pingeon et Fils
52, Boulevard Lafayette 63000 Clermont-Ferrand
5000
@ -42,9 +42,9 @@ Léon Grosse
Murs
illiCO travaux
37, bis Avenue Marx Dormoy 63000 Clermont-Ferrand
Finitions
Finitions
SGP finition
4, Rue de Chignat 63000 Clermont-Ferrand
100
10
5000
5000

@ -4,14 +4,16 @@
// Chargements
char *readAdress(FILE *flot);
Devis loadDevis(Offre *tabTravaux[]);
Offre *initTabTravaux(void);
Offre *loadOffre(void);
Devis loadDevis(FILE *devisFile, Offre tabTravaux[]);
Tache **loadTaches(Offre *tabTravaux[]);
Precedence *loadPrec(int *tmax, int *tlog);
// Recherches et tri
int rechTravaux(char *travauxName, 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);
@ -21,8 +23,8 @@ void triFusionListeDevis(ListeDevis *ldevis, int tlog);
// Foncctions 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);

@ -5,5 +5,5 @@
#include "charge.h"
#define tmaxTravaux 8
#define TMAXTRAV 8

@ -1,6 +1,9 @@
// on ne nous a pas donner de longueur pour la chaine de char de nomE
// il faudrait utiliser la meme methode que pour adresse
typedef struct
{
char nomE[32];
char *nomE;
char *adresse;
int capital;
int duree;
@ -43,4 +46,10 @@ typedef struct
{
char travauxPrec[30];
char travauxSucc[30];
} Precedence;
} Precedence;
typedef struct fileAtt
{
Tache *tac; //Demander si on peut pointeur -> moins lourd
struct fileAtt *nxt;
} ListeAttente;

@ -2,61 +2,110 @@
/*---------------devis---------------*/
// Chargement de l'adresse depuis un fichier
char *readAdress(FILE *flot)
// Chargement d'une chaine de caracteres depuis un fichier
char *readFromFile(FILE *file)
{
char *adresse, *s, aux[5];
int i=0, tmax=5;
adresse = (char *)malloc(sizeof(char)*tmax);
fgets(adresse, 5, flot);
char *str;
char *buf;
int len = 0;
int size = 5;
int add = 5;
while (adresse[i]!='\n')
{
if (i==tmax - 1)
{
tmax+=5;
s = (char *)realloc(adresse, tmax*sizeof(char));
if (s==NULL)
{
printf("\033[0;31mErreur: \033[0mreallocation pour str adresse\n");
exit(1);
}
adresse=s;
fgets(aux, 5, flot);
strcat(adresse, aux);
}
i++;
}
adresse[strlen(adresse)-1]='\0';
return adresse;
str = malloc(size);
if (!str)
exit(1);
while (str[len] != '\n')
{
len = strlen(str);
if (len >= size - 1)
{
size += add;
buf = realloc(str, size);
if (!buf)
{
free(str);
exit(1);
}
str = buf;
}
fgets(str + len, size - len, file);
len = strlen(str) - 1;
}
str[len] = '\0';
return (str);
}
// Chargement d'un devis depuis un fichier
Devis loadDevis(Offre *tabTravaux[])
Devis loadDevis(FILE *devisFile, Offre *tabTravaux)
{
Devis d;
FILE *devisFile;
devisFile=fopen("files/devis.txt","r");
if (devisFile == NULL)
{
printf("\033[0;31mErreur: \033[0mOuverture de devis.txt\n");
exit(1);
}
char travaux[16];
int index;
fscanf(devisFile, "%s", travaux);
index = rechTravaux(travaux, tabTravaux);
if (index==-1)
{
printf("\033[0;31mErreur: \033[0mCes travaux ne sont pas prévus !\n");
exit(1);
}
fgets(d.nomE, 32, devisFile);
d.nomE[strlen(d.nomE)-1] = '\0';
d.adresse = readAdress(devisFile);
fscanf(devisFile, "%d\n%d\n%d", &d.capital, &d.duree, &d.prix);
fclose(devisFile);
return d;
int index;
char *travaux;
Devis d;
MaillonDevis *nouveauMaillon;
travaux = readFromFile(devisFile);
index = rechTravaux(travaux, tabTravaux);
if (index == -1)
exit(1);
nouveauMaillon = (MaillonDevis *)malloc(sizeof(MaillonDevis));
if (!nouveauMaillon)
{
printf("\033[0;31mErreur: \033[0mallocation mémoire pour nouveauMaillon\n");
exit(1);
}
d.nomE = readFromFile(devisFile);
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);
}
// l'initialisation est temporaire, je ne savais pas comment tu voulais la faire -> à partir du file
// initialisation des travaux
Offre *initTabTravaux(void)
{
Offre *tabTravaux;
tabTravaux = (Offre *)malloc(TMAXTRAV * sizeof(Offre));
if (!tabTravaux)
{
printf("\033[0;31mErreur: \033[0mmalloc tableau tabTravaux\n");
exit(1);
}
// Initialisation de chaque élément du tableau
tabTravaux[0] = newOffre("Electricite");
tabTravaux[1] = newOffre("Finitions");
tabTravaux[2] = newOffre("Fondation");
tabTravaux[3] = newOffre("Murs");
tabTravaux[4] = newOffre("Peinture");
tabTravaux[5] = newOffre("Plomberie");
tabTravaux[6] = newOffre("Sols");
tabTravaux[7] = newOffre("Structure");
return (tabTravaux);
}
// Chagement des ofrres depuis le fichier devis.txt
Offre *loadOffre(void)
{
Offre *tabTravaux = initTabTravaux();
FILE *devisFile;
devisFile = fopen("files/devis.txt", "r");
if (!devisFile)
exit(1);
while (!feof(devisFile))
loadDevis(devisFile, tabTravaux);
return (tabTravaux);
}
@ -72,7 +121,7 @@ Tache **loadTaches(Offre *tabTravaux[])
printf("\033[0;31mErreur: \033[0mmalloc tableau tache\n");
exit(1);
}
for (i=0; i<tmaxTravaux; i++)
for (i=0; i<TMAXTRAV; i++)
{
t=(Tache *)malloc(sizeof(Tache));
if (t==NULL)
@ -104,7 +153,7 @@ Precedence *loadPrec(int *tmax, int *tlog)
{
FILE *prec;
Precedence *tabP, *s;
prec=fopen("files/précédence.txt", "r");
prec=fopen("../files/précédence.txt", "r");
if (prec == NULL)
{
printf("\033[0;31mErreur: \033[0mouverture de 'précédence.txt'\n");
@ -129,4 +178,4 @@ Precedence *loadPrec(int *tmax, int *tlog)
}
fclose(prec);
return tabP;
}
}

@ -1,22 +1,16 @@
#include "../includes/main.h"
int main(void)
int main()
{
Offre offre1 = {"Travaux1", NULL};
offre1.ldevis = (ListeDevis)malloc(sizeof(struct maillonDevis));
offre1.ldevis->dev = (Devis){"Devis6", "Adresse1", 100, 5, 50};
offre1.ldevis->suiv = (ListeDevis)malloc(sizeof(struct maillonDevis));
offre1.ldevis->suiv->dev = (Devis){"Devis3", "Adresse3", 80, 3, 150};
offre1.ldevis->suiv->suiv = (ListeDevis)malloc(sizeof(struct maillonDevis));
offre1.ldevis->suiv->suiv->dev = (Devis){"Devis8", "Adresse2", 120, 7, 10};
offre1.ldevis->suiv->suiv->suiv = (ListeDevis)malloc(sizeof(struct maillonDevis));
offre1.ldevis->suiv->suiv->suiv->dev = (Devis){"Devis5", "Adresse5", 90, 4, 60};
offre1.ldevis->suiv->suiv->suiv->suiv = (ListeDevis)malloc(sizeof(struct maillonDevis));
offre1.ldevis->suiv->suiv->suiv->suiv->dev = (Devis){"Devis2", "Adresse2", 110, 6, 15};
offre1.ldevis->suiv->suiv->suiv->suiv->suiv = NULL;
Offre *tabTravaux;
printf("Avant le tri : \n");
displayOffre(&offre1);
tabTravaux = loadOffre();
return (0);
for (int i = 0; i < TMAXTRAV; i++)
{
displayOffre(&tabTravaux[i]);
printf("\n");
}
return 0;
}

@ -1,19 +1,22 @@
#include "../includes/main.h"
/*-------------recherches-------------*/
// 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=tmaxTravaux-1, mid;
int deb=0, end=TMAXTRAV-1, mid;
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;
@ -27,7 +30,7 @@ void minTravaux(Offre *tabTravaux[])
{
int i;
ListeDevis l, minl;
for (i=0; i<tmaxTravaux; i++)
for (i=0; i<TMAXTRAV; i++)
{
l=tabTravaux[i]->ldevis;
minl=l;

@ -8,12 +8,6 @@ ListeDevis newListeDevis(void)
return NULL;
}
// Initialise une liste de travaux
Liste newListe(void)
{
return NULL;
}
// Initialise une nouvelle offre
Offre newOffre(char *travauxName)
{
@ -23,6 +17,12 @@ Offre newOffre(char *travauxName)
return o;
}
// Initialise une liste (pour les successeurs)
Liste newListe(void)
{
return NULL;
}
/*------------verifications------------*/
// Verifie l'integrite d'une liste de devis
@ -39,7 +39,7 @@ Booleen emptyOffre(Offre *o)
/*-------------insertions---------------*/
// Insere un devis dans la liste de devis
// Insere un devis en tete de la liste des devis
ListeDevis insert(ListeDevis l, Devis d)
{
MaillonDevis *md;
@ -54,7 +54,8 @@ ListeDevis insert(ListeDevis l, Devis d)
return md;
}
// Insere une liste dans le tableau de travaux
// Insere en queue de liste (les successeurs)
Liste insertSucc(Liste l, char travaux[])
{
MaillonSucc *ms;
@ -149,3 +150,6 @@ void displayListeDevis(ListeDevis l)
l=l->suiv;
}
}
// Partie 4 (à trier)

@ -1,5 +1,6 @@
#include "../includes/main.h"
//test tri fusion
int main(void)
{

Loading…
Cancel
Save