20 Jan2017
Sauvegarde et lecture d'un tableau d'étudiants dans un fichier texte
Objectifs:
- Manipuler les structures de données en langage C,
- Manipuler les tableaux dynamiques,
- Manipuler les fichiers texte.
Énoncé:
- Créer la structure étudiant définie comme suit :
Champ Type nom Chaine prénom Chaine age Entier - Créer une fonction remplir permettant d'ajouter n article dans un tableau a passé en paramètre :
void remplir(Etudiant * e, int n);
- Créer une fonction affiche permettant d'afficher les étudiants stockés dans le tableau e dans la console :
void affiche (Etudiant * e, int n);
- Créer une fonction save permettant d'enregistrer les étudiants stockés dans la table e dans un fichier texte passé en paramètre :
void save (Etudiant * e, int n, char * fichier);
- Créer une fonction load permettant de lire les étudiants stockés dans le fichier précédant, ensuite, afficher les informations de chaque étudiant dans la console :
Etudiant * load (char * fichier);
- Créer un programme pour tester les différentes fonctions.
Exemple d’exécution :Donner le nombre des etudiants :
2
Donner le nom : SAFI
Donner le prenom : Amal
Donner l'age : 33
Donner le nom : ALAOUI
Donner le prenom : Ali
Donner l'age : 39
La liste des etudiants :
SAFI : Amal : 33
ALAOUI : Ali : 39
Donner le chemin & nom de fichier :
D:/etudiant.out
Liste a partir de fichier :
SAFI : Amal : 33
ALAOUI : Ali : 39
- La structure Étudiant :
#include <stdio.h> #include <stdlib.h> int taille = 0; struct Etudiant { char nom [50]; char prenom [50]; int age; };
- La fonction remplir :
void remplir(Etudiant *e, int n){ int i; for(i = 0; i < n; i ++){ printf("Donner le nom : "); getchar(); gets((e + i)->nom); // gets(e[i].nom); printf("Donner le prenom : "); gets((e + i)->prenom); printf("Donner l'age : "); scanf("%d",&(e + i)->age); } }
- La fonction affiche :
void affiche(Etudiant *e, int n){ int i; for(i = 0; i < n; i ++){ printf("%s : %s : %d\n", (e + i)->nom, (e + i)->prenom, (e +i)->age); } }
- La fonction save :
void save(Etudiant *e, int n, char * fichier){ int i; FILE * out = fopen(fichier, "w"); for(i = 0; i < n; i ++){ fprintf(out,"%s : %s : %d\n", (e + i)->nom, (e + i)->prenom, (e +i)->age); } fclose(out); }
- La fonction load :
Etudiant * load (char * fichier){ Etudiant * e = (Etudiant *)malloc(sizeof(Etudiant)); FILE * in = fopen(fichier, "r"); while(fscanf(in, "%s : %s : %d", &e[taille].nom, &e[taille].prenom, &e[taille].age) == 3){ taille++; realloc(e, taille + 1); } return e; }
- Le programme de Test :
main(){ int n; Etudiant *etds = NULL; char * fichier = (char *)malloc(100* sizeof(char)); puts("Donner le nombre des etudiants : "); scanf("%d", &n); etds = (Etudiant *) malloc(n * sizeof(Etudiant)); remplir(etds, n); puts("La liste des etudiants : "); affiche(etds, n); puts("Donner le chemin & nom de fichier :"); getchar(); gets(fichier); save(etds, n, fichier); free(etds); puts("Liste a partir de fichier : "); Etudiant * e = load(fichier); for(int i = 0; i < taille; i++) printf("%s : %s : %d\n", (e + i)->nom, (e + i)->prenom, (e + i)->age); }