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.
227 lines
4.6 KiB
227 lines
4.6 KiB
#include "tp14.h"
|
|
|
|
Mat lireMat(FILE *flot)
|
|
{
|
|
Mat x;
|
|
fscanf(flot, "%s\t%d\t", x.code, &x.coef);
|
|
fgets(x.design, 32, flot);
|
|
x.design[strlen(x.design)-1] = '\0';
|
|
return x;
|
|
}
|
|
|
|
void afficherMat(Mat x)
|
|
{
|
|
printf("%s\t%d\t%s\n", x.code, x.coef, x.design);
|
|
}
|
|
|
|
Liste listenouv(void)
|
|
{
|
|
Liste l = NULL;
|
|
return l;
|
|
}
|
|
|
|
Liste insererEnTete(Liste l, Mat x)
|
|
{
|
|
Maillon *m;
|
|
m = (Maillon *)malloc(sizeof(Maillon));
|
|
if(m == NULL)
|
|
{
|
|
printf("Erreur d'allocation mémoire");
|
|
exit(1);
|
|
}
|
|
strcpy(m->v.code, x.code);
|
|
m->v.coef = x.coef;
|
|
strcpy(m->v.design, x.design);
|
|
m->suiv = l;
|
|
return m;
|
|
}
|
|
|
|
Liste inserer(Liste l, Mat x)
|
|
{
|
|
if(l == NULL)
|
|
return insererEnTete(l, x);
|
|
if(strcmp(l->v.code, x.code) > 0)
|
|
return insererEnTete(l, x);
|
|
if(strcmp(x.code, l->v.code) == 0)
|
|
return l;
|
|
l->suiv = inserer(l->suiv, x);
|
|
return l;
|
|
}
|
|
|
|
Liste supprimerEnTete(Liste l)
|
|
{
|
|
Maillon *aux;
|
|
if(l == NULL)
|
|
{
|
|
printf("Opération interdite !!!\n");
|
|
exit(1);
|
|
}
|
|
aux = l;
|
|
l = l->suiv;
|
|
free(aux);
|
|
return l;
|
|
}
|
|
|
|
Liste supprimer(Liste l, Mat x)
|
|
{
|
|
if(l == NULL)
|
|
return l;
|
|
if(strcmp(l->v.code, x.code) > 0)
|
|
return l;
|
|
if(strcmp(x.code, l->v.code) == 0)
|
|
return supprimerEnTete(l);
|
|
l->suiv = supprimer(l->suiv, x);
|
|
return l;
|
|
}
|
|
|
|
Mat Tete(Liste l)
|
|
{
|
|
if(l == NULL)
|
|
{
|
|
printf("Opération à ne pas faire si la liste est vide !!!\n");
|
|
exit(1);
|
|
}
|
|
return l->v;
|
|
}
|
|
|
|
bool vide(Liste l)
|
|
{
|
|
return l == NULL;
|
|
}
|
|
|
|
void afficher(Liste l)
|
|
{
|
|
printf("\n");
|
|
while(! vide(l))
|
|
{
|
|
afficherMat(Tete(l));
|
|
l = l->suiv;
|
|
}
|
|
printf("\n");
|
|
}
|
|
|
|
bool rechercher(Liste l, Mat x)
|
|
{
|
|
if(vide(l))
|
|
return false;
|
|
if(strcmp(l->v.code, x.code) > 0)
|
|
return false;
|
|
if(strcmp(x.code,l->v.code) == 0)
|
|
return true;
|
|
return rechercher(l->suiv, x);
|
|
}
|
|
|
|
int longueur(Liste l)
|
|
{
|
|
int cpt = 0;
|
|
while(! vide(l))
|
|
{
|
|
cpt++;
|
|
l = l->suiv;
|
|
}
|
|
return cpt;
|
|
}
|
|
|
|
Liste charger(char *nomFichier)
|
|
{
|
|
FILE *flot;
|
|
Mat x;
|
|
Liste l = listenouv();
|
|
flot = fopen(nomFichier, "r");
|
|
if(flot == NULL)
|
|
{
|
|
printf("Erreur d'ouverture du fichier !!!\n");
|
|
exit(1);
|
|
}
|
|
x = lireMat(flot);
|
|
while(!feof(flot))
|
|
{
|
|
l = inserer(l, x);
|
|
x = lireMat(flot);
|
|
}
|
|
fclose(flot);
|
|
return l;
|
|
}
|
|
|
|
void sauv(Liste l, char *nomFichier)
|
|
{
|
|
FILE *flot;
|
|
flot = fopen(nomFichier, "w");
|
|
if(flot == NULL)
|
|
{
|
|
printf("Erreur d'ouverture du fichier !!!\n");
|
|
exit(1);
|
|
}
|
|
while(! vide(l))
|
|
{
|
|
fprintf(flot, "%s\t%d\t%s\n", l->v.code, l->v.coef, l->v.design);
|
|
l = l->suiv;
|
|
}
|
|
fclose(flot);
|
|
}
|
|
|
|
int menu(void)
|
|
{
|
|
int choix;
|
|
printf("1. Inserer un élément dans la liste\n");
|
|
printf("2. Supprimer un élément de la liste\n");
|
|
printf("3. Afficher la liste\n");
|
|
printf("4. Rechercher un élément dans la liste\n");
|
|
printf("5. Afficher la longueur de la liste\n");
|
|
printf("6. Quitter\n");
|
|
printf("Votre choix : ");
|
|
scanf("%d", &choix);
|
|
return choix;
|
|
}
|
|
|
|
void global(void)
|
|
{
|
|
Liste l;
|
|
Mat x;
|
|
char code[6], design[32];
|
|
int choix, coef;
|
|
char nomFichier[32];
|
|
|
|
l = charger("matieres.don");
|
|
choix = menu();
|
|
while (choix != 6)
|
|
{
|
|
if(choix == 1)
|
|
{
|
|
printf("\nEntrer le code de la matière : ");
|
|
scanf("%s", &code);
|
|
printf("Entrer le coefficient de la matière : ");
|
|
scanf("%d", &coef);
|
|
printf("Entrer la désignation de la matière : ");
|
|
scanf("%s", &design);
|
|
printf("\n");
|
|
strcpy(x.code, code);
|
|
x.coef = coef;
|
|
strcpy(x.design, design);
|
|
l = inserer(l, x);
|
|
}
|
|
if(choix == 2)
|
|
{
|
|
printf("\nEntrer le code de la matière à supprimer : ");
|
|
scanf("%s", &code);
|
|
strcpy(x.code, code);
|
|
l = supprimer(l, x);
|
|
}
|
|
if(choix == 3)
|
|
afficher(l);
|
|
if(choix == 4)
|
|
{
|
|
printf("\nEntrer le code de la matière à rechercher : ");
|
|
scanf("%s", &code);
|
|
strcpy(x.code, code);
|
|
if(rechercher(l, x) == true)
|
|
printf("La matière est dans la liste\n\n");
|
|
else
|
|
printf("La matière n'est pas dans la liste\n\n");
|
|
}
|
|
if(choix == 5)
|
|
printf("\nLa longueur de la liste est : %d\n\n", longueur(l));
|
|
choix = menu();
|
|
}
|
|
sauv(l, "matieres.txt");
|
|
} |