#include #include #include #include #include #define MAX_NOM 20 #define MAX_PRENOM 20 #define MAX_MAIL 30 #define MAX_CONTACTS 100 typedef struct contact { struct contact* suivant; struct contact* precedent; char nom[MAX_NOM]; char prenom[MAX_PRENOM]; char email[MAX_MAIL]; char numero[10]; }contact; //================FONCTION QUI VERIFIE SI LE NUMERO NE CONTIENT QUE DES CHIFFRES void verifnumero() { char Num[10]; int test=1,i; printf("Tapez le numero du contact:\n"); scanf("%s",Num); while(test) { for(i=0;i<10;i++) { if((Num[i]>47)&&(Num[i]<58)) test=0; else test=1; } if(test) { printf("Numero invalide, retapez le:\n"); scanf("%s",Num); } } } // ===================================== CONVERSION DE LA CHAINE DE CARACTERE EN MAJUSCULES void Majuscule( char* nom) { int i=0; while(nom[i] !='\0') { nom[i]=toupper(nom[i]); i++; } } /* ---------------------------------------FONCTION QUI AFFICHE LE MENU---------------------------------------- ---------------------------------------------------------------------------------------------------------------*/ void AfficherMenu() { printf("\n ---------------------------------------\n MINI PROJET D INFORMATIQUE\t 2E ANNEE\n ---------------------------------------\n\n"); printf("\n\n\n 1: Liste complete de contacts\n 2: Liste de contacts commencants par ...\n 3: Ajouter un contact\n 4: Modifier contact\n 5: Supprimer contact\n 6: Envoyer SMS\n 7: Supprimer SMS\n 8: Liste des SMS\n\n\n"); printf("\n Quel est votre choix?\n"); } // LISTE DE CONTACTS PAR... void contactspar() { FILE* fichier=fopen("repertoire.txt","r"); contact* pcontactpar=(contact*)malloc(sizeof(contact)); char mot[MAX_NOM]; int longueur=0; rewind(fichier); printf("Vous voulez la liste des contacts commencant par ...(taper votre mot)\n"); scanf("%s",mot); Majuscule(mot); longueur=strlen(mot); printf("\n LISTE DES CONTACTS COMMENCANTS PAR %s:\n",mot); while(fscanf(fichier,"%s %s %s %s",pcontactpar->nom,pcontactpar->prenom,pcontactpar->numero,pcontactpar->email)!=EOF) { //affichage que si le nom du contact lu commence par "mot" if(strncmp(pcontactpar->nom,mot,longueur)==0) printf("%s %s %s %s\n",pcontactpar->nom,pcontactpar->prenom,pcontactpar->numero,pcontactpar->email); } } // ===========================FONCTION DE TRI A LA VOLEE=========// void tri(contact* pajout,contact* pcourant,contact* pcontact1) { if(strcmp(pajout->nom,pcourant->nom)==0) { //si le prenom va apres,on place le contact apres contact courant if(strcmp(pajout->prenom,pcourant->prenom)>=0) { pcourant->suivant=pajout; pajout->suivant=NULL; pajout->precedent=pcourant; pcourant=pajout; } //sinon on l intercale juste avant le contact courant else { pcourant->precedent->suivant=pajout; pajout->precedent=pcourant->precedent; pajout->suivant=pcourant; } } //si le nom a ajouter est le meme que le premier if(strcmp(pajout->nom,pcontact1->nom)==0) { //si le prenom va apres,on l intercale juste apres contact1 if(strcmp(pajout->prenom,pcontact1->prenom)>=0) { pcontact1->suivant->precedent=pajout; pajout->suivant=pcontact1->suivant; pajout->precedent=pcontact1; pcontact1->suivant=pajout; } //sinon on le met tout au debut,il devient contact1 else { pcontact1->precedent=pajout; pajout->suivant=pcontact1; pajout->precedent=NULL; pcontact1=pajout; } } //si le contact va au debut if(strcmp(pajout->nom,pcontact1->nom)<0) { pcontact1->precedent=pajout; pajout->suivant=pcontact1; pajout->precedent=NULL; pcontact1=pajout; } //si le contact va a la fin if(strcmp(pajout->nom,pcourant->nom)>0) { pcourant->suivant=pajout; pajout->suivant=NULL; pajout->precedent=pcourant; pcourant=pajout; } //parcourir la liste et trouver la place du contact else { contact* pparcours=pcontact1; while((strcmp(pparcours->nom,pajout->nom)>0)&&(pparcours!=pcourant)) { pparcours=pparcours->suivant; } pajout->suivant=pparcours->suivant; pparcours->suivant->precedent=pajout; pajout->precedent=pparcours; pparcours->suivant=pajout; pcourant=pajout; } } //==============FONCTION D AJOUT DE CONTACT ======================== void ajouter() { char Nom[MAX_NOM]; char Prenom[MAX_PRENOM]; char Email[MAX_MAIL]; char Numero[10]; int longueur=0; char* point=NULL; char* arobase=NULL; char valider='n'; int positionfin=0,positionarobase=0,positionpoint=0; printf("Voulez vous vraiment ajouter un contact? Taper O pour valider\n"); scanf("%c",&valider); while((valider!='o')&&(valider!='O')&&(valider!='0')) { printf("Voulez vous vraiment ajouter un contact? Taper O pour valider\n"); scanf("%c",&valider); } while((valider=='o')||(valider=='O')||(valider=='0')) { FILE* fichier=fopen("repertoire.txt","a"); if(fichier) { fseek(fichier, 0, SEEK_END); printf("\n Quel est le nom du nouveau contact?\n"); scanf("%s",Nom); Majuscule(Nom); printf("\n Quel est le prenom du nouveau contact?\n"); scanf("%s",Prenom); Majuscule(Prenom); printf("\n Quel est le Numero du nouveau contact?\n"); scanf("%s",Numero); longueur=strlen(Numero); while(longueur!=10) { printf("\n Le numero du contact ne comporte pas 10 chiffres?\n"); scanf("%s",Numero); longueur=strlen(Numero); } verifnumero(); printf("\n Quel est l adresse e-mail du nouveau contact?\n"); scanf("%s",Email); Majuscule(Email); while((strchr(Email,64)==NULL)||strchr(Email,46)==NULL) { printf("ce n'est pas une adresse email,n'oubliez pas l arobase\n"); scanf("%s",Email); arobase=strchr(Email,64); point=strchr(Email,46); } positionfin=strcspn(Email,"\0"); positionarobase=strcspn(Email,"@"); positionpoint=strcspn(Email,"."); while((positionarobase=0)||(positionpoint<(positionarobase+2))||(positionpointnom,pnouveau->prenom,pnouveau->numero,pnouveau->email)!=EOF) { if(ptete==NULL) { printf("creation de ptete\n"); ptete=pnouveau; pcourant=pnouveau; pcourant->suivant=NULL; printf("ptete: %s %s %s %s \n",pcourant->nom,pcourant->prenom,pcourant->numero,pcourant->email); contact*pnouveau=(contact*)malloc(sizeof(contact)); } else { if(strcmp(pnouveau->nom,ptete->nom)<0) { pnouveau->suivant=ptete; ptete=pnouveau; printf(" changement de tete %s %s %s %s \n",ptete->nom,ptete->prenom,ptete->numero,ptete->email); contact*pnouveau=(contact*)malloc(sizeof(contact)); } if(strcmp(pnouveau->nom,pcourant->nom)>=0) { pcourant->suivant=pnouveau; pnouveau->suivant=NULL; pcourant=pnouveau; printf(" changement de p courant (fin) %s %s %s %s \n",pcourant->nom,pcourant->prenom,pcourant->numero,pcourant->email); contact*pnouveau=(contact*)malloc(sizeof(contact)); } if((strcmp(pnouveau->nom,pcourant->nom)>0)&&(strcmp(pnouveau->nom,ptete->nom)<0)) { contact* pparcours=NULL; pparcours=ptete; while((pparcours)!=NULL) { if(strcmp(pnouveau->nom,pparcours->suivant->nom)>0) pparcours=pparcours->suivant; else { pnouveau->suivant=pparcours->suivant; pparcours->suivant=pnouveau; pparcours=pparcours->suivant; printf("inversion\n"); contact*pnouveau=(contact*)malloc(sizeof(contact));break; } } } } } /* // IMPRESSION DE LA LISTE CHAINEE pcourant=ptete; while((pcourant->suivant)!=NULL) { printf("%s %s %s %s \n",pcourant->nom,pcourant->prenom,pcourant->numero,pcourant->email); pcourant=pcourant->suivant; }*/ return(ptete); } else printf("erreur d ouverture du repertoire\n"); } /*================================== FONCTION MAIN ===========================================*/ int main() { int choix=0; contact* ptete=NULL; AfficherMenu(); scanf("%d",&choix); switch(choix) { case 1:ptete=tri();break; case 2:contactspar();break; case 3:ajouter();break; default: printf("Mauvais choix\n");break; } getch(); }