From a1065d9a44e95ffee4245d4a0401e8bebb99c822 Mon Sep 17 00:00:00 2001 From: adriy Date: Thu, 18 May 2017 22:48:58 +0000 Subject: [PATCH] Plus secure --- VANDAMME32.c | 423 +++++++++++++++++++++++++++++---------------------- 1 file changed, 244 insertions(+), 179 deletions(-) diff --git a/VANDAMME32.c b/VANDAMME32.c index d628daa..4b4bb7b 100644 --- a/VANDAMME32.c +++ b/VANDAMME32.c @@ -4,7 +4,7 @@ *------------------------------------------------------------ *|UINTL NBClients|Bool Tri| Client 0 | Client 1 | .......ETc| *------------------------------------------------------------ - *NombreClients est stocké dans mon fichier + *NombreClients est stocke dans mon fichier * */ @@ -81,31 +81,31 @@ struct ListeArticle_t{ }; -void encoderDate(Date *, char *); //############################################ -Bool dateValide (Date *);//############################################ -void encoderArticle(Article *);//############################################ -void encoderClient(Client *);//############################################ -void afficherClient(Client *, Date *);//############################################ -void encoderFacture(ListeArticle **);//############################################ -void afficherFacture(Date *, Client *, ListeArticle *listeArticle);//############################################ -int pointsFidelite(float);//############################################ -Bool gestionFacture(Client *, Date *);//############################################ -void cleanFgets(char*);//############################################ -Bool clean_keyboard();//############################################ -int ageClient(Client *, Date *);//############################################ -long int rechercheClient(char *, char*, FichierClient *, Client *);//############################################ -Bool gestionClient(Client *, Date *, FichierClient *);//############################################ -int compNP(char *, char *,char *, char *);//############################################ -void localiserFichiersClients(FichierClient *);//############################################ +void encoderDate(Date *, char *); +Bool dateValide (Date *); +void encoderArticle(Article *); +Bool encoderClient(Client *, Client **); +void afficherClient(Client *, Date *); +void encoderFacture(ListeArticle **); +void afficherFacture(Date *, Client *, ListeArticle *listeArticle); +int pointsFidelite(float); +Bool gestionFacture(Client *, Date *); +void cleanFgets(char*); +Bool clean_keyboard(); +int ageClient(Client *, Date *); +long int rechercheClientFile(char *, char*, FichierClient *, Client *); +Bool gestionClient(Client *, Date *, FichierClient *); +int compNP(char *, char *,char *, char *); +void localiserFichiersClients(FichierClient *); int sauvegarderClientFile(FichierClient *, Client *); //enregistre le client dans le fichier dat et txt // /!\ Si nouveau client, sera enregistrer a la fin donc non trier ! -FILE * creerFichierFacture(Date *, Client *);//############################################ -Bool fichierExistant(char *);//############################################ -void sauvergarderFacture(Date *, Client *, ListeArticle *listeArticle);//############################################ +FILE * creerFichierFacture(Date *, Client *); +Bool fichierExistant(char *); +void sauvergarderFacture(Date *, Client *, ListeArticle *listeArticle); void sauvegarderClientTXT(Client *, FILE *, long,...); /*EcrireDonneesClient si long = 0, n'affiche pas l'age, enregistre a la position courante = 1, affiche l'age qui est repris sur le 4e arguments (int) (pour une facture par ex), enregistre a la position courante -> 1, ecris sans l'age mais a la position demandé (3e arg, long) +> 1, ecris sans l'age mais a la position demande (3e arg, long) */ void clientBinToTXT(FichierClient *);//SauvegarderClientsTxt void modificationClient(Client *, FichierClient*); @@ -127,31 +127,30 @@ void insertListeArticle(ListeArticle **, Article *); ListeArticle * rechercheElemListe(ListeArticle *); void suprimerElemListeArticle(ListeArticle **); void modifierElemListeArticle(ListeArticle *); +Bool rechercheClientArray(char *, char *, Client **, Bool); int main() { FichierClient fichierClient = {NULL, NULL, "", "", 0}; - Client * client; + Client * client = (Client*)calloc(1,sizeof(Client));; Client ** clientTab = NULL; - client = (Client*)calloc(1,sizeof(Client)); long int ofsetFileCurClient = 0; unsigned long int nbrClient = 0, idClient = 0; - if(ofsetFileCurClient);//Pour ne pas avoir de warn char nomClient[__STRLEN__],prenomClient[__STRLEN__]; int choixMenu; Date date; - char tmp; - Bool w; time_t curTimeStamp = time(NULL); struct tm *locTime = localtime(&curTimeStamp); + char tmp; //entree clavier + Bool w; // Pour boucle tant qu'on ne quite pas locTime->tm_mon += 1; locTime->tm_year += 1900; printf("Voulez-vous utilisez la date système %d/%d/%d (Y|n)?\n", locTime->tm_mday,locTime->tm_mon,locTime->tm_year); scanf("%c", &tmp); if((tmp|0b00100000) != 'y') - encoderDate(&date, "Date facturation"); + encoderDate(&date, "Date facturation"); else { date.jour = locTime->tm_mday; @@ -163,37 +162,55 @@ int main() recupererClients(&fichierClient, &clientTab); while(w) { - printf("1. Nouveau client\n"); - printf("2. Client enregistré\n"); - printf("3. Liste des client\n"); - printf("4. Tri des client\n"); - do{ - printf("Choix (1|2|3|4):");clean_keyboard();scanf("%d", &choixMenu); - }while(!(choixMenu<=4 && choixMenu>=1)); + if(clientTab) + { + printf("1. Nouveau client\n"); + printf("2. Client enregistre\n"); + printf("3. Liste des client\n"); + printf("4. Tri des client\n"); + do{ + printf("Choix (1|2|3|4):");clean_keyboard();scanf("%d", &choixMenu); + }while(!(choixMenu<=4 && choixMenu>=1)); + } + else + { + printf("Il n'y a encore aucun client, encoder le 1e client\n"); + choixMenu = 1; + } switch (choixMenu) { case 1: client->ofsetFichierDat = 0; client->ofsetFichierTXT = 0; - encoderClient(client); - afficherClient(client, &date); - fseek(fichierClient.txt, 0, SEEK_END); - insertClientTabTrier(client, &clientTab); - sauvegarderTabClientFile(&fichierClient, clientTab); - w = gestionClient(client, &date, &fichierClient); - nbrClient++; - break; - case 2: - printf("\nNom du client (sensible a la casse) : "); - clean_keyboard();scanf("%s", nomClient); - printf("\nPrenom du client (sensible a la casse) : "); - clean_keyboard();scanf("%s", prenomClient); - ofsetFileCurClient = rechercheClient(nomClient,prenomClient, &fichierClient, client); - if(ofsetFileCurClient) + if(encoderClient(client, clientTab)) + { + afficherClient(client, &date); + printf("1\n"); + fseek(fichierClient.txt, 0, SEEK_END); + printf("1\n"); + insertClientTabTrier(client, &clientTab); + printf("1\n"); + sauvegarderTabClientFile(&fichierClient, clientTab); + printf("1\n"); w = gestionClient(client, &date, &fichierClient); - else - printf("\nClient non trouvé !\n"); + printf("1\n"); + nbrClient++; + break; + } + case 2: + if(clientTab) + { + printf("\nNom du client (sensible a la casse) : "); + clean_keyboard();fgets(nomClient, __STRLEN__, stdin); cleanFgets(nomClient); + printf("\nPrenom du client (sensible a la casse) : "); + clean_keyboard();fgets(prenomClient, __STRLEN__, stdin); cleanFgets(prenomClient); + ofsetFileCurClient = rechercheClientFile(nomClient,prenomClient, &fichierClient, client); + if(ofsetFileCurClient) + w = gestionClient(client, &date, &fichierClient); + else + printf("\nClient non trouve !\n"); + } break; case 3: printf("0 : Retour\n"); @@ -241,7 +258,7 @@ Bool dateValide(Date * date) int y = date->annee; int daysinmonth[12]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; - if(y % 400 == 0 || (y % 100 != 0 && y % 4 == 0))//Si bis février = 29 + if(y % 400 == 0 || (y % 100 != 0 && y % 4 == 0))//Si bis fevrier = 29 daysinmonth[1]=29; if (m<13) { @@ -266,39 +283,44 @@ void encoderArticle(Article * article) scanf("%d", &article->quant); } -void encoderClient(Client * client) +Bool encoderClient(Client * client, Client ** clientsTab) { printf("\nEncoage Client\n"); client->fidelite = 0; - if(!(printf("Entrez la rue :") && clean_keyboard() && fgets(client->adresse.rue,__STRLEN__,stdin) != NULL && \ - printf("\nEntrez le numero :" ) && clean_keyboard() && fgets(client->adresse.numero,__STRLEN__,stdin) != NULL && \ - printf("\nEntrez la localité :") && clean_keyboard() && fgets(client->adresse.localite,__STRLEN__,stdin) != NULL && \ - printf("\nEntrez le code postal :") && clean_keyboard() && scanf("%d", &(client->adresse.codePostal)) && \ - printf("\nNom client :") && clean_keyboard() && fgets(client->nom,__STRLEN__,stdin) != NULL &&\ - printf("\nPrenom client :") && clean_keyboard() && fgets(client->prenom,__STRLEN__,stdin) != NULL)) - { - printf("\nErreur lors de l'encodage de l'adresse"); - exit(-1); - } + char choix='a'; + do { + if(choix != 'a') + { + printf("Le client existe deja. Reesayer ? (Y|n)");clean_keyboard();scanf("%c", &choix); + if(!((choix|0b00100000) == 'y')) + return FALSE; + } + while(!(printf("\nNom client :") && clean_keyboard() && fgets(client->nom,__STRLEN__,stdin) != NULL)); + while(!(printf("\nPrenom client :") && clean_keyboard() && fgets(client->prenom,__STRLEN__,stdin) != NULL)); + choix = 'b'; + } while(rechercheClientArray(client->nom, client->prenom, clientsTab, 0)); //On ne sais pas facilement acceder au tris donc par default non trier + + while(!(printf("Entrez la rue :") && clean_keyboard() && fgets(client->adresse.rue,__STRLEN__,stdin) != NULL)); + while(!(printf("\nEntrez le numero :" ) && clean_keyboard() && fgets(client->adresse.numero,__STRLEN__,stdin) != NULL)); + while(!(printf("\nEntrez la localite :") && clean_keyboard() && fgets(client->adresse.localite,__STRLEN__,stdin) != NULL)); + while(!(printf("\nEntrez le code postal :") && clean_keyboard() && scanf("%d", &(client->adresse.codePostal)) )); + cleanFgets(client->adresse.rue);cleanFgets(client->adresse.numero);cleanFgets(client->adresse.localite); cleanFgets(client->nom);cleanFgets(client->prenom); - if(!(printf("\n Entrez le numéro de tél. :") && clean_keyboard() &&fgets(client->contact.telephone,13,stdin) && \ - printf("\nEntrez l'adresse email :") && clean_keyboard() &&fgets(client->contact.email,__STRLEN__,stdin))) - { - printf("\nErreur lors de l'encodage des coo de contact"); - exit(-1); - } + while(!(printf("\n Entrez le numero de tel. :") && clean_keyboard() &&fgets(client->contact.telephone,13,stdin))); + while(!(printf("\nEntrez l'adresse email :") && clean_keyboard() &&fgets(client->contact.email,__STRLEN__,stdin))); cleanFgets(client->contact.telephone);cleanFgets(client->contact.email); encoderDate(&(client->anniversaire), "\nAnniversaire client:"); + return TRUE; } void afficherClient(Client *client, Date *date) { printf("\nClient : %s %s (%d)\n", client->nom, client->prenom, ageClient(client, date)); printf("rue : %s\n",client->adresse.rue); printf("numero : %s\n",client->adresse.numero); - printf("localité : %s\n",client->adresse.localite); + printf("localite : %s\n",client->adresse.localite); printf("code postal : %d\n",client->adresse.codePostal); - printf("numéro de tél. : %s\n",client->contact.telephone); + printf("numero de tel. : %s\n",client->contact.telephone); printf("adresse email : %s\n",client->contact.email); printf("\nPoints de fidelite acquis : %d\n", client->fidelite); } @@ -322,9 +344,9 @@ void sauvegarderClientTXT(Client *client, FILE * file, long arg, ...) //EcrireDo fprintf(file, "Client : %s %s \n", client->nom, client->prenom); fprintf(file, "rue : %s\n",client->adresse.rue); fprintf(file, "numero : %s\n",client->adresse.numero); - fprintf(file, "localité : %s\n",client->adresse.localite); + fprintf(file, "localite : %s\n",client->adresse.localite); fprintf(file, "code postal : %d\n",client->adresse.codePostal); - fprintf(file, "numéro de tél. : %s\n",client->contact.telephone); + fprintf(file, "numero de tel. : %s\n",client->contact.telephone); fprintf(file, "adresse email : %s\n",client->contact.email); if(arg == 1) fprintf(file, "\nPoints de fidelite acquis : %d\n", client->fidelite); @@ -352,7 +374,7 @@ FILE * creerFichierFacture(Date * date, Client * client) int i; printf("Dossier d'enregistrement : "); clean_keyboard(); - scanf("%s", dir); + fgets(dir, __STRLEN__, stdin); cleanFgets(dir); sprintf(fileName, "%s%d%d%d_", client->nom, date->annee, date->moi, date->jour); for(i=1; i<= 99; i++) { @@ -448,7 +470,7 @@ void cleanFgets(char * str) *p = '\0'; else { - printf("Une erreur est arrivé lors du nettoygae \\0"); + printf("Une erreur est arrive lors du nettoygae \\0"); exit(-1); } } @@ -467,7 +489,7 @@ return 1; int ageClient(Client * client, Date * date) { - if((date->moi == client->anniversaire.moi && date->jour >= client->anniversaire.jour) || (date->moi > client->anniversaire.moi))//anniversaire passé + if((date->moi == client->anniversaire.moi && date->jour >= client->anniversaire.jour) || (date->moi > client->anniversaire.moi))//anniversaire passe { return (date->annee - client->anniversaire.annee); } @@ -495,7 +517,7 @@ Bool gestionFacture(Client * client, Date * date) printf("2) Liste des articles\n"); printf("3) Modification article\n"); printf("4) Suprimer article\n"); - printf("5) Générer facture\n"); + printf("5) Generer facture\n"); printf("6) Accueil\n"); printf("7) Quiter\n"); printf("Votre choix :");clean_keyboard();scanf("%d", &choix); @@ -511,7 +533,14 @@ Bool gestionFacture(Client * client, Date * date) modifierElemListeArticle(listeArticle); break; case 4: - suprimerElemListeArticle(&listeArticle); + if(listeArticle) + suprimerElemListeArticle(&listeArticle); + else + { + printf("\n\t\t~~===========================~~" ); + printf("\n\t\t~~=======AUCUN ARTICLE !=====~~" ); + printf("\n\t\t~~===========================~~\n" ); + } break; case 5: if(listeArticle) @@ -525,7 +554,7 @@ Bool gestionFacture(Client * client, Date * date) else { printf("\n\t\t~~===========================~~" ); - printf("\n\t\t~~=======AUCUN ARTICLE !=======~~" ); + printf("\n\t\t~~=======AUCUN ARTICLE !=====~~" ); printf("\n\t\t~~===========================~~\n" ); } break; @@ -542,7 +571,7 @@ Bool gestionFacture(Client * client, Date * date) return ret; } -long int rechercheClient(char *nom, char *prenom, FichierClient *fichierClient,Client * client) +long int rechercheClientFile(char *nom, char *prenom, FichierClient *fichierClient,Client * client) { long int ofsetFileCurClient; int t; @@ -614,7 +643,7 @@ void localiserFichiersClients(FichierClient *fichierClient) Bool tri = 0; printf("Repertoir ou se trouve le fichier client.dat et client.txt"); clean_keyboard(); - scanf("%s", rep); + fgets(rep, __STRLEN_FILE__, stdin); cleanFgets(rep); sprintf(repTmp[__TAB_CLIENTDAT_FILE__],"%sclients.dat", rep); sprintf(repTmp[__TAB_CLIENTTXT_FILE__],"%sclients.txt", rep); fichierClient->txt = fopen(repTmp[__TAB_CLIENTTXT_FILE__], "r"); //A faire Une verification correcte se ferait avec access (voir GNU libc P418) @@ -624,7 +653,7 @@ void localiserFichiersClients(FichierClient *fichierClient) char c; printf("\nUn fichier n'existe pas. Voulez-vous les creers (C) ou changer de repertoir (R). (C|R)?"); if(!(fichierClient->bin == NULL && fichierClient->txt == NULL)) - printf("Attention un des deux fichier a été détecter ! Il seront remis a 0 si vous les creers\nChoix (C|R):" ); + printf("Attention un des deux fichier a ete detecter ! Il seront remis a 0 si vous les creers\nChoix (C|R):" ); clean_keyboard();scanf("%c", &c); if((c|0b00100000) == 'c') { @@ -744,20 +773,17 @@ void modificationClient(Client * client, FichierClient * fichierClient) printf("Modification %s :", aAfficher[choix-1]); if(choix == 1) { - if(!(printf("Entrez la rue :") && clean_keyboard() && fgets(client->adresse.rue,__STRLEN__,stdin) != NULL && \ - printf("\nEntrez le numero :" ) && clean_keyboard() && fgets(client->adresse.numero,__STRLEN__,stdin) != NULL && \ - printf("\nEntrez la localité :") && clean_keyboard() && fgets(client->adresse.localite,__STRLEN__,stdin) != NULL && \ - printf("\nEntrez le code postal :") && clean_keyboard() && scanf("%d", &(client->adresse.codePostal)))) - { - printf("\nErreur lors de l'encodage de l'adresse"); - exit(-1); - } + while(!(printf("Entrez la rue :") && clean_keyboard() && fgets(client->adresse.rue,__STRLEN__,stdin) != NULL)); + while(!(printf("\nEntrez le numero :" ) && clean_keyboard() && fgets(client->adresse.numero,__STRLEN__,stdin) != NULL)); + while(!(printf("\nEntrez la localite :") && clean_keyboard() && fgets(client->adresse.localite,__STRLEN__,stdin) != NULL)); + while(!(printf("\nEntrez le code postal :") && clean_keyboard() && scanf("%d", &(client->adresse.codePostal)))); + cleanFgets(client->adresse.rue);cleanFgets(client->adresse.numero);cleanFgets(client->adresse.localite); } else { clean_keyboard(); - scanf("%s", (char *)aModifier[choix-1]); + fgets((char *)aModifier[choix-1], __STRLEN__, stdin); cleanFgets((char *)aModifier[choix-1]); } printf("Y-a-til encore des Modification (y|n) ?"); clean_keyboard();scanf("%c", &choix); @@ -780,38 +806,41 @@ void recupererClients(FichierClient* fichierClient, Client *** clientTab) { unsigned int i; unsigned long int nbrClients = nombreClients(fichierClient); - *clientTab = (Client **)calloc(nbrClients+1, sizeof(Client *)); //J'initialise avec des 0 mon tableau de pointeur - *(*clientTab+nbrClients) = NULL; - if(*clientTab == NULL) + if(nbrClients) { - printf("\nErreur allocation **clientTab!\n"); - } - positionCurseurBinaireSurClient(fichierClient); - for(i=0; ibin); i++) - { - *(*clientTab+i) = (Client*)malloc(sizeof(Client)); - if(*(*clientTab+i) == NULL) + *clientTab = (Client **)calloc(nbrClients+1, sizeof(Client *)); //J'initialise avec des 0 mon tableau de pointeur + *(*clientTab+nbrClients) = NULL; + if(*clientTab == NULL) { - for(;i>0;i--) + printf("\nErreur allocation **clientTab!\n"); + } + positionCurseurBinaireSurClient(fichierClient); + for(i=0; ibin); i++) + { + *(*clientTab+i) = (Client*)malloc(sizeof(Client)); + if(*(*clientTab+i) == NULL) + { + for(;i>0;i--) + free(*(*clientTab+i)); + free(*(*clientTab)); + free(*clientTab); + printf("\nErreur allocation *clientTab!\n"); + exit(-1); + } + else + { + fread(*(*clientTab+i), sizeof(Client), 1, fichierClient->bin); + } + } + if(feof(fichierClient->bin)) + { + printf("\nUne erreur c'est produite le nbr de client est incorecte !\n"); + for(--i;i>0;i--) free(*(*clientTab+i)); free(*(*clientTab)); free(*clientTab); - printf("\nErreur allocation *clientTab!\n"); exit(-1); } - else - { - fread(*(*clientTab+i), sizeof(Client), 1, fichierClient->bin); - } - } - if(feof(fichierClient->bin)) - { - printf("\nUne erreur c'est produite le nbr de client est incorecte !\n"); - for(--i;i>0;i--) - free(*(*clientTab+i)); - free(*(*clientTab)); - free(*clientTab); - exit(-1); } } @@ -827,8 +856,9 @@ void positionCurseurBinaireSurClient(FichierClient * fichierClient) void afficherListeClients(Client ** clientTab) { unsigned long int i; - for(i=0;*(clientTab+i) != NULL;i++) - printf("Client %lu : %s %s\n", i+1, (*(clientTab+i))->nom, (*(clientTab+i))->prenom); + if(clientTab) + for(i=0;*(clientTab+i) != NULL;i++) + printf("Client %lu : %s %s\n", i+1, (*(clientTab+i))->nom, (*(clientTab+i))->prenom); } void qSortClientBinByNP(Client ** clientTab) @@ -847,7 +877,7 @@ void qSortClientBinByNP(Client ** clientTab) clientTmp = *(clientTab+i); *(clientTab+i) = *(clientTab+i+1); *(clientTab+i+1) = clientTmp; - if(i==0) //On est au début du fichier, inutile de comparer l'élem précédent + if(i==0) //On est au debut du fichier, inutile de comparer l'elem precedent i++; else i--; @@ -858,52 +888,65 @@ void qSortClientBinByNP(Client ** clientTab) } } } -void insertClientTabTrier(Client * client, Client *** clientTab) +void insertClientTabTrier(Client * clientAIns, Client *** clientTab) { - long i = 0; - long nbrTab; - for(nbrTab=0;*((*clientTab)+nbrTab);nbrTab++); - Bool flagTrouver = FALSE; - Client *clientTmp; - Client **clientTabTmp; - *((*clientTab)+nbrTab) = (Client*)calloc(1,sizeof(Client)); - clientTabTmp = (Client **)realloc(*clientTab, sizeof(Client)*(++nbrTab)); - free(clientTab); - *clientTab = clientTabTmp; - *((*clientTab)+nbrTab) = NULL; - while(*((*clientTab)+i+1)) + if(!(*clientTab)) { - if(!flagTrouver) + *clientTab = (Client **)calloc(2, sizeof(Client *)); //J'initialise avec des 0 mon tableau de pointeur + *((*clientTab)+1) = NULL; + *((*clientTab)) = (Client*)calloc(1,sizeof(Client)); + memcpy(*((*clientTab)), clientAIns, sizeof(Client)); + } + else + { + long i = 0; + long nbrTab; + Client * client = (Client *)malloc(sizeof(Client)); + memcpy(client, clientAIns, sizeof(Client)); + for(nbrTab=0;*((*clientTab)+nbrTab);nbrTab++); + Bool flagTrouver = FALSE; + Client *clientTmp; + Client **clientTabTmp; + *((*clientTab)+nbrTab) = (Client*)calloc(1,sizeof(Client)); + clientTabTmp = (Client **)realloc(*clientTab, sizeof(Client)*(++nbrTab)); + free(clientTab); + *clientTab = clientTabTmp; + *((*clientTab)+nbrTab) = NULL; + while(*((*clientTab)+i+1)) { - switch (compNP((*((*clientTab)+i))->nom,(*((*clientTab)+i))->prenom,client->nom,client->prenom)) + if(!flagTrouver) { - case -1: - i++; - break; - case 1: // trouver - flagTrouver = TRUE; - clientTmp = *((*clientTab)+i); - *((*clientTab)+i) = client; - client = clientTmp; - i++; - break; - case 0: - i++; - break; + switch (compNP((*((*clientTab)+i))->nom,(*((*clientTab)+i))->prenom,client->nom,client->prenom)) + { + case -1: + i++; + break; + case 1: // trouver + flagTrouver = TRUE; + clientTmp = *((*clientTab)+i); + *((*clientTab)+i) = client; + client = clientTmp; + i++; + break; + case 0: + i++; + break; + } + } + else + { + clientTmp = *((*clientTab)+i); + *((*clientTab)+i) = client; + client = clientTmp; + i++; } } - else - { - clientTmp = *((*clientTab)+i); - *((*clientTab)+i) = client; - client = clientTmp; - i++; - } + clientTmp = *((*clientTab)+i); + *((*clientTab)+i) = client; + client = clientTmp; } - clientTmp = *((*clientTab)+i); - *((*clientTab)+i) = client; - client = clientTmp; } + void sauvegarderTabClientFile(FichierClient *fichierClient, Client ** client) { unsigned long int nbClients = 0; @@ -1078,28 +1121,31 @@ void insertListeArticle(ListeArticle ** listeArticle, Article * article) void suprimerElemListeArticle(ListeArticle ** listeArticle) { - ListeArticle * aSup = rechercheElemListe(*listeArticle); - ListeArticle * tmp = *listeArticle; - if(aSup->suite)//Elem au millieux ou premier mais il y a ye suite + if(*listeArticle) { - ListeArticle * aFree = aSup->suite; - memcpy(aSup, aSup->suite, sizeof(ListeArticle)); - free(aFree); - aFree = NULL; - } - else if(aSup == *listeArticle)//Premier et pas de suite - { - free(*listeArticle); - *listeArticle = NULL; - } - else//Pas de suite, recherche precdent pour que precdent->suite = NULL - { - for(;tmp->suite != aSup && tmp;tmp = tmp->suite); - if(tmp){ - free(aSup); - tmp->suite = NULL; - }else{ - printf("\nErreur de supretion\n" ); + ListeArticle * aSup = rechercheElemListe(*listeArticle); + ListeArticle * tmp = *listeArticle; + if(aSup->suite)//Elem au millieux ou premier mais il y a ye suite + { + ListeArticle * aFree = aSup->suite; + memcpy(aSup, aSup->suite, sizeof(ListeArticle)); + free(aFree); + aFree = NULL; + } + else if(aSup == *listeArticle)//Premier et pas de suite + { + free(*listeArticle); + *listeArticle = NULL; + } + else//Pas de suite, recherche precdent pour que precdent->suite = NULL + { + for(;tmp->suite != aSup && tmp;tmp = tmp->suite); + if(tmp){ + free(aSup); + tmp->suite = NULL; + }else{ + printf("\nErreur de supretion\n" ); + } } } } @@ -1138,7 +1184,7 @@ ListeArticle * rechercheElemListe(ListeArticle * listeArticle) ListeArticle * deb = listeArticle; do{ if(!listeArticle) - printf("\nChoix Erroné !\n"); + printf("\nChoix Errone !\n"); listeArticle = deb; afficherListeArticle(listeArticle); printf("\nId :");clean_keyboard();scanf("%d", &i); @@ -1147,3 +1193,22 @@ ListeArticle * rechercheElemListe(ListeArticle * listeArticle) }while (!listeArticle); return listeArticle; } + +Bool rechercheClientArray(char *nom, char * prenom, Client ** clients, Bool tri) +{ + if(!clients) + return FALSE; + if(tri && 1==2) // a faire + { + + } + else + { + while (*clients && compNP(nom, prenom, (*clients)->nom, (*clients)->prenom) && *(++clients) && printf("%s\n", (*clients)->prenom)); + if(!(*clients)) + return FALSE; + else + return TRUE; + } + return FALSE; +}