1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
|
//LibC
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef enum{ false, true }bool;
/**
* Structure de donnée
**/
typedef struct s_Clt{
char *pName;
unsigned long *pTel;
unsigned int idClt;
struct s_Clt *pNext;
}ts_Clt;
/**
* Fonction pour savoir s'il existe
* un numéro déja attribuer à un clients
* et ainsi évité des doublons lors des
* enregistrements
**/
bool f_ExisteTel( ts_Clt *pData, const unsigned long *pTel ){
ts_Clt *p = pData;
while( p ){
if( p->pTel == pTel )
return ( true );
p = p->pNext;
}
return ( false );
}
/***
* Fonction qui permet de connaître
* le détenteur de la ligne téléphonique
**/
void f_ClientNumber( ts_Clt *pData, const unsigned long *pTel ){
ts_Clt *p = pData;
printf( "\n--------- ! INFO CLIENT ! ---------\n");
while( p ){
if( p->pTel == pTel ){
printf( "*\tID Client\t:%d\t", p->idClt );
printf( "Nom\t: %s\t", p->pName );
printf( "Tel\t: %ld\n", p->pTel );
}
p = p->pNext;
}
printf( "-----------------------------------\n");
}
/**
* Ajout clients
**/
void f_AddClient(ts_Clt *pData, const char* pName, unsigned long *pTel ){
ts_Clt *p = pData;
bool ret = f_ExisteTel( p, pTel );
if( ret ){
printf( "*Un Client posséde déjà ce numéro" );
f_ClientNumber( p, pTel );
return;
}
else{
//Rch de cel pour alloc
unsigned int iCpt = 0;
while( p->pNext ){
iCpt++;
p = p->pNext;
}
p->pNext = (ts_Clt*)calloc( 1, sizeof(struct s_Clt) );
if( p->pNext == NULL ){
perror( "Erreur Mémoire new client" );
exit( EXIT_FAILURE );
}
//Allocation sans contrôle
p = p->pNext;
p->pTel = (unsigned long*)calloc( 10, sizeof(unsigned long) );
p->pName = (char*)calloc( strlen(pName), sizeof(char) );
// Affectation
p->pTel = pTel;
p->idClt = iCpt++;
strcpy( p->pName, pName );
p->pNext = NULL;
}
}
//Affiches tout les clients
void f_AfficherClient( ts_Clt *pData ){
ts_Clt *p = pData;
printf( "\n\n\t-------\tList Client\t---------\n");
while( p ){
printf( "->\tID Client\t: %d\t", p->idClt );
printf( "Nom\t: %s\t", p->pName );
printf( "Numeros Telephone\t: %ld\n", p->pTel );
p = p->pNext;
}
printf( "\t-------\tFin Liste Client -------\n");
}
//Fonction principale
int main( void ){
ts_Clt rClient;
(&rClient)->pNext = NULL;
//Num bidon
unsigned long p0 = 1234567890;
unsigned long p1 = 1234567892;
unsigned long p2 = 1234567801;
//Ajouts clients
f_AddClient( &rClient, "Bernard", &p0 );
f_AddClient( &rClient, "Georges", &p1 );
f_AddClient( &rClient, "Blaises", &p2 );
f_AddClient( &rClient, "Totoits", &p2 ); //Erreur
f_AddClient( &rClient, "Erroros", &p0 ); //Erreur
//Info Cliens
f_ClientNumber( &rClient, &p0 );
f_ClientNumber( &rClient, &p1 );
//Ajouts liste clients
unsigned long p3 = 1234567800;
f_AddClient( &rClient, "Michus", &p3 );
f_AfficherClient( (&rClient)->pNext );
//Free à faire
return ( EXIT_SUCCESS );
} |
Partager