Urgent mini-projet de gestion des clients

Fermé
Ammy-Driss Messages postés 1 Date d'inscription jeudi 9 juillet 2015 Statut Membre Dernière intervention 9 juillet 2015 - Modifié par NHenry le 9/07/2015 à 18:48
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 9 juil. 2015 à 16:31
j'ai fait un mini-projet de la gestion des clients-produits-factures mais apres l'execution du programme!!!
Il m'affiche le programme a cessé de fonctionner :
voila mon programme!!


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

    // client*************//

void saisie_un_client(){
     int num;
     char nom;
     char adresse;
     FILE *f;
  printf("\n");
  printf("***************** << Saisir les informations de votre client >> ***************  \n");
  printf(" >> Numero de client : ");
  scanf("%d",&num);
  printf(" >> Nom : ");
  scanf("%s",&nom);
  printf(" >> Adresse : ");
  scanf("%s",&adresse);

   f=fopen("information_client.txt","w");
 if(f==NULL){
    printf("erreur d'ouverture de fichier");
    exit(-1);
 }
  fprintf(f,"%d\t%s\t%s\n",num,nom,adresse);
fclose(f);

   system("cls");

    }





void saisir_plusieur_clients(){
    int nb,i;
    int num;
    char nom;
    char adresse;
    FILE *f;
                                 printf(" \n==>> Entrer le nombre des clients que vous voullez saisie : ");
                                  scanf("%d",&nb);
                                  printf("\n");

 for(i=1;i<=nb;i++){
                      printf("\n---------------  Saisir les informations du client numero [%d]  --------------\n",i);
                      printf(" >> Numero d'inscription : ");
                      scanf("%d",&num);
                      printf(" >> Nom : ");
                      scanf("%s",&nom);
                      printf(" >> Adresse : ");
                      scanf("%s",&adresse);
                      i++;

                         f=fopen("information_client.txt","a+");
 if(f==NULL){
    printf("erreur d'ouverture de fichier");
    exit(-1);
 }
  fprintf(f,"%d\t%s\t%s\n",num,nom,adresse);
  i++;
fclose(f);
                         
                      }
                       system("cls");
                      }


void afficher_les_clients(){
     int num;
     char nom; 
     char adresse;
    FILE *f;
    int i=0;
     printf("\n\n");
   f=fopen("information_client.txt","r");
 if(f==NULL){
    printf("erreur d'ouverture de fichier");
    exit(-1);
 }while(!feof(f)){
  printf("  ===========================================================================\n");
  fscanf(f,"%d\t%s\t%s\n",&num,&nom,&adresse);
 printf("   Le client Num: %d  Nom: %s   adresse: %s  \n",num,nom,adresse);

 }
 printf("  ===========================================================================");
 printf("      \n\n\n\n\n\n                       Cliquer sur ENTRER pour retour OK");
 system("PAUSE>null");
 system("cls");
  fclose(f);
}


// produit*************//
struct produit{
int ref;
char libelle;
float prix_HT;
float TVA;
float prix_TTC;
};



void saisie_un_produit(){
     int ref;
     char libelle;
     float prix_HT;
     float TVA;
     float prix_TTC;
     FILE *f;
  printf("\n");
  printf("***************** << Saisir les informations de votre produit >> ***************  \n");
  printf(" >> reference du produit : ");
  scanf("%d",&ref);
  printf(" >> libelle : ");
  scanf("%s",&libelle);
  printf(" >> prix_HT : ");
  scanf("%f",&prix_HT);
  printf(" >> TVA : ");
  scanf("%f",&TVA);
  printf(" >> prix_TTC : ");
  scanf("%f",&prix_TTC);

   f=fopen("information_produit.txt","a+");
 if(f==NULL){
    printf("erreur d'ouverture de fichier");
    exit(-1);
 }
  fprintf(f,"%d\t%s\t%f\t%f\t%f\n",ref,libelle,prix_HT,TVA,prix_TTC);
fclose(f);

   system("cls");

    }




void saisir_plusieur_produits(){
     int ref;
     char libelle;
     float prix_HT;
     float TVA;
     float prix_TTC;     
    FILE *f; 
    int nb,i;
    int n=0;
                                  printf(" \n==>> Entrer le nombre des produits que vous voullez saisie : ");
                                  scanf("%d",&nb);
                                  printf("\n");

 for(i=1;i<=nb;i++){
                      printf("\n---------------  Saisir les informations du produit numero [%d]  --------------\n",n+1);
                      printf(" >> ref : ");
                      scanf("%d",&ref);
                      printf(" >> libelle : ");
                      scanf("%s",&libelle);
                      printf(" >> prix_HT : ");
                      scanf("%f",&prix_HT);
                      printf(" >> TVA : ");
                      scanf("%f",&TVA);
                      printf(" >> prix_TTC : ");
                      scanf("%f",&prix_TTC);
                      printf("\n");
     i++;
     n++;
                         f=fopen("information_produit.txt","a+");
 if(f==NULL){
    printf("erreur d'ouverture de fichier");
    exit(-1);
 }
  fprintf(f,"%d\t%s\t%f\t%f\t%f\n",ref,libelle,prix_HT,TVA,prix_TTC);
  i++;
  n=n+1;
fclose(f);
                         
                      }
                       system("cls");
                      }


