begin process at 2012 05 28 20:16:06
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

demande d'aide pour un carnt d'adresses avec liste chaînée


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

demande d'aide pour un carnt d'adresses avec liste chaînée

lundi 21 novembre 2005 à 22:16:37 | demande d'aide pour un carnt d'adresses avec liste chaînée

titoune85


bonsoir à tous!

je vous demande un peu de temps et beaucoup d'aide pour ce pg qui consiste a creer un carnet d'adresse classé par ordre alphabetique. J'utilise un fichier de contacts en entree que je dois convertir en liste chaînée simple, modifier, puis ré-enregistrer dans un autre fichier.

Le pb est que je débute en lg C et que j'ai bcp de mal à manipuler ce genre de fonctins malgré les nombreuses indications du site et les très nombreux pgs type "carnet d'adresse" auxquels je ne comprends rien....

j'ai ecris ce code très incomplet (et sans doute très faux aussi) qui ne ient pas compte de ces fichier en entree-sortie... quelqu'un peut-il m'aider à le compléter ?

je vous remercie énormément de votre aide qui me sera très précieuse vu les quelques jours qui me restent pour rendre mon pg !! :(

bonne soirée à tous
#include<stdio.h>
#include<string.h>

typedef struct contact
{
char Nom[20];
char Prenom[20];
char Tel1[20];
char Tel2[20];
char Adresse[70];
struct contact *suivant;
} CONTACT;


CONTACT *liste;

 //la declaration des fonctions

CONTACT *ajouter_en_debut(char *Nouveaunom, char *Nouveauprenom, char *Nouveautel1, char *Nouveautel2, char *Nouveauadresse, CONTACT *liste);
CONTACT *ajouter(void);
 void lister(CONTACT *liste);
 int supprimer(void);
void rechnom(void);
void rechprenom(void);
 void modifier(void));
 


 int main(void)
 
 {
     char b;
 
    
printf("Bienvenue dans votre carnet d'adresses personnalise\n");
    
     do
        {
    
     printf("que souhaitez-vous faire ? Voici le menu :\n");
               printf("\n\n\t\t\t\tmenu:\n");
                printf("\t\t\t\t----\n\n");
                printf("\n '2' : ajout d'un etudiant.\n\n '1' : affichage.\n\n '3' : suppression.\n\n  '4' : recherche d'un contact par son nom.\n\n\ '5' : recherche d'un contact par son prenom.\n\n '6' : modifier un contact.\n\n '7' : quitter.\n\n");
                scanf("%d",&b);
                switch (b)
                    {      
                         case '1': lister(liste);break;
                         case '2': ajouter();break;
                         case '3': supprimer(); ;break;
                         case '4': rechnom();break;
                         case '5': rechprenom();break;
                         case '6': modifier();break;
                         case '7': exit(1);
                    }
        }while (b!='7');
 }
 
 
 
 
 /*Dans le cas particulier où le contact vient se mettre en début de liste chaînée, on doit créer une sous-fonction, ajouter_en_debut,  appelée dans la fonction ajouter*/

CONTACT *ajouter_en_debut(char *Nouveaunom, char *Nouveauprenom, char *Nouveautel1, char *Nouveautel2, char *Nouveauadresse, CONTACT *liste)

{
CONTACT *nouveau;
nouveau = (CONTACT *)malloc(sizeof(CONTACT));
if (nouveau == NULL)
{
            exit(1);
            }
           
nouveau -> suivant = liste;
return(nouveau);
}


 
 
 
CONTACT *ajouter(void)

        {
CONTACT *nouveau, *p, *q;
FILE *f;


     f=fopen("classe.dat","a");
    
     if(f==NULL)
            printf("probleme d'ouverture du fichier, verifiez son existence svp");
     else
      {
         
printf("Veuillez entrer le nom de famille de votre nouveau contact\n");
gets(Nouveaunom);
printf("Veuillez entrer le prenom de votre nouveau contact\n");
gets(Nouveauprenom);
printf("Veuillez entrer son premier numero de telephone\n");
gets(Nouveautel1);
printf("Veuillez entrer son second numero de telephone\n");
gets(Nouveautel2);
printf("Veuillez entrer l'adresse de votre nouveau contact\n");
gets(Nouveauadresse);


                     if ((liste == NULL) || (strcmp(liste -> Nom, Nouveaunom)>0))
                     return(ajouter_en_debut(Nouveaunom, Nouveauprenom, Nouveautel1, Nouveautel2, Nouveauadresse, liste));


                     else
                      {
                      nouveau=(CONTACT *)malloc(sizeof(CONTACT));
                      strcpy(nouveau -> Nom, Nouveaunom);
                      strcpy(nouveau -> Prenom, Nouveauprenom);
                      strcpy(nouveau -> Tel1, Nouveautel1);
                      strcpy(nouveau -> Tel2, Nouveautel2);
                      strcpy(nouveau -> Adresse, Nouveauadresse);

                      p=liste;
                      q=p->suivant;

while ((q!=NULL) && (strcmp(Nouveaunom, q -> Nom)>0))


                                {
                                p = p->suivant;
                                q = q->suivant;

                                        }

 nouveau -> suivant = q;
 p -> suivant = nouveau;
 return(liste);
                                               }


while(CONTACT -> suivant != NULL)
      {
fprintf(f,"%s%s%s%s%s\n", CONTACT->Nom, CONTACT->Prenom, CONTACT->Tel1, CONTACT->Tel2, CONTACT->Adresse) ;
CONTACT->suivant ;
                 }
          
           fclose(f);  
             
                  }
                 
   
                  }


 
 /* fonction de suppression d'un contact*/

 int supprimer(void)


