gemini010
Messages postés12Date d'inscriptiondimanche 27 octobre 2002StatutMembreDernière intervention13 mars 2005
-
19 août 2004 à 17:15
gemini010
Messages postés12Date d'inscriptiondimanche 27 octobre 2002StatutMembreDernière intervention13 mars 2005
-
20 août 2004 à 14:36
bonjour ,g commencer a faire un programme me permetant d'enregistrer des client dans un fichier a l'inde d'une fonction et de les consulte en utilisant une autre fonction, cela semblait fonctionner jusqu'au momment ou g creer une fonction execmenu affin de rendre le programme + intuitif
le probleme est que depuis que j'utilise la fonction execmenu, je n'arrive plus a consulter les enregistrement se trouvant dans le fichier
pourriez vous me dire ce qui ne vas pas dans mon code? merci
switch (choi)
{
case 1: encodecli(tab);
break;
case 2: encodefact(tab_fact);
break;
case 3: affiche (*tab);
break;
case 4: printf("choix 4");
break;
case 5: printf("choix 5");
break;
case 99: printf("choix 99");
break;
}
}
while (choi!=99);
}
/* fonction execmenu ----------------------------------------*/
int execmenu()
{
int choix;
clrscr();
printf("\n\n\n\n\n\n\n\n");
printf(" ******************************************\n");
printf(" * <1> Ajouter un client *\n");
printf(" * <2> Ajouter une facture *\n");
printf(" * <3> Consulter la liste des clients *\n");
printf(" * <4> Consulter la liste des factures *\n");
printf(" * <5> Lister les mauvais payeur *\n");
printf(" * <99> quitter *\n");
printf(" * Votre choix : *\n");
printf(" ******************************************\n");
do
{
scanf("%d",&choix);
}
while (choix!=1 && choix!=2 && choix!=3 && choix!=4 && choix!=5 && choix!=99);
return choix;
}
/*fonction d'encodage des client ----------------------------*/
void encodecli(struct cli *t)
{
FILE *ptr;
int ok;
char choix;
ptr=fopen("acces.dat","a+b");
if(ptr!=NULL)
{
choix='o';
while(choix == 'o')
{
clrscr();
printf("\nentrer le nom :");
scanf("%s",t->nom);
printf("entrer le taux de la tva, 25 ou 12:");
scanf("%d",&t->tva);
t->id_cli+1;
fflush(stdin);
fwrite(t,sizeof(*(t)),1,ptr);
do
{
ok=0;
printf("Nouvelle fiche (o/n) ?");
choix = getchar();
choix=tolower(choix);
if(choix!='o' && choix!='n')
{
printf("\nRépondez "o" ou "n" \n");
ok=1;
}
}while(ok == 1);
}// fin while ok
}// fin if ptr NULL
fclose(ptr);
}
/*fonction d'encodage des client ----------------------------*/
void encodefact(struct fact *t_fact)
{
int rep_fact;
int art=0;
int prix=0;
int quant=0;
int total=0;
int temp=0;
int somme=0;
do
{
clrscr();
printf("entrer le numero de l'article:");
scanf("%d", &art);
printf("entrer le prix de l'article:");
scanf("%d", &prix);
printf("entrer le nombre d'aricle:");
scanf("%d", &quant);
somme = prix*quant;
total += somme;
printf("voulez vous continuer? 1 pour oui, 2 pour non");
scanf("%d",&rep_fact);
}
while(rep_fact==1);
if (total > 1200)
temp = total-(total/100*3);
else
if(total > 500)
temp = total - total/100;
printf("le montant de la facture est de %d",temp);
}
//Affichage du contenu du fichier principal
void affiche(struct cli t)
{
FILE *ptr;
ptr=fopen("acces.dat","r");
fread(&t,sizeof(t),1,ptr);
while(fread(&t,sizeof(struct cli),1,ptr) != 0)//(!feof(ptr))
{
printf("\nNom : %s, tva : %d",t.nom,t.tva);
}
fclose(ptr);
}
dletozeun
Messages postés546Date d'inscriptionvendredi 13 février 2004StatutMembreDernière intervention 9 janvier 20081 19 août 2004 à 20:16
Il y a un truc que je comprends pas dans ta fonction execmenu() pourquoi tu mets des points virgule apres la parenthese finale de tes while ? Si tu les enleves ca fait koi?
Mais bon vu que je n'utilise pas "do" je dis surement des conneries...
Peut etre que le probleme vient du fait que t'as pas mis de "s" à "/*fonction d'encodage des client ----------------------------*/
" :big)
Mais plus serieusement, il y aun truc bizarre ici:
while(choix == 'o')
{
clrscr();
...
"choix" est du type char alors tu ne peux pas comparer choix et 'o' comme ca parce que choix est un pointeur vers une adresse memoire...
Il faut que tu fasses while(!strcmp(choix,"o"))
strcmp() renvoie 0 quand les deux arguments sont egaux mais c'est a verifier...) de meme pour :if(choix!='o' && choix!='n')
et bien ca plante, g essayer comme tu as dit mais alors le menu ne fonctionne de nouveau plus
ceci dit g un autre probleme, lorsque j'encode les facture, je dois entrer le nom du client mais le client doit d'abord exister, j'aimerai savoir comment faire pour pouvoir aller verifier dans mon fichier client si celui ci existe deja
switch (choi)
{
case 1: encodecli(tab);
break;
case 2: encodefact(tab_fact);
break;
case 3: affiche (*tab);
break;
case 4: printf("choix 4");
break;
case 5: printf("choix 5");
break;
case 99: printf("Aurevoir");
break;
}
}
while (choi!=99);
}
/* fonction execmenu ----------------------------------------*/
int execmenu()
{
int choix;
clrscr();
printf("\n\n\n\n\n\n\n\n");
printf(" ******************************************\n");
printf(" * <1> Ajouter un client *\n");
printf(" * <2> Ajouter une facture *\n");
printf(" * <3> Consulter la liste des clients *\n");
printf(" * <4> Consulter la liste des factures *\n");
printf(" * <5> Lister les mauvais payeur *\n");
printf(" * <99> quitter *\n");
printf(" * Votre choix : *\n");
printf(" ******************************************\n");
do
{
scanf("%d",&choix);
}
while (choix!=1 && choix!=2 && choix!=3 && choix!=4 && choix!=5 && choix!=99);
return choix;
}
/*fonction d'encodage des client ----------------------------*/
void encodecli(struct cli *t)
{
FILE *ptr;
int ok;
char choix;
ptr=fopen("acces.dat","a+b");
t->id_cli = 1;
if(ptr!=NULL)
{
choix='o';
while(choix == 'o')
{
clrscr();
printf("Client n°%d",t->id_cli);
printf("\nentrer le nom :");
scanf("%s",t->nom);
printf("entrer le taux de la tva, 25 ou 12:");
scanf("%d",&t->tva);
t->id_cli++;
fflush(stdin);
fwrite(t,sizeof(*(t)),1,ptr);
do
{
ok=0;
printf("Nouvelle fiche (o/n) ?");
choix = getchar();
choix=tolower(choix);
if(choix!='o' && choix!='n')
{
printf("\nRépondez "o" ou "n" \n");
ok=1;
}
}
while(ok == 1);
}// fin while ok
}// fin if ptr NULL
fclose(ptr);
}
/*fonction d'encodage des Facture ----------------------------*/
void encodefact(struct fact *t_fact)
{
int rep_fact;
int art=0;
int prix=0;
int quant=0;
int total=0;
int temp=0;
int somme=0;
do
{
clrscr();
printf("entrer le numero de l'article:");
scanf("%d", &art);
printf("entrer le prix de l'article:");
scanf("%d", &prix);
printf("entrer le nombre d'aricle:");
scanf("%d", &quant);
somme = prix*quant;
total += somme;
printf("voulez vous continuer? 1 pour oui, 2 pour non");
scanf("%d",&rep_fact);
printf("le montant de la facture est de %d",temp);
getch();
}
//Affichage du contenu du fichier principal
void affiche(struct cli t)
{
FILE *ptr;
ptr=fopen("acces.dat","r");
fread(&t,sizeof(t),0,ptr);
clrscr();
while(fread(&t,sizeof(struct cli),1,ptr) != 0)//(!feof(ptr))
{
printf("\n Numéro Client : %d, Nom : %s, tva : %d",t.id_cli-1,t.nom,t.tva);
//cli-1 car incrémentation par avance à l'encode
}
printf("\n\n Appuyer sur une touche pour revenir au menu");
getch();
fclose(ptr);
}