La fonction affichage

Fermé
Wicky-james Messages postés 35 Date d'inscription vendredi 14 novembre 2014 Statut Membre Dernière intervention 9 juin 2020 - Modifié le 30 juin 2017 à 19:20
[Dal] Messages postés 6175 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 30 avril 2024 - 6 juil. 2017 à 10:59
Bonjour,
je voudrais afficher tout la liste de toute les enregistrement de la structure vente et achat donc je n'arrive pas a aficher toute les enregistrement;

#include <stdio.h>
#include <stdlib.h>
#define MAX 30
#include <string.h>
#include <windows.h>
int i, nb;
// declaration de la structure
 typedef struct Vente{
char description_article[MAX];
float prix_unitaire;
float montant;
int quantite;
//le montant, discompte = [montant]*(15%), le montant total soit [montant] - [discompte]
char nom_client[MAX];
char nom_fournisseur;
};
struct Vente vt[MAX];

typedef struct Achat{
char description_article[MAX];
float prix_unitaire;
int quantite;
int discompte;
float montant;
float montant_total;
char nom_fournisseur[30];

};
struct Achat ach[MAX];

#include "entete.h"

// declaration variable pour creer le fichier reel
char fichier[30] = "client.txt"; //notre fichier pour les stockage entrant
char four[30]="fournisseur.txt"; //notre fichier pour les stockage entrant du fournisseur
char fourn[30] = "fournisseurmod.txt";  //notre fichier pour la modification des stockages entrant
char fichiersup[30] = "clientsup.txt"; //notre fichier pour la suppression des stockages entrant
char fichiermod[30] = "clientmod.txt";  //notre fichier pour la modification des stockages entrant
FILE  *client,*clientsup,*clientmod,*fournisseur,*fournisseurmod;

float montant_total, emod;

void Enregistrer_Vente(){
system("cls"); // pour netoyer le fichier
int a;
// creation du ficier virtuel
FILE * fiche;
fiche = fopen(fichier, "wt");

printf("combien de vente voulez vous enregistrer\n");
scanf("%d",&a);

if (a<=0)
{
    printf("l'enregistrement annule ,\nle nombre ne pas doit etre inferieur a zero , réessayer");
}

for (i=1;i<=a; i++)
{
printf("Entrer le nom du client : \n");
scanf("%s", &vt[i].nom_client);
printf("Entrer la description de l'article : \n");
scanf("%s", &vt[i].description_article);
fflush(stdin);
printf("Entrer le prix unitaire : \n");
scanf("%f", &vt[i].prix_unitaire);
fflush(stdin);
printf("Entrer la quantite : \n");
scanf("%d", &vt[i].quantite);
fflush(stdin);
vt[MAX].montant=vt[i].prix_unitaire*vt[i].quantite;
printf("le montant total: %f \n\n" , vt[MAX ].montant);
printf("Enregistrement effectuee: \n");
printf("---------------------------------\n");
printf("---------------------------------\n\n");
fprintf(fiche, "Nom:%s\n",vt[i].nom_client);
fprintf(fiche, " La description de l'article est : %s \n",vt[i].description_article);
fprintf(fiche, "  Le prix unitaire est ::%f \n",vt[i].prix_unitaire);
fprintf(fiche, " La quantite est : %d \n",vt[i].quantite);
fprintf(fiche, " Le montant %f \n",vt[MAX].montant);
}
fclose(fiche);


return (main());
}
void Enregistrer_Achat(){
system("cls"); // pour netoyer le fichier
// creation du ficier virtuel
FILE * fichef;
fichef = fopen(four, "wt");
printf("Entrer le nom du fournisseur : \n");
scanf("%s", &ach[i].nom_fournisseur);
printf("Entrer la description de l'article : \n");
scanf("%s", &ach[i].description_article);
fflush(stdin);
printf("Entrer le prix unitaire : \n");
scanf("%f", &ach[i].prix_unitaire);
fflush(stdin);
printf("Entrer la quantite : \n");
scanf("%d", &ach[i].quantite);
fflush(stdin);
ach[MAX].montant = ach[i].prix_unitaire * ach[i].quantite  ;
ach[MAX].discompte=ach[MAX].montant*15/100;
ach[MAX].montant_total=ach[MAX].montant-ach[MAX].discompte;

printf("le montant avant la deduction: %f \n" , ach[MAX].montant);
printf("le montant total: %f \n" , ach[MAX].montant_total);

printf("\e Enregistrement effectué: \n");

fprintf(fichef, " %s \n",ach[i].nom_fournisseur);
fprintf(fichef, "\n %s \n",ach[i].description_article);
fprintf(fichef, " %f \n",ach[i].prix_unitaire);
fprintf(fichef, " %d \n",ach[i].quantite);
fprintf(fichef, " %f \n",ach[MAX].montant);
fprintf(fichef, " %f \n",ach[MAX].montant_total);
//fprintf(fiche, "%2.f\n",ach.montant_total);
// fermeture du fichier
fclose(fichef);
return (main());
}
void Afficher()
{
system("cls");
        FILE * fiche, * fichef;
fiche = fopen(fichier, "rt"); //j'ouvre le fichier en mode lecture pour effectuer la recherche
fichef = fopen(four, "rt");
    if(!fiche && !fichef)
    {
        printf("Impossible d'ouvrir le fichier en lecture\n");
        exit(0);
    }

    printf("__________L’affichage de la liste des clients, produits, fournisseur  ______________\n");

    gotoxy(1,1);
    printf("Nom client\n");
    gotoxy(2,1);
    printf(" produit\n");
    gotoxy(14,2);
    printf("\e Founisseur \n");
    gotoxy(24,2);
    printf(" produit\n");

    printf("\e\e\e\e\e\e\e\e\e\e\e\e\e\e\e\e   \e\e\e\e\e\e\e\e\e\e\e\e\e\e\e\e\e- - -\n");
    int i;
    i=6;

    while(!feof(fiche),(fichef))
    {
       //textbackground(1);
        fscanf(fiche,"%s \n",vt[i].nom_client);
        gotoxy(3,i);
        fscanf(fiche,"%s \n",vt[i].description_article);
        gotoxy(2,i);
        printf(fichef,"%s \n",ach[i].nom_fournisseur);
        gotoxy(14,i);
        printf(fichef,"%s \n",ach[i].description_article);
        gotoxy(24,i);
        i++;

 printf("\n");
 fclose(fiche);
 fclose(fichef);
return (main());

    }
}


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.