{

CONTACT *u, *p, *q;
p= liste;
char nomasuppr[20], prenomasuppr[20];


FILE *f;
f=fopen("classe.dat","a");

printf("tapez le nom du contact a supprimer\n");
scanf("%s", nomasuppr);
printf("tapez le prenom du contact a supprimer\n");
scanf("%s", prenomasuppr);

if (p==NULL)
{
             printf("desole, la liste est vide\n");
             break;
             }
            
             else
          {
                   
if ((strcmp(p->Nom, nomasuppr)== 0) && (strcmp(p->Prenom, prenomasuppr)== 0))
    {
                   
     u=p;
     p=p->suivant;
     *liste=p;
     free(u);   /*libère la place mémoire qui était allouée pour ce contact*/
     return(1);
    
         }

else
{

q = p->suivant;

while ((q!=NULL) && ((strcmp(nomasuppr, q->Nom)>0) || (strcmp(prenomasuppr, q->Prenom) != 0)))
{
p = p->suivant;
q= q->suivant;
 }

if (q == NULL)
{
printf("desole, ce contact ne figure pas dans votre carnet d'adresses\n");
return(0);
}

else
     if ((strcmp(nomasuppr,q->Nom)==0) && (strcmp(prenomasuppr,q->Prenom)>0))
     {
    
     p->suivant = q->suivant;
     free(q);

     return(1);
      }
                else
                {
                printf("desole, ce contact ne figure pas dans votre carnet d'adresses\n");
                return(0);
                  }


}
                  fclose(f);
                  }
}


/*fonction de recherche d’un contact par son nom de famille*/

void rechnom(void)

