Repertoire telephonique en langage C
noussa
-
tatou_38 Messages postés 1937 Date d'inscription Statut Membre Dernière intervention -
tatou_38 Messages postés 1937 Date d'inscription Statut Membre Dernière intervention -
Bonjour,voila j'ai un probleme en langage C pour créer une repertoire telephonique ,j'ai essayé avec ce code mais il ne retourne pas.
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include <string.h>
#define T 10
#define N 40
//declaration des structures
struct date
{
char jour[2];
char mois [T+1];
char annee [4];
};
struct adresse
{
char rue[N+1];
char cod_postal [4];
char ville [N+1];
};
struct personne
{
char nom [N+1];
char tel [T+1];
struct adresse adress;
struct date dat_naiss;
char mail [N+1];
char cod_depart [T+1];
};
//on va imbriquer une structure dans l'autre et ajouter un pointeur vers la fiche suivante
struct fiche
{
struct personne p;
struct fiche *p_suivant;
};
int comp(char *s, char *t)
{
int i;
int cmpt=0;
for(i=0;i<N+1;i++)
{
if((s[i]==t[i])||((s[i]<0)&&(t[i]<0)))
cmpt++;
}
if (cmpt==N+1)
return(1);
else return(0);
}
//voici la fonction qui va efecter le tri alphab‚tique
void trier (struct fiche **pp_liste)
{
int i=0,j,k,h=0,fin=0;
//on declare des ptrs vers des structures de type fiche
struct fiche *ptr,*tmp;
//et un tableau de pointeur sur lequel on va effectuer le tri
struct fiche *tab[100];
//ptr sera egal a *pp_liste cad l adresse de la premiere structure de la pile
// ptr= *pp_liste;
tab[0]= *pp_liste;
//on remplit le tableau avec toutes les strucures
while ((*tab[i]).p_suivant!=0)
{
tab[i+1]=(*tab[i]).p_suivant;
i++;
}
for(j=0;j<i;j++)
{
for(k=j+1;k<=i;k++)
{
fin=0;
h=0;
while(fin==0){
if((*tab[j]).p.nom[h]>(*tab[k]).p.nom[h])
{
tmp=tab[j];
tab[k]=tab[j];
tab[k]=tmp;
fin=1;
}else{
if((*tab[j]).p.nom[h]==(*tab[k]).p.nom[h])
{
//tri par rapport a la valeur du departement
if((*tab[j]).p.cod_depart[h]>(*tab[k]).p.cod_depart[h])
tmp=tab[j];
tab[j]=tab[k];
tab[k]=tmp;
fin=1;
}else{
if((*tab[j]).p.cod_depart[h]==(*tab[k]).p.cod_depart[h])
{
//tri par rapport au tel
if((*tab[j]).p.tel[h]>(*tab[k]).p.tel[h])
tmp=tab[j];
tab[j]=tab[k];
tab[k]=tmp;
fin=1;
// } else
h++;
}else{
fin=1;
}
}
}
h++;
}
}
}
//on modifie le chainage avec les pointeurs tries
for(k=0;k<i;k++)
{
(*tab[k]).p_suivant=tab[k+1];
}
(*tab[k]).p_suivant=NULL;
*pp_liste=tab[0];
printf("\n repertoire trie.....\n");
}
//fction servant a enlever une personne du repertoire
void retirer (struct fiche **pp_liste)
{ char tel [T+1];
char cod_depart[T+1];
char nom[N+1];
struct fiche *ptr,*ptr2;
int fin=0;
int r;
//on initialise ptr avec l'adresse de la 1ere structure
ptr=*pp_liste;
printf("\n entrer le nom de la personne a retirer: ");
scanf("%s",nom);
// if(nom!=" ")
{
r=comp(nom,(*ptr).p.nom);
if(r==1) fin=1;
//on va maintenant cherché si la personne est présente dans l'agenda
while(fin==0){
if((*ptr).p_suivant==NULL)
{
fin=1;
r=comp(nom,(*ptr).p.nom);
}else{
r=comp(nom,(*ptr).p_suivant->p.nom);
if (r==1)
fin=1;
else
//on passe à la structure suivante...
ptr=(*ptr).p_suivant;
}
}
if(r==1)
{
r=comp(nom,(*ptr).p.nom);
if(r==1)
{
ptr2=(*ptr).p_suivant;
free(ptr);
*pp_liste=ptr2;
}else{
//on relie la fiche précedente à la suivante
//pour conserver un chaînage cohérent
ptr2=(*ptr).p_suivant->p_suivant;
//on libère la mémoire...
free((*ptr).p_suivant);
(*ptr).p_suivant=ptr2;
}
printf("\nEntree supprimee...\n");
}else{
printf("\nAucune entree correspondante...\n");
}
}
/* if(nom!=" ")
{
if(r==1) fin=1;
//on va chercher si la personne est presente dans le repertoire
while(fin==0){
if((*ptr).p_suivant==NULL)
{
fin=1;
r=comp(nom,(*ptr).p.nom);
}else{
r=comp(nom,(*ptr).p_suivant->p.nom);
if(r==1)
fin=1;
else
//on passe a la structure suivante
ptr=(*ptr).p_suivant;
}
}
if(r==1)
{
r=comp(nom,(*ptr).p.nom);
if(r==1)
{
ptr2=(*ptr).p_suivant;
free(ptr);
*pp_liste=ptr2;
}else{
//on relie la fiche precedente a la suivante
ptr2=(*ptr).p_suivant->p_suivant;
//onlibere la memoire
free((*ptr).p_suivant);
(*ptr).p_suivant=ptr2;
*/
printf("\nentrer le tel de la personne a retirer");
scanf("%s",tel);
r=comp(tel,(*ptr).p.tel);
{
if(r==1) fin=1;
//on va chercher si la personne est presente dans le repertoire
while(fin==0){
if((*ptr).p_suivant==NULL)
{
fin=1;
r=comp(tel,(*ptr).p.tel);
}else{
r=comp(tel,(*ptr).p_suivant->p.tel);
if(r==1)
fin=1;
else
//on passe a la structure suivante
ptr=(*ptr).p_suivant;
}
}
if(r==1)
{
r=comp(tel,(*ptr).p.tel);
if(r==1)
{
ptr2=(*ptr).p_suivant;
free(ptr);
*pp_liste=ptr2;
}else{
//on relie la fiche precedente a la suivante
ptr2=(*ptr).p_suivant->p_suivant;
//onlibere la memoire
free((*ptr).p_suivant);
(*ptr).p_suivant=ptr2;
}
printf("\n entree suprimee...... \n");
}else{
printf("\naucune entree correspondante.... \n");
}
}
}
//ajouter un contacte
void ajouter (struct fiche **pp_liste)
{
char nom [N+1];
char tel [T+1];
char rue[N+1],cod_postal[4],ville[N+1];
char jour[2],mois[2],annee[4];
struct date dat_naiss;
struct adresse adress;
char mail [N+1];
char cod_depart [T+1];
int fin=0;
int r;
//ce pointeur designera la nouvelle fiche
struct fiche *p_nouv;
struct fiche *ptr;
fin=0;
printf("\n entrer le nom de la personne: ");
scanf("%s",nom);
printf("\n entrer son numero de telephone: ");
scanf("%s",tel);
printf("\n entrer son adresse: \n rue: ");
scanf("%s",adress.rue);
printf("\n code postal: ");
scanf("%s",adress.cod_postal);
printf("\n ville: ");
scanf("%s",adress.ville);
printf("\n entrer sa date de naissanse: \njour/mois/annee: ");
scanf("%s/%s/%s",dat_naiss.jour,dat_naiss.mois,dat_naiss.annee);
printf("\n entrer son email: ");
scanf("%s",mail);
printf("\n entrer son code de departement: ");
scanf("%s",cod_depart);
//initialisation
ptr=*pp_liste;
//on cherche si la personne n'est pas deja dans le repertoire
while (fin==0)
{
if(ptr==NULL) fin=1;
else {
r=comp(nom,(*ptr).p.nom);
if(r==1) fin=1;
else {
if ((*ptr).p_suivant==0) fin=1;
ptr=(*ptr).p_suivant;
}
}
}
if(r==1)
{
printf("\n entree deja presente \n");
}
else{
//on alloue de la memoire pour une nouvelle fiche
p_nouv=new(struct fiche);
//on relie cette vouvelle fiche a la suivante et on change *pp_liste qui doit rester au sommet
(*p_nouv).p_suivant=*pp_liste;
*pp_liste=p_nouv;
strcpy((*p_nouv).p.nom,nom);
strcpy((*p_nouv).p.tel,tel);
strcpy((*p_nouv).p.adress.rue,rue);
strcpy((*p_nouv).p.adress.cod_postal,cod_postal);
strcpy((*p_nouv).p.adress.ville,ville);
strcpy((*p_nouv).p.dat_naiss.jour,jour);
strcpy((*p_nouv).p.dat_naiss.mois,mois);
strcpy((*p_nouv).p.dat_naiss.annee,annee);
strcpy((*p_nouv).p.cod_depart,cod_depart);
}
}
void afficher (struct fiche *p_liste)
{
int fin=0;
char nom [N+1];
char tel [T+1];
char rue[N+1],cod_postal[4],ville[N+1];
char jour[2],mois[2],annee[4];
struct date dat_naiss;
struct adresse adress;
char mail [N+1];
char cod_depart [T+1];
struct fiche *ptr;
// printf("\n " );
ptr=p_liste;
if(p_liste==NULL)
{printf("aucune entree.....\n");
fin=1;
}
while (fin==0)
{ // {printf("%s\t\t%s\t\t%s\t\t%s\t\t%s\n",(*ptr).p.nom,(*ptr).p.tel,(*ptr).p.adress,(*ptr).p.dat_naiss,(*ptr).p.cod_depart);
printf("\n%s",(*ptr).p.nom);
printf("\t%s",(*ptr).p.tel);
printf("\t%s",(*ptr).p.adress.rue,rue);
printf("\t%s",(*ptr).p.adress.cod_postal,cod_postal);
printf("\t%s",(*ptr).p.adress.ville,ville);
printf("\t%s",(*ptr).p.dat_naiss.jour,(*ptr).p.dat_naiss.mois,(*ptr).p.dat_naiss.annee,jour, mois, annee);
// printf("\t%s",(*ptr).p.dat_naiss.mois,mois);
// printf("\t%s",(*ptr).p.dat_naiss.annee,annee);
printf("\t%s",(*ptr).p.mail,mail);
printf("\t%s",(*ptr).p.cod_depart);
if((*ptr).p_suivant==0) fin=1;
//on passe a la fiche suivante
ptr=(*ptr).p_suivant;
}
}
void quitter (struct fiche **pp_liste)
{int fin=0;
int cntfree=0;
struct fiche *ptr;
struct fiche *ptr2;
ptr=*pp_liste;
if(*pp_liste==NULL)
{//aucune entree
fin=1;
}
while(fin==0)
{//on va liberer tout les espace memoires allouees
if ((*ptr).p_suivant==0) fin=1;
ptr2=(*ptr).p_suivant;
free(ptr);
ptr=ptr2;
cntfree++;
}
printf("\n\n le nombre des zones liberee: %d \n\n A bientot....",cntfree);
getchar();
getchar();
}
void main()
{
int fin=0;
int rep;
//ce pointeur va pointer vers la 1ere fiche de la pile donc la derniere
struct fiche *p_liste=NULL;
clrscr();
while(fin==0)
{ printf("\n Que voulez vous faire?\n\t1-ajouter une personne\n\t2-Afficher le repertoire\n\t3-retirer une entree\n\t4-Trier les entrees\n\t0-Quitter\nvotre choix: ");
scanf("%d",&rep);
switch(rep)
{
case 1:ajouter(&p_liste);
break;
case 2:afficher(p_liste);
break;
case 3:retirer(&p_liste);
break;
case 4:trier(&p_liste);
break;
case 0 :quitter(&p_liste);
fin=1;
break;
}
}
}
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include <string.h>
#define T 10
#define N 40
//declaration des structures
struct date
{
char jour[2];
char mois [T+1];
char annee [4];
};
struct adresse
{
char rue[N+1];
char cod_postal [4];
char ville [N+1];
};
struct personne
{
char nom [N+1];
char tel [T+1];
struct adresse adress;
struct date dat_naiss;
char mail [N+1];
char cod_depart [T+1];
};
//on va imbriquer une structure dans l'autre et ajouter un pointeur vers la fiche suivante
struct fiche
{
struct personne p;
struct fiche *p_suivant;
};
int comp(char *s, char *t)
{
int i;
int cmpt=0;
for(i=0;i<N+1;i++)
{
if((s[i]==t[i])||((s[i]<0)&&(t[i]<0)))
cmpt++;
}
if (cmpt==N+1)
return(1);
else return(0);
}
//voici la fonction qui va efecter le tri alphab‚tique
void trier (struct fiche **pp_liste)
{
int i=0,j,k,h=0,fin=0;
//on declare des ptrs vers des structures de type fiche
struct fiche *ptr,*tmp;
//et un tableau de pointeur sur lequel on va effectuer le tri
struct fiche *tab[100];
//ptr sera egal a *pp_liste cad l adresse de la premiere structure de la pile
// ptr= *pp_liste;
tab[0]= *pp_liste;
//on remplit le tableau avec toutes les strucures
while ((*tab[i]).p_suivant!=0)
{
tab[i+1]=(*tab[i]).p_suivant;
i++;
}
for(j=0;j<i;j++)
{
for(k=j+1;k<=i;k++)
{
fin=0;
h=0;
while(fin==0){
if((*tab[j]).p.nom[h]>(*tab[k]).p.nom[h])
{
tmp=tab[j];
tab[k]=tab[j];
tab[k]=tmp;
fin=1;
}else{
if((*tab[j]).p.nom[h]==(*tab[k]).p.nom[h])
{
//tri par rapport a la valeur du departement
if((*tab[j]).p.cod_depart[h]>(*tab[k]).p.cod_depart[h])
tmp=tab[j];
tab[j]=tab[k];
tab[k]=tmp;
fin=1;
}else{
if((*tab[j]).p.cod_depart[h]==(*tab[k]).p.cod_depart[h])
{
//tri par rapport au tel
if((*tab[j]).p.tel[h]>(*tab[k]).p.tel[h])
tmp=tab[j];
tab[j]=tab[k];
tab[k]=tmp;
fin=1;
// } else
h++;
}else{
fin=1;
}
}
}
h++;
}
}
}
//on modifie le chainage avec les pointeurs tries
for(k=0;k<i;k++)
{
(*tab[k]).p_suivant=tab[k+1];
}
(*tab[k]).p_suivant=NULL;
*pp_liste=tab[0];
printf("\n repertoire trie.....\n");
}
//fction servant a enlever une personne du repertoire
void retirer (struct fiche **pp_liste)
{ char tel [T+1];
char cod_depart[T+1];
char nom[N+1];
struct fiche *ptr,*ptr2;
int fin=0;
int r;
//on initialise ptr avec l'adresse de la 1ere structure
ptr=*pp_liste;
printf("\n entrer le nom de la personne a retirer: ");
scanf("%s",nom);
// if(nom!=" ")
{
r=comp(nom,(*ptr).p.nom);
if(r==1) fin=1;
//on va maintenant cherché si la personne est présente dans l'agenda
while(fin==0){
if((*ptr).p_suivant==NULL)
{
fin=1;
r=comp(nom,(*ptr).p.nom);
}else{
r=comp(nom,(*ptr).p_suivant->p.nom);
if (r==1)
fin=1;
else
//on passe à la structure suivante...
ptr=(*ptr).p_suivant;
}
}
if(r==1)
{
r=comp(nom,(*ptr).p.nom);
if(r==1)
{
ptr2=(*ptr).p_suivant;
free(ptr);
*pp_liste=ptr2;
}else{
//on relie la fiche précedente à la suivante
//pour conserver un chaînage cohérent
ptr2=(*ptr).p_suivant->p_suivant;
//on libère la mémoire...
free((*ptr).p_suivant);
(*ptr).p_suivant=ptr2;
}
printf("\nEntree supprimee...\n");
}else{
printf("\nAucune entree correspondante...\n");
}
}
/* if(nom!=" ")
{
if(r==1) fin=1;
//on va chercher si la personne est presente dans le repertoire
while(fin==0){
if((*ptr).p_suivant==NULL)
{
fin=1;
r=comp(nom,(*ptr).p.nom);
}else{
r=comp(nom,(*ptr).p_suivant->p.nom);
if(r==1)
fin=1;
else
//on passe a la structure suivante
ptr=(*ptr).p_suivant;
}
}
if(r==1)
{
r=comp(nom,(*ptr).p.nom);
if(r==1)
{
ptr2=(*ptr).p_suivant;
free(ptr);
*pp_liste=ptr2;
}else{
//on relie la fiche precedente a la suivante
ptr2=(*ptr).p_suivant->p_suivant;
//onlibere la memoire
free((*ptr).p_suivant);
(*ptr).p_suivant=ptr2;
*/
printf("\nentrer le tel de la personne a retirer");
scanf("%s",tel);
r=comp(tel,(*ptr).p.tel);
{
if(r==1) fin=1;
//on va chercher si la personne est presente dans le repertoire
while(fin==0){
if((*ptr).p_suivant==NULL)
{
fin=1;
r=comp(tel,(*ptr).p.tel);
}else{
r=comp(tel,(*ptr).p_suivant->p.tel);
if(r==1)
fin=1;
else
//on passe a la structure suivante
ptr=(*ptr).p_suivant;
}
}
if(r==1)
{
r=comp(tel,(*ptr).p.tel);
if(r==1)
{
ptr2=(*ptr).p_suivant;
free(ptr);
*pp_liste=ptr2;
}else{
//on relie la fiche precedente a la suivante
ptr2=(*ptr).p_suivant->p_suivant;
//onlibere la memoire
free((*ptr).p_suivant);
(*ptr).p_suivant=ptr2;
}
printf("\n entree suprimee...... \n");
}else{
printf("\naucune entree correspondante.... \n");
}
}
}
//ajouter un contacte
void ajouter (struct fiche **pp_liste)
{
char nom [N+1];
char tel [T+1];
char rue[N+1],cod_postal[4],ville[N+1];
char jour[2],mois[2],annee[4];
struct date dat_naiss;
struct adresse adress;
char mail [N+1];
char cod_depart [T+1];
int fin=0;
int r;
//ce pointeur designera la nouvelle fiche
struct fiche *p_nouv;
struct fiche *ptr;
fin=0;
printf("\n entrer le nom de la personne: ");
scanf("%s",nom);
printf("\n entrer son numero de telephone: ");
scanf("%s",tel);
printf("\n entrer son adresse: \n rue: ");
scanf("%s",adress.rue);
printf("\n code postal: ");
scanf("%s",adress.cod_postal);
printf("\n ville: ");
scanf("%s",adress.ville);
printf("\n entrer sa date de naissanse: \njour/mois/annee: ");
scanf("%s/%s/%s",dat_naiss.jour,dat_naiss.mois,dat_naiss.annee);
printf("\n entrer son email: ");
scanf("%s",mail);
printf("\n entrer son code de departement: ");
scanf("%s",cod_depart);
//initialisation
ptr=*pp_liste;
//on cherche si la personne n'est pas deja dans le repertoire
while (fin==0)
{
if(ptr==NULL) fin=1;
else {
r=comp(nom,(*ptr).p.nom);
if(r==1) fin=1;
else {
if ((*ptr).p_suivant==0) fin=1;
ptr=(*ptr).p_suivant;
}
}
}
if(r==1)
{
printf("\n entree deja presente \n");
}
else{
//on alloue de la memoire pour une nouvelle fiche
p_nouv=new(struct fiche);
//on relie cette vouvelle fiche a la suivante et on change *pp_liste qui doit rester au sommet
(*p_nouv).p_suivant=*pp_liste;
*pp_liste=p_nouv;
strcpy((*p_nouv).p.nom,nom);
strcpy((*p_nouv).p.tel,tel);
strcpy((*p_nouv).p.adress.rue,rue);
strcpy((*p_nouv).p.adress.cod_postal,cod_postal);
strcpy((*p_nouv).p.adress.ville,ville);
strcpy((*p_nouv).p.dat_naiss.jour,jour);
strcpy((*p_nouv).p.dat_naiss.mois,mois);
strcpy((*p_nouv).p.dat_naiss.annee,annee);
strcpy((*p_nouv).p.cod_depart,cod_depart);
}
}
void afficher (struct fiche *p_liste)
{
int fin=0;
char nom [N+1];
char tel [T+1];
char rue[N+1],cod_postal[4],ville[N+1];
char jour[2],mois[2],annee[4];
struct date dat_naiss;
struct adresse adress;
char mail [N+1];
char cod_depart [T+1];
struct fiche *ptr;
// printf("\n " );
ptr=p_liste;
if(p_liste==NULL)
{printf("aucune entree.....\n");
fin=1;
}
while (fin==0)
{ // {printf("%s\t\t%s\t\t%s\t\t%s\t\t%s\n",(*ptr).p.nom,(*ptr).p.tel,(*ptr).p.adress,(*ptr).p.dat_naiss,(*ptr).p.cod_depart);
printf("\n%s",(*ptr).p.nom);
printf("\t%s",(*ptr).p.tel);
printf("\t%s",(*ptr).p.adress.rue,rue);
printf("\t%s",(*ptr).p.adress.cod_postal,cod_postal);
printf("\t%s",(*ptr).p.adress.ville,ville);
printf("\t%s",(*ptr).p.dat_naiss.jour,(*ptr).p.dat_naiss.mois,(*ptr).p.dat_naiss.annee,jour, mois, annee);
// printf("\t%s",(*ptr).p.dat_naiss.mois,mois);
// printf("\t%s",(*ptr).p.dat_naiss.annee,annee);
printf("\t%s",(*ptr).p.mail,mail);
printf("\t%s",(*ptr).p.cod_depart);
if((*ptr).p_suivant==0) fin=1;
//on passe a la fiche suivante
ptr=(*ptr).p_suivant;
}
}
void quitter (struct fiche **pp_liste)
{int fin=0;
int cntfree=0;
struct fiche *ptr;
struct fiche *ptr2;
ptr=*pp_liste;
if(*pp_liste==NULL)
{//aucune entree
fin=1;
}
while(fin==0)
{//on va liberer tout les espace memoires allouees
if ((*ptr).p_suivant==0) fin=1;
ptr2=(*ptr).p_suivant;
free(ptr);
ptr=ptr2;
cntfree++;
}
printf("\n\n le nombre des zones liberee: %d \n\n A bientot....",cntfree);
getchar();
getchar();
}
void main()
{
int fin=0;
int rep;
//ce pointeur va pointer vers la 1ere fiche de la pile donc la derniere
struct fiche *p_liste=NULL;
clrscr();
while(fin==0)
{ printf("\n Que voulez vous faire?\n\t1-ajouter une personne\n\t2-Afficher le repertoire\n\t3-retirer une entree\n\t4-Trier les entrees\n\t0-Quitter\nvotre choix: ");
scanf("%d",&rep);
switch(rep)
{
case 1:ajouter(&p_liste);
break;
case 2:afficher(p_liste);
break;
case 3:retirer(&p_liste);
break;
case 4:trier(&p_liste);
break;
case 0 :quitter(&p_liste);
fin=1;
break;
}
}
}
A voir également:
- Repertoire telephonique en langage C
- Langage ascii - Guide
- Répertoire téléphonique gratuit - Télécharger - Bureautique
- Règle en cm sur téléphone - Guide
- Indicatif téléphonique - Guide
- Langage binaire - Guide