void afficher_les_produits(){
          int ref;
     char libelle;
     float prix_HT;
     float TVA;
     float prix_TTC;
    FILE *f;
     printf("\n\n");
   f=fopen("information_produit.txt","r");
 if(f==NULL){
    printf("erreur d'ouverture de fichier");
    exit(-1);
 }while(!feof(f)){
  printf("  ===========================================================================\n");
  fscanf(f,"%d\t%s\t%f\t%f\t%f\n",&ref,&libelle,&prix_HT,&TVA,&prix_TTC);
 printf("   Le produit::>  ref: %d  libelle: %s   prix_HT: %.2f    TVA: %.2f   prix_TTC: %.2f       \n",
            ref,libelle,prix_HT,TVA,prix_TTC);

 }
 printf("  ===========================================================================");
 printf("      \n\n\n\n\n\n                       Cliquer sur ENTRER pour retour OK");
 system("PAUSE>null");
 system("cls");
  fclose(f);
}


void s_facture(){
     
    int num_fact;
    int date; 
    FILE *f;
 
 printf("\n");
  printf("***************** << Saisir le numero et la date de la facture:: >> ***************  \n");
  printf(" >> Le numero de la facture:: ");
  scanf("%d",&num_fact);
  printf(" >> La date : ");
  scanf("%s",&date);
     
 f=fopen("information_facture.txt","a+");
 if(f==NULL){
    printf("erreur d'ouverture de fichier");
    exit(-1);
 }
 fprintf(f,"%d\t%d\n",num_fact,date);
 fclose(f);
  system("cls");
}

void afficher_facture(){
     int num_fact;
     int date;
     FILE *f;
     printf("\n\n");
   f=fopen("information_facture.txt","r");
 if(f==NULL){
    printf("erreur d'ouverture de fichier");
    exit(-1);
 }while(!feof(f)){
  printf("  ===========================================================================\n");
  fscanf(f,"%d\t%d\n",&num_fact,&date);
 printf("   La facture numero::::>  %d    La date: %d       \n",num_fact,date);

 }
 fclose(f);
 system("cls");
}


       
   float calcul_TVA(float n){
     float TVA;
     printf("Entrez le prix_HT:");
     scanf("%f",&n);
      TVA=(n*0.2);
      return TVA;
      }
             
void ligne_facture(){
       char design;
       float prix_HT;
       float qte;
       float prix_TTC;
       int num_fact;
       int date;
     FILE *f;
     int n;
     printf("\n");
  printf("***************** << Saisir les informations de la facture:: >> ***************  \n");
  printf(" >> Le numero de la facture:: ");
  scanf("%d",&num_fact);
  printf(" >> La date : ");
  scanf("%d",&date);
  printf(" >> Design::: ");
  scanf("%s",&design);
  printf(" >> prix_HT : ");
  scanf("%f",&prix_HT);
  printf(" >> La quantité : ");
  scanf("%f",&qte);
  printf(" >> TVA : ");
  printf("la valeur du TVA est :  %f",calcul_TVA(n));
 printf("\n");

 f=fopen("information_facture_ligne.txt","a+");
 if(f==NULL){
    printf("erreur d'ouverture de fichier");
    exit(-1);
 }
 fprintf(f,"%d\t%d\t%s\t%f\t%f\t%f\n",num_fact,date,design,prix_HT,qte,calcul_TVA(n));
fclose(f);
system("cls");
}

void afficher_facture_ligne(){
       char design;
       float prix_HT;
       float qte;
       float prix_TTC;
       int num_fact;
       int date;
FILE *f;
int n;
     printf("\n\n");
   f=fopen("information_facture.txt","r");
 if(f==NULL){
    printf("erreur d'ouverture de fichier");
    exit(-1);
 }while(!feof(f)){
  printf("  ===========================================================================\n");
  fscanf(f,"%d\t%d\t%s\t%f\t%f\t%f\n",&num_fact,&date,&design,&prix_HT,&qte,calcul_TVA(n));
 printf("   La facture numero::::>  %d  \n  La date: %d   \n  Design:  %s    \n Le prix_HT:     %f    \n La quantité:     %f    \n TVA:  %f \n",num_fact,date,design,prix_HT,qte,calcul_TVA(n));

 }
fclose(f);
system("cls"); 
}


void quitter(){
system("cls");
 printf("\n\n\n\n\n\n\n\n\n------------------------------------FIN----------------------------------------\n");
 printf("\n-----------------------------------MERCI----------------------------------------");
 }

int main(int argc, char *argv[])
{
    system("color f0");
   int choix; 
do{
   printf("\n************************  << Gestion des clients et factures >>  *************************\n\n");

   printf("       |====|=============================================================| \n");
   printf("       |    |   ====> 1.  Saisir un client.                               | \n");
   printf("       |    |   ====> 2.  Saisir plusiurs clients.                        | \n");
   printf("       |    |   ====> 3.  Afficher la list des clients.                   | \n");
   printf("       |  M |   ====> 4.  Saisir un produit.                              | \n");
   printf("       |    |   ====> 5.  Saisir plusieurs produits.                      | \n");
   printf("       |  E |   ====> 6.  Affichier les produits.                         | \n");
   printf("       |    |   ====> 7.  Saisir les informations de la facture:.         | \n");
   printf("       |  N |   ====> 8.  Afficher les informations de la facture.        | \n");
   printf("       |    |   ====> 9.  Saisir les informations de la ligne facture.    | \n");
   printf("       |  U |   ====> 10. afficher les informations de la ligne facture.  | \n");
   printf("       |    |   ====> 0.  Quitter.                                        |\n");
   printf("       |====|=============================================================| \n");
   printf("\n >> Entrez votre choix :");
   scanf("%d",&choix);
   printf("\n\n");
   switch(choix){
                case 1: system("cls");saisie_un_client(); break;
                case 2: system("cls");saisir_plusieur_clients();break;
                case 3: system("cls");afficher_les_clients();break;
                case 4: system("cls");saisie_un_produit();break;
                case 5: system("cls");saisir_plusieur_produits();break;
                case 6: system("cls");afficher_les_produits();break;
                case 7: system("cls");s_facture();break;
                case 8: system("cls");afficher_facture();break;
                case 9: system("cls");ligne_facture();break;
                case 10:system("cls");afficher_facture_ligne();break;
                case 0:system("cls");quitter();break;
                default:system("cls");printf("\n\n\n               >>>>>> votre choix n'est pas valide !!! <<<<<<\n\n\n\n");
               }
  }while(choix!=0);





  system("PAUSE>null");
  return 0;
  }


EDIT: Ajout de la coloration syntaxique.
A voir également:

1 réponse

[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
9 juil. 2015 à 16:31
Salut Ammy-Driss,

char nom;

réserve la mémoire nécessaire au stockage d'un char, c'est à dire un seul caractère.

scanf("%s",&nom);

cette instruction va stocker à l'adresse de
nom
la série de caractères récupérés de stdin, et va donc écrire en mémoire au-delà de la mémoire réservée disponible à cette variable.

Si tu veux pouvoir stocker dans nom des chaînes de caractères de 50 lettres, par exemple, tu dois réserver de la place pour 51 chars (50 + le caractère de fin de chaîne '\0') et définir nom comme
char nom[51];
ou comme
char * nom
et allouer la mémoire avec
malloc
(et la libérer avec
free
). Tu devrais aussi veiller à ce que le texte entré ne dépasse pas la limite de mémoire allouée.

https://openclassrooms.com/courses/la-saisie-securisee-avec-scanf

Je n'ai pas regardé le reste, à vrai dire, cela fait un peu peur.

A titre d'exemple, lorsque tu saisis un client, tu écrases le fichier client.

En passant, si tu compiles avec les Warnings, tu as quand même des trucs qui sautent aux yeux.

$ gcc -Wall ammy-driss.c 
ammy-driss.c: In function `saisie_un_client':
ammy-driss.c:26:2: warning: format `%s' expects argument of type `char *', but argument 4 has type `int' [-Wformat=]
fprintf(f,"%d\t%s\t%s\n",num,nom,adresse);
^
ammy-driss.c:26:2: warning: format `%s' expects argument of type `char *', but argument 5 has type `int' [-Wformat=]
ammy-driss.c: In function `saisir_plusieur_clients':
ammy-driss.c:62:3: warning: format `%s' expects argument of type `char *', but argument 4 has type `int' [-Wformat=]
fprintf(f,"%d\t%s\t%s\n",num,nom,adresse);
^
ammy-driss.c:62:3: warning: format `%s' expects argument of type `char *', but argument 5 has type `int' [-Wformat=]
ammy-driss.c: In function `afficher_les_clients':
ammy-driss.c:85:3: warning: format `%s' expects argument of type `char *', but argument 3 has type `int' [-Wformat=]
printf(" Le client Num: %d Nom: %s adresse: %s \n",num,nom,adresse);
^
etc.

Dal

N.B., quand tu postes du code sur le forum, utilise les balises code, autrement c'est illisible.
0