On souhaite gérer les produits d’un magasin en utilisant n tableau de structures
permettant l’enregistrement des informations concernant les produits (code, Nom, Date de production, Date d’expiration, prix et Quantité). Pour cela on considère les
déclarations suivantes :
#define max 100
typedef struct {
int mois ;
int annee ;
} Date ;
typedef struct {
int code ;
char nom [30] ;
Date production ;
Date expiration ;
float prix ;
int Qte ;
} Produit ;
=> Les fonctions à rédiger sont les suivantes :
1) void lecture (Produit P[max], int N ) qui permet de saisir les informations de N
produits.
2) void afficher_produits (Produit P [max], int N ) cette fonction permet d’afficher
les informations de N produits.
3) int comparer_date (Date x , Date y ) qui permet de comparer deux dates , et
retourne ( -1 si x avant y, 0 si x et y sont identiques , 1 si x après y ).
4) void afficher_expirations (Produit P [max] , int N , Date reference ) permet
d’afficher la liste de produits expirés par rapport à une date de référence .
5) void ajouter_produit (Produit P [max] , int * N , Produit pr ) cette fonction
permet d’ajouter un produit à la liste de produits.
6) void supprimer_produits (Produit P [max] , int * N , Date reference ) cette
fonction permet de supprimer les produits expirés par rapport à une date de référence.
Correction
1)
void lecture (Produit P[max],int N ){
int i;
for ( i=0; i<N ; i++)
{ printf("Entrer le code:"); scanf("%d",&P[i].code);
printf("Entrer le NOM : "); scanf("%s",P[i].nom);
printf("Date de production \n");
printf(" Mois:"); scanf("%d",&P[i].production.mois);
printf(" annee:"); scanf("%d",&P[i].production.annee);
printf("Date d'expiration \n");
printf(" Mois:"); scanf("%d",&P[i].expiration.mois);
printf(" annee:"); scanf("%d",&P[i].expiration.annee);
printf("Entrer le prix :"); scanf("%f",&P[i].pHT);
printf("Entrer la quantite:"); scanf("%d",&P[i].quantite);
printf("****************************\n");
}
}
2)
void afficher_produits (Produit P[max],int N){
int i;
for ( i=0; i<N ; i++){
printf("le code: %d\n",P[i].code);
printf("Le nom : %s\n",P[i].nom);
printf("Date de production:%d/%d \n",P[i].production.mois,P[i].production.annee);
printf("Date d'expiration:%d/%d \n",P[i].expiration.mois,P[i].expiration.annee);
printf("le prix : %.2f DH \n",P[i].pHT);
printf("la quantite: %d \n",P[i].quantite);
printf("****************************\n");
}
}
3)
int comparer_Date (Date x ,Date y)
{ if(x.annee < y.annee ) return -1;
if(x.annee > y.annee ) return 1 ;
if(x.annee == y.annee && x.mois < y.mois ) return -1 ;
if(x.annee == y.annee && x.mois > y.mois ) return 1 ;
if(x.annee == y.annee && x.mois == y.mois ) return 0 ;
}
4)
void afficher_expirations(Produit A[max],int N ,Date reference)
{ Produit tab[max];
int i,j=0;
for ( i=0; i<N ; i++)
{ if(comparer_Date(A[i].expiration,reference)== -1)
{ tab[j] = A[i]; j++ ;
}
}
afficher_produits (tab,j);
}
5)
void ajouter_produit(Produit P[max],int * N ,Produit pt)
{
P[*N] = pt; (*N)++;
}
6)
void supprimer_produits(Produit P[max],int* N ,Date reference )
{ int i,j;
for ( i=0; i<*N ; i++)
{if( comparer_Date (P[i].expiration,reference)==-1)
{
for (j=i;j<*N ;j++) P[j] = P[j+1];
(*N)--; i--;
}
}
}