Fichier

didy_gwatinik Messages postés 358 Statut Membre -  
 Utilisateur anonyme -
Bonjour,
J'ai un projet à faire en C et je bloque totalement, depuis une bonne semaine. Je dois aire un carnet d'adresse avec différentes options : lire le carnet, créer une fiche contact, consulter une fiche contact, modifier une fiche les coordonnées du contact suivant le nom entré par l'utilisateur. Donc pour les coordonnées j'ai commencé par déclarer une stucture pour entrer le nom, le prenom, le numero de telephone et l'adresse mail. Mais comment faire pour utiliser cette structure dans le fichier, je suis complétement larguée franchement! Si quelqu'un pouvait me donner une piste ca m'aiderait beaucoup!
A voir également:

5 réponses

Utilisateur anonyme
 
Bonjour,

Le point de départ est plutôt bon, à savoir la création d'une structure qui devrait ressembler à qqe chose comme ca :

typedef struct MaStructure {
char* nom;
char* prenom;
char* num_tel;
char* mail;
} Contact;

Maintenant je pense qu'il faut que tu définisses une fonction pour chaque cas, à savoir :

char* saisirNom() --> permet de laisser l'utilisateur saisir le nom d'un Contact
char* saisirPrenom() --> permet de laisser l'utilisateur saisir le prénom d'un Contact
char* saisirMail() --> permet de laisser l'utilisateur saisir le mail d'un Contact
char* saisirTel() --> permet de laisser l'utilisateur saisir le numéro de téléphone d'un Contact

Contact* ajouterContact(Contact* tab, int *taille) --> permet d'ajouter un Contact à ton tableau

void afficherContacts(Contact* tab, int taille) --> permet d'afficher la liste de tes contacts

void rechercherContact(char *nom, Contact* tab, int taille) --> permet de rechercher un Contact par son prénom dans ta liste

Contact* modifierContact(char *nom, Contact* tab, int taille) --> permet de modifier les informations d'un Contact

Si tu n'arrives pas avec les informations que je t'ai données, je t'aiderai dans la réalisation du code en lui même mais je préfère pas tout te donner pour que tu apprennes ;-)

Bon courage et n'hésites pas à re-poster si tu ne comprends pas ;-)
0
didy_gwatinik Messages postés 358 Statut Membre 80
 
Merci pour toutes ces infos. Je n'arrive pas à partir de ajouterContact. Pour la structure, il faut déclarer un tableau de structure?Voila ce que j'ai fait pour l'instant :
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//Déclaration de la structure carnet
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 struct carnet
          {
                 char nom[20];
                 char prenom[20];
                 char numtel[11];
                 char mel[50];
          }contact;    