A voir également:

2 réponses

YCN- Messages postés 116 Date d'inscription mercredi 24 juin 2015 Statut Membre Dernière intervention 13 juillet 2017 12
3 juil. 2017 à 10:14
Salut,
Indente ton code et mets des balises de codes stp. J'ai deux trois questions déjà avant d'essayer de comprendre pourquoi tu n'arrives pas à afficher. Déjà pourquoi tu "return(main())" dans chacune de tes fonctions?
Ensuite à mon avis l'erreur vient d'une sombre histoire de pointeur, du genre: lorsque l'on accède à un attribut d'un pointeur de structure il faut utiliser "->" à la place de ".". Je pense que ça vient de là, mais vu la tête de ton code et le fait que je ne comprenne pas comment il fonctionne je ne vais pas pouvoir t'en dire plus.

YCN-
1
Wicky-james Messages postés 35 Date d'inscription vendredi 14 novembre 2014 Statut Membre Dernière intervention 9 juin 2020
3 juil. 2017 à 17:10
je "return(main())" juste pour retoure le menu dans la fonction "int maint" a fin d'assayer toute les fonctions, juste pour ne pas l'executer a chaque reprise pour essayer une fonction.
pour les pointeurs j'utilise "." non "->" c'est parce que dans les tutos je ne vois que ca, je vais utiliser votre sugestion pour voir ce que ca donnee
0
[Dal] Messages postés 6175 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 30 avril 2024 1 083
6 juil. 2017 à 10:59
dans son cas l'accès aux membres de la struct est correctement effectué avec un point. L'opérateur
->
ne serait nécessaire que s'il manipulait des pointeurs sur les struct.

Là, il a juste besoin de pointeurs sur les membres des struct pour ses scanf, donc pas de
->
nécessaires.


Dal
0
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
3 juil. 2017 à 17:56
Bonjour,

Appeler la fonction
main()
est interdit, le compilateur devrait le refuser. Une fonction
void
qui fait
return
de quelque chose est interdite aussi. Donc la ligne
return (main());
est doublement impossible. Je suis étonné que le compilateur l'accepte.

Faire
fflush(stdin);
est une action curieuse. On peut 'flusher' un périphérique de sortie, pour un périphérique d'entrée cela devrait au mieux ne rien faire. Cela ressemble à un copie d'un code bricolé. J'espère qu'aucun prof n'utilise cela!

Les tableaux
ach[]
et
ct[]
ont une dimension de
MAX
. Il peuvent donc stocker
MAX
données de l'indice
0
à
MAX-1
. Donc faire
ach[MAX]
... ou
ct[MAX]
est un accès hors limites du tableau. Là aussi le compilateur devrait pouvoir indiquer un 'warning' qui prévient de l'erreur.

Une ligne telle que
while(!feof(fiche),(fichef))
est toujours vraie, elle signifie 'tant que le fichier
fichef
a pu être ouvert et ignorer l'état fin de fichier de
fiche
'
. Heureusement le
while
fini par un
return
inconditionnel, c'est donc un
if
.
1
Wicky-james Messages postés 35 Date d'inscription vendredi 14 novembre 2014 Statut Membre Dernière intervention 9 juin 2020
3 juil. 2017 à 18:32
merci pour vos conseils vous m'aviez grandement aider...
je vais repenser mes codes......
je prends une pause de 24hr parce que c'est un peu flou, vous venez me faire croire que je dois retounrner a zero, que c'est tres mauvais et vos conseils sont extra, voila je vais suivre a la lettre tout vos conseils pour en finir avec ce programme et commencer un autre....
merci deja...
vos conseils ne sont jamais asez.
0