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 146 147 148 149 150 151 152 153 154
| #include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#include <ctype.h>
struct client
{
char nom[30];
char prenom[30];
char adress[50];
int numcin;
int numcompte;
struct client *clsuivant;
struct client *clprecedant;
};
void creerlist(struct client **tlist)
{
*tlist=NULL;
}
int ajoutClient(struct client **tlist,char nom[30],char prenom[30],int numcin,int numcompte)
{
struct client *plist;
plist=malloc(sizeof(struct client));
if (plist == NULL)
{
fprintf(stderr, "Pb malloc\n");
exit(0);
}
strcpy(plist->nom, nom);
strcpy(plist->prenom, prenom);
plist->clsuivant=*tlist;
// correction du code
plist->clprecedant=NULL;
if (*tlist != NULL)
(*tlist)->clprecedant = plist;
// fin correction code
plist->numcin=numcin;
plist->numcompte=numcompte;
*tlist=plist;
return 0;
}
void affichlist(struct client *tlist)
{
struct client*p;
for(p=tlist;p!=NULL;p=p->clsuivant)
{
printf("\nNom:%s\n",p->nom);
printf("Prenom:%s\n",p->prenom);
printf("NumCIN:%d\n",p->numcin);
printf("Numcompte:%d\n",p->numcompte);
}
}
int supClient(struct client **tlist,int numcompte)
{
struct client *cl,*clprecedant;
if(*tlist==NULL) return 0;
//if(*tlist->client.numcompte==numcompte){
//precCL=*cl->*tlist;
// on traite le cas du premier élément à supprimer
if ( (*tlist)->numcompte == numcompte)
{
cl = *tlist;
*tlist = (*tlist)->clsuivant;
if (*tlist != NULL)
(*tlist)->clprecedant = NULL;
free(cl);
return 1;
}
// ici on est certain que le premier élément ne sera pas supprimé
cl = *tlist;
while (cl != NULL && cl->numcompte != numcompte)
cl = cl->clsuivant;
// ici on a soit cl = NULL soit on a trouve le bon compte
// d'après ce que j'ai compris, si on n'enlève rien on retourne 0
if (cl == NULL)
return 0;
// ici on enlève le numero de compte;
// on branche le précédent sur le suivant
cl->clprecedant->clsuivant = cl->clsuivant;
// c'est à cause de ce branchement qu'il ne faut pas être sur le premier élément
// on branche le precedant du suivant sur le precedant
if (cl->clsuivant != NULL)
cl->clsuivant->clprecedant = cl->clprecedant;
// on libère la mémoire associée
free(cl);
// on retourne 1
return 1;
}
int main()
{
struct client *tlist,*plist;
char nom[30];
char prenom[30];
char temp[30];
int numcin;
int numcompte;
char cont,cont2;
//clrscr();
creerlist(&tlist);
do
{
printf("Nom:");
fgets(nom, sizeof(nom), stdin);
nom[strlen(nom) -1] = 0;
printf("\nPrnom:");
fgets(prenom, sizeof prenom, stdin);
prenom[strlen(prenom) -1] = 0;
printf("\nNumro C.I.N:");
fgets(temp, sizeof temp, stdin);
numcin = strtol(temp, NULL, 10);
printf("\nNumro Compte:");
fgets(temp, sizeof temp, stdin);
numcompte = strtol(temp, NULL, 10);
ajoutClient(&tlist,nom,prenom,numcin,numcompte);
printf("\n\tAutre client
ajout(o\\n)?");
fgets(nom, sizeof(nom), stdin);
}
while(toupper(*nom)=='O');
affichlist(tlist);
do
{
printf("\nentrer le numcompte du client
supprimer:");
fgets(temp, sizeof temp, stdin);
numcompte = strtol(temp, NULL, 10);
supClient(&tlist,numcompte);
printf("\n\t autre client
supprimer(o\\n)?");
fgets(nom, sizeof(nom), stdin);
}
while(toupper(*nom)=='O');
affichlist(tlist);
getch();
return 0;
} |
Partager