L’objectif est de créer un programme permettant la gestion d’une bibliothèque, cette bibliothèque contient un grand nombre de livres de différentes spécialités. Chaque livre comporte un ensemble d’informations (code, titre, spécialité, auteur et édition).
On considère les structures suivantes :
typedef struct {
int jour ;
int mois ;
int annee ;
} Edition ;
typedef struct {
int code ;
char titre [30] ;
char specialite[30] ;
char auteur[30] ;
Edition edit ;
} Livre ;
#define max 100
==> Les fonctions à rédiger sont les suivantes :
1) void lecture (Livre L[max], int N ) qui permet de saisir les informations de N livres.
2) void afficher (Livre L[max], int N ) cette fonction permet d’afficher les informations de N livres.
3) int comparer (Edition x , Edition y ) qui permet de comparer deux dates d’éditions, et retourne ( -1 si x avant y, 0 si x et y sont identiques , 1 si x après y ).
4) void ordre_edition (Livre L[max] , int N ) permet de classer les livres du tableau L par ordre, selon la date d’édition.
5) Livre * livres_auteur (Livre L[max] , int N , char nom[30] , int * k ) cette fonction permet de retourner un tableau contenant les livres d’un auteur passé en paramètre (nom). L représente un tableau contenant N Livres et k sert à mémoriser la taille du tableau retourné.
6) void supprimer ( Livre L[max] , int * N , char nom[30] ) cette fonction permet de supprimer les livres d’un auteur passé en paramètre. N passé par adresse pour modifier la taille du tableau après la suppression.
Correction
1)
void lecture (Livre L[max],int N ){
int i;
for ( i=0; i<N ; i++)
{ printf("Entrer le code:"); scanf("%d",&L[i].code);
printf("Entrer le titre: "); scanf("%s",L[i].titre);
printf(" specialite: "); scanf("%s",L[i].specialite);
printf(" L'auteur :"); scanf("%s",L[i].auteur);
printf("Date d'edition \n");
printf(" Jour:"); scanf("%d",&L[i].edit.jour);
printf(" Mois:"); scanf("%d",&L[i].edit.mois);
printf(" annee:"); scanf("%d",&L[i].edit.annee);
printf("***************************\n");
}
}
2)
void afficher (Livre L[max],int N){
int i;
for ( i=0; i<N ; i++)
{ printf("le code: %d\n",L[i].code);
printf("Le titre : %s\n",L[i].titre);
printf(" specialite :%s\n",L[i].specialite);
printf(" l'auteur : %s\n",L[i].auteur);
printf("Date d'edition: %d/%d/%d \n",
L[i].edit.jour,L[i].edit.mois,L[i].edit.annee);
printf("****************************\n");
}
}
3)
int comparer(Edition x ,Edition 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 && x.jour < y.jour) return -1 ;
if(x.annee == y.annee && x.mois == y.mois && x.jour > y.jour) return 1 ;
if(x.annee == y.annee && x.mois == y.mois && x.jour == y.jour) return 0 ;
}
4)
void ordre_edition(Livre L[max],int N)
{ Livre aide; int i,j;
for( i=0; i <N-1; i++)
{ for( j=i+1; j <N; j++)
{
if(L[i].edit.annee > L[j].edit.annee)
{ aide = L[i]; L[i] = L[j] ; L[j]= aide ;}
if(L[i].edit.annee == L[j].edit.annee &&
L[i].edit.mois > L[j].edit.mois)
{ aide = L[i]; L[i] = L[j] ; L[j]= aide ; }
if(L[i].edit.annee == L[j].edit.annee &&
L[i].edit.mois == L[j].edit.mois &&
L[i].edit.jour > L[j].edit.jour)
{ aide = L[i]; L[i] = L[j] ; L[j]= aide ; }
}
}
}
5)
Livre * livres_auteur(Livre L[max],int N ,char nom[30],int *k)
{ Livre tab[max];
int i;
*k = 0 ;
for ( i=0; i<N ; i++)
{ if(strcmp(L[i].auteur,nom)==0)
{ tab[*k] = L[i];
(*k)++ ;
}
}
return tab;
}
6)
void supprimer (Livre L[max],int *N,char nom[30])
{ int i,j;
for ( i=0; i<*N ; i++)
{if(strcmp(L[i].auteur,nom)==0)
{
for (j=i;j<*N ;j++) L[j] = L[j+1];
(*N)--; i--;
}
}
}