Urgent mini-projet de gestion des clients
Ammy-Driss
Messages postés
1
Statut
Membre
-
[Dal] Messages postés 6122 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6122 Date d'inscription Statut Contributeur Dernière intervention -
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!!
EDIT: Ajout de la coloration syntaxique.
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.
1 réponse
-
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 denom
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 commechar nom[51];
ou commechar * nom
et allouer la mémoire avecmalloc
(et la libérer avecfree
). 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.