From 554928ac0fafac84ead6232a26a20aa16c881e5d Mon Sep 17 00:00:00 2001 From: Adrien VAN DAMME Date: Fri, 24 Mar 2017 21:53:41 +0100 Subject: [PATCH] ... --- GaideC18.c | 114 +++---- GaideC19.c | 66 ++-- VANDAMME18.c | 184 +++++------ VANDAMME19.c | 52 +-- VANDAMME20.c | 122 +++---- VANDAMME23.c | 464 +++++++++++++------------- VANDAMME24.c | 913 +++++++++++++++++++++++++++------------------------ VANDAMME27.c | 618 ++++++++++++++++++++++++++++++++++ VANDAMME27.o | Bin 0 -> 13017 bytes colin14.c | 268 +++++++-------- colin22.c | 516 ++++++++++++++--------------- colin22.txt | 22 +- test | Bin 0 -> 17632 bytes 13 files changed, 2006 insertions(+), 1333 deletions(-) create mode 100644 VANDAMME27.c create mode 100644 VANDAMME27.o create mode 100644 test diff --git a/GaideC18.c b/GaideC18.c index e40699c..58bdee6 100644 --- a/GaideC18.c +++ b/GaideC18.c @@ -1,57 +1,57 @@ -#include -#include -#include -#include - -//http://www.gnu.org/software/libc/manual/html_mono/libc.html#Comparison-Functions - -void EncoderContact (char*,char*,char*,char*,char*); -void EcrireContact (char*,char*,char*,char*,char*,FILE*); -FILE*OuvrirFichier (); -int main() -{ - char Nom[21],Prenom[21],Tel[11],GSM[15],eMail[30]; - - EncoderContact(Nom, Prenom, Tel, GSM, eMail); - EcrireContact(Nom, Prenom, Tel, GSM, eMail, OuvrirFichier()); -} -EncoderContact(char*Nom,char*Prenom,char*Tel,char*GSM,char*eMail) -{ - printf("entrez votre nom: \t"); - fflush(stdin); - gets(Nom); - printf(" entrez votre Prenom: \t"); - fflush(stdin); - gets(Prenom); - printf("\n entrez votre num�ro de telephone :\t "); - fflush(stdin); - gets(Tel); - printf("\n entrez votre num�ro de GSM : \t"); - fflush(stdin); - gets(GSM); - printf("\n entrez votre eMail:\t "); - fflush(stdin); - gets(eMail); - -} -EcrireContact(char*Nom,char*Prenom,char*Tel,char*GSM,char*eMail,FILE*PtFichier) -{ - fprintf(PtFichier, "%s\n%s \n %s \n%s \n %s \n",Nom,Prenom,Tel,GSM,eMail); - fclose(PtFichier); -} -FILE *OuvrirFichier () -{ - char NomFichier [50]; - FILE*PtFichier; - do - { - printf("entrez le nom de votre fichier (avec chemin d'acc�s):\n"); - fflush(stdin); - gets(NomFichier); - PtFichier=fopen(NomFichier,"w"); - } - while(PtFichier==NULL); - printf("fichier cree"); - return (PtFichier); - -} +#include +#include +#include +#include + +//http://www.gnu.org/software/libc/manual/html_mono/libc.html#Comparison-Functions + +void EncoderContact (char*,char*,char*,char*,char*); +void EcrireContact (char*,char*,char*,char*,char*,FILE*); +FILE*OuvrirFichier (); +int main() +{ + char Nom[21],Prenom[21],Tel[11],GSM[15],eMail[30]; + + EncoderContact(Nom, Prenom, Tel, GSM, eMail); + EcrireContact(Nom, Prenom, Tel, GSM, eMail, OuvrirFichier()); +} +EncoderContact(char*Nom,char*Prenom,char*Tel,char*GSM,char*eMail) +{ + printf("entrez votre nom: \t"); + fflush(stdin); + gets(Nom); + printf(" entrez votre Prenom: \t"); + fflush(stdin); + gets(Prenom); + printf("\n entrez votre num�ro de telephone :\t "); + fflush(stdin); + gets(Tel); + printf("\n entrez votre num�ro de GSM : \t"); + fflush(stdin); + gets(GSM); + printf("\n entrez votre eMail:\t "); + fflush(stdin); + gets(eMail); + +} +EcrireContact(char*Nom,char*Prenom,char*Tel,char*GSM,char*eMail,FILE*PtFichier) +{ + fprintf(PtFichier, "%s\n%s \n %s \n%s \n %s \n",Nom,Prenom,Tel,GSM,eMail); + fclose(PtFichier); +} +FILE *OuvrirFichier () +{ + char NomFichier [50]; + FILE*PtFichier; + do + { + printf("entrez le nom de votre fichier (avec chemin d'acc�s):\n"); + fflush(stdin); + gets(NomFichier); + PtFichier=fopen(NomFichier,"w"); + } + while(PtFichier==NULL); + printf("fichier cree"); + return (PtFichier); + +} diff --git a/GaideC19.c b/GaideC19.c index a97fde4..3897da1 100644 --- a/GaideC19.c +++ b/GaideC19.c @@ -1,33 +1,33 @@ -#include -#include -void CharToString(char,char*); -int versAscii(char); -int main() -{ - char cara,b[9]; - for(cara= 'A'; cara<='Z';cara++) - { - CharToString(cara,b); - printf("%c: %Xh %s\n",cara, versAscii(cara), b); - - } - getch(); - return 0; -} - -int versAscii(char c) -{ - return (int)c; -} - -void CharToString(char cara, char* b) -{ - int i,m=1; - for(i=7;i>=0;i--) - { - if(cara&m) b[i]='1'; - else b[i]='0'; - m<<=1; - } - b[8]='\0'; -} +#include +#include +void CharToString(char,char*); +int versAscii(char); +int main() +{ + char cara,b[9]; + for(cara= 'A'; cara<='Z';cara++) + { + CharToString(cara,b); + printf("%c: %Xh %s\n",cara, versAscii(cara), b); + + } + getch(); + return 0; +} + +int versAscii(char c) +{ + return (int)c; +} + +void CharToString(char cara, char* b) +{ + int i,m=1; + for(i=7;i>=0;i--) + { + if(cara&m) b[i]='1'; + else b[i]='0'; + m<<=1; + } + b[8]='\0'; +} diff --git a/VANDAMME18.c b/VANDAMME18.c index d9ec778..d722e2c 100644 --- a/VANDAMME18.c +++ b/VANDAMME18.c @@ -1,92 +1,92 @@ -/* - * EX18 - * VAN DAMME Adrien - * Grp 2 - * La fct fgets permet de récuperer une chaine de caractère de façon sécurisée - * - */ - -#include -#include -#include -#include - -#define __STR_LENGHT__ 20 - -int EncoderContact(char *, char *, char *, char *, char *); -int EcrireContact(char *, char *, char *, char *, char *, FILE *); -FILE* OuvrirFichier(); - -int main() { - char Nom[__STR_LENGHT__],Prenom[__STR_LENGHT__],Tel[__STR_LENGHT__],GSM[__STR_LENGHT__],eMail[__STR_LENGHT__]; - FILE * fi; - fi = OuvrirFichier(); - - while(EncoderContact(Nom, Prenom, Tel, GSM, eMail)==-1); - while(EcrireContact(Nom, Prenom, Tel, GSM, eMail, fi)==-1); - fclose(fi); - return 0; -} - -int EncoderContact(char *nom, char *prenom, char *tel, char *gsm, char *email) -{ - int bug = 0; - char *p; - printf("Votre nom (%d caratères max)", (int)__STR_LENGHT__); - fflush(stdin);bug = fgets(nom, __STR_LENGHT__, stdin)?bug:-1; - p = strchr(nom, '\n'); - if(p)*p=0; - - printf("Votre prenom (%d caratères max)", (int)__STR_LENGHT__); - fflush(stdin);bug = fgets(prenom, __STR_LENGHT__, stdin)?bug:-1; - p = strchr(prenom, '\n'); - if(p)*p=0; - - printf("Votre telephone (%d caratères max)", (int)__STR_LENGHT__); - fflush(stdin);bug = fgets(tel, __STR_LENGHT__, stdin)?bug:-1; - p = strchr(tel, '\n'); - if(p)*p=0; - - printf("Votre gsm (%d caratères max)", (int)__STR_LENGHT__); - fflush(stdin);bug = fgets(gsm, __STR_LENGHT__, stdin)?bug:-1; - p = strchr(gsm, '\n'); - if(p)*p=0; - - printf("Votre email (%d caratères max)", (int)__STR_LENGHT__); - fflush(stdin);bug = fgets(email, __STR_LENGHT__, stdin)?bug:-1; - p = strchr(email, '\n'); - if(p)*p = 0; - - return bug; -} -int EcrireContact(char *nom, char *prenom, char *tel, char *gsm, char *email, FILE *f) -{ - int bug = 0; - clearerr(f); - fprintf(f, "Nom %s\n", nom); - bug = ferror(f)?-1:bug; - fprintf(f, "Prenom %s\n", prenom); - bug = ferror(f)?-1:bug; - fprintf(f, "Telephone %s\n", tel); - bug = ferror(f)?-1:bug; - fprintf(f, "GSM %s\n", gsm); - bug = ferror(f)?-1:bug; - fprintf(f, "Email %s\n", email); - bug = ferror(f)?-1:bug; - - return bug; -} -FILE* OuvrirFichier() -{ - FILE *fi; - char chemin[__STR_LENGHT__]; - do{ - do{ - printf("Emplacement de votre fichier (%d caratères max)", (int)__STR_LENGHT__); - fflush(stdin); - }while(fgets(chemin, __STR_LENGHT__, stdin) == NULL); - *(strchr(chemin, '\n')) = 0; - fi = fopen(chemin, "w"); - }while(fi == NULL); - return fi; -} +/* + * EX18 + * VAN DAMME Adrien + * Grp 2 + * La fct fgets permet de récuperer une chaine de caractère de façon sécurisée + * + */ + +#include +#include +#include +#include + +#define __STR_LENGHT__ 20 + +int EncoderContact(char *, char *, char *, char *, char *); +int EcrireContact(char *, char *, char *, char *, char *, FILE *); +FILE* OuvrirFichier(); + +int main() { + char Nom[__STR_LENGHT__],Prenom[__STR_LENGHT__],Tel[__STR_LENGHT__],GSM[__STR_LENGHT__],eMail[__STR_LENGHT__]; + FILE * fi; + fi = OuvrirFichier(); + + while(EncoderContact(Nom, Prenom, Tel, GSM, eMail)==-1); + while(EcrireContact(Nom, Prenom, Tel, GSM, eMail, fi)==-1); + fclose(fi); + return 0; +} + +int EncoderContact(char *nom, char *prenom, char *tel, char *gsm, char *email) +{ + int bug = 0; + char *p; + printf("Votre nom (%d caratères max)", (int)__STR_LENGHT__); + fflush(stdin);bug = fgets(nom, __STR_LENGHT__, stdin)?bug:-1; + p = strchr(nom, '\n'); + if(p)*p=0; + + printf("Votre prenom (%d caratères max)", (int)__STR_LENGHT__); + fflush(stdin);bug = fgets(prenom, __STR_LENGHT__, stdin)?bug:-1; + p = strchr(prenom, '\n'); + if(p)*p=0; + + printf("Votre telephone (%d caratères max)", (int)__STR_LENGHT__); + fflush(stdin);bug = fgets(tel, __STR_LENGHT__, stdin)?bug:-1; + p = strchr(tel, '\n'); + if(p)*p=0; + + printf("Votre gsm (%d caratères max)", (int)__STR_LENGHT__); + fflush(stdin);bug = fgets(gsm, __STR_LENGHT__, stdin)?bug:-1; + p = strchr(gsm, '\n'); + if(p)*p=0; + + printf("Votre email (%d caratères max)", (int)__STR_LENGHT__); + fflush(stdin);bug = fgets(email, __STR_LENGHT__, stdin)?bug:-1; + p = strchr(email, '\n'); + if(p)*p = 0; + + return bug; +} +int EcrireContact(char *nom, char *prenom, char *tel, char *gsm, char *email, FILE *f) +{ + int bug = 0; + clearerr(f); + fprintf(f, "Nom %s\n", nom); + bug = ferror(f)?-1:bug; + fprintf(f, "Prenom %s\n", prenom); + bug = ferror(f)?-1:bug; + fprintf(f, "Telephone %s\n", tel); + bug = ferror(f)?-1:bug; + fprintf(f, "GSM %s\n", gsm); + bug = ferror(f)?-1:bug; + fprintf(f, "Email %s\n", email); + bug = ferror(f)?-1:bug; + + return bug; +} +FILE* OuvrirFichier() +{ + FILE *fi; + char chemin[__STR_LENGHT__]; + do{ + do{ + printf("Emplacement de votre fichier (%d caratères max)", (int)__STR_LENGHT__); + fflush(stdin); + }while(fgets(chemin, __STR_LENGHT__, stdin) == NULL); + *(strchr(chemin, '\n')) = 0; + fi = fopen(chemin, "w"); + }while(fi == NULL); + return fi; +} diff --git a/VANDAMME19.c b/VANDAMME19.c index e7699fe..77f868d 100644 --- a/VANDAMME19.c +++ b/VANDAMME19.c @@ -1,26 +1,26 @@ -#include -#include -void CharToString(char,char*); -unsigned int toAscii(char); -int main() -{ - char cara,b[9]; - for(cara='A'; cara<='Z';cara++) - { - CharToString(cara,b); - printf("%c: %Xh %s\n",cara, toAscii(cara), b); - } - getch(); - return 0; -} - -unsigned int toAscii(char c) - return (unsigned int)c; - -void CharToString(char cara, char* b) -{ - int i; - for(i=0;i<8;i++) - b[8-i-1]=(cara&(1< +#include +void CharToString(char,char*); +unsigned int toAscii(char); +int main() +{ + char cara,b[9]; + for(cara='A'; cara<='Z';cara++) + { + CharToString(cara,b); + printf("%c: %Xh %s\n",cara, toAscii(cara), b); + } + getch(); + return 0; +} + +unsigned int toAscii(char c) + return (unsigned int)c; + +void CharToString(char cara, char* b) +{ + int i; + for(i=0;i<8;i++) + b[8-i-1]=(cara&(1< -#include -#include -#include - -#define __STR_LENGHT__ 20 - -int LireMots(char *, char **); -int trier (char **); -int cmpstr(char *, char *); -int affTab(char **); - -int main() { - char tab[20][20]; - char chemin[20] = "tt.txt"; - LireMots(chemin, tab); - affTab(tab); - trier(tab); - affTab(tab); - return 0; -} - - -int LireMots(char *chemin, char **tab) -{ - int i; - char c[__STR_LENGHT__]; - char *p; - FILE * fi; - if((fi=fopen(chemin, "r")) == NULL) - return -1; - for(i=0;i<20;i++) - { - fgets(c, 20,fi); - p = strchr(c, '\n'); - if(p)*p = 0; - strcpy(((char*)tab+(i*20)),c); - } - return 0; -} -int trier(char **tab) -{ - qsort(tab,20,20,cmpstr); -} -int affTab(char **tab) -{ - int i=0; - for(i=0;i<20;i++) - printf("%s\n", ((char*)tab+(i*20))); -} -int cmpstr(char *a, char *b) { - return strcmp(a, b); -} +/* + * EX20 + * VAN DAMME Adrien + * Grp 2 + * La fct fgets permet de récuperer une chaine de caractère de façon sécurisée + * + */ + +#include +#include +#include +#include + +#define __STR_LENGHT__ 20 + +int LireMots(char *, char **); +int trier (char **); +int cmpstr(char *, char *); +int affTab(char **); + +int main() { + char tab[20][20]; + char chemin[20] = "tt.txt"; + LireMots(chemin, tab); + affTab(tab); + trier(tab); + affTab(tab); + return 0; +} + + +int LireMots(char *chemin, char **tab) +{ + int i; + char c[__STR_LENGHT__]; + char *p; + FILE * fi; + if((fi=fopen(chemin, "r")) == NULL) + return -1; + for(i=0;i<20;i++) + { + fgets(c, 20,fi); + p = strchr(c, '\n'); + if(p)*p = 0; + strcpy(((char*)tab+(i*20)),c); + } + return 0; +} +int trier(char **tab) +{ + qsort(tab,20,20,cmpstr); +} +int affTab(char **tab) +{ + int i=0; + for(i=0;i<20;i++) + printf("%s\n", ((char*)tab+(i*20))); +} +int cmpstr(char *a, char *b) { + return strcmp(a, b); +} diff --git a/VANDAMME23.c b/VANDAMME23.c index fc640a0..483327d 100644 --- a/VANDAMME23.c +++ b/VANDAMME23.c @@ -1,232 +1,232 @@ -#include -#include -#include -#include -#include -#define __TVA__ 1.21 -#define __REDUC__ 0.9 -#define __MAXNBRART__ 3 - -#define __STRLEN__ 34 - -typedef struct { - char deisgnation[__STRLEN__]; - float prixHTVA; - int quant; -} Article; -typedef struct { - Article * article; - unsigned int nbrArt; -} Panier; - - - - -void EncoderDate(int*, int*, int*); -int DateValide (int, int, int); -void afficherArticle(Article * article, unsigned int nbrArt, FILE * file); -void encoderArticle(Article * article); - -int main() -{ - int j,m,a; - char continuer = 'y'; - FILE * file; - file = fopen("fact.txt","w"); - if(file == NULL) - { - printf("Erreur lors de l'ouvertur !\n"); - return -1; - } - - Panier panier; - panier.article = (Article *)malloc(sizeof(Article)); - panier.nbrArt = 1; - if(panier.article == NULL) - { - printf("ERREUR ALLOCATION !"); - free(panier.article); - return -1; - } - - do - { - EncoderDate(&j,&m,&a); - } - while (!DateValide(j, m, a)); - - do - { - if(panier.nbrArt <= __MAXNBRART__) - { - encoderArticle(&(panier.article[panier.nbrArt-1])); - printf("Y-a-t-il encore un article ?(Y|n)"); - fflush(stdin); - scanf("%c", &continuer); - if(panier.nbrArt < 3 && (continuer|0b00100000) == 'y') - { - panier.nbrArt++; - Article * tempArticle; - tempArticle = (Article*)realloc(panier.article, sizeof(Article)*(panier.nbrArt)); - if(panier.article == NULL) - { - printf("ERREUR ALLOCATION !"); - free(tempArticle); - free(panier.article); - return -1; - } - else - { - panier.article = tempArticle; - } - } - else - { - system("cls"); - printf("Vous avez ateint le nombre d'article maximum !\n\n"); - break; - } - } - }while((continuer|0b00100000) == 'y'); - //En t�te de la facture - printf("La Bulle Informatique\nRoute du Condroz 78, 4123 Neupre\n"); - printf("\nFacture a payer\n"); - printf("Date de facturation :"); - - fprintf(file,"La Bulle Informatique\nRoute du Condroz 78, 4123 Neupre\n"); - fprintf(file,"\nFacture a payer\n"); - fprintf(file,"Date de facturation :"); - if (j<10) - { - if (m<10) - { - printf("0%d/0%d/%d", j, m, a); - fprintf(file,"0%d/0%d/%d", j, m, a); - } - else - { - printf("0%d/%d/%d", j, m, a); - fprintf(file,"0%d/%d/%d", j, m, a); - } - } - else - { - if (m<10) - { - printf("%d/0%d/%d", j, m, a); - fprintf(file,"%d/0%d/%d", j, m, a); - } - else - { - printf("%d/%d/%d", j, m, a); - fprintf(file,"%d/%d/%d", j, m, a); - } - } - printf("%u\n", panier.nbrArt); - afficherArticle(panier.article,panier.nbrArt, file); - getch(); - fclose(file); - free(panier.article); - return 0; -} -void EncoderDate(int *j, int *m, int *a) -{ - printf("Entrez la date sous cette forme : jj/mm/aaaa\n"); - fflush(stdin); scanf("%d/%d/%d",j,m,a); -} - -int DateValide(int j, int m, int a) -{ - int bis; - if(m != 2) - { - if(m >= 1 && m <= 7) - { - if(m %2 == 0) - { - if(j >= 1 && j <= 30) return 1; - else return 0; - } - else - { - if(j >= 1 && j <= 31) return 1; - else return 0; - } - } - else if(m > 7 && m <= 12) - { - if(m %2 == 0) - { - if(j >= 1 && j <= 31) return 1; - else return 0; - } - else - { - if(j >= 1 && j <= 30) return 1; - else return 0; - } - } - else return 0; - } - else - { - if(a %100 == 0) - { - if(a %400 == 0) bis = 1; - else bis = 0; - } - else - { - if(a %4 == 0)bis = 1; - else bis = 0; - } - if(bis == 1) - { - if(j >= 1 && j <= 29) return 1; - else return 0; - } - else - { - if(j >= 1 && j <= 28) return 1; - else return 0; - } - } -} - -void afficherArticle(Article * article, unsigned int nbrArt,FILE * file) -{ - unsigned int i; - float prixTot=0; - fprintf(file,"\n|---------------------------------------------------------------------------------------------|\ - \n| Designation | prixHTVA | Quantite | 10%% | prixTVAC |"); - printf("\n|---------------------------------------------------------------------------------------------|\ - \n| Designation | prixHTVA | Quantite | 10%% | prixTVAC |"); - for(i=0;i=20)?'x':' ',\ - (article[i].quant>=20)?article[i].prixHTVA*__TVA__*__REDUC__*article[i].quant:article[i].prixHTVA*__TVA__*article[i].quant); - fprintf(file,"\n|%34s|%12.2f Eur |%14d| %c |%12.2f |",\ - article[i].deisgnation,article[i].prixHTVA,article[i].quant\ - ,(article[i].quant>=20)?'x':' ',\ - (article[i].quant>=20)?article[i].prixHTVA*__TVA__*__REDUC__*article[i].quant:article[i].prixHTVA*__TVA__*article[i].quant); - - prixTot += (article[i].quant>=20)?article[i].prixHTVA*__TVA__*__REDUC__*article[i].quant:article[i].prixHTVA*__TVA__*article[i].quant; - } - printf("\n|---------------------------------------------------------------------------------------------|"); - printf("\nPrix totale :%f", prixTot); - - fprintf(file,"\n|---------------------------------------------------------------------------------------------|"); - fprintf(file,"\nPrix totale :%f", prixTot); -} -void encoderArticle(Article * article) -{ - printf("\nVeuillez entrer le nom : "); - scanf("%34s", article->deisgnation); - printf("\nVeuillez entrer le prix a l'unite hors TVA : "); - scanf("%f", &article->prixHTVA); - printf("\nVeuillez entrer la quantite desiree : "); - fflush(stdin); - scanf("%d", &article->quant); -} +#include +#include +#include +#include +#include +#define __TVA__ 1.21 +#define __REDUC__ 0.9 +#define __MAXNBRART__ 3 + +#define __STRLEN__ 34 + +typedef struct { + char deisgnation[__STRLEN__]; + float prixHTVA; + int quant; +} Article; +typedef struct { + Article * article; + unsigned int nbrArt; +} Panier; + + + + +void EncoderDate(int*, int*, int*); +int DateValide (int, int, int); +void afficherArticle(Article * article, unsigned int nbrArt, FILE * file); +void encoderArticle(Article * article); + +int main() +{ + int j,m,a; + char continuer = 'y'; + FILE * file; + file = fopen("fact.txt","w"); + if(file == NULL) + { + printf("Erreur lors de l'ouvertur !\n"); + return -1; + } + + Panier panier; + panier.article = (Article *)malloc(sizeof(Article)); + panier.nbrArt = 1; + if(panier.article == NULL) + { + printf("ERREUR ALLOCATION !"); + free(panier.article); + return -1; + } + + do + { + EncoderDate(&j,&m,&a); + } + while (!DateValide(j, m, a)); + + do + { + if(panier.nbrArt <= __MAXNBRART__) + { + encoderArticle(&(panier.article[panier.nbrArt-1])); + printf("Y-a-t-il encore un article ?(Y|n)"); + fflush(stdin); + scanf("%c", &continuer); + if(panier.nbrArt < 3 && (continuer|0b00100000) == 'y') + { + panier.nbrArt++; + Article * tempArticle; + tempArticle = (Article*)realloc(panier.article, sizeof(Article)*(panier.nbrArt)); + if(panier.article == NULL) + { + printf("ERREUR ALLOCATION !"); + free(tempArticle); + free(panier.article); + return -1; + } + else + { + panier.article = tempArticle; + } + } + else + { + system("cls"); + printf("Vous avez ateint le nombre d'article maximum !\n\n"); + break; + } + } + }while((continuer|0b00100000) == 'y'); + //En t�te de la facture + printf("La Bulle Informatique\nRoute du Condroz 78, 4123 Neupre\n"); + printf("\nFacture a payer\n"); + printf("Date de facturation :"); + + fprintf(file,"La Bulle Informatique\nRoute du Condroz 78, 4123 Neupre\n"); + fprintf(file,"\nFacture a payer\n"); + fprintf(file,"Date de facturation :"); + if (j<10) + { + if (m<10) + { + printf("0%d/0%d/%d", j, m, a); + fprintf(file,"0%d/0%d/%d", j, m, a); + } + else + { + printf("0%d/%d/%d", j, m, a); + fprintf(file,"0%d/%d/%d", j, m, a); + } + } + else + { + if (m<10) + { + printf("%d/0%d/%d", j, m, a); + fprintf(file,"%d/0%d/%d", j, m, a); + } + else + { + printf("%d/%d/%d", j, m, a); + fprintf(file,"%d/%d/%d", j, m, a); + } + } + printf("%u\n", panier.nbrArt); + afficherArticle(panier.article,panier.nbrArt, file); + getch(); + fclose(file); + free(panier.article); + return 0; +} +void EncoderDate(int *j, int *m, int *a) +{ + printf("Entrez la date sous cette forme : jj/mm/aaaa\n"); + fflush(stdin); scanf("%d/%d/%d",j,m,a); +} + +int DateValide(int j, int m, int a) +{ + int bis; + if(m != 2) + { + if(m >= 1 && m <= 7) + { + if(m %2 == 0) + { + if(j >= 1 && j <= 30) return 1; + else return 0; + } + else + { + if(j >= 1 && j <= 31) return 1; + else return 0; + } + } + else if(m > 7 && m <= 12) + { + if(m %2 == 0) + { + if(j >= 1 && j <= 31) return 1; + else return 0; + } + else + { + if(j >= 1 && j <= 30) return 1; + else return 0; + } + } + else return 0; + } + else + { + if(a %100 == 0) + { + if(a %400 == 0) bis = 1; + else bis = 0; + } + else + { + if(a %4 == 0)bis = 1; + else bis = 0; + } + if(bis == 1) + { + if(j >= 1 && j <= 29) return 1; + else return 0; + } + else + { + if(j >= 1 && j <= 28) return 1; + else return 0; + } + } +} + +void afficherArticle(Article * article, unsigned int nbrArt,FILE * file) +{ + unsigned int i; + float prixTot=0; + fprintf(file,"\n|---------------------------------------------------------------------------------------------|\ + \n| Designation | prixHTVA | Quantite | 10%% | prixTVAC |"); + printf("\n|---------------------------------------------------------------------------------------------|\ + \n| Designation | prixHTVA | Quantite | 10%% | prixTVAC |"); + for(i=0;i=20)?'x':' ',\ + (article[i].quant>=20)?article[i].prixHTVA*__TVA__*__REDUC__*article[i].quant:article[i].prixHTVA*__TVA__*article[i].quant); + fprintf(file,"\n|%34s|%12.2f Eur |%14d| %c |%12.2f |",\ + article[i].deisgnation,article[i].prixHTVA,article[i].quant\ + ,(article[i].quant>=20)?'x':' ',\ + (article[i].quant>=20)?article[i].prixHTVA*__TVA__*__REDUC__*article[i].quant:article[i].prixHTVA*__TVA__*article[i].quant); + + prixTot += (article[i].quant>=20)?article[i].prixHTVA*__TVA__*__REDUC__*article[i].quant:article[i].prixHTVA*__TVA__*article[i].quant; + } + printf("\n|---------------------------------------------------------------------------------------------|"); + printf("\nPrix totale :%f", prixTot); + + fprintf(file,"\n|---------------------------------------------------------------------------------------------|"); + fprintf(file,"\nPrix totale :%f", prixTot); +} +void encoderArticle(Article * article) +{ + printf("\nVeuillez entrer le nom : "); + scanf("%34s", article->deisgnation); + printf("\nVeuillez entrer le prix a l'unite hors TVA : "); + scanf("%f", &article->prixHTVA); + printf("\nVeuillez entrer la quantite desiree : "); + fflush(stdin); + scanf("%d", &article->quant); +} diff --git a/VANDAMME24.c b/VANDAMME24.c index a25d27d..2b62c87 100644 --- a/VANDAMME24.c +++ b/VANDAMME24.c @@ -1,429 +1,484 @@ -#include -#include -#include -#include -#include - - -#define __TVA__ 1.21 -#define __REDUC__ 0.9 -#define __MAXNBRART__ 3 - -#define __STRLEN__ 34 - -typedef enum{FALSE,TRUE} Bool; -typedef struct { - char deisgnation[__STRLEN__]; - float prixHTVA; - int quant; -} Article; -typedef struct { - Article * article; - unsigned int nbrArt; -} Panier; -typedef struct{ - int jour,moi,annee; -} Date; -typedef struct{ - char rue[__STRLEN__],numero[__STRLEN__],localite[__STRLEN__]; - int codePostal; -} Adresse; -typedef struct{ - char telephone[13],email[__STRLEN__]; -} Contact; -typedef struct{ - char nom[__STRLEN__]; - Adresse adresse; - Contact contact; - Date anniversaire; - Panier panier; -} Client; - - - - -void encoderDate(Date *); -Bool dateValide (Date *); -void encoderArticle(Article *); -void encoderClient(Client *); -void sauvegarderClient(Client *, FILE *); -void afficherClient(Client *); -void encoderFacture(Panier *); -FILE * creerFichier(Date *, Client *); -Bool fichierExistant(char *); -void sauvergarderFacture(FILE *, Date *, Client *); -void afficherFacture(Date *, Client *); -void cleanFgets(char*); -int itoaY(int i, char*); -int itoaDM(int i, char*); - - -int main() -{ - Date date; - FILE * file; - Client client; - do - encoderDate(&date); - while(!dateValide(&date)); - - encoderClient(&client); - afficherClient(&client); - - file = creerFichier(&date, &client); - - client.panier.article = (Article *)malloc(sizeof(Article)); - client.panier.nbrArt = 1; - if(client.panier.article == NULL) - { - printf("ERREUR ALLOCATION ARTICLE!"); - free(client.panier.article); - return -1; - } - - encoderFacture(&client.panier); - afficherFacture(&date, &client); - sauvergarderFacture(file, &date, &client); - getch(); - fclose(file); - free(client.panier.article); - return 0; -} -void encoderDate(Date * date) -{ - printf("Entrez la date sous cette forme : jj/mm/aaaa\n"); - fflush(stdin); scanf("%d/%d/%d",&(date->jour),&(date->moi),&(date->annee)); -} - -Bool dateValide(Date * date) -{ - int j = date->jour; - int m = date->moi; - int a = date->annee; - int bis; - if(m != 2) - { - if(m >= 1 && m <= 7) - { - if(m %2 == 0) - { - if(j >= 1 && j <= 30) return TRUE; - else return FALSE; - } - else - { - if(j >= 1 && j <= 31) return TRUE; - else return FALSE; - } - } - else if(m > 7 && m <= 12) - { - if(m %2 == 0) - { - if(j >= 1 && j <= 31) return TRUE; - else return FALSE; - } - else - { - if(j >= 1 && j <= 30) return TRUE; - else return FALSE; - } - } - else return FALSE; - } - else - { - if(a %100 == 0) - { - if(a %400 == 0) bis = 1; - else bis = FALSE; - } - else - { - if(a %4 == 0)bis = 1; - else bis = FALSE; - } - if(bis == 1) - { - if(j >= 1 && j <= 29) return TRUE; - else return FALSE; - } - else - { - if(j >= 1 && j <= 28) return TRUE; - else return FALSE; - } - } -} - -void encoderArticle(Article * article) -{ - printf("\nVeuillez entrer le nom : "); - scanf("%34s", article->deisgnation); - printf("\nVeuillez entrer le prix a l'unite hors TVA : "); - scanf("%f", &article->prixHTVA); - printf("\nVeuillez entrer la quantite desiree : "); - fflush(stdin); - scanf("%d", &article->quant); -} - -void encoderClient(Client * client) -{ - printf("Encoage Client\n"); - fflush(stdin); - if(!(printf("Entrez la rue :") && !fflush(stdin) && fgets(client->adresse.rue,__STRLEN__,stdin) != NULL && \ - printf("\nEntrez le numero :" ) && !fflush(stdin) && fgets(client->adresse.numero,__STRLEN__,stdin) != NULL && \ - printf("\nEntrez la localité :") && !fflush(stdin) && fgets(client->adresse.localite,__STRLEN__,stdin) != NULL && \ - printf("\nEntrez le code postal :") && !fflush(stdin) && scanf("%d", &(client->adresse.codePostal)) && \ - printf("\nNom client :") && !fflush(stdin) && fgets(client->nom,__STRLEN__,stdin) != NULL)) - { - printf("\nErreur lors de l'encodage de l'adresse"); - exit(-1); - } - cleanFgets(client->adresse.rue);cleanFgets(client->adresse.numero);cleanFgets(client->adresse.localite); - cleanFgets(client->nom); - if(!(printf("\n Entrez le numéro de tél. :") && !fflush(stdin) &&fgets(client->contact.telephone,13,stdin) && \ - printf("\nEntrez l'adresse email :") && !fflush(stdin) &&fgets(client->contact.email,__STRLEN__,stdin))) - { - printf("\nErreur lors de l'encodage des coo de contact"); - exit(-1); - } - cleanFgets(client->contact.telephone);cleanFgets(client->contact.email); - printf("\n Anniversaire client :"); - do - encoderDate(&(client->anniversaire)); - while(!dateValide(&(client->anniversaire))); -} -void afficherClient(Client *client) -{ - printf("Client : %s\n", client->nom); - printf("rue : %s",client->adresse.rue); - printf("numero : %s",client->adresse.numero); - printf("localité : %s",client->adresse.localite); - printf("code postal : %d",client->adresse.codePostal); - printf("numéro de tél. : %s",client->contact.telephone); - printf("adresse email : %s",client->contact.email); -} -void sauvegarderClient(Client *client, FILE * file) -{ - fprintf(file, "Client : %s\n", client->nom); - fprintf(file, "rue : %s",client->adresse.rue); - fprintf(file, "numero : %s",client->adresse.numero); - fprintf(file, "localité : %s",client->adresse.localite); - fprintf(file, "code postal : %d",client->adresse.codePostal); - fprintf(file, "numéro de tél. : %s",client->contact.telephone); - fprintf(file, "adresse email : %s",client->contact.email); -} -void encoderFacture(Panier * panier) -{ - char continuer = 'y'; - do{ - if(panier->nbrArt <= __MAXNBRART__) - { - encoderArticle(&(panier->article[panier->nbrArt-1])); - printf("Y-a-t-il encore un article ?(Y|n)"); - fflush(stdin); - scanf("%c", &continuer); - if(panier->nbrArt < __MAXNBRART__ && (continuer|0b00100000) == 'y') - { - panier->nbrArt++; - Article * tempArticle; - tempArticle = (Article*)realloc(panier->article, sizeof(Article)*(panier->nbrArt)); - if(panier->article == NULL) - { - printf("ERREUR ALLOCATION !"); - free(tempArticle); - free(panier->article); - exit(-1); - } - else - { - panier->article = tempArticle; - } - } - else if((continuer|0b00100000) == 'y') - { - system("cls"); - printf("Vous avez ateint le nombre d'article maximum !\n\n"); - break; - } - } - }while((continuer|0b00100000) == 'y' && panier->nbrArt <= __MAXNBRART__); -} -FILE * creerFichier(Date * date, Client * client) -{ - char fileName[__STRLEN__*+16]; - fileName[0] = '\0'; - int i; - char buf[5]; - - //Toute cette partie aurais pus être remplacé par un sprintf - strcat(fileName,client->nom); - itoaY(date->annee, buf); - strcat(fileName,buf); - itoaDM(date->moi, buf); - strcat(fileName, buf); - itoaDM(date->jour, buf); - strcat(fileName, buf); - strcat(fileName,"_"); - - - for(i=1; i<= 99; i++)//Le caractère 10 n'existe pas, flem de coder pour avoir plus que 9 et aloc dynamique nécessaire - { - char fileNameTmp[__STRLEN__*+16]; - sprintf(fileNameTmp,"%s%d",fileName,i); - if(!fichierExistant(fileNameTmp)) - { - printf("%s\n", fileNameTmp); - FILE * f = fopen(fileNameTmp,"w"); - if(f==NULL) - { - printf("Erreur lors de l'ouverture du fichier"); - exit(-1); - } - else - return f; - } - } - return NULL; -} -Bool fichierExistant(char * filename) -{ - FILE * f = fopen(filename, "r"); - if(f==NULL) - return FALSE; - else - return TRUE; -} -void sauvergarderFacture(FILE * file, Date * date, Client * client) -{ - int i; - float prixTot = 0; - fprintf(file,"La Bulle Informatique\nRoute du Condroz 78, 4123 Neupre\n"); - fprintf(file,"\nFacture a payer\n"); - fprintf(file,"Date de facturation :"); - fprintf(file,"%02d/%02d/%02d", date->jour, date->moi, date->annee); - fprintf(file, "\n Info client :"); - sauvegarderClient(&client, file) - fprintf(file,"\n|---------------------------------------------------------------------------------------------|\ - \n| Designation | prixHTVA | Quantite | 10%% | prixTVAC |\ - \n|---------------------------------------------------------------------------------------------|"); - - for(i=0;client->panier.nbrArt>i;i++) - { - fprintf(file,"\n|%34s|%12.2f Eur |%14d| %c |%12.2f |",\ - client->panier.article[i].deisgnation,client->panier.article[i].prixHTVA,client->panier.article[i].quant\ - ,(client->panier.article[i].quant>=20)?'x':' ',\ - (client->panier.article[i].quant>=20)?client->panier.article[i].prixHTVA*__TVA__*__REDUC__*client->panier.article[i].quant:client->panier.article[i].prixHTVA*__TVA__*client->panier.article[i].quant); - prixTot += (client->panier.article[i].quant>=20)?client->panier.article[i].prixHTVA*__TVA__*__REDUC__*client->panier.article[i].quant:client->panier.article[i].prixHTVA*__TVA__*client->panier.article[i].quant; - } - fprintf(file,"\n|---------------------------------------------------------------------------------------------|"); - fprintf(file,"\nPrix totale :%f", prixTot); -} - -void afficherFacture(Date * date, Client * client) -{ - int i; - float prixTot = 0; - printf("La Bulle Informatique\nRoute du Condroz 78, 4123 Neupre\n"); - printf("\nFacture a payer\n"); - printf("Date de facturation :"); - printf("%02d/%02d/%02d", date->jour, date->moi, date->annee); - printf("\n Info client :"); - afficherClient(client); - printf("\n|---------------------------------------------------------------------------------------------|\ - \n| Designation | prixHTVA | Quantite | 10%% | prixTVAC |\ - \n|---------------------------------------------------------------------------------------------|"); - - for(i=0;client->panier.nbrArt>i;i++) - { - printf("\n|%34s|%12.2f Eur |%14d| %c |%12.2f |",\ - client->panier.article[i].deisgnation,client->panier.article[i].prixHTVA,client->panier.article[i].quant\ - ,(client->panier.article[i].quant>=20)?'x':' ',\ - (client->panier.article[i].quant>=20)?client->panier.article[i].prixHTVA*__TVA__*__REDUC__*client->panier.article[i].quant:client->panier.article[i].prixHTVA*__TVA__*client->panier.article[i].quant); - prixTot += (client->panier.article[i].quant>=20)?client->panier.article[i].prixHTVA*__TVA__*__REDUC__*client->panier.article[i].quant:client->panier.article[i].prixHTVA*__TVA__*client->panier.article[i].quant; - } - printf("\n|---------------------------------------------------------------------------------------------|"); - printf("\nPrix totale :%f", prixTot); -} - - -void cleanFgets(char * str) -{ - char *p = strchr(str, '\n'); - if(p!=NULL) - *p = '\0'; - else - { - printf("Une erreur est arrivé lors du nettoygae \\0"); - exit(-1); - } -} -int itoaY(int i, char * buf) -{ - buf [0] = '0'; - buf [1] = '0'; - buf [2] = '0'; - buf [3] = '0'; - buf [4] = '\0'; - int j; - if(!i) - return 1; - buf [3] = '1'; - for(j=1; j<=i && j<=9999 ; j++) - { - if(!(j%1000)) - { - buf[0]++; - buf[1]='0'; - buf[2]='0'; - buf[3]='0'; - } - else if(!(j%100)) - { - buf[1]++; - buf[2]='0'; - buf[3]='0'; - } - else if(!(j%10)) - { - buf[2]++; - buf[3]='0'; - } - else - { - buf[3]++; - } - } - if(j>9999) - return 0; - else - return 1; -} -int itoaDM(int i, char * buf) -{ - buf[0] = '0'; - buf[1] = '0'; - buf[2] = '\0'; - printf("%s\n", buf); - int j; - if(!i) - return 1; - buf[1]++; - for(j=1; j<=i && j<=99 ; j++) - { - if(!(j%10)) - { - (buf[0])++; - (buf[1])='0'; - } - else - { - (buf[1])++; - } - } - if(j>99) - return 0; - else - return 1; -} +#include +#include +#include +#include +#include +#include +#include + +#define __TVA__ 1.21 +#define __REDUC__ 0.9 +#define __MAXNBRART__ 3 + +#define __STRLEN__ 34 + +typedef enum{FALSE,TRUE} Bool; +typedef struct { + char deisgnation[__STRLEN__]; + float prixHTVA; + int quant; +} Article; +typedef struct { + Article * article; + unsigned int nbrArt; +} Panier; +typedef struct{ + int jour,moi,annee; +} Date; +typedef struct{ + char rue[__STRLEN__],numero[__STRLEN__],localite[__STRLEN__]; + int codePostal; +} Adresse; +typedef struct{ + char telephone[13],email[__STRLEN__]; +} Contact; +typedef struct{ + char nom[__STRLEN__]; + Adresse adresse; + Contact contact; + Date anniversaire; + int fidelite; + Panier panier; +} Client; + + + + +void encoderDate(Date *, char *); +Bool dateValide (Date *); +void encoderArticle(Article *); +void encoderClient(Client *); +void sauvegarderClient(Client *, FILE *, Date*); +void afficherClient(Client *, Date*); +void encoderFacture(Panier *); +FILE * creerFichier(Date *, Client *); +Bool fichierExistant(char *); +void sauvergarderFacture(FILE *, Date *, Client *); +void afficherFacture(Date *, Client *); +void cleanFgets(char*); +int itoaY(int i, char*); +int itoaDM(int i, char*); +Bool clean_keyboard(); +int ageClient(Client *, Date *); +int pointsFidelite(float); + + +int main() +{ + //printf("%d\n", pointsFidelite(52.23)); + Date date; + FILE * file; + Client client; + char tmp; + time_t curTimeStamp = time(NULL); + struct tm *locTime = localtime(&curTimeStamp); + locTime->tm_mon += 1; + locTime->tm_year += 1900; + printf("Voulez utilisez le temps 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"); + else + { + date.jour = locTime->tm_mday; + date.moi = locTime->tm_mon; + date.annee = locTime->tm_year; + // printf("%d/%d/%d\n", date.jour, date.moi, date.annee ); + } + + encoderClient(&client); + afficherClient(&client, &date); +printf("%d/%d/%d\n", date.jour, date.moi, date.annee ); + file = creerFichier(&date, &client); + + client.panier.article = (Article *)malloc(sizeof(Article)); + client.panier.nbrArt = 1; + if(client.panier.article == NULL) + { + printf("ERREUR ALLOCATION ARTICLE!"); + free(client.panier.article); + return -1; + } + + encoderFacture(&client.panier); + afficherFacture(&date, &client); + sauvergarderFacture(file, &date, &client); + // getch(); + fclose(file); + free(client.panier.article); + return 0; +} +void encoderDate(Date * date, char invite[__STRLEN__]) +{ + do { + printf("%s\n", invite); + printf("Entrez la date sous cette forme : jj/mm/aaaa\n"); + scanf("%d/%d/%d",&(date->jour),&(date->moi),&(date->annee)); + } while(!dateValide(date)); +} + +Bool dateValide(Date * date) +{ + int j = date->jour; + int m = date->moi; + int a = date->annee; + int bis; + if(m != 2) + { + if(m >= 1 && m <= 7) + { + if(m %2 == 0) + { + if(j >= 1 && j <= 30) return TRUE; + else return FALSE; + } + else + { + if(j >= 1 && j <= 31) return TRUE; + else return FALSE; + } + } + else if(m > 7 && m <= 12) + { + if(m %2 == 0) + { + if(j >= 1 && j <= 31) return TRUE; + else return FALSE; + } + else + { + if(j >= 1 && j <= 30) return TRUE; + else return FALSE; + } + } + else return FALSE; + } + else + { + if(a %100 == 0) + { + if(a %400 == 0) bis = 1; + else bis = FALSE; + } + else + { + if(a %4 == 0)bis = 1; + else bis = FALSE; + } + if(bis == 1) + { + if(j >= 1 && j <= 29) return TRUE; + else return FALSE; + } + else + { + if(j >= 1 && j <= 28) return TRUE; + else return FALSE; + } + } +} + +void encoderArticle(Article * article) +{ + printf("\nVeuillez entrer le nom : "); + clean_keyboard(); + scanf("%34s", article->deisgnation); + printf("\nVeuillez entrer le prix a l'unite hors TVA : "); + clean_keyboard(); + scanf("%f", &article->prixHTVA); + printf("\nVeuillez entrer la quantite desiree : "); + clean_keyboard(); + scanf("%d", &article->quant); +} + +void encoderClient(Client * client) +{ + printf("Encoage 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("\nErreur lors de l'encodage de l'adresse"); + exit(-1); + } + cleanFgets(client->adresse.rue);cleanFgets(client->adresse.numero);cleanFgets(client->adresse.localite); + cleanFgets(client->nom); + 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); + } + cleanFgets(client->contact.telephone);cleanFgets(client->contact.email); + encoderDate(&(client->anniversaire), "\nAnniversaire client:"); +} +void afficherClient(Client *client, Date *date) +{ + printf("Client : %s (%d)\n", client->nom, 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("code postal : %d\n",client->adresse.codePostal); + printf("numéro de tél. : %s\n",client->contact.telephone); + printf("adresse email : %s\n",client->contact.email); + printf("\nPoints de fidelite aqui : %d\n", client->fidelite); +} +void sauvegarderClient(Client *client, FILE * file, Date *date) +{ + fprintf(file, "Client : %s (%d)\n", client->nom, ageClient(client, date)); + 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, "code postal : %d\n",client->adresse.codePostal); + fprintf(file, "numéro de tél. : %s\n",client->contact.telephone); + fprintf(file, "adresse email : %s\n",client->contact.email); + fprintf(file, "\nPoints de fidelite aqui : %d\n", client->fidelite); +} +void encoderFacture(Panier * panier) +{ + char continuer = 'y'; + do{ + if(panier->nbrArt <= __MAXNBRART__) + { + encoderArticle(&(panier->article[panier->nbrArt-1])); + printf("Y-a-t-il encore un article ?(Y|n)"); + clean_keyboard(); + scanf("%c", &continuer); + if(panier->nbrArt < __MAXNBRART__ && (continuer|0b00100000) == 'y') + { + panier->nbrArt++; + Article * tempArticle; + tempArticle = (Article*)realloc(panier->article, sizeof(Article)*(panier->nbrArt)); + if(panier->article == NULL) + { + printf("ERREUR ALLOCATION !"); + free(tempArticle); + free(panier->article); + exit(-1); + } + else + { + panier->article = tempArticle; + } + } + else if((continuer|0b00100000) == 'y') + { + system("cls"); + printf("Vous avez ateint le nombre d'article maximum !\n\n"); + break; + } + } + }while((continuer|0b00100000) == 'y' && panier->nbrArt <= __MAXNBRART__); +} +FILE * creerFichier(Date * date, Client * client) +{ + char fileName[__STRLEN__+16]; + fileName[0] = '\0'; + char dir[__STRLEN__]; + int i; + char buf[5]; + printf("Dossier d'enregistrement : "); + clean_keyboard(); + scanf("%s", dir); + //Toute cette partie aurais pus être remplacé par un sprintf + strcat(fileName,client->nom); + itoaY(date->annee, buf); + strcat(fileName,buf); + itoaDM(date->moi, buf); + strcat(fileName, buf); + itoaDM(date->jour, buf); + strcat(fileName, buf); + strcat(fileName,"_"); + + + for(i=1; i<= 99; i++) + { + char fileNameTmp[__STRLEN__+16+255]; + sprintf(fileNameTmp,"%s%s%d.txt",dir,fileName,i); + if(!fichierExistant(fileNameTmp)) + { + FILE * f = fopen(fileNameTmp,"w"); + if(f==NULL) + { + printf("Erreur lors de l'ouverture du fichier"); + return creerFichier(date, client); + } + else + return f; + } + } + return NULL; +} +Bool fichierExistant(char * filename) +{ + FILE * f = fopen(filename, "r"); + if(f==NULL) + return FALSE; + else + return TRUE; +} +void sauvergarderFacture(FILE * file, Date * date, Client * client) +{ + int i; + float prixTot = 0; + fprintf(file,"La Bulle Informatique\nRoute du Condroz 78, 4123 Neupre\n"); + fprintf(file,"\nFacture a payer\n"); + fprintf(file,"Date de facturation :"); + fprintf(file,"%02d/%02d/%02d", date->jour, date->moi, date->annee); + fprintf(file, "\n Info client :"); + sauvegarderClient(client, file, date); + fprintf(file,"\n|---------------------------------------------------------------------------------------------|\ + \n| Designation | prixHTVA | Quantite | 10%% | prixTVAC |\ + \n|---------------------------------------------------------------------------------------------|"); + + for(i=0;client->panier.nbrArt>i;i++) + { + fprintf(file,"\n|%34s|%12.2f Eur |%14d| %c |%12.2f |",\ + client->panier.article[i].deisgnation,client->panier.article[i].prixHTVA,client->panier.article[i].quant\ + ,(client->panier.article[i].quant>=20)?'x':' ',\ + (client->panier.article[i].quant>=20)?client->panier.article[i].prixHTVA*__TVA__*__REDUC__*client->panier.article[i].quant:client->panier.article[i].prixHTVA*__TVA__*client->panier.article[i].quant); + prixTot += (client->panier.article[i].quant>=20)?client->panier.article[i].prixHTVA*__TVA__*__REDUC__*client->panier.article[i].quant:client->panier.article[i].prixHTVA*__TVA__*client->panier.article[i].quant; + } + fprintf(file,"\n|---------------------------------------------------------------------------------------------|"); + fprintf(file,"\nPrix totale :%f", prixTot); + fprintf(file, "\nPoints de fidelite aqui : %d\n", client->fidelite); +} + +void afficherFacture(Date * date, Client * client) +{ + int i; + float prixTot = 0; + printf("La Bulle Informatique\nRoute du Condroz 78, 4123 Neupre\n"); + printf("\nFacture a payer\n"); + printf("Date de facturation :"); + printf("%02d/%02d/%02d", date->jour, date->moi, date->annee); + printf("\n Info client :"); + afficherClient(client, date); + printf("\n|---------------------------------------------------------------------------------------------|\ + \n| Designation | prixHTVA | Quantite | 10%% | prixTVAC |\ + \n|---------------------------------------------------------------------------------------------|"); + + for(i=0;client->panier.nbrArt>i;i++) + { + printf("\n|%34s|%12.2f Eur |%14d| %c |%12.2f |",\ + client->panier.article[i].deisgnation,client->panier.article[i].prixHTVA,client->panier.article[i].quant\ + ,(client->panier.article[i].quant>=20)?'x':' ',\ + (client->panier.article[i].quant>=20)?client->panier.article[i].prixHTVA*__TVA__*__REDUC__*client->panier.article[i].quant:client->panier.article[i].prixHTVA*__TVA__*client->panier.article[i].quant); + prixTot += (client->panier.article[i].quant>=20)?client->panier.article[i].prixHTVA*__TVA__*__REDUC__*client->panier.article[i].quant:client->panier.article[i].prixHTVA*__TVA__*client->panier.article[i].quant; + } + printf("\n|---------------------------------------------------------------------------------------------|"); + client->fidelite = pointsFidelite(prixTot); + printf("\nPrix totale :%f", prixTot); + printf("\nPoints de fidelite aqui : %d\n", client->fidelite); + +} + + +void cleanFgets(char * str) +{ + char *p = strchr(str, '\n'); + if(p!=NULL) + *p = '\0'; + else + { + printf("Une erreur est arrivé lors du nettoygae \\0"); + exit(-1); + } +} +int itoaY(int i, char * buf) +{ + buf [0] = '0'; + buf [1] = '0'; + buf [2] = '0'; + buf [3] = '0'; + buf [4] = '\0'; + int j; + if(!i) + return 1; + buf [3] = '1'; + for(j=1; j<=i && j<=9999 ; j++) + { + if(!(j%1000)) + { + buf[0]++; + buf[1]='0'; + buf[2]='0'; + buf[3]='0'; + } + else if(!(j%100)) + { + buf[1]++; + buf[2]='0'; + buf[3]='0'; + } + else if(!(j%10)) + { + buf[2]++; + buf[3]='0'; + } + else + { + buf[3]++; + } + } + if(j>9999) + return 0; + else + return 1; +} +int itoaDM(int i, char * buf) +{ + buf[0] = '0'; + buf[1] = '0'; + buf[2] = '\0'; + int j; + if(!i) + return 1; + buf[1]++; + for(j=1; j<=i && j<=99 ; j++) + { + if(!(j%10)) + { + (buf[0])++; + (buf[1])='0'; + } + else + { + (buf[1])++; + } + } + if(j>99) + return 0; + else + return 1; +} + +Bool clean_keyboard() +{ + fflush(stdin); + // char c; +//while ((c = getchar()) != '\n' && c != EOF) { } + /* do { + c = getc(stdin); + printf("%c\n", c); + } while (c != '\n' && c != EOF);*/ + 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é + { + return (date->annee - client->anniversaire.annee); + } + else + return (date->annee - client->anniversaire.annee - 1); +} + +int pointsFidelite(float prix) +{ + return (int)(prix/10); +} diff --git a/VANDAMME27.c b/VANDAMME27.c new file mode 100644 index 0000000..12052b1 --- /dev/null +++ b/VANDAMME27.c @@ -0,0 +1,618 @@ +#include +#include +#include +#include +#include +#include +#include + +#define __TVA__ 1.21 +#define __REDUC__ 0.9 +#define __MAXNBRART__ 3 + +#define __STRLEN__ 34 +#define __STRLEN_FILE__ 500 + +typedef enum{FALSE,TRUE} Bool; +typedef struct { + char deisgnation[__STRLEN__]; + float prixHTVA; + int quant; +} Article; +typedef struct { + Article * article; + unsigned int nbrArt; +} Panier; +typedef struct{ + int jour,moi,annee; +} Date; +typedef struct{ + char rue[__STRLEN__],numero[__STRLEN__],localite[__STRLEN__]; + int codePostal; +} Adresse; +typedef struct{ + char telephone[13],email[__STRLEN__]; +} Contact; +typedef struct{ + char nom[__STRLEN__]; + Adresse adresse; + Contact contact; + Date anniversaire; + int fidelite; + Panier panier; +} Client; + + + + +void encoderDate(Date *, char *); +Bool dateValide (Date *); +void encoderArticle(Article *); +void encoderClient(Client *); +void sauvegarderClient(Client *, FILE *, Date*); +void afficherClient(Client *, Date *); +void encoderFacture(Panier *); +FILE * creerFichier(Date *, Client *); +Bool fichierExistant(char *); +void sauvergarderFacture(FILE *, Date *, Client *); +void afficherFacture(Date *, Client *); +void cleanFgets(char*); +int itoaY(int i, char*); +int itoaDM(int i, char*); +Bool clean_keyboard(); +int ageClient(Client *, Date *); +int pointsFidelite(float); +void gestionFacture(Client *, Date *); +Client * rechercheClient(char *, FILE *, Date *); +Bool gestionClient(Client *, Date *); +FILE * localiserFichierClients(char *); +int ajouterClientBin(FILE *, Client * client); + +int main() +{ + //printf("%d\n", pointsFidelite(52.23)); + FILE * clientF; + Date date; + char tmp; + Bool w; + time_t curTimeStamp = time(NULL); + struct tm *locTime = localtime(&curTimeStamp); + 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"); + else + { + date.jour = locTime->tm_mday; + date.moi = locTime->tm_mon; + date.annee = locTime->tm_year; + // printf("%d/%d/%d\n", date->jour, date->moi, date->annee ); + } + + Client * client; + char nomClient[__STRLEN__]; + char fichierClient[__STRLEN_FILE__]; + int choixMenu; + clientF = localiserFichierClients(fichierClient); + while(w) + { + printf("1. Nouveau client\n"); + printf("2. Client enregistré\n"); + do{ + printf("Choix (1|2):");clean_keyboard();scanf("%d", &choixMenu); + }while(!(choixMenu<=2 && choixMenu>=1)); + switch (choixMenu) + { + case 1: + client = malloc(sizeof(Client)); + encoderClient(client); + afficherClient(client, &date); + ajouterClientBin(clientF, client); + w = gestionClient(client, &date); + break; + case 2: + printf("Nom du client (sensible a la casse) : "); + clean_keyboard();scanf("%s", nomClient); + client = rechercheClient(nomClient, clientF, &date); + if(client != NULL) + { + w = gestionClient(client, &date); + } + else + { + printf("Client non trouvé !\n"); + printf("%d",(int)sizeof(Client)); + } + break; + } + } + fclose(clientF); + return 0; +} +void encoderDate(Date * date, char invite[__STRLEN__]) +{ + do { + printf("%s\n", invite); + printf("Entrez la date sous cette forme : jj/mm/aaaa\n"); + scanf("%d/%d/%d",&(date->jour),&(date->moi),&(date->annee)); + } while(!dateValide(date)); +} + +Bool dateValide(Date * date) +{ + int j = date->jour; + int m = date->moi; + int a = date->annee; + int bis; + if(m != 2) + { + if(m >= 1 && m <= 7) + { + if(m %2 == 0) + { + if(j >= 1 && j <= 30) return TRUE; + else return FALSE; + } + else + { + if(j >= 1 && j <= 31) return TRUE; + else return FALSE; + } + } + else if(m > 7 && m <= 12) + { + if(m %2 == 0) + { + if(j >= 1 && j <= 31) return TRUE; + else return FALSE; + } + else + { + if(j >= 1 && j <= 30) return TRUE; + else return FALSE; + } + } + else return FALSE; + } + else + { + if(a %100 == 0) + { + if(a %400 == 0) bis = 1; + else bis = FALSE; + } + else + { + if(a %4 == 0)bis = 1; + else bis = FALSE; + } + if(bis == 1) + { + if(j >= 1 && j <= 29) return TRUE; + else return FALSE; + } + else + { + if(j >= 1 && j <= 28) return TRUE; + else return FALSE; + } + } +} + +void encoderArticle(Article * article) +{ + printf("\nVeuillez entrer le nom : "); + clean_keyboard(); + scanf("%34s", article->deisgnation); + printf("\nVeuillez entrer le prix a l'unite hors TVA : "); + clean_keyboard(); + scanf("%f", &article->prixHTVA); + printf("\nVeuillez entrer la quantite desiree : "); + clean_keyboard(); + scanf("%d", &article->quant); +} + +void encoderClient(Client * client) +{ + printf("Encoage 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("\nErreur lors de l'encodage de l'adresse"); + exit(-1); + } + cleanFgets(client->adresse.rue);cleanFgets(client->adresse.numero);cleanFgets(client->adresse.localite); + cleanFgets(client->nom); + 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); + } + cleanFgets(client->contact.telephone);cleanFgets(client->contact.email); + encoderDate(&(client->anniversaire), "\nAnniversaire client:"); +} +void afficherClient(Client *client, Date *date) +{ + printf("Client : %s (%d)\n", client->nom, 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("code postal : %d\n",client->adresse.codePostal); + printf("numéro de tél. : %s\n",client->contact.telephone); + printf("adresse email : %s\n",client->contact.email); + printf("\nPoints de fidelite aqui : %d\n", client->fidelite); +} +void sauvegarderClient(Client *client, FILE * file, Date *date) +{ + fprintf(file, "Client : %s (%d)\n", client->nom, ageClient(client, date)); + 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, "code postal : %d\n",client->adresse.codePostal); + fprintf(file, "numéro de tél. : %s\n",client->contact.telephone); + fprintf(file, "adresse email : %s\n",client->contact.email); + fprintf(file, "\nPoints de fidelite aqui : %d\n", client->fidelite); +} +void encoderFacture(Panier * panier) +{ + char continuer = 'y'; + do{ + if(panier->nbrArt <= __MAXNBRART__) + { + encoderArticle(&(panier->article[panier->nbrArt-1])); + printf("Y-a-t-il encore un article ?(Y|n)"); + clean_keyboard(); + scanf("%c", &continuer); + if(panier->nbrArt < __MAXNBRART__ && (continuer|0b00100000) == 'y') + { + panier->nbrArt++; + Article * tempArticle; + tempArticle = (Article*)realloc(panier->article, sizeof(Article)*(panier->nbrArt)); + if(panier->article == NULL) + { + printf("ERREUR ALLOCATION !"); + free(tempArticle); + free(panier->article); + exit(-1); + } + else + { + panier->article = tempArticle; + } + } + else if((continuer|0b00100000) == 'y') + { + system("cls"); + printf("Vous avez ateint le nombre d'article maximum !\n\n"); + break; + } + } + }while((continuer|0b00100000) == 'y' && panier->nbrArt <= __MAXNBRART__); +} +FILE * creerFichier(Date * date, Client * client) +{ + char fileName[__STRLEN__+16]; + fileName[0] = '\0'; + char dir[__STRLEN__]; + int i; + char buf[5]; + printf("Dossier d'enregistrement : "); + clean_keyboard(); + scanf("%s", dir); + //Toute cette partie aurais pus être remplacé par un sprintf + strcat(fileName,client->nom); + itoaY(date->annee, buf); + strcat(fileName,buf); + itoaDM(date->moi, buf); + strcat(fileName, buf); + itoaDM(date->jour, buf); + strcat(fileName, buf); + strcat(fileName,"_"); + + + for(i=1; i<= 99; i++) + { + char fileNameTmp[__STRLEN__+16+255]; + sprintf(fileNameTmp,"%s%s%d.txt",dir,fileName,i); + if(!fichierExistant(fileNameTmp)) + { + FILE * f = fopen(fileNameTmp,"w"); + if(f==NULL) + { + printf("Erreur lors de l'ouverture du fichier"); + return creerFichier(date, client); + } + else + return f; + } + } + return NULL; +} +Bool fichierExistant(char * filename) +{ + FILE * f = fopen(filename, "r"); + fclose(f); + if(f==NULL) + return FALSE; + else + return TRUE; +} +void sauvergarderFacture(FILE * file, Date * date, Client * client) +{ + int i; + float prixTot = 0; + fprintf(file,"La Bulle Informatique\nRoute du Condroz 78, 4123 Neupre\n"); + fprintf(file,"\nFacture a payer\n"); + fprintf(file,"Date de facturation :"); + fprintf(file,"%02d/%02d/%02d", date->jour, date->moi, date->annee); + fprintf(file, "\n Info client :"); + sauvegarderClient(client, file, date); + fprintf(file,"\n|---------------------------------------------------------------------------------------------|\ + \n| Designation | prixHTVA | Quantite | 10%% | prixTVAC |\ + \n|---------------------------------------------------------------------------------------------|"); + + for(i=0;client->panier.nbrArt>i;i++) + { + fprintf(file,"\n|%34s|%12.2f Eur |%14d| %c |%12.2f |",\ + client->panier.article[i].deisgnation,client->panier.article[i].prixHTVA,client->panier.article[i].quant\ + ,(client->panier.article[i].quant>=20)?'x':' ',\ + (client->panier.article[i].quant>=20)?client->panier.article[i].prixHTVA*__TVA__*__REDUC__*client->panier.article[i].quant:client->panier.article[i].prixHTVA*__TVA__*client->panier.article[i].quant); + prixTot += (client->panier.article[i].quant>=20)?client->panier.article[i].prixHTVA*__TVA__*__REDUC__*client->panier.article[i].quant:client->panier.article[i].prixHTVA*__TVA__*client->panier.article[i].quant; + } + fprintf(file,"\n|---------------------------------------------------------------------------------------------|"); + fprintf(file,"\nPrix totale :%f", prixTot); + fprintf(file, "\nPoints de fidelite aqui : %d\n", client->fidelite); +} + +void afficherFacture(Date * date, Client * client) +{ + int i; + float prixTot = 0; + printf("La Bulle Informatique\nRoute du Condroz 78, 4123 Neupre\n"); + printf("\nFacture a payer\n"); + printf("Date de facturation :"); + printf("%02d/%02d/%02d", date->jour, date->moi, date->annee); + printf("\n Info client :"); + afficherClient(client, date); + printf("\n|---------------------------------------------------------------------------------------------|\ + \n| Designation | prixHTVA | Quantite | 10%% | prixTVAC |\ + \n|---------------------------------------------------------------------------------------------|"); + + for(i=0;client->panier.nbrArt>i;i++) + { + printf("\n|%34s|%12.2f Eur |%14d| %c |%12.2f |",\ + client->panier.article[i].deisgnation,client->panier.article[i].prixHTVA,client->panier.article[i].quant\ + ,(client->panier.article[i].quant>=20)?'x':' ',\ + (client->panier.article[i].quant>=20)?client->panier.article[i].prixHTVA*__TVA__*__REDUC__*client->panier.article[i].quant:client->panier.article[i].prixHTVA*__TVA__*client->panier.article[i].quant); + prixTot += (client->panier.article[i].quant>=20)?client->panier.article[i].prixHTVA*__TVA__*__REDUC__*client->panier.article[i].quant:client->panier.article[i].prixHTVA*__TVA__*client->panier.article[i].quant; + } + printf("\n|---------------------------------------------------------------------------------------------|"); + client->fidelite = pointsFidelite(prixTot); + printf("\nPrix totale :%f", prixTot); + printf("\nPoints de fidelite aqui : %d\n", client->fidelite); + +} + + +void cleanFgets(char * str) +{ + char *p = strchr(str, '\n'); + if(p!=NULL) + *p = '\0'; + else + { + printf("Une erreur est arrivé lors du nettoygae \\0"); + exit(-1); + } +} +int itoaY(int i, char * buf) +{ + buf [0] = '0'; + buf [1] = '0'; + buf [2] = '0'; + buf [3] = '0'; + buf [4] = '\0'; + int j; + if(!i) + return 1; + buf [3] = '1'; + for(j=1; j<=i && j<=9999 ; j++) + { + if(!(j%1000)) + { + buf[0]++; + buf[1]='0'; + buf[2]='0'; + buf[3]='0'; + } + else if(!(j%100)) + { + buf[1]++; + buf[2]='0'; + buf[3]='0'; + } + else if(!(j%10)) + { + buf[2]++; + buf[3]='0'; + } + else + { + buf[3]++; + } + } + if(j>9999) + return 0; + else + return 1; +} +int itoaDM(int i, char * buf) +{ + buf[0] = '0'; + buf[1] = '0'; + buf[2] = '\0'; + int j; + if(!i) + return 1; + buf[1]++; + for(j=1; j<=i && j<=99 ; j++) + { + if(!(j%10)) + { + (buf[0])++; + (buf[1])='0'; + } + else + { + (buf[1])++; + } + } + if(j>99) + return 0; + else + return 1; +} + +Bool clean_keyboard() +{ + fflush(stdin); + // char c; +//while ((c = getchar()) != '\n' && c != EOF) { } + /* do { + c = getc(stdin); + printf("%c\n", c); + } while (c != '\n' && c != EOF);*/ + 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é + { + return (date->annee - client->anniversaire.annee); + } + else + return (date->annee - client->anniversaire.annee - 1); +} + +int pointsFidelite(float prix) +{ + return (int)(prix/10); +} + + +void gestionFacture(Client * client, Date * date) +{ + FILE * file; + + + printf("%d/%d/%d\n", date->jour, date->moi, date->annee ); + file = creerFichier(date, client); + + client->panier.article = (Article *)malloc(sizeof(Article)); + client->panier.nbrArt = 1; + if(client->panier.article == NULL) + { + printf("ERREUR ALLOCATION ARTICLE!"); + free(client->panier.article); + exit(-1); + } + + encoderFacture(&client->panier); + afficherFacture(date, client); + sauvergarderFacture(file, date, client); + // getch(); + fclose(file); + free(client->panier.article); +} + +Client * rechercheClient(char nom[__STRLEN__], FILE * clientF, Date * date) +{ + Client * client = NULL; + client = malloc(sizeof(Client)); + fseek(clientF, 0, SEEK_SET); + clearerr(clientF); //Clear EOF + do + { + fread(client, sizeof(Client), 1, clientF); + }while(!feof(clientF) && strcmp(client->nom, nom)); + if(feof(clientF)) + return NULL; + else + return client; +} + +Bool gestionClient(Client * client, Date * date) +{ + char choix; + while(1) + { + do + { + printf("A. Donnees client\n"); + printf("B. Facture\n"); + printf("C. Retour\n"); + printf("D. Quitter"); + clean_keyboard();scanf("%c", &choix); + choix |= 0b00100000; + }while(!(choix == 'a' || choix == 'b' || choix == 'c' || choix == 'd')); + switch (choix) { + case 'a': + afficherClient(client, date); + break; + case 'b': + gestionFacture(client, date); + break; + case 'c': + return 1; + break; + case 'd': + return 0; + break; + } + } +} + +FILE * localiserFichierClients(char fichierClient[__STRLEN_FILE__]) +{ + FILE * clientF; + char rep[__STRLEN_FILE__]; + char repTmp[__STRLEN_FILE__]; + printf("Repertoir ou se trouve le fichier client.dat"); + clean_keyboard(); + scanf("%s", rep); + sprintf(repTmp,"%sclients.dat", rep); + clientF = fopen(repTmp, "r"); + if(clientF == NULL) + { + fclose(clientF); + clientF = fopen(repTmp, "w"); + fclose(clientF); + } + fclose(clientF); + clientF = fopen(repTmp, "r+b"); + if(clientF == NULL) + { + printf("Erreur ouverture fichier"); + return localiserFichierClients(fichierClient); + } + strcpy(fichierClient, repTmp); + return clientF; +} + +int ajouterClientBin(FILE * clientF, Client * client) +{ + int posi; + fseek(clientF, 0, SEEK_END); + posi = ftell(clientF); + fwrite(client, sizeof(Client), 1, clientF); + fflush(clientF); + return posi; +} diff --git a/VANDAMME27.o b/VANDAMME27.o new file mode 100644 index 0000000000000000000000000000000000000000..f7fa6bcd9fd19e78a0a7b08f05fdfad64d515da1 GIT binary patch literal 13017 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 -#include -#define Taux 0.21 - -void EncoderDate(int*, int*, int*); -int DateValide (int, int, int); - -int main() -{ - //Declarer et initialiser les variables - float PrixU=0; - float TVA=0; - int Qte=25; - float PrixHT=0; - float PrixTTC=0; - float PrixTot=0; - int j=0; - int m=0; - int a=0; - int TorF; - - //Encoder et vérifier la date - do - { - EncoderDate(&j,&m,&a); - TorF = DateValide(j, m, a); - } - while (TorF == 0); - - //Encoder le prix et la quantité - printf("Veuillez entrer le prix a l'unite hors TVA : "); - scanf("%f", &PrixU); - printf("Veuillez entrer la quantite desiree : "); - fflush(stdin); - scanf("%d", &Qte); - - //En tête de la facture - printf("La Bulle Informatique\nRoute du Condroz 78, 4123 Neupre\n"); - printf("\nFacture a payer\n"); - - //Calcul des prix - printf("\nHewlett-Packard ProBook650 : \t%10.2f Euros X%1d\n",PrixU,Qte); - PrixHT = PrixU*Qte; - printf("Prix HTVA : \t%10.2f Euros\n",PrixHT); - TVA = PrixHT*Taux; - printf("TVA (21%%) : \t%10.2f Euros\n",TVA); - PrixTTC = PrixHT + TVA; - printf("\nPrix TTC : \t%10.2f Euros\n",PrixTTC); - PrixTot = PrixTTC - PrixTTC/10; - if (Qte>=20) - {printf("Remise de 10%% a l'achat d'au moins 20 pieces\n"); - printf("Prix total : \t%10.2f Euros\n",PrixTot); - } - printf("Date de facturation :"); - if (j<10) - { - if (m<10) - printf("0%d/0%d/%d", j, m, a); - else - printf("0%d/%d/%d", j, m, a); - } - else - { - if (m<10) - printf("%d/0%d/%d", j, m, a); - else - printf("%d/%d/%d", j, m, a); - } - getch(); - return 0; -} -void EncoderDate(int *j, int *m, int *a) -{ - printf("Entrez la date sous cette forme : jj/mm/aaaa\n"); - fflush(stdin); scanf("%d/%d/%d",j,m,a); -} - -int DateValide(int j, int m, int a) -{ - int bis; - if(m != 2) - { - if(m >= 1 && m <= 7) - { - if(m %2 == 0) - { - if(j >= 1 && j <= 30) return 1; - else return 0; - } - else - { - if(j >= 1 && j <= 31) return 1; - else return 0; - } - } - else if(m > 7 && m <= 12) - { - if(m %2 == 0) - { - if(j >= 1 && j <= 31) return 1; - else return 0; - } - else - { - if(j >= 1 && j <= 30) return 1; - else return 0; - } - } - else return 0; - } - else - { - if(a %100 == 0) - { - if(a %400 == 0) bis = 1; - else bis = 0; - } - else - { - if(a %4 == 0)bis = 1; - else bis = 0; - } - if(bis == 1) - { - if(j >= 1 && j <= 29) return 1; - else return 0; - } - else - { - if(j >= 1 && j <= 28) return 1; - else return 0; - } - } -} +#include +#include +#define Taux 0.21 + +void EncoderDate(int*, int*, int*); +int DateValide (int, int, int); + +int main() +{ + //Declarer et initialiser les variables + float PrixU=0; + float TVA=0; + int Qte=25; + float PrixHT=0; + float PrixTTC=0; + float PrixTot=0; + int j=0; + int m=0; + int a=0; + int TorF; + + //Encoder et vérifier la date + do + { + EncoderDate(&j,&m,&a); + TorF = DateValide(j, m, a); + } + while (TorF == 0); + + //Encoder le prix et la quantité + printf("Veuillez entrer le prix a l'unite hors TVA : "); + scanf("%f", &PrixU); + printf("Veuillez entrer la quantite desiree : "); + fflush(stdin); + scanf("%d", &Qte); + + //En tête de la facture + printf("La Bulle Informatique\nRoute du Condroz 78, 4123 Neupre\n"); + printf("\nFacture a payer\n"); + + //Calcul des prix + printf("\nHewlett-Packard ProBook650 : \t%10.2f Euros X%1d\n",PrixU,Qte); + PrixHT = PrixU*Qte; + printf("Prix HTVA : \t%10.2f Euros\n",PrixHT); + TVA = PrixHT*Taux; + printf("TVA (21%%) : \t%10.2f Euros\n",TVA); + PrixTTC = PrixHT + TVA; + printf("\nPrix TTC : \t%10.2f Euros\n",PrixTTC); + PrixTot = PrixTTC - PrixTTC/10; + if (Qte>=20) + {printf("Remise de 10%% a l'achat d'au moins 20 pieces\n"); + printf("Prix total : \t%10.2f Euros\n",PrixTot); + } + printf("Date de facturation :"); + if (j<10) + { + if (m<10) + printf("0%d/0%d/%d", j, m, a); + else + printf("0%d/%d/%d", j, m, a); + } + else + { + if (m<10) + printf("%d/0%d/%d", j, m, a); + else + printf("%d/%d/%d", j, m, a); + } + getch(); + return 0; +} +void EncoderDate(int *j, int *m, int *a) +{ + printf("Entrez la date sous cette forme : jj/mm/aaaa\n"); + fflush(stdin); scanf("%d/%d/%d",j,m,a); +} + +int DateValide(int j, int m, int a) +{ + int bis; + if(m != 2) + { + if(m >= 1 && m <= 7) + { + if(m %2 == 0) + { + if(j >= 1 && j <= 30) return 1; + else return 0; + } + else + { + if(j >= 1 && j <= 31) return 1; + else return 0; + } + } + else if(m > 7 && m <= 12) + { + if(m %2 == 0) + { + if(j >= 1 && j <= 31) return 1; + else return 0; + } + else + { + if(j >= 1 && j <= 30) return 1; + else return 0; + } + } + else return 0; + } + else + { + if(a %100 == 0) + { + if(a %400 == 0) bis = 1; + else bis = 0; + } + else + { + if(a %4 == 0)bis = 1; + else bis = 0; + } + if(bis == 1) + { + if(j >= 1 && j <= 29) return 1; + else return 0; + } + else + { + if(j >= 1 && j <= 28) return 1; + else return 0; + } + } +} diff --git a/colin22.c b/colin22.c index 383c4bb..fdeeb8d 100644 --- a/colin22.c +++ b/colin22.c @@ -1,258 +1,258 @@ -//Compl�tez le programme en respectant les consignes donn�es en commentaires. -//Biblioth�ques (2 pts) - #include - #include - -//D�finition d'une constante N de valeur 10 (2 pts) - #define N 10 - //#define __DEBUG__ - -//Prototypes des fonctions d�finies par apr�s (7 pts) -FILE* OuvrirFichier (); -void EncoderNomFichier (char[]); -char ChaineVersOctet (char[]); -void LireDonnees (FILE*, char[]); -void AfficherDonnees (char[]); -void CorrigerDonnee (char[], int); -int ParitePaire (char); - -int main() -{ - int i, erreur=0; - //D�claration d'un pointeur fichier permettant de manipuler un fichier, initialis� - //� NULL (2 pts) - FILE* fichier = NULL; - - //D�claration d'un tableau tab de N �l�ments de 8 bits (2 pts) - char tab[N]; - - //Le pointeur fichier prend la valeur retourn�e par OuvrirFichier (2 pts) - fichier = OuvrirFichier (); - - //Si la valeur du pointeur fichier indique que le fichier a pu �tre ouvert (1 pt) - if (fichier != NULL) - {//Appel de la fonction LireDonnees (2 pts) - LireDonnees(fichier, tab); - - //Fermeture du fichier (1 pt) - fclose (fichier); - - printf("\nDonnees lues :"); - //Affichage en binaire des N �l�ments de tab (1 pt) - AfficherDonnees (tab); - - for (i=0; i=0; i--) - { - //Si l��l�ment i de chaine est le caract�re 1, positionner le bit - //correspondant de la variable octet � 1, sinon le laisser � 0. (4 pts) - if (chaine[i] == '1') - octet = octet|masque; - - //D�caler masque pour traiter le bit suivant (1 pt) - masque<<=1; - } - return octet; -} - -//La fonction LireDonnees re�oit en arguments un pointeur fichier permettant -//de manipuler un fichier et un tableau tab dont chaque �l�ment est une donn�e -//cod�e sur 8 bits. Elle ne retourne aucune valeur. (3 pts) G:\PROJET_FINAL_HTML\progra\colin22.txt -void LireDonnees (FILE *fichier, char *tab) -{ - int i; - char donnee[10]; - char *p; - for(i=0; i0; j--) - { - if (tab[i] & m) - { - #ifdef __DEBUG__ - printf("DEBUG i%d j%d: DONNE tab[i] %c avec masque %x\n",i,j,tab[i], tab[i]&0xff&m); - #endif - b[j-1]='1'; - } - - else - { - #ifdef __DEBUG__ - printf("DEBUG i%d j%d: DONNE tab[i] %c avec masque %x\n",i,j,tab[i], tab[i]&0xff&m); - #endif - b[j-1]='0'; - } - m<<=1; - } - b[8]='\0'; - printf ("%s", b); - - } - printf("\n"); -} - -//La fonction CorrigerDonnee re�oit en arguments un tableau tab dont chaque �l�ment -//est une donn�e cod�e sur 8 bits et un entier i. Elle ne retourne aucune valeur. -//(3 pts) -void CorrigerDonnee(char tab[N], int i) -{ - char donnee[9]; - printf("\nLa donnee %d est erronnee; veuillez la reencoder:", i+1); - //Vider la m�moire clavier et saisir la valeur de donnee.(3 pts) - fflush (stdin); - gets(donnee); - - //Remplacer l��l�ment i de tab par la donnee r�encod�e convertie en octet. (2 pts) - tab[i] = ChaineVersOctet(donnee); -} - -//La fonction ParitePaire re�oit un argument octet cod� sur 8 bits. Elle retourne -//"vrai" ou "faux". (2 pts) -int ParitePaire (char octet) -{//D�claration et �ventuellement initialisation des variables locales (3 pts) - int i, compteur = 0, masque = 1; - - for (i=0; i<8; i++) - {//Si le bit i de l�argument octet vaut 1, incr�menter la variable compteur - //d�une unit� (3 pts) - if (octet & masque) - compteur++; - //D�caler masque pour traiter le bit suivant (1 pt) - masque <<= 1; - } - //Si compteur est impair retourner "faux", sinon retourner "vrai" (2 pts) - if (compteur%2) - return 0; - else - return 1; -} +//Compl�tez le programme en respectant les consignes donn�es en commentaires. +//Biblioth�ques (2 pts) + #include + #include + +//D�finition d'une constante N de valeur 10 (2 pts) + #define N 10 + //#define __DEBUG__ + +//Prototypes des fonctions d�finies par apr�s (7 pts) +FILE* OuvrirFichier (); +void EncoderNomFichier (char[]); +char ChaineVersOctet (char[]); +void LireDonnees (FILE*, char[]); +void AfficherDonnees (char[]); +void CorrigerDonnee (char[], int); +int ParitePaire (char); + +int main() +{ + int i, erreur=0; + //D�claration d'un pointeur fichier permettant de manipuler un fichier, initialis� + //� NULL (2 pts) + FILE* fichier = NULL; + + //D�claration d'un tableau tab de N �l�ments de 8 bits (2 pts) + char tab[N]; + + //Le pointeur fichier prend la valeur retourn�e par OuvrirFichier (2 pts) + fichier = OuvrirFichier (); + + //Si la valeur du pointeur fichier indique que le fichier a pu �tre ouvert (1 pt) + if (fichier != NULL) + {//Appel de la fonction LireDonnees (2 pts) + LireDonnees(fichier, tab); + + //Fermeture du fichier (1 pt) + fclose (fichier); + + printf("\nDonnees lues :"); + //Affichage en binaire des N �l�ments de tab (1 pt) + AfficherDonnees (tab); + + for (i=0; i=0; i--) + { + //Si l��l�ment i de chaine est le caract�re 1, positionner le bit + //correspondant de la variable octet � 1, sinon le laisser � 0. (4 pts) + if (chaine[i] == '1') + octet = octet|masque; + + //D�caler masque pour traiter le bit suivant (1 pt) + masque<<=1; + } + return octet; +} + +//La fonction LireDonnees re�oit en arguments un pointeur fichier permettant +//de manipuler un fichier et un tableau tab dont chaque �l�ment est une donn�e +//cod�e sur 8 bits. Elle ne retourne aucune valeur. (3 pts) G:\PROJET_FINAL_HTML\progra\colin22.txt +void LireDonnees (FILE *fichier, char *tab) +{ + int i; + char donnee[10]; + char *p; + for(i=0; i0; j--) + { + if (tab[i] & m) + { + #ifdef __DEBUG__ + printf("DEBUG i%d j%d: DONNE tab[i] %c avec masque %x\n",i,j,tab[i], tab[i]&0xff&m); + #endif + b[j-1]='1'; + } + + else + { + #ifdef __DEBUG__ + printf("DEBUG i%d j%d: DONNE tab[i] %c avec masque %x\n",i,j,tab[i], tab[i]&0xff&m); + #endif + b[j-1]='0'; + } + m<<=1; + } + b[8]='\0'; + printf ("%s", b); + + } + printf("\n"); +} + +//La fonction CorrigerDonnee re�oit en arguments un tableau tab dont chaque �l�ment +//est une donn�e cod�e sur 8 bits et un entier i. Elle ne retourne aucune valeur. +//(3 pts) +void CorrigerDonnee(char tab[N], int i) +{ + char donnee[9]; + printf("\nLa donnee %d est erronnee; veuillez la reencoder:", i+1); + //Vider la m�moire clavier et saisir la valeur de donnee.(3 pts) + fflush (stdin); + gets(donnee); + + //Remplacer l��l�ment i de tab par la donnee r�encod�e convertie en octet. (2 pts) + tab[i] = ChaineVersOctet(donnee); +} + +//La fonction ParitePaire re�oit un argument octet cod� sur 8 bits. Elle retourne +//"vrai" ou "faux". (2 pts) +int ParitePaire (char octet) +{//D�claration et �ventuellement initialisation des variables locales (3 pts) + int i, compteur = 0, masque = 1; + + for (i=0; i<8; i++) + {//Si le bit i de l�argument octet vaut 1, incr�menter la variable compteur + //d�une unit� (3 pts) + if (octet & masque) + compteur++; + //D�caler masque pour traiter le bit suivant (1 pt) + masque <<= 1; + } + //Si compteur est impair retourner "faux", sinon retourner "vrai" (2 pts) + if (compteur%2) + return 0; + else + return 1; +} diff --git a/colin22.txt b/colin22.txt index 4c8f72e..2bac503 100644 --- a/colin22.txt +++ b/colin22.txt @@ -1,11 +1,11 @@ -01100011 -01110010 -01100011 -01101100 -01100101 -01100110 -01101101 -01101100 -01101001 -01101111 -01101100 +01100011 +01110010 +01100011 +01101100 +01100101 +01100110 +01101101 +01101100 +01101001 +01101111 +01101100 diff --git a/test b/test new file mode 100644 index 0000000000000000000000000000000000000000..108cb8a7893276cc6701e2757ead513abab320dd GIT binary patch literal 17632 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