Facture en C

Fermé
O.A2 - 11 janv. 2008 à 01:53
juanpablo Messages postés 142 Date d'inscription mercredi 30 mai 2007 Statut Membre Dernière intervention 16 juin 2008 - 12 janv. 2008 à 15:02
Bonjour,
Voici une facture réaliser en langage C, mais la fonction suppression et modification d'article pour le "user menu" ne marche pas, est ce qu’il y a quelqu’un qui pourra m'aider ?
Merci d’avance

--------------------------------

#include <stdio.h>
#include <string.h>
#include<conio.h>
#define N=20
struct article
{
int codeart;
char libart[32];
float puart;
}art[20]=
{
{11,"q",11.0},
{12,"w",12.0},
{13,"e",13.0},
};

int compteur=0;
int i,trouve,choix;
char key;

/***************************FONCTION PRINCIPAL**************************************/
void menu2();
void menu1();
char CHX;
int main()
{
do
{
printf("\n--------BIENVENUE DANS LE PROGRAMME DE GESTION D´ARTICLE(S) D´UNE FACTURE--------\n");
printf("Choisir une option\n");
printf("\n(A).SI VOUS ETES UN ACHTEUR\n");
printf("(V).SI VOUS ETES UNE VENDEUR\n");
printf("***************POUR SORTIR TAPER (S)*******************\n");
CHX=getchar();
switch(CHX)
{
case 'A':menu2(); break;
case 'V':menu1();break;
}
fflush(stdin);
}
while((CHX!='S')&&(CHX!='s'));

}

/********************************AJOUTE ARTICLE*****************************************************/

void Ajouter_Article()
{
FILE * fichier;
trouve = 0;
i=compteur;
printf("\n----------------------------AJOUTE D´UNE Article--------------------\n");
fflush(stdin);
printf("Entrer le CODE d´artice\n");
scanf("%d",&art[i].codeart);
fflush(stdin);
printf("Entrer le Libelle d´artice\n");
gets(art[i].libart);
fflush(stdin);
printf("Entrer le PrixUnitaire d´article\n");
scanf("%f",&art[i].puart);
fflush(stdin);
compteur++ ;
printf("\n-----------------------SAUVEGARDE------------------------------\n");
printf("Sauvegarde l´article ajouter dans le fichier article.txt\n");
key=getch();
fichier=(fopen("C:\\article.txt","a+")) ;

if (fichier==NULL)
{
printf("fichier non cree");
getch();
}


else
{
fflush(stdin);
for(i=0;i<compteur;i++)
{
fprintf(fichier,"code article : %d \n",art[i].codeart);
fprintf(fichier,"libelle article : %s \n",art[i].libart);
fprintf(fichier,"Prix unitaire article : %f \n",art[i].puart);
fprintf(fichier,"\n--------------------------------------------------\n");
trouve++;
}
}


compteur-=trouve;
fclose(fichier);
printf("Sauvegarde dans article.txt effectuee\n");
menu1();
}
/*********************************SUPPRESSION ARTICLE***************************************/

void Suppression_Article()
{
char dellibartic[32];
int j;
trouve=0;
fflush(stdin);

printf("\n--------------------------------SUPPRESSION D´UNE Article------------------------------\n");
printf("Entrer le nom d´Article à supprimer \n");
gets(dellibartic);
fflush(stdin);


for(i=0;i<compteur;i++)
{
if (strcmp(art[i].libart,dellibartic)==0)
{
printf("Article a supprimer ? : \n");
printf(" : %d \n",art[i].codeart);
printf(" : %s \n",art[i].libart);
printf(" : %f \n",art[i].puart);
printf("Voulez vous supprimer cet article ? 1 OUI 2 NON\n");
scanf("%d",&choix);

if (choix==1)
{
printf("OK Article SUPPRIME : %s \n",art[i].libart);
trouve++;

for (j=i;j<compteur;j++)
{
art[j].codeart=art[j+1].codeart;
strcpy(art[j].libart,art[j+1].libart);
art[j].puart=art[j+1].puart;
}

}
}
}

if (trouve==0)
printf("Aucun Article supprime\n");

compteur-=trouve;
key=getch();
menu1();
}

/*******************************MODIFICATION ARTICLE****************************************/

void Modification_Article()
{
char modiflibartic[32];
trouve=0;
fflush(stdin);
printf("\n------------------------------MODIFICATION D´UNE Article--------------------------------\n");
printf("Entrer le nom d´article a modifier \n");
gets(modiflibartic);
fflush(stdin);
for(i=0;i<compteur;i++)
{
if (strcmp(art[i].libart,modiflibartic)==0)
{
printf("Enregistrement a modifier ? : \n",i);
printf(" : %d \n",art[i].codeart);
printf(" : %s \n",art[i].libart);
printf(" : %f \n",art[i].puart);
printf("Voulez vous modifier cet enregistrement ? 1 OUI 2 NON\n");
scanf("%d",&choix);

if (choix==1)
{
trouve++;
fflush(stdin);
printf("Entrer le code d´article\n");
scanf("%d",&art[i].codeart);
fflush(stdin);
printf("Entrer le libelle d´article\n");
gets(art[i].libart);
fflush(stdin);
printf("Entrer le prix unitaire d´article \n");
scanf("%d",&art[i].puart);
fflush(stdin);
}
}

}
if (trouve==0) printf("Aucun Article modifie \n");

key=getch();
menu1();
}

