le chargement fonctionne parfaitement (Ps : dsl j'ai fais pas mal de modif dans tes codes)

master
parent cf39c18e84
commit fe6f16b07d

@ -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);

@ -2,13 +2,13 @@
/*---------------devis---------------*/
// Chargement d'un devis depuis un fichier
// Chargement d'une chaine de caracteres depuis un fichier
char *readFromFile(FILE *file)
{
char *str;
char *str;
char *buf;
int len = 0;
int size = 5;
int size = 5;
int add = 5;
str = malloc(size);
@ -18,7 +18,7 @@ char *readFromFile(FILE *file)
while (str[len] != '\n')
{
len = strlen(str);
if (len >= size - 1)
if (len >= size - 1)
{
size += add;
buf = realloc(str, size);
@ -33,34 +33,81 @@ char *readFromFile(FILE *file)
len = strlen(str) - 1;
}
str[len] = '\0';
return (str);
return str;
}
Devis loadDevis(Offre *tabTravaux[])
// Chargement d'un devis depuis un fichier
Devis loadDevis(FILE *devisFile, Offre *tabTravaux)
{
char *travaux;
int index;
char *travaux;
int index;
MaillonDevis *nouveauMaillon;
Devis d;
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
// initialisation des travaux
Offre *initTabTravaux(void)
{
Offre *tabTravaux = (Offre *)malloc(tmaxTravaux * 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;
}
// pk feof n'arrete pas le programme en fin de document
// 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);
travaux = readFromFile(devisFile);
index = rechTravaux(travaux, tabTravaux);
if (index == -1)
exit (1);
d.nomE = readFromFile(devisFile);
d.adresse = readFromFile(devisFile);
fscanf(devisFile, "%d\n%d\n%d", &d.capital, &d.duree, &d.prix);
fclose(devisFile);
return d;
while (!feof(devisFile))
loadDevis(devisFile, tabTravaux);
return tabTravaux;
}
// Chargement des tâches depuis un fichier pour chaque offre
Tache **loadTaches(Offre *tabTravaux[])
{

@ -1,28 +1,16 @@
#include "../includes/main.h"
int main()
{
Offre *tabTravaux;
// on doit absolument a voir les bons travaux et les ranger
// sinon la recherche par dichotomie avec une valeur precise est fausse
tabTravaux = loadOffre();
int main() {
Devis devis;
Offre offre1 = newOffre("Electricite");
Offre offre2 = newOffre("Finitions");
Offre offre3 = newOffre("Fondation");
Offre offre4 = newOffre("Murs");
Offre offre5 = newOffre("Peinture");
Offre offre6 = newOffre("Plomberie");
Offre offre7 = newOffre("Sols");
Offre offre8 = newOffre("Structure");
Offre* tabTravaux[tmaxTravaux] = {&offre1, &offre2, &offre3, &offre4, &offre5, &offre6, &offre7, &offre8};
devis = loadDevis(tabTravaux);
printf("Devis chargé avec succès :\n");
displayDevis(devis);
for (int i = 0; i < tmaxTravaux; i++)
{
displayOffre(&tabTravaux[i]);
printf("\n");
}
return 0;
}
}

@ -4,16 +4,17 @@
// 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;
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;

Loading…
Cancel
Save