{

CONTACT *u, *p, *q;
p= liste;
char nomachercher[20];

FILE *f;


f=fopen("classe.dat","r");

printf("tapez le nom de faille du contact cherche\n");
scanf("%s", nomachercher);

if (strcmp(p->Nom, nomachercher)== 0)  /* test de comparaison des 2 chaînes de caractères*/
{
do
{
printf("%s %s  %s  %s  %s\n", p->Nom, p->Prenom, p->Tel1, p->Tel2, p->Adresse);
p= p->suivant ;
}
while (strcmp(p->Nom,nomachercher)== 0);

/* on prévoit cette boucle dans le cas où plusieurs contacts auraient le même nom de famille */

}
 
else
{
q = p->suivant;
while ((q!=NULL) && (strcmp(nomachercher, q->Nom)>0))
{
p = p->suivant;
q = q->suivant;
 }

if (q == NULL)
{
   printf("desole, ce contact ne figure pas dans votre carnet d'adresses\n");
}

else
 if (strcmp(nomachercher,q->Nom)>0)
        do
        {
        printf(" %s  %s  %s %s %s\n ", p->Nom, p->Prenom, p->Tel1, p->Tel2, p->Adresse);
        p= p->suivant;
         }
         while (strcmp(p->Nom, nomachercher)== 0);

           /* on prévoit cette boucle dans le cas où plusieurs contacts auraient le même nom de famille */

           else
           {
           printf("desole, ce contact ne figure pas dans votre carnet d'adresses\n");
           }

           fclose(f);
}


/*fonction de recherche d’un contact par son prénom*/


void rechprenom(void)

{
CONTACT *u, *p, *q;
p= *liste;
char prenomachercher[20];

FILE *f;
f=fopen("classe.dat","r");


printf("tapez le prenom a rechercher\n");
scanf("%s", prenomachercher);

if (strcmp(p->Prenom, prenomachercher)== 0)
   {
   do
     {
   printf(" %s  %s  %s  %s  %s\n ", p->Nom, p->Prenom, p->Tel1, p->Tel2, p->Adresse);
   p= p->suivant ;
                  }
       while(strmp(p->Prenom, prenomachercher)==0);

         }

         else
         {
         q=p->suivant;
         while ((q!=NULL) && (strcmp(prenomachercher, q->Prenom)!=0))
         {
         p = p->suivant;
         q = q->suivant;
          }

          if (q == NULL)
          {
          printf("desole, ce prenom ne figure pas dans votre carnet d'adresses\n");
          }

           else
 
                if (strcmp(prenomachercher, q->Prenom)>0)
                   {
                 do
                  {
                   printf("%s  %s  %s %s %s\n ", p->Nom, p->Prenom, p->Tel1, p->Tel2, p->Adresse);
                    p = p->suivant;
                      }
                       while (strcmp(p->Prenom, prenomachercher)==0);
                       }

 else
     {
    printf("desole, ce prenom ne figure pas dans votre carnet d'adresses\n");
                    }

                    }
                    fclose(f);
                     } 


/*modification d’un contact déjà enregistré dans le carnet d’adresse*/

void modifier(void)

{

FILE *f;
f=fopen("classe.dat","a");

char nomamodifier[20], prenomamodifier[20], nouveautel1[20], nouveautel2[20], nouveauadresse[70];

printf("tapez le nom de famille du contact a modifier\n");
scanf("%s", nomamodifier);

printf("tapez le prenom du contact a modifier\n");
scanf("%s", prenomamodifier);

CONTACT *u, *p, *q;
p= *liste;


CONTACT A;
CONTACT nouveau;


A=(CONTACT *)malloc(sizeof(CONTACT));

rewind(f);

while ((strcmp(p->Nom, nomamodifier)> 0) && (strcmp(p->Prenom,prenomamodifier)!= 0))
  
         {
         q = p->suivant;
         }


         if (q == NULL)
         {
               printf("desole, ce contact ne figure pas dans votre carnet d'adresses\n");
         }
        
         else
  
         {
            
         if (strcmp(p->Nom, nomamodifier)== 0) && (strcmp(p->Prenom,prenomamodifier)== 0))
        
         printf("%s  %s  %s  %s  %s\n", p->Nom, p->Prenom, p->Tel1, p->Tel2, p->Adresse);

        
         printf("quel est son nouveau numero de tel 1 ? \n");
         gets(nouveautel1);
         strcpy(A->Tel1, nouveautel1);

         printf("quel est son nouveau numero de tel 2 ? \n");
         gets(nouveautel2);
         strcpy(A->Tel2, nouveautel2);

         printf("quelle est sa nouvelle adresse ?\n");
         gets(nouveauadresse);
         strcpy(A->Adresse, nouveauadresse);


           
             /* suppression de l'ancien contact*/


           
          u=q;
          q=q->suivant;
          *liste=q;
          free(u);   /*libère la place mémoire qui était allouée pour ce contact*/


          nouveau=(CONTACT *)malloc(sizeof(CONTACT));
          strcpy(nouveau -> Nom, A->Nom);
          strcpy(nouveau -> Prenom, A->Prenom);
          strcpy(nouveau -> Tel1, A->Tel1);
          strcpy(nouveau -> Tel2, A->Tel2);
          strcpy(nouveau -> Adresse, A->Adresse);
         
         
          rewind(f);
          p=liste;
          q=p->suivant;

while ((q!=NULL) && (strcmp(A->Nom, p -> Nom)>0))


                                {
                                p = p->suivant;
                                q = q->suivant;

                                        }

 nouveau -> suivant = q;
 p -> suivant = nouveau;

fprintf(f,"%s%s%s%s%s\n", CONTACT->Nom, CONTACT->Prenom, CONTACT->Tel1, CONTACT->Tel2, CONTACT->Adresse) ;
nouveau->suivant = q->suivant; 
    
         }

printf("modifications effectuees\n");


                  fclose(f);
}

/*lister l’ensemble des contacts du carnet d’adresses*/

void lister(CONTACT *liste)