/*********************AFFICHAGE DE FICHIER********************************/
void Affichage_Fichier()
{
FILE *fichier;
char buffer;



if((fichier = fopen("C:\\article.txt", "r")) == NULL)
{
printf("Fichier inexistant ou erreur\n");
}
else
{

while (!feof(fichier))
{
fread(&buffer,1,1, fichier);
if(buffer == '\0')
{
printf("\n");
}
printf("%c",buffer);

}
fclose(fichier);
}
fflush(stdin);
key=getch() ;
menu1();
}

/***************************************************************************/
/**********************************USER MENU**************************************/

void menu1()
{
do{
printf("\n--------BIENVENUE DANS LE PROGRAMME DE GESTION D´ARTICLE(S) D´UNE FACTURE--------\n");
printf("Choisir une option\n");
printf("\n1.AJOUTE D´UNE ARTICLE\n");
printf("2.SUPPRESSION D´UNE ARTICLE\n");
printf("3.MODIFICATION D´UNE ARTICLE\n");
printf("4.AFFICHAGE DE TOUS LES ENREGISTREMENTS EN FICHIER\n");
printf("***************POUR SORTIR TAPER (0)*******************\n");
scanf("%d",&choix);
switch(choix)
{
case 1:Ajouter_Article(); break;
case 2:Suppression_Article();break;
case 3:Modification_Article();break;
case 4:Affichage_Fichier();break;
}
fflush(stdin);
}
while(choix!=0);
}
/**********************************************************************************/
/**********************************USER MENU2**************************************/
/*****************FONCTION DE RECHERCHE D´UN CODE D´ARTICLE************************/
void menu2()
{
int recherche(int codart);
int facture(int posart[],int qntartf[],int nartf );
int nartf,posart,codart,i;
int posartf[20],qntartf[20];

/****************L´ENTREE DU NOMBRE D´ARTICLE A FACTURER************************/
printf("Saisir le nombre d´article a facturer?");
scanf("%d",&nartf);
/********STRUCTURE DE DONNEE DE TRAITEMENT DE CHAQUE ARTIVLE A FACTURER********/
for(i=0;i<nartf;i++)
{
printf("Entrer le code d´article?");
do
{
scanf("%d",&codart);
posart=recherche(codart);
if(posart==-1)
printf("\a##ERREUR##CODE ARTICLE N´EXISTE PAS\nSVP ENTRE NOUVEAU CODE?");
}while(posart==-1);
posartf[i]=posart;
printf("Entrer la quantite de %s au prix unitaire de %f ?",
art[posart].libart,art[posart].puart);
scanf("%d",&qntartf[i]);
}
/*****************AFFICHAGE FINAL DE LA FACTURE************************/
facture(posartf,qntartf,nartf);
getch();
}
/*****************FONCTION DE RECHERCHE D´UN CODE D´ARTICLE************************/
int recherche(int codart)
{
int posart;
posart=0;
while(art[posart].codeart!= codart && posart++<20-1){};
if(posart<20)
return posart;
else
return -1;
}
/**********************FONCTION D´AFFICHAGE DE LA FACTURE************************/
int facture(int posartf[],int qntartf[],int nartf )
{
float total,prix;
int i;
printf("\t\t\tFacture Recapitulative\n\n\n");
printf("ARTICLE\t\tQUANTITE\tPRIXUNITAIRE\tPRIX\n\n");
total=0;
for(i=0;i<nartf;i++)
{
prix=art[posartf[i]].puart * qntartf[i];
printf("%s\t\t%d\t\t%f\t%f\n",art[posartf[i]].libart,qntartf[i],art[posartf[i]]. puart,prix);
total+=prix;
}
printf("\n\n\t\t\t\tTOTAL GENERAL\t%f",total);

}


--------------------------------

7 réponses

SVP est ce qu’il y a quelqu’un qui pourra m’aider ?
0
tatou_38 Messages postés 1928 Date d'inscription vendredi 21 avril 2006 Statut Membre Dernière intervention 5 août 2015 121
11 janv. 2008 à 18:38
Il y a plein de monde pour t'aider, mais je pense que peu ont le courage de plonger dans ton code qui est d'une longueur certaine.
Essaye déjà de cibler où se trouve le problème pour que les membres du forum aillent plus facilement vers la zone en question !
Essaye de décrire les sympltôme que tu as observé