//++++++++++++++++++++++++++++++++
//Fonction saisie contact
//++++++++++++++++++++++++++++++++
void saisieContact (FILE * fichier)
{
     fichier=fopen("c:\\carnet.txt","a+");//a+ car le pointeur est situé a la fin
     puts("Creation fiche :\n Veuillez entrer les differentes informations concernant votre contact : \nNom : ");                                             
     fflush(stdin);//vide la memoire tampon
     gets(contact.nom);
     fprintf(fichier,contact.nom);
     fprintf(fichier,"\n");
     puts("Prenom : ");
     gets(contact.prenom);
     fprintf(fichier,contact.prenom);
     fprintf(fichier,"\n");
     do{
     puts("Numero de telephone : ");
     gets(contact.numtel);
     }while(strlen(contact.numtel)!=10 && contact.numtel);
     fprintf(fichier,contact.numtel);
     fprintf(fichier,"\n");
     puts("Adresse e mail : ");
     gets(contact.mel);
     fprintf(fichier,contact.mel);
     fprintf(fichier,"\n");
     printf("Les coordonnees de %s %s ont ete enregistrees.\n", contact.prenom,contact.nom);
     system("pause");
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++
//Menu
//++++++++++++++++++++++++++++++++++++++++++++++++++++++
void menu (void)
{
     int choix;
puts("Bienvenue dans votre carnet d'adresse\n");
          system("pause");
          do{
          system("cls");
          puts("Que voulez vous faire?\n\n\t1 : Creer une fiche contact\n\t2 : Consulter une fiche\n\t3 : Ajouter et mettre a jour une fiche\n\t4 : Modifier une fiche\n\t5 : Supprimer une fiche\n\t6 : Supprimer votre carnet d'adresse\n\t7 : Afficher le nombre de vos contacts\n\t8 : Crypter un fichier\n\t9 : Decrypter un fichier\n\t10 : Quitter");
          scanf("%d",& choix);//tester si nombre ou lettre
          system("cls");
          switch (choix)
          {
                 case 1 : 
                      {
                          saisieContact(fichier);
                      }
                      break;
                 case 2 : 
                      {
                      }
                      break;
                 case 3 :
                      {
                      }
                      break;
                 case 4 :
                      {
                      }
                      break;
                 case 5 :
                      {
                      }
                      break;
                 case 6 :
                      {
                      }
                      break;
                 case 7 :
                      {
                      }
                      break;
                 case 8 :
                      {
                      }
                      break;
                 case 9 :
                      {
                      }
                      break;
                 case 10 :
                      {
                      }
                      break;
                 default : ;
                 }
          }while (choix!=10);
}


          


main(void)
{
          FILE *fichier = NULL; // initialisation du pointeur
          menu();
          getch();
          return 0;
         
}
0
Utilisateur anonyme
 
Je ne vois pas pourquoi tu utilises la sauvegarde dans un fichier des informations. Je serai toi j'enregistrerai les infos dans un tableau et je rajouterai 2 méthodes de lecture/sauvegarde en choix dans ton menu.

Ceci te permettrai d'utiliser ta fonction saisieContact lors de l'ajout. J'aurai bien vu un truc dans le genre :
void saisieContact(contact* c){
    /*Ajouter tes propres lignes d'invite pour l'utilisateur*/
    gets(c->nom);
    gets(c->prenom); 
    gets(c->numtel);  
    gets(c->mel);
}

contact* ajouterContact(contact* tab, int *taille){
    contact p;
    saisieContact(&p);
    tab = (contact*)realloc((taille+1) * sizeof(contact));
    tab[taille++] = p;
    return tab;
}

dans ton main :
contact * tab;
int taille;

taille = 0;
tab=NULL;

Dans ton switch : 
tab = ajouterContact(tab, taille);

0
didy_gwatinik
 
L'utilisation de fichiers fait partie de la consigne de l'exercice. C'est pour ca que je bloque en fait, c'est pour récupérer les informations , les modifier...
0
Utilisateur anonyme
 
Il faudrait voir ton énoncé exact mais perso je chargerai le fichier au départ dans ton main en créant un tableau avec les infos contenues dans ton fichier. Tu laisses l'utilisateur faire toutes les modifs qu'il veut (Toi tu travailles sur le tableau et non pas le fichier) et au moment où l'utilisateur quitte l'application tu sauvegardes dans le fichier ton tableau.
0
didy_gwatinik Messages postés 358 Statut Membre 80
 
ok j'opte pour cette option mais comment pourrais-je faire une fois que je réouvre le programme pour replacer ce qu'il y a dans le fichier dans les variables?
0
Utilisateur anonyme > didy_gwatinik Messages postés 358 Statut Membre
 
A toi de définir un format de sauvegarde dans ton fichier. Tu pourrais par exemple séparer les différents champs par des "," et le saut de ligne pour différencier chaque contact.

Fais toi 2 méthodes :

Une qui chargera ton fichier
Une qui enregistrera ton tableau
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
didy_gwatinik
 
ah oui je n'avais pas penser à cette méthode, ca me parait beaucoup plus simple!
0