Répertoire téléphonique en c++

Résolu
zaoudi Messages postés 3 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 13 septembre 2010 - 24 mai 2009 à 14:01
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 - 4 juin 2009 à 13:17
salut les amis  !!! j'ai besoin de votre aide mon probleme c'est que j'ai un projet à rendre d'ici  5 jours , j'ai essayé de le réaliser mais je trouve beaucoup difficulté à le réaliser un bon terme , alors ce que je vous demande  faire une structure pour contenir le numéro, nom, prénom, adresse, tout ce dont  besoin,ensuite tout cela doit être enregistrer dans un fichier (qui doit être mis a jour a chaque exécution) puis main avec une switch et puis faire des fonction assez simple : afficher(void ...), ajouter(struct ...), supprimer(struct ...), rechercher(struct ...), 
 merci d'avance
PS : sujet Gestion d'un répertoire téléphonique en C

3 réponses

zaoudi Messages postés 3 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 13 septembre 2010
29 mai 2009 à 20:02
Merçi pour votre  conseils
 ,  mais  le  seule  perobelm que j'ai  commnet enregistrer  tout la  liste dans un fichier de tyep .TXT  .   voila  mon perogram Svp je veux que vous  me corriger .

#include<stdio.h>
#include<string.h>
#include<windows.h>


#define TAILLE_NOM 50
#define TAILLE_PRENOM 20
#define TAILLE_TEL 50
#define TAILLE_EMAIL 50
#define TAILLE_ADRESSE 50
 



void menu()
{    
    
     system("cls");
     puts("                         ---------------------------------- ");
     puts("                                  ***** MeNU *****            ");
     puts("                         ---------------------------------- ");
    
     puts("  Tape => 1 <= Ajouter une personne\n             ");
     puts("  Tape => 2 <= pour Modifier une personne\n        ");
     puts("  Tape => 3 <= Supprimer une personne\n            ");
     puts(" Tape => 4 <= Chercher une personne\n          ");
     puts("  Tape => 5 <= Afficher le rpertoire complet\n ");
     puts("  Tape => 6 <= Vider la base données\n            -- ");
     puts("  Tape => 0 <= Quitter l'application\n             ");
 

void creer (FILE *fichier , char Name[25])






     puts("Nome du fechier a creer");fflush(stdin);
     gets(Name);fflush(stdin);
     fichier=fopen(Name,"w+");
          fclose(fichier);
     }
       // la liset 
struct cellule {





  char nom[TAILLE_NOM];
  char prenom[TAILLE_PRENOM];
  char telephone[TAILLE_TEL];
  char couriel[TAILLE_EMAIL];
  char adresse[TAILLE_ADRESSE];
  struct cellule *next;
};
// fonction de  ajoute  la liste  dans  fichier.txt
Personne Ajoute_personne(Personne L)
{     FILE* fichier= NULL;





  Personne Nouveau;
   char name[25];
  
 
       Nouveau=(Personne)malloc(sizeof(  Personne));
 
  fichier = fopen( "agenda.txt" , "a+" );  //?????????
   puts("Saisir le nom, SVP");fflush(stdin);
   gets(Nouveau -> nom);
    puts("Saisir le prenom");fflush(stdin);
   gets(Nouveau -> prenom);
    puts("Saisir le telephone ");fflush(stdin);
   gets(Nouveau -> telephone);
    puts("Saisir le couriel");fflush(stdin);
   gets(Nouveau -> couriel);
   puts("Saisir le adresse");fflush(stdin);
   gets(Nouveau -> adresse);





   printf("Le nom de fichier ou vouez ajouter ");
     gets(name);
      name = strcat(name,".txt"); 
     fichier = fopen( "agenda" , "a+" );
       if ( fichier== NULL)
       { puts (" ce fichier n'existe pas ");
        system("pause");
        }
        Nouveau->next=L;
        L=Nouveau;
      
   fwrite(Nouveau, sizeof(Nouveau),1,fichier);    //  ???????
  
   fclose(fichier);
   return L;
}

#reponsemsg
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
4 juin 2009 à 13:17
Bon voyons ça...

Il y a un effort certain sur l'indentation, mais c'est pas parfait.
Il faut que ce soit parfait, c'est très important pour la lisibilité du code.

Personne ne code en français.
Commente en français, affiche du texte français, mais code en anglais.

Il y a aussi du texte moche un peu partout...
liset
MeNU
Nome
fechier
rpertoire
...

Sans oublier des espaces des plus curieux à des endroits...
Essaie de faire plus attention !

Tu n'utilises que des fonctions standard C.
Donc c'est dommage de faire une include de windows.h...
Bon reste "cls" et "pause" qui sont spécifiques Windows.
Vu qu'ils apportent on peut s'en passer.

Quand tu postes un bout de code, essaie de mettre tout ce qu'il faut.
Ici, "Personne" n'est pas défini.

Bon après c'est un peu n'importe quoi :
1) Le menu n'appelle pas creer.
2) La fonction créer prend en argument un fichier et un nom, et demande à l'utilisateur un nom.
3) La fonction créer ouver un fichier et le referme.
4) Ajoute_personne demande un nom de fichier, puis décide de l'appeler "agenda".
...

