19 Jan2017
Sauvegarde et lecture d'un tableau d'articles dans un fichier binaire
Objectifs:
- Manipuler les structures de données en langage C,
- Manipuler les tableaux dynamiques,
- Manipuler les fichiers binaires.
Énoncé:
- Créer la structure article définie comme suit :
Champ Type nom Chaine prix Réel - Créer une fonction add permettant d'ajouter n article dans un tableau a passé en paramètre :
void add(Article * a, int n);
- Créer une fonction affiche permettant d'afficher les articles stockés dans le tableau a dans la console :
void affiche (Article * a, int n);
- Créer une fonction save permettant d'enregistrer les articles stockés dans la table a dans un fichier binaire passé en paramètre :
void save (Article * a, int n, char * fichier);
- Créer une fonction read permettant de lire les articles stockés dans le fichier précédant, ensuite, afficher les données de chaque article dans la console :
void read (char * fichier);
- Créer un programme pour tester les différentes fonctions.
Exemple d’exécution :
Donner le nombre des articles :
4
Donner le nom:
Article 1
Donner le prix
100
Donner le nom:
Article 2
Donner le prix
300
Donner le nom:
Article 3
Donner le prix
120
Donner le nom:
Article 4
Donner le prix
200
La liste des articles :
Article 1 : 100.000000
Article 2 : 300.000000
Article 3 : 120.000000
Article 4 : 200.000000
Donnez le nom de fichier :
article.out
La liste des articles stockés dans le fichier : article.out
Article 1 : 100.000000
Article 2 : 300.000000
Article 3 : 120.000000
Article 4 : 200.000000
- La structure Article :
#include <stdio.h> #include <stdlib.h> typedef struct { char nom [25]; float prix; } Article;
- La fonction add :
void add(Article * a, int n){ int i; for(i = 0; i < n; i++){ getchar(); puts("Donner le nom: "); gets((a + i)->nom); puts("Donner le prix"); scanf("%f", & (a + i)->prix); } }
- La fonction affiche :
void affiche(Article * a, int n){ int i; for(i = 0; i < n; i++){ printf("\t%s : %f\n", (a + i)->nom, (a + i)->prix); } }
- La fonction save :
void save (Article * a, int n, char * fichier){ FILE * out; out = fopen(fichier, "wb"); fwrite(a, sizeof(Article), n, out); fclose(out); }
- La fonction read :
void read (char * fichier){ FILE * out; Article *aa = (Article *) malloc(sizeof(Article)); out = fopen(fichier, "rb"); while (fread(aa, sizeof(Article), 1, out) == 1){ printf("\t%s : %f\n", aa->nom, aa->prix); } free(aa); fclose(out); }
- Le programme de Test :
main(){ int n; char * fichier = (char * )calloc(sizeof(char), 25); Article * a = (Article *)malloc(n * sizeof(Article)); puts("Donner le nombre des articles : "); scanf("%d", &n); add(a, n); puts("La liste des articles : "); affiche(a, n); puts("Donnez le nom de fichier : "); getchar(); gets(fichier); save(a, 4, fichier); printf("La liste des articles stockés dans le fichier : %s\n", fichier); read(fichier); free(a); }