Projet Algo 2011
Projet Algo 2011
Projet Algo 2011
typedef struct {
int adr_cp;
char adr_ville[50];
char adr_rue[50];
} adresse_t;
typedef struct {
int adh_num;
char adh_nom[50];
adresse_t adh_adresse;
int adh_nb_emprunts;
} adherent_t;
Structures d’implémentation
La fonction main() devra contenir les deux structures de travail ci-dessous (ce ne seront pas des
variables globales) :
• un tableau de structures adherent t : adherent t adherents[MAX ADHR];
• un tableau de structures alivre t : alivre t livres[MAX LIVRES];
Vous devrez enregistrer les données de ces structures dans deux fichiers. Pour cela, vous déclarerez
deux variables globales :
• une variable pointeur f adhr ayant pour type FILE et dirigée sur le nom du fichier adhérents
fich adhr;
• une variable pointeur f livres ayant pour type FILE et dirigée sur le nom du fichier livres
fich livres;
Les noms des fichiers adhérents et livres devront être saisies par l’utilisateur.
2 Fonctionnalités à implémenter
Votre programme devra proposer à l’utilisateur un menu permettant de naviguer dans les différentes
fonctionnalités offertes par votre programme. En particulier, votre menu devra aider à la saisie des
informations requises pour la gestion des adhérents, des livres et des emprunts (voir ci-dessous).
Pour l’algorithme de tri, vous devez utiliser la fonction qsort().
(1) Gestion des adhérents
• Ajouter, modifier ou supprimer un adhérent
• afficher la liste des adhérents par ordre alphabétique (adh num)
• rechercher un adhérent par son nom et affiche l’enregistrement correspondant
• retour menu principal
(2) Gestion des livres
• Ajouter, modifier ou supprimer un livre
• afficher la liste des livres par ordre alphabétique ((liv titre)
• rechercher le titre d’un livre et affiche l’enregistrement correspondant
• retour menu principal
(3) Gestion des emprunts
• Emprunter un livre
• Afficher la liste des livres empruntés
• Rendre un livre
• Afficher la liste des emprunteurs de livres
• retour menu principal
(4) Quitter le programme
3 Notes de mise en œuvre
Ci-dessous une proposition d’implémentaion du code de la fonction main() :
do {
printf("Entrez le nom du fichier de livres charger: -> ");
...
printf("Entrez le nom du fichier d’adhrents charger: -> ");
...
} while (!ouvrir_fichiers(fich_livres, fich_adhr));
n_adhr = charger_adherents(adherents);
n_livres = charger_livres(livres);
return 0;
}
Ci-dessous une déscription de quelques fonctions permettant d’implémenter les principales fonc-
tionnalités demandées :
1. Une fonction char lire menu(void) qui permet de lire le choix de l’utilisateur. Dès que
celui-ci appuie sur un autre choix autre que celui défini par le menu, la fonction doit produire
un signal sonore.
2. Une fonction int ouvrir fichiers(char* livres, char* adhr) qui permet d’ouvrir les
fichiers des adhérents et livres passés en paramètre. La fonction devra retourner 1 si les
fichiers ont été ouverts correctement, 0 sinon.
3. Une fonction int charger adherents(adherent t* adherents) qui charge le contenu du
fichier associé aux adhérents.
4. Une fonction int int charger livres(livre t* livres) qui charge le contenu du fichier
associé aux livres.
5. Une fonction void affiche livre(livre t* livre) qui permet de visualiser dans un for-
mat agréable les informations contenus dans l’enregistrement livre.
6. Une fonction void affiche adherent(adherent t* adhr) qui permet de visualiser dans un
format agréable les informations contenus dans l’enregistrement adhr.
7. Une fonction void gestion adhr(adherent t* adhr, int* n adhr, livre t* livres, int*
n livres) qui gère les fonctionnalités liées aux adhérents :
8. Une fonction void gestion livres(livre t* livres, int* n livres) qui gère les fonc-
tionnalités liées aux lives :
(a) void ajout livre(livre t* livres, int* n);
(b) void modif livre(livre t* livres, int n);
(c) void supprime livre(livre t* livres, int* n);
(d) void liste livres(livre t* livres, int n);
(e) void recherche livre(livre t* livres, int n);
9. Une fonction void gestion emprunts(adherent t* adhr, int n adhr, livre t* livres,
int n livres) qui gère les fonctionnalités liées aux emprunts :
(a) void emprunter(adherent t* adhr, int n adhr, livre t* livres, int n liv);
(b) void liste emprunts(const livre t* livres, int n);
(c) void rendre livre(livre t* livres, int n, adherent t* adhr, int n adhr);
(d) void liste emprunteurs(adherent t* adhr, int n adhr);
10. Une fonction void fin prog(adherent t* adhr, int n adhr, livre t* livres, int n livres)
qui sauvegarde le contenu des tableaux adhr et livres dans les fichiers associés. Cette fonc-
tion devra refermer tous les fichier ouverts avant de quitter le programme.
La suppression d’un élément du tableau implique de décaler la “case libre” vers la fin du tableau
afin de supprimer les “trous” du tableau. Tous les tableaux doivent être passés par paramètre de
la manière suivante :