EXPLICATION UN PEU DETAILLE
Fichier Rôle
Main.c Programme principal (menu + logique de navigation)
Projet.c Fonctions qui exécutent les tâches
Projet.h Déclarations des structures et fonctions (interface)
Étape 1 : Déclaration des structures dans projet.h
Objectif :
Créer 2 types d'objets : Livre et Emprunt.
#define MAX 100
typedef struct {
char titre[50];
char auteur[30];
int annee;
int isbn;
int emprunte; // 0 = dispo, 1 = emprunté
} Livre;
typedef struct {
int isbn;
char nom[30];
char date[11]; // jj/mm/aaaa
} Emprunt;
Ces structures permettent de stocker toutes les infos nécessaires. Le champ emprunte
indique si le livre est déjà prêté.
Étape 2 : Prototypes dans projet.h
🎯 Objectif :
Préparer les fonctions modulaires qu’on va coder.
c
int ajouterLivre(Livre[], int);
void afficherLivres(Livre[], int);
void rechercherLivre(Livre[], int);
int supprimerLivre(Livre[], int);
int emprunterLivre(Livre[], int, Emprunt[], int);
void retournerLivre(Livre[], int);
EXPLICATION UN PEU DETAILLE
void afficherStat(Livre[], int, int);
🛠️Étape 3 : Fonctions dans projet.c
Voici le rôle de chaque fonction (tu peux les coder après cette logique) :
🔹 1. ajouterLivre()
Saisie des infos (titre, auteur, année, ISBN)
Ajoute à la liste
Retourne le nouveau total
🔹 2. afficherLivres()
Parcourt le tableau
Affiche tous les livres avec numérotation et état (dispo/emprunté)
🔹 3. rechercherLivre()
Demande un mot-clé (titre ou auteur)
Affiche les correspondances
🔹 4. supprimerLivre()
Demande ISBN
Supprime le livre en le remplaçant par le dernier dans le tableau
Retourne le nouveau total
🔹 5. emprunterLivre()
Vérifie si le livre est dispo
Saisie nom + date
Change l’état à emprunté
Ajoute à la liste des emprunts
🔹 6. retournerLivre()
Demande ISBN
Remet le livre à l’état disponible
🔹 7. afficherStat()
Compte total, nombre empruntés, nombre disponibles
Affiche les statistiques
Menu principal dans main.c
EXPLICATION UN PEU DETAILLE
Tu dois gérer les choix comme ceci :
c
int main() {
Livre livres[MAX];
Emprunt emprunts[MAX];
int nbLivres = 0, nbEmprunts = 0, choix;
do {
printf("\n1-Ajouter 2-Afficher 3-Rechercher 4-Supprimer\n");
printf("5-Emprunter 6-Retourner 7-Stats 0-Quitter\n");
printf("Choix : "); scanf("%d", &choix);
switch (choix) {
case 1: nbLivres = ajouterLivre(livres, nbLivres); break;
case 2: afficherLivres(livres, nbLivres); break;
case 3: rechercherLivre(livres, nbLivres); break;
case 4: nbLivres = supprimerLivre(livres, nbLivres);
break;
case 5: nbEmprunts = emprunterLivre(livres, nbLivres,
emprunts, nbEmprunts); break;
case 6: retournerLivre(livres, nbLivres); break;
case 7: afficherStat(livres, nbLivres, nbEmprunts);
break;
}
} while (choix != 0);
return 0;
}
📌 À chaque appel, les données sont traitées sans pointeurs, juste avec des retours de
valeur. C’est le cœur de la programmation modulaire sans complexité.