Précise ton soucis et tu auras probablement plus de réponses (en tous cas au moins la mienne !)
0
Re :
Oui le problème c'est dans les deux fonctions de modification et de suppression ils n y a aucun problème de syntaxe, mais ils ne marche pas avec le programme...
pouvez-vous m'aider svp...

c'est deux fonction la :

--------------------------
fonction suppréssion :
--------------------------

void Suppression_Article()
{
char dellibartic[32];
int j;
trouve=0;
fflush(stdin);

printf("\n--------------------------------SUPPRESSION D´UNE Article------------------------------\n");
printf("Entrer le nom d´Article à supprimer \n");
gets(dellibartic);
fflush(stdin);


for(i=0;i<compteur;i++)
{
if (strcmp(art[i].libart,dellibartic)==0)
{
printf("Article a supprimer ? : \n");
printf(" : %d \n",art[i].codeart);
printf(" : %s \n",art[i].libart);
printf(" : %f \n",art[i].puart);
printf("Voulez vous supprimer cet article ? 1 OUI 2 NON\n");
scanf("%d",&choix);

if (choix==1)
{
printf("OK Article SUPPRIME : %s \n",art[i].libart);
trouve++;

for (j=i;j<compteur;j++)
{
art[j].codeart=art[j+1].codeart;
strcpy(art[j].libart,art[j+1].libart);
art[j].puart=art[j+1].puart;
}

}
}
}

if (trouve==0)
printf("Aucun Article supprime\n");

compteur-=trouve;
key=getch();
menu1();
}

****************************************************************************************

---------------------------
fonction modification :
---------------------------

void Modification_Article()
{
char modiflibartic[32];
trouve=0;
fflush(stdin);
printf("\n------------------------------MODIFICATION D´UNE Article--------------------------------\n");
printf("Entrer le nom d´article a modifier \n");
gets(modiflibartic);
fflush(stdin);
for(i=0;i<compteur;i++)
{
if (strcmp(art[i].libart,modiflibartic)==0)
{
printf("Enregistrement a modifier ? : \n",i);
printf(" : %d \n",art[i].codeart);
printf(" : %s \n",art[i].libart);
printf(" : %f \n",art[i].puart);
printf("Voulez vous modifier cet enregistrement ? 1 OUI 2 NON\n");
scanf("%d",&choix);

if (choix==1)
{
trouve++;
fflush(stdin);
printf("Entrer le code d´article\n");
scanf("%d",&art[i].codeart);
fflush(stdin);
printf("Entrer le libelle d´article\n");
gets(art[i].libart);
fflush(stdin);
printf("Entrer le prix unitaire d´article \n");
scanf("%d",&art[i].puart);
fflush(stdin);
}
}

}
if (trouve==0) printf("Aucun Article modifie \n");

key=getch();
menu1();
}
0
tatou_38 Messages postés 1928 Date d'inscription vendredi 21 avril 2006 Statut Membre Dernière intervention 5 août 2015 121
11 janv. 2008 à 22:06
Lignes 3 et 4 :
#include <conio.h> // blanc entre include et <..> !
#define N 20 // pas de = dans une definition de macro. Attention, tou les N vont être remplaçés par 20 !!!!!
// d'où necessité de choix d'un nom de macro plus unique !!!

Tu ne sors de la boucle for(i=0;i<compteur;i++) {.......} que lorsque tous les éléments sont effacés un à un avec saisie de chaque.

Il faudrait en sortir à après une suppression ou quand on veut cesser de supprimer des enregistrements !

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
juanpablo Messages postés 142 Date d'inscription mercredi 30 mai 2007 Statut Membre Dernière intervention 16 juin 2008 10
11 janv. 2008 à 23:20
bonsoir
dans suppression la variable compteur n'est pas mise à jour si trouvé

plus loin
if (trouve==0)
compteur-=trouve; ????
0
Re:
le programme ne marche pas encore :(
je ne sais pas quoi faire
compteur-=trouve; c'est pour retourner à la vrai valeur du conteur (elle est de +1) <=> compteur=compteur-trourve
0
juanpablo Messages postés 142 Date d'inscription mercredi 30 mai 2007 Statut Membre Dernière intervention 16 juin 2008 10
12 janv. 2008 à 15:02
salut
permets moi d'insister

dans suppression compteur n'est pas incrementé donc on voit toujours le meme nbre de fiches

compteur=compteur-trourve ne fait rien dans la condition if (trouve==0) donc pourquoi cette ligne?
0
tatou_38 Messages postés 1928 Date d'inscription vendredi 21 avril 2006 Statut Membre Dernière intervention 5 août 2015 121
12 janv. 2008 à 10:45
As-tu pensé à utiliser un debugger ?
C'est la solution la meilleure et la plus efficace pour cerner ton problème !
Ainsi tu peux exécuter ton programme pas-à-pas et observer ce qui se passe réellement !
0