{
CONTACT *debut, *t;
char *chaine1, *chaine2;

FILE *f;
f=fopen("classe.dat","r");

printf("voici votre liste de contacts\n");

rewind(f);    /*PAS SUR..................... PAS SUR DU TOUT*/

t = liste;

while (t != NULL)
      {
      chaine1 = fgets(t->Nom, 20, f);
      printf("Nom : %s  ", chaine1);
      chaine2 = fgets(t->Prenom, 20, f);
      printf("Prenom : %s  ", chaine2);
      t = t->suivant;
         }

         fclose(f);

}

et voici une ebauche de fonction de conversion

 /* fonction pour acquerir les donnees du fichier et recreer une liste chainee a parti de ceux-ci*/
 
 CONTACT *acquerir(FILE *f)
 
 {
         int c;
         c = getc(f);
        
         CONTACT *p, *q;
        
         CONTACT nouveau_maillon;
         if (c == EOF)
         {
               printf("le fichier est vide pour l'instant\n");
               liste = NULL;
               return(liste);
               exit(1);
               }
              
               else
               {
                   rewind(f);
                   p=liste;
                   q = p->suivant;
                  
                   while (c != EOF)
                  
                   {
                         nouveau_maillon = (CONTACT *)malloc(sizeof(CONTACT));
                         fgets(nouveau_maillon.Nom, 20, f);
                          fgets(nouveau_maillon.Prenom, 20, f);
                           fgets(nouveau_maillon.Tel1, 20, f);
                            fgets(nouveau_maillon.Tel2, 20, f);
                             fgets(nouveau_maillon.Adresse, 20, f);
                             nouveau_maillon.suivant = q;
                             p->suivant = nouveau_maillon;
                            
                             }
                            
                             return (liste);
                            
                             }
                            



 Programmer, C pas si facile...

mercredi 23 novembre 2005 à 18:22:54 | Re : demande d'aide pour un carnt d'adresses avec liste chaînée

dark_naruto25

peut être devrais tu passer aux jois du C++ et des classes, le code sera déjà une goute plus clair. Ensuite, scinde tes problèmes, parce que balancer le code comme ça c'est pas joli joli, et faudrais passer 20 minutes à tous regarder et comprendre ou serait ton erreur.


Cette discussion est classée dans : liste, printf, prenom, contact, strcmp


Répondre à ce message

Sujets en rapport avec ce message

regardez ma source HELP [ par asnow ] BonjourJe debute en C. j'ai voulu apprendre à enregistrer des données dans un fichier, ca a donné ce code .Si vous pouviez me donner des recommandatio Chaine de caractère ! [ par rems14 ] Bonjour, j'ai fais un petit programme qui ne marche pas. POuvais vous me dire ce qui ne marche pas. Je vous explique, je veux demander le prénom de qu Problem de 'left operand must be a lvalue" [ par Orezza ] Voila je vous mets le code qui est un code trouver sur ce site mais que j'ai modifié. je ne comprends pas les erreurs de compilations pourriez-vous ra Passage par adresse d'un tableau de structures. [ par alekine ] Bonjour, j'ai un problème pour passer par adresse un tableau de structures. Voilà mon code:#include #define L_MAX 2struct point //la structure d'un p Problème Recherche + Helpppppppppppp [ par emmanuel9 ] Bonjour, En faite j'ai une fenêtre destiné à la recherche et on peut recherche une personne sur son nom, prénom, sur la date de création etc.... Ca PB URGENT Langage C [ par mazo0012 ] Bonjour tout le monde voila, j'aimerais savoir comment modifier et supprimer un enregistrement de fichier en langage C, si quelqu'un pouvait m'aider, PB URGENT EN C [ par mazo0012 ] Bonjour tout le monde voila, j'aimerais savoir comment modifier et supprimer un enregistrement de fichier en langage C, si quelqu'un pouvait m'aider, pb modif fichier en c [ par mazo0012 ] Bonjour tout le monde voila, j'aimerais savoir comment modifier et supprimer un enregistrement de fichier en langage C, si quelqu'un pouvait m'aider, Liste chainéés [ par anek971 ] Bonjour a tousEnfaite il y a déà eu un poste sur le site sur ce sujet mais ayant le mm tp a faire je me suis rendu compte ke sa fonction quitter ne ma [c] plantage du program,base 2 donné, surmen un pb de struct [ par Diony ] jvous explique mon probleme . ce programme est une base de données de recettes . et il plante a la fonction inserer_recette_fin_liste (vers le milieu


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,218 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales