Un centre d’immatriculation au Maroc souhaite automatiser l’enregistrement des véhicules  (Neuf et occasion) via un système informatique. Ce système doit assurer les taches suivantes : l’enregistrement des véhicules, l’élaboration des cartes grises, ….etc. On vous propose de réaliser cette gestion en utilisant un tableau de structures. Chaque véhicule est identifié par les informations suivantes : Nom, prénom et CIN du propriétaire, Marque, Model, Carburant (gasoil ou essence), état (neuf ou occasion), puissance fiscale et Immatriculation. Ces informations représentent les champs des  structures  suivantes.

typedef  struct  {  
int  mois  ;  
int   annee ;  
} Model ;

typedef  struct  {   
char nom_prenom[30] ;  
char  CIN[20]  ;  
char marque[20]  ; 
 Model mod ; 
char carburant[15] ; 
char etat[15] ;  
int fiscale ;  
char Matricule[40]  ;  
} Vehicule ; 

#define max 100

=> Les fonctions à rédiger sont les  suivantes :

1)  void  saisir (Vehicule  V[max] , int N )  permet de saisir les informations  de N véhicules.  
 
2) void   afficher  (Vehicule  V[max] , int N )   permet d’afficher la liste de N véhicules qui sont enregistrés dans le tableau V. 

3)  int rechercher  (Vehicule   V[max] , int N , char Matricule [40] )   cette fonction 
permet  de rechercher un véhicule identifié par la matricule  m  dans  le tableau V contenant N véhicules et retourne l’indice 1 dans le cas de réussite et  0  dans le cas inverse.

4) void  ajouter_vehicule  (Vehicule   V[max] , int  * N  , Vehicule vc  )   permet  d’ajouter un véhicule vc  au tableau V  de N  véhicules. Dans le cas où le véhicule existe déjà dans le tableau, il faut faire une mise à jour concernant  le nouveau propriétaire (nom_prénom et CIN).  
            
5) Dans le cadre de la protection de l’environnement contre la pollution et la réduction du nombre des  accidents, une décision est prise pour arrêter les véhicules qui ont dépassés  25  ans de circulation par rapport à la date  précisée. 

void   supprimer (Vehicule   V[max] ,  int  * N ,  int  annee )  cette fonction  permet  de supprimer les véhicules qui ont dépassés 25  ans de circulation.

                                            Correction
                                                       
1)

void saisir (Vehicule V[max],int N){
 int i;
  for ( i=0; i<N ; i++)
   {
     printf("Entrer Nom et prenom:");   scanf("%s",V[i].nom_prenom);
     printf("Entrer CIN: "); scanf("%s",V[i].CIN);
     printf("Entrer marque: "); scanf("%s",V[i].marque);
     printf("Entrer model \n");  
     printf(" mois: ");     scanf("%d",&V[i].mod.mois);
     printf(" annee: ");    scanf("%d",&V[i].mod.annee);
     printf("Carburant: "); scanf("%s",V[i].carburant);
     printf("Etat : ");     scanf("%s",V[i].etat);
     printf("Nb cv: ");     scanf("%d",&V[i].fiscale);
     printf("Matricule :"); scanf("%s",V[i].Matricule);
   }
 }

2)

void  afficher (Vehicule V[max],int N){
 int i;
  for ( i=0; i<N ; i++)
   { printf("Nom et prenom: %s\n",V[i].nom_prenom);
     printf("CIN: %s\n",V[i].CIN);
     printf("Model: %d/%d \n",V[i].mod.mois,V[i].mod.annee);  
     printf("Carburant: %s \n",V[i].carburant);
     printf("Etat : %s \n",V[i].etat);
     printf("Nb cv: %d \n",V[i].fiscale);
     printf("Matricle:%s \n",V[i].Matricule);
     printf("**************************\n");
   }
 }

3)

int rechercher (Vehicule V[max], int N,char  m[40])  
 {  int i,existe=0;
    for ( i=0; i<N ; i++) {
    if( strcmp(V[i].Matricule,m)==0) 
        existe=1; 
     }
    return existe;  
 }


4)

void  ajouter_vehicule(Vehicule V[max],int *N,Vehicule vc)
 {   int i;
     if(rechercher(V,*N,vc.Matricule)== 1) 
      { for( i=0; i < *N; i++)
         { if( strcmp(V[i].Matricule,vc.Matricule)==0) 
            { strcpy(V[i].nom_prenom,vc.nom_prenom) ; 
              strcpy(V[i].CIN,vc.CIN);
            }  
          } 
     }else
        { V[*N] = vc ;   (*N)++; }  
 }

5)

void   supprimer (Vehicule V[max],int *N,int annee)  
{ int i,j;
   for ( i=0; i<*N ; i++)
     {if(annee-V[i].mod.annee>=25)
        {    
           for (j=i;j<*N ;j++)   V[j] = V[j+1];
              (*N)--;   i--; 
        }
    }
 }