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--; 
        }
    }
 }