Je ne vois pas te conseiller à part de faire preuve de rigueur.
Coder c'est pas juste mettre des instruction à la suite des autres et espérer que ça fonctionne.
Faut savoir ce qu'on veut faire, et simplement rédiger le code qui le fait.

N'essaie pas de faire deux trucs à la fois !
Soit tu fais une vraie liste chaînée, soit tu sauvegarde dans un fichier.
Mais si l'un n'est pas terminé, ne commence pas l'autre.

Et revoie globalement ton architecture.
Tu veux sauvegarder les personnes une par une dans un fichier ou la liste chaînée tout entière ?
Si tu sauvegarde une par une, tu vas avoir du boulot pour la suppression.

Tu fais un malloc... Mais pas de free. Fuite de mémoire.
Ensuite, si ce n'est que pour l'écrire dans le fichier, tu n'as pas besoin d'un malloc.
Tu peux simplement utiliser directement la structure au lieux d'un pointeur sur celle-ci.
Mais pour la suite, si tu as une liste chaînée il te faudra effectivement des pointeurs.

Tu fais un fwrite de sizeof(Nouveau).
Nouveau est une Personne.
Donc une cellule*.
Donc un pointeur.
Donc il t'écrit 4 octets, pas du tout la taille d'une cellule.

Un petit memset à zéro de la structure fera un fichier plus jolie.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define TAILLE_NOM 50
#define TAILLE_PRENOM 20
#define TAILLE_TEL 50
#define TAILLE_EMAIL 50
#define TAILLE_ADRESSE 50
 
typedef struct _Personne
{
  char nom[TAILLE_NOM];
  char prenom[TAILLE_PRENOM];
  char telephone[TAILLE_TEL];
  char couriel[TAILLE_EMAIL];
  char adresse[TAILLE_ADRESSE];
  struct _Personne *next;
}
Personne;

void Ajoute_personne()
{
  FILE* fichier= NULL;
  Personne Nouveau;
  char name[25];
 
  memset(&Nouveau, 0, sizeof(Nouveau));

  puts("Saisir le nom, SVP");fflush(stdin);
  gets(Nouveau.nom);
  puts("Saisir le prenom");fflush(stdin);
  gets(Nouveau.prenom);
  puts("Saisir le telephone ");fflush(stdin);
  gets(Nouveau.telephone);
  puts("Saisir le couriel");fflush(stdin);
  gets(Nouveau.couriel);
  puts("Saisir l'adresse");fflush(stdin);
  gets(Nouveau.adresse);

  printf("Le nom de fichier ou vous voulez ajouter");
  gets(name);
  strcat(name, ".txt");
  fichier = fopen(name, "a+");
  if (fichier == NULL)
  {
    puts ("Echec de l'ouverture du fichier");
  }
  fwrite(&Nouveau, sizeof(Nouveau), 1, fichier);
 
  fclose(fichier);
}

void menu()
{
  char reponse[255];
  char quitte;

  quitte = 0;
  while (! quitte)
  {
    puts("            ----------------------------------  ");
    puts("                   ***** MENU *****             ");
    puts("            ----------------------------------  ");  
    puts("  Tape => 1 <= Ajouter une personne\n           ");
    puts("  Tape => 2 <= Modifier une personne\n          ");
    puts("  Tape => 3 <= Supprimer une personne\n         ");
    puts("  Tape => 4 <= Chercher une personne\n          ");
    puts("  Tape => 5 <= Afficher le repertoire complet\n ");
    puts("  Tape => 6 <= Vider la base donnees\n          ");
    puts("  Tape => 0 <= Quitter l'application\n          ");

    gets(reponse);

    /* Un seul caractère tapé ? */
    if (! reponse[1])
    switch (reponse[0])
    {
      case '1':
        Ajoute_personne();
        break;
      case '0':
        quitte = 1;
        break;
      default:
        puts("Choix invalide");
    }
  }
}

int main()
{
  menu();
  return 0;
}
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
24 mai 2009 à 19:39
Bienvenue,

Il n'y a rien de compliqué dans ce que l'on te demande.
De plus, des codes similaires (Saisie dans la console, sauvegarde de structures dans des fichiers...), c'est très souvent demandé comme exo donc il doit y avoir pas mal de sources sur le sujet.

Attention cependant :
"Gestion d'un répertoire téléphonique en C"

Le C et le C++, ce n'est pas pareil. Le C++ est globalement un sur-ensemble du C. Sa syntaxe englobe celle du C, et il peut en plus faire de l'orienté objet, de la surcharge d'opérateurs, des templates...

Pour tes structures :

typedef struct _CONTACT
{
  char name[20];
  ...
} CONTACT;

Pour le dialogue utilisateur dans la console, scanf, printf, pour écrire dans un fichier fopen, fwrite, fclose... Ces fonctions sont documentées ici.

On ne va pas faire l'exo à ta place ! Donc met toi au boulot et bon courage.
Si tu le fais toi même, d'une part tu auras appris les bases de la programmation, ce qui peut t'aider par la suite, d'autre part tu abordera les partiels avec sérénité.
-1
Rejoignez-nous