You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
660 lines
14 KiB
660 lines
14 KiB
#include "FonctionsResponsable.h"
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
|
|
/**
|
|
*\file FonctionsResponsable.c
|
|
*\brief fichier.c qui contient toutes les fonctions concernant le responsable.
|
|
*\author BARDET Ange & Cyriaque SEGERIE
|
|
*\date 11 oct 2023
|
|
*/
|
|
|
|
void AjoutArticle(void)
|
|
{
|
|
int ref;
|
|
float poid,volume,prix;
|
|
FILE *flot;
|
|
flot = fopen("articles.don","a");
|
|
if (flot == NULL)
|
|
{
|
|
printf("Problème avec la création du fichier\n");
|
|
exit(1);
|
|
}
|
|
printf("Saisir la référence de l'article (-1 pour arrêter): ");
|
|
scanf("%d",&ref);
|
|
/*Si l'article existe déja, code d'erreur*/
|
|
|
|
/*Passer par table au lieu de fichier pour ajoutarticle*/
|
|
|
|
/*demander numéro client et regarder cagnotte*/
|
|
while (ref < -1)
|
|
{
|
|
printf("Erreur ; Le numéro doit être positif (ou -1 pour arrêter); retapez : ");
|
|
scanf("%d",&ref);
|
|
}
|
|
while (ref >= 0)
|
|
{
|
|
printf("Saisir le poid(kg): ");
|
|
scanf("%f",&poid);
|
|
while (poid < 0)
|
|
{
|
|
printf("Erreur ; Le poid doit être positif ; retapez : ");
|
|
scanf("%f",&poid);
|
|
}
|
|
|
|
printf("Saisir le volume: ");
|
|
scanf("%f",&volume);
|
|
while (volume < 0)
|
|
{
|
|
printf("Erreur ; Le volume doit être positif ; retapez : ");
|
|
scanf("%f",&volume);
|
|
}
|
|
|
|
printf("Saisir le prix: ");
|
|
scanf("%f",&prix);
|
|
while (prix < 0)
|
|
{
|
|
printf("Erreur ; Le prix doit être positif ; retapez : ");
|
|
scanf("%f",&prix);
|
|
}
|
|
|
|
fprintf(flot,"%d\t%.3f\t%.2f\t%.2f\n",ref,poid,volume,prix);
|
|
printf("Saisir la référence de l'article (-1 pour arrêter): ");
|
|
scanf("%d",&ref);
|
|
while (ref < -1)
|
|
{
|
|
printf("Erreur ; Le numéro doit être positif (ou -1 pour arrêter); retapez : ");
|
|
scanf("%d",&ref);
|
|
}
|
|
}
|
|
fclose(flot);
|
|
printf("Fin de l'ajout.\n");
|
|
}
|
|
|
|
int TableArticle(int Tref[], float Tpoid[],float Tvolume[],float Tprix[])
|
|
{
|
|
int ref,i=0;
|
|
float poid,volume,prix;
|
|
|
|
FILE *flot;
|
|
flot = fopen("articles.don","r");
|
|
if (flot == NULL)
|
|
{
|
|
printf("Problème avec la lecture du fichier\n");
|
|
exit(1);
|
|
}
|
|
|
|
fscanf(flot,"%d %f %f %f",&ref,&poid,&volume,&prix);
|
|
while(feof(flot) == 0)
|
|
{
|
|
Tref[i] = ref;
|
|
Tpoid[i] = poid;
|
|
Tvolume[i] = volume;
|
|
Tprix[i] = prix;
|
|
i++;
|
|
fscanf(flot,"%d %f %f %f",&ref,&poid,&volume,&prix);
|
|
}
|
|
fclose(flot);
|
|
return i;
|
|
}
|
|
|
|
void AffichTable(int Tref[], float Tpoid[],float Tvolume[],float Tprix[],int n)
|
|
{
|
|
int i;
|
|
printf("référence\tpoids(kg)\tvolume(l)\tprix Unitaire\n");
|
|
for (i=0;i < n;i++)
|
|
{
|
|
printf("%d\t\t%.2f\t\t%.3f\t\t%.2f\n",Tref[i],Tpoid[i],Tvolume[i],Tprix[i]);
|
|
}
|
|
}
|
|
|
|
void AffichArticle(int Tref[], float Tpoid[],float Tvolume[],float Tprix[],int n)
|
|
{
|
|
int refR,pos;
|
|
printf("Afficher quel article ? ");
|
|
scanf("%d",&refR);
|
|
pos = posRef(Tref,refR,n);
|
|
if (pos == -1)
|
|
{
|
|
printf("L'article n'existe pas dans la base de donnée.");
|
|
}
|
|
else
|
|
{
|
|
printf("%d\t\t%.2f\t\t%.3f\t\t%.2f\n",Tref[pos],Tpoid[pos],Tvolume[pos],Tprix[pos]);
|
|
}
|
|
}
|
|
|
|
void ModifArticle(int Tref[], float Tpoid[],float Tvolume[],float Tprix[],int n)
|
|
{
|
|
int refR;
|
|
printf("Saisir la référence de l'article a modifier: ");
|
|
scanf("%d",&refR);
|
|
while (refR < -1)
|
|
{
|
|
printf("Erreur ; Le numéro doit être positif; retapez : ");
|
|
scanf("%d",&refR);
|
|
}
|
|
int i;
|
|
for (i=0;i < n;i++)
|
|
{
|
|
if (Tref[i] == refR)
|
|
{
|
|
printf("Saisir le nouveau poid(kg): ");
|
|
scanf("%f",&Tpoid[i]);
|
|
while (Tpoid[i] < 0)
|
|
{
|
|
printf("Erreur ; Le poid doit être positif ; retapez : ");
|
|
scanf("%f",&Tpoid[i]);
|
|
}
|
|
|
|
printf("Saisir le nouveau volume: ");
|
|
scanf("%f",&Tvolume[i]);
|
|
while (Tvolume[i] < 0)
|
|
{
|
|
printf("Erreur ; Le volume doit être positif ; retapez : ");
|
|
scanf("%f",&Tvolume[i]);
|
|
}
|
|
|
|
printf("Saisir le nouveau prix: ");
|
|
scanf("%f",&Tprix[i]);
|
|
while (Tprix[i] < 0)
|
|
{
|
|
printf("Erreur ; Le prix doit être positif ; retapez : ");
|
|
scanf("%f",&Tprix[i]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
int SupprArticle(int Tref[], float Tpoid[],float Tvolume[],float Tprix[],int n)
|
|
{
|
|
int refR,pos;
|
|
printf("Saisir la référence de l'article a supprimer: ");
|
|
scanf("%d",&refR);
|
|
while (refR < -1)
|
|
{
|
|
printf("Erreur ; Le numéro doit être positif; retapez : ");
|
|
scanf("%d",&refR);
|
|
}
|
|
pos = posRef(Tref,refR,n);
|
|
if (pos == -1)
|
|
{
|
|
printf("L'article n'existe pas dans la base de donnée.");
|
|
return n;
|
|
}
|
|
else
|
|
{
|
|
int i;
|
|
for (i=pos;i<=n;i++)
|
|
{
|
|
Tref[i] = Tref[i+1];
|
|
Tpoid[i] = Tpoid[i+1];
|
|
Tvolume[i] = Tvolume[i+1];
|
|
Tprix[i] = Tprix[i+1];
|
|
}
|
|
return n-1;
|
|
}
|
|
}
|
|
|
|
int posRef(int Tref[],int refR, int n)
|
|
{
|
|
int i;
|
|
for (i=0;i < n;i++)
|
|
{
|
|
if (Tref[i] == refR)
|
|
return i;
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
void EcrireFichier(int Tref[], float Tpoid[],float Tvolume[],float Tprix[],int n)
|
|
{
|
|
FILE *flot;
|
|
flot = fopen("articles.don","w");
|
|
if (flot == NULL)
|
|
{
|
|
printf("Problème avec la création du fichier\n");
|
|
exit(1);
|
|
}
|
|
int i;
|
|
for (i=0;i < n;i++) fprintf(flot,"%d\t%.2f\t%.3f\t%.2f\n",Tref[i],Tpoid[i],Tvolume[i],Tprix[i]);
|
|
fclose(flot);
|
|
printf("Fichier écrit.\n");
|
|
}
|
|
|
|
void modifclientglobal (void)
|
|
{
|
|
int n,coderreur,choix;
|
|
|
|
coderreur=creationfichier();
|
|
|
|
printf("Bienvenue dans l'application de modulation client .\nque souhaitez vous faire aujourd'hui ?\n");
|
|
|
|
while(choix!=9)
|
|
{
|
|
n=compteurtaillelogique();
|
|
printf("\n");
|
|
printf("Appuyez sur '1' pour ajouter un client,\nsur '2' pour changer l'état de suspension d'une carte client,\nsur '3' pour supprimer un client ,\nsur '4' pour afficher le fichier client,\nsur '5' pour chercher un seul client dans le fichier,\nOu sur '9' pour sortir du programme !\n");
|
|
scanf("%d",&choix);
|
|
while (choix!=1 && choix!=2 && choix!=3 && choix!=4 && choix!=5 && choix!=9)
|
|
{
|
|
printf("Entrée incorrect, veuillez ressasisir.\n");
|
|
scanf("%d",&choix);
|
|
}
|
|
if (choix==1)
|
|
{
|
|
coderreur=ajoutClient();
|
|
}
|
|
|
|
if (choix==2)
|
|
{
|
|
coderreur=suspensioncarte(&n);
|
|
}
|
|
|
|
if (choix==3)
|
|
{
|
|
coderreur=supressionclient(&n);
|
|
}
|
|
|
|
if (choix==4)
|
|
{
|
|
coderreur=affichageall();
|
|
}
|
|
if (choix==5)
|
|
{
|
|
coderreur=affichagesolo();
|
|
}
|
|
}
|
|
|
|
printf("Au revoir !\n");
|
|
return;
|
|
|
|
}
|
|
|
|
int ajoutClient (void)
|
|
|
|
{
|
|
int numeroclient,suspension,verif;
|
|
float cagnotte;
|
|
|
|
FILE *fichierclient;
|
|
printf("\n");
|
|
printf("ajout d'un client au programme de fidélité...\nquel est le numéro de ce client ?\n");
|
|
scanf("%d",&numeroclient);
|
|
while (numeroclient<0)
|
|
{
|
|
printf("le numéro du client ne peut être négatif , réessayez\n");
|
|
scanf("%d",&numeroclient);
|
|
}
|
|
|
|
fichierclient=fopen("fichierclient.don","r");
|
|
if (fichierclient==NULL)
|
|
{
|
|
printf("Probléme d'ouverture");
|
|
return -2;
|
|
}
|
|
|
|
fscanf(fichierclient,"%d%f%d",&verif,&cagnotte,&suspension);
|
|
|
|
while (feof(fichierclient)==0)
|
|
{
|
|
if (verif==numeroclient)
|
|
{
|
|
while(numeroclient==verif)
|
|
{
|
|
printf("le numéro client existe déja ,veuillez ressaissir\n");
|
|
scanf("%d",&numeroclient);
|
|
}
|
|
}
|
|
|
|
fscanf(fichierclient,"%d%f%d",&verif,&cagnotte,&suspension);
|
|
|
|
}
|
|
fclose (fichierclient);
|
|
fichierclient=fopen("fichierclient.don","a");
|
|
if (fichierclient==NULL)
|
|
{
|
|
printf("Probléme d'ouverture");
|
|
return -2;
|
|
}
|
|
|
|
fprintf(fichierclient,"%d\t%.2f\t%d\n",numeroclient,0.00,0);
|
|
fclose(fichierclient);
|
|
printf("client ajouté au programme de fidélité ! \n");
|
|
return numeroclient;
|
|
|
|
}
|
|
|
|
int suspensioncarte (int *n)
|
|
|
|
{
|
|
int tabNC [100];
|
|
float tabCAG [100];
|
|
int tabsuspension [100];
|
|
|
|
int nc,nouvellecarte,suspension,compteur=0,compteurCAG,taillemax=100,recherche;
|
|
float cagnotte;
|
|
|
|
FILE *fichierclients;
|
|
|
|
fichierclients=fopen("fichierclient.don","r");
|
|
if (fichierclients==NULL)
|
|
{
|
|
printf("\n");
|
|
printf("Probléme d'ouverture");
|
|
return -2;
|
|
}
|
|
|
|
fscanf(fichierclients,"%d%f%d",&nc,&cagnotte,&suspension);
|
|
while (feof(fichierclients)==0)
|
|
{
|
|
if (compteur>*n)
|
|
{
|
|
printf("erreur de taille\n");
|
|
return 0;
|
|
}
|
|
tabNC[compteur]=nc;
|
|
tabCAG[compteur]=cagnotte;
|
|
tabsuspension[compteur]=suspension;
|
|
compteur=compteur+1;
|
|
fscanf(fichierclients,"%d%f%d",&nc,&cagnotte,&suspension);
|
|
}
|
|
fclose (fichierclients);
|
|
printf("\n");
|
|
printf("quel carte souhaitez vous suspendre ou désuspendre (entrez numéro client)\n");
|
|
scanf("%d",&recherche);
|
|
while (recherche<0)
|
|
{
|
|
printf("numéro non valide , veuillez réessayez\n");
|
|
scanf("%d",&recherche);
|
|
}
|
|
suspension=2;
|
|
for (compteur=0;compteur<*n;compteur++)
|
|
{
|
|
if (tabNC[compteur]==recherche)
|
|
{
|
|
compteurCAG=compteur;
|
|
|
|
printf("l'état de la carte de ce client est %d\n",tabsuspension[compteur]);
|
|
printf("modifiez l'état (0 pour non suspendu) (1 pour suspendu)\n");
|
|
scanf("%d",&suspension);
|
|
while (suspension!=1 && suspension !=0)
|
|
{
|
|
printf("état de suspension non valide , retapez.\n");
|
|
scanf("%d",&suspension);
|
|
}
|
|
if (tabsuspension[compteur]==suspension)
|
|
{
|
|
printf("état de suspension est déja de %d\n",suspension);
|
|
return -4;
|
|
}
|
|
tabsuspension[compteur]=suspension;
|
|
}
|
|
|
|
}
|
|
|
|
if (suspension!=0 && suspension!=1)
|
|
{
|
|
printf("le numéro client n'existe pas\n");
|
|
return -7;
|
|
}
|
|
|
|
if (tabsuspension[compteurCAG]==1)
|
|
{
|
|
*n=*n+1;
|
|
|
|
if (*n<=taillemax)
|
|
{
|
|
printf("création d'une nouvelle carte pour le client %d\n",tabNC[compteurCAG]);
|
|
printf("numéro de la nouvelle carte ?\n");
|
|
scanf("%d",&nouvellecarte);
|
|
while (nouvellecarte<0)
|
|
{
|
|
printf("ne peut étre négatif\n");
|
|
scanf("%d",&nouvellecarte);
|
|
}
|
|
for (compteur=0;compteur<*n;compteur++)
|
|
|
|
while (nouvellecarte==tabNC[compteur])
|
|
{
|
|
printf("le client existe déja, ressaisissez\n");
|
|
scanf("%d",&nouvellecarte);
|
|
while(nouvellecarte<0){
|
|
printf("le numéro ne peut étre négatif , rééssayez.\n");
|
|
scanf("%d",&nouvellecarte);
|
|
}
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
printf("quantité maximum de client atteint, le fichier est trop petit");
|
|
return -5;
|
|
}
|
|
|
|
fichierclients=fopen("fichierclient.don","w");
|
|
if (fichierclients==NULL)
|
|
{
|
|
printf("Probléme d'ouverture");
|
|
return -2;
|
|
}
|
|
|
|
for (compteur=0;compteur<(*n-1);compteur++)
|
|
|
|
fprintf(fichierclients, "%d\t%.2f\t%d\n",tabNC[compteur],tabCAG[compteur],tabsuspension[compteur]);
|
|
|
|
fclose(fichierclients);
|
|
|
|
|
|
fichierclients=fopen("fichierclient.don","a");
|
|
if (fichierclients==NULL)
|
|
{
|
|
printf("Probléme d'ouverture");
|
|
return -2;
|
|
}
|
|
|
|
fprintf(fichierclients, "%d\t%.2f\t%d\n",nouvellecarte,tabCAG[compteurCAG],0);
|
|
|
|
fclose(fichierclients);
|
|
|
|
printf("état de suspension modifié !\n");
|
|
|
|
}
|
|
|
|
else
|
|
{
|
|
fichierclients=fopen("fichierclient.don","w");
|
|
if (fichierclients==NULL)
|
|
{
|
|
printf("Probléme d'ouverture");
|
|
return -2;
|
|
}
|
|
|
|
for (compteur=0;compteur<*n;compteur++)
|
|
|
|
fprintf(fichierclients, "%d\t%.2f\t%d\n",tabNC[compteur],tabCAG[compteur],tabsuspension[compteur]);
|
|
|
|
fclose(fichierclients);
|
|
|
|
if (compteur=0)
|
|
{
|
|
printf("fichier vide");
|
|
return -2;
|
|
}
|
|
|
|
|
|
printf("état de suspension modifié !\n");
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
int supressionclient (int *n)
|
|
{
|
|
int tabNC [100];
|
|
float tabCAG [100];
|
|
int tabsuspension [100];
|
|
|
|
int nc,suspension,compteur=0,taillemax=100,recherche2,nt=1;
|
|
float cagnotte;
|
|
|
|
FILE *fichierclients;
|
|
printf("\n");
|
|
printf("quel est le numéro du client que vous souhaitez supprimer ?\n");
|
|
scanf("%d",&recherche2);
|
|
while(recherche2<0){
|
|
printf("ne peut étre négatif\n");
|
|
scanf("%d",&recherche2);
|
|
}
|
|
fichierclients=fopen("fichierclient.don","r");
|
|
if (fichierclients==NULL)
|
|
{
|
|
printf("Probléme d'ouverture");
|
|
return -2;
|
|
}
|
|
|
|
fscanf(fichierclients,"%d%f%d",&nc,&cagnotte,&suspension);
|
|
while(feof(fichierclients)==0)
|
|
{
|
|
if (compteur>*n)
|
|
{
|
|
printf("erreur de taille\n");
|
|
return 0;
|
|
}
|
|
tabNC[compteur]=nc;
|
|
tabCAG[compteur]=cagnotte;
|
|
tabsuspension[compteur]=suspension;
|
|
compteur=compteur+1;
|
|
fscanf(fichierclients,"%d%f%d",&nc,&cagnotte,&suspension);
|
|
}
|
|
fclose(fichierclients);
|
|
|
|
for (compteur=0;compteur<*n;compteur++)
|
|
if (tabNC[compteur]==recherche2)
|
|
{
|
|
while (compteur<=*n)
|
|
{
|
|
tabNC[compteur]=tabNC[compteur+1];
|
|
tabCAG[compteur]=tabCAG[compteur+1];
|
|
tabsuspension[compteur]=tabsuspension[compteur+1];
|
|
compteur=compteur+1;
|
|
nt=0;
|
|
|
|
}
|
|
|
|
*n=*n-1;
|
|
}
|
|
|
|
if (nt!=0)
|
|
{
|
|
printf("le numéro client n'existe pas\n");
|
|
return -6;
|
|
}
|
|
|
|
fichierclients=fopen("fichierclient.don","w");
|
|
if (fichierclients==NULL)
|
|
{
|
|
printf("Probléme d'ouverture");
|
|
return -2;
|
|
}
|
|
|
|
for (compteur=0;compteur<*n;compteur++)
|
|
|
|
fprintf(fichierclients, "%d\t%.2f\t%d\n",tabNC[compteur],tabCAG[compteur],tabsuspension[compteur]);
|
|
|
|
fclose(fichierclients);
|
|
|
|
printf("client supprimé.\n");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
int affichageall (void)
|
|
{
|
|
int nc,suspension;
|
|
float cagnotte;
|
|
|
|
FILE *flot;
|
|
printf("\n");
|
|
flot=fopen("fichierclient.don","r");
|
|
if (flot==NULL)
|
|
{
|
|
printf("erreur d'ouverture du fichier\n");
|
|
return -1;
|
|
}
|
|
fscanf(flot,"%d%f%d",&nc,&cagnotte,&suspension);
|
|
while (feof(flot)==0)
|
|
{
|
|
printf("%d\t%.2f\t%d\n",nc,cagnotte,suspension);
|
|
fscanf(flot,"%d%f%d",&nc,&cagnotte,&suspension);
|
|
}
|
|
fclose(flot);
|
|
return 0;
|
|
}
|
|
|
|
int affichagesolo (void)
|
|
{
|
|
int rechercher,nc,suspension,validateur=0;
|
|
float cagnotte;
|
|
|
|
FILE *flot;
|
|
flot=fopen("fichierclient.don","r");
|
|
if (flot==NULL)
|
|
{
|
|
printf("erreur d'ouverture du fichier\n");
|
|
return -1;
|
|
}
|
|
printf("\n");
|
|
printf("quel client recherchez vous ?\n");
|
|
scanf("%d",&rechercher);
|
|
while(rechercher<0){
|
|
printf("ne peut étre négatif\n");
|
|
scanf("%d",&rechercher);
|
|
}
|
|
printf("\n");
|
|
fscanf(flot,"%d%f%d",&nc,&cagnotte,&suspension);
|
|
while (feof(flot)==0)
|
|
{
|
|
if (nc==rechercher)
|
|
{
|
|
printf("%d\t%.2f\t%d\n",nc,cagnotte,suspension);
|
|
validateur=12;
|
|
}
|
|
fscanf(flot,"%d%f%d",&nc,&cagnotte,&suspension);
|
|
}
|
|
fclose(flot);
|
|
if (validateur!=12)
|
|
{
|
|
printf("ce client n'existe pas\n");
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int creationfichier(void)
|
|
{
|
|
FILE *flot;
|
|
flot=fopen("fichierclient.don","a");
|
|
fclose(flot);
|
|
return 0;
|
|
|
|
}
|
|
int compteurtaillelogique (void)
|
|
|
|
{
|
|
int i=0,placeholder1,placeholder2;
|
|
float placeholder3;
|
|
FILE *flot;
|
|
flot=fopen("fichierclient.don","r");
|
|
fscanf(flot,"%d%f%d",&placeholder1,&placeholder3,&placeholder2);
|
|
while(feof(flot)==0)
|
|
{
|
|
i=i+1;
|
|
fscanf(flot,"%d%f%d",&placeholder1,&placeholder3,&placeholder2);
|
|
|
|
}
|
|
fclose(flot);
|
|
return i;
|
|
|
|
} |