0% ont trouvé ce document utile (0 vote)
2 vues6 pages

Explication Code Bibliotheque

Le document présente un programme en C pour la gestion d'une bibliothèque, permettant l'enregistrement et la consultation de livres via un menu interactif. Il décrit la structure du code, les bibliothèques utilisées, les opérations disponibles, et les concepts clés du langage C employés. Le programme est modulaire et répond aux exigences du projet, avec des instructions pour la compilation et l'exécution.

Transféré par

maurice.leontine6
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
2 vues6 pages

Explication Code Bibliotheque

Le document présente un programme en C pour la gestion d'une bibliothèque, permettant l'enregistrement et la consultation de livres via un menu interactif. Il décrit la structure du code, les bibliothèques utilisées, les opérations disponibles, et les concepts clés du langage C employés. Le programme est modulaire et répond aux exigences du projet, avec des instructions pour la compilation et l'exécution.

Transféré par

maurice.leontine6
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

Gestion de Bibliothèque — Groupe Explication du Code C

Explication Détaillée du Code C


Projet : Gestion de Bibliothèque — Groupe 4
Langage C | Programmation Structurée

1. Introduction et Objectif du Programme


Ce programme a été développé en langage C dans le cadre du projet Groupe 4 portant sur la gestion
d'une bibliothèque. Il permet à un utilisateur d'enregistrer des livres et d'effectuer diverses opérations
de consultation et de tri sur ces données, au travers d'un menu interactif structuré en quatre pages
d'écran conformément aux exigences du projet.
Le programme couvre l'ensemble du cycle de gestion : saisie des données, comptage conditionnel,
calcul de statistiques, recherche du maximum et tri. L'ensemble des fonctionnalités est accessible
depuis un menu principal à sept choix, dont le septième permet de quitter proprement l'application.

2. Structure Générale du Code


2.1 Bibliothèques incluses
Le fichier source commence par l'inclusion de quatre bibliothèques standard du langage C :
#include <stdio.h> // Entrées/sorties standard (printf, scanf, fgets)
#include <stdlib.h> // Fonctions utilitaires (system, EXIT_SUCCESS)
#include <string.h> // Manipulation de chaînes (strcmp, strcspn, memcpy)
#include <time.h> // Fonctions de date/heure (time, localtime)
stdio.h fournit les outils d'entrée/sortie. stdlib.h permet la gestion de la mémoire et des
processus. string.h offre les fonctions de comparaison et copie de chaînes. Enfin, time.h est utilisé
pour obtenir l'année courante lors du comptage des livres récents.

2.2 Constantes et Structure de données


Deux constantes symboliques sont définies pour délimiter la capacité maximale de stockage :
#define MAX_LIVRES 100 // Nombre maximal de livres gérés
#define MAX_STR 100 // Longueur maximale d'une chaîne de caractères
La structure centrale du programme est Livre, qui regroupe en un seul type composite toutes les
informations relatives à un ouvrage :
typedef struct {
char titre[MAX_STR]; // Titre du livre
char auteur[MAX_STR]; // Nom de l'auteur
char editeur[MAX_STR]; // Nom de l'éditeur
int annee_edition; // Année de publication
int volume; // Nombre de pages
} Livre;

Page 1 — Explication détaillée du code C


Gestion de Bibliothèque — Groupe Explication du Code C
4
L'utilisation de typedef simplifie la déclaration des variables. Un tableau global de 100 éléments de type
Livre et un compteur entier nb_livres (initialisé à zéro) servent de stockage commun à toutes les
fonctions du programme.

3. Les Quatre Pages d'Écran


3.1 Page 1 — Présentation du travail (page_presentation)
La première page affichée au démarrage du programme présente le projet à l'utilisateur. Elle affiche un
encadré avec le nom du système et une description synthétique des fonctionnalités disponibles.
L'utilisateur doit appuyer sur Entrée pour passer à la suite.
Détail technique : l'appel à system("cls || clear") efface l'écran de manière compatible avec
Windows (cls) et Linux/macOS (clear). Cette technique est utilisée dans toutes les fonctions du
programme pour assurer une navigation fluide entre les écrans.

3.2 Page 2 — Membres du groupe (page_membres)


La deuxième page liste les membres du groupe avec leur pourcentage de participation. Cette page est
prévue pour être personnalisée avec les véritables noms des membres avant la remise du projet. Elle
respecte la contrainte du cahier des charges qui impose l'affichage du taux de participation de chaque
membre.

3.3 Page 3 — Authentification (page_login)


La troisième page protège l'accès au menu par un système d'authentification. L'utilisateur dispose de
trois tentatives pour saisir le bon login et le bon mot de passe. En cas d'échec, le programme se
termine. En cas de succès, il renvoie la valeur 1 (vrai) et l'exécution continue vers le menu.
const char *LOGIN_VALIDE = "admin";
const char *MDP_VALIDE = "groupe4";
Les identifiants peuvent être modifiés directement dans la fonction. La comparaison est effectuée avec
strcmp, qui retourne 0 lorsque deux chaînes sont identiques.

3.4 Page 4 — Menu principal (menu_principal)


La quatrième page est le coeur de l'application : elle affiche un menu à sept options et appelle la
fonction correspondant au choix de l'utilisateur. La boucle do...while continue de s'exécuter jusqu'à ce
que l'utilisateur choisisse l'option 7 (Quitter). Une validation de la saisie est intégrée pour rejeter toute
valeur non numérique.
do {
// Affichage du menu
scanf("%d", &choix);
switch (choix) {
case 1: saisie_livres(); break;
// ...
case 7: printf("Au revoir !\n"); break;
default: /* message d'erreur */
}
} while (choix != 7);

Page 2 — Explication détaillée du code C


Gestion de Bibliothèque — Groupe Explication du Code C
4
4. Les Six Opérations du Menu
Opération 1 — Saisie des livres (saisie_livres)
L'utilisateur indique le nombre de livres à saisir. Pour chaque livre, les cinq champs de la structure sont
remplis. Les chaînes de caractères sont lues avec fgets pour accepter les espaces, contrairement à
scanf qui s'arrête au premier espace.
Point important : après chaque fgets, la fonction strcspn supprime le caractère de saut de ligne (\n)
que fgets inclut automatiquement en fin de chaîne :
livres[nb_livres].titre[strcspn(livres[nb_livres].titre, "\n")] = '\0';

Opération 2 — Comptage des livres récents (compter_livres_recents)


Cette fonction détermine l'année en cours grâce à la bibliothèque time.h, puis parcourt l'ensemble des
livres et incrémente un compteur pour chaque ouvrage dont l'écart avec l'année courante est
strictement inférieur à 2.
time_t t = time(NULL);
struct tm *tm_info = localtime(&t);
int annee_courante = 1900 + tm_info->tm_year;

if ((annee_courante - livres[i].annee_edition) < 2)


compteur++;

Opération 3 — Livres dont le volume dépasse la moyenne


(afficher_livres_volume_superieur)
La fonction calcule d'abord la somme des volumes de tous les livres, puis divise par le nombre total
pour obtenir la moyenne. Elle parcourt ensuite le tableau et affiche uniquement les livres dont le
volume est supérieur à cette valeur.
double somme = 0;
for (int i = 0; i < nb_livres; i++) somme += livres[i].volume;
double moyenne = somme / nb_livres;

if (livres[i].volume > moyenne) afficher_livre(&livres[i]);

Opération 4 — Livre le plus volumineux (afficher_plus_volumineux)


L'algorithme initialise un indice idx_max à 0, puis compare le volume de chaque livre suivant avec le
volume du livre actuellement considéré comme le plus grand. À la fin du parcours, idx_max contient
l'indice du livre avec le volume maximal.
int idx_max = 0;
for (int i = 1; i < nb_livres; i++) {
if (livres[i].volume > livres[idx_max].volume)
idx_max = i;
}
Sont affichés : le titre, l'éditeur, la date d'édition et le volume du livre trouvé.

Page 3 — Explication détaillée du code C


Gestion de Bibliothèque — Groupe Explication du Code C
4
Opération 5 — Tri par volume décroissant
(afficher_par_volume_decroissant)
Pour préserver les données originales, la fonction commence par copier le tableau dans un tableau
temporaire via memcpy. Un tri à bulles est ensuite appliqué sur cette copie, en échangeant deux livres
adjacents lorsque le premier a un volume inférieur au second (ordre décroissant).
Livre temp[MAX_LIVRES];
memcpy(temp, livres, nb_livres * sizeof(Livre));

for (int i = 0; i < nb_livres - 1; i++)


for (int j = 0; j < nb_livres - 1 - i; j++)
if (temp[j].volume < temp[j+1].volume) {
Livre tmp = temp[j];
temp[j] = temp[j+1];
temp[j+1] = tmp;
}

Opération 6 — Tri alphabétique par titre (afficher_par_ordre_alphabetique)


Le même principe de copie préalable du tableau est appliqué ici. Le tri à bulles utilise strcmp pour
comparer deux titres : si la valeur retournée est positive, cela signifie que le premier titre vient après le
second dans l'ordre alphabétique, et les deux éléments sont échangés.
if (strcmp(temp[j].titre, temp[j+1].titre) > 0) {
// Échange des deux livres
}

5. Fonctions Utilitaires
Deux fonctions auxiliaires assurent l'affichage cohérent des résultats dans tout le programme.

afficher_entete_tableau
Imprime une ligne d'en-tête formatée avec les noms des colonnes (Titre, Auteur, Éditeur, Année,
Pages) et un séparateur visuel en dessous. Le spécificateur %-30s garantit un alignement à gauche
sur 30 caractères.

afficher_livre
Accepte un pointeur vers une structure Livre et affiche ses champs sur une seule ligne avec le même
format que l'en-tête, assurant un tableau lisible et aligné.

6. Tableau Récapitulatif des Fonctions


Le tableau ci-dessous résume l'ensemble des fonctions implémentées dans le programme et leur rôle
respectif.

Fonction Rôle

Page 4 — Explication détaillée du code C


Gestion de Bibliothèque — Groupe Explication du Code C
4
page_presentation() Affiche la page de présentation du programme (écran 1)
page_membres() Affiche les membres du groupe avec leur participation (écran 2)
page_login() Gère l'authentification login/mot de passe (écran 3)
menu_principal() Boucle du menu interactif à 7 choix (écran 4)
saisie_livres() Saisie des données de chaque livre (opération 1)
compter_livres_recents Comptage des livres de moins de 2 ans (opération 2)
()
afficher_livres_volume Livres dont le volume dépasse la moyenne (opération 3)
_superieur()
afficher_plus_volumine Livre avec le plus grand volume (opération 4)
ux()
afficher_par_volume_de Tri décroissant par volume (opération 5)
croissant()
afficher_par_ordre_alp Tri alphabétique par titre (opération 6)
habetique()
afficher_entete_tablea Affichage de l'en-tête du tableau de résultats
u()
afficher_livre() Affichage d'une ligne d'informations pour un livre

7. Concepts Clés du Langage C Utilisés


7.1 Les structures (struct / typedef)
Le mot-clé struct permet de regrouper plusieurs variables de types différents sous un même nom.
typedef crée un alias pour éviter de répéter le mot struct à chaque déclaration. C'est le mécanisme de
base de la programmation orientée données en C.

7.2 Les pointeurs


La fonction afficher_livre reçoit un paramètre de type const Livre * (pointeur constant vers un livre).
Passer un pointeur évite de copier toute la structure en mémoire, ce qui est plus efficace. L'opérateur -
> permet d'accéder aux champs d'une structure via un pointeur.

7.3 Les tableaux et memcpy


memcpy (de string.h) copie un bloc mémoire d'une adresse source vers une adresse destination. Son
utilisation pour dupliquer le tableau de livres avant un tri garantit que les données originales restent
intactes, ce qui est une bonne pratique de programmation.

7.4 La gestion des chaînes de caractères


fgets est préféré à scanf("%s", ...) car il peut lire des chaînes contenant des espaces. La fonction
strcspn permet de supprimer le \n final laissé par fgets. La fonction strcmp compare deux chaînes

Page 5 — Explication détaillée du code C


Gestion de Bibliothèque — Groupe Explication du Code C
4
caractère par caractère et retourne 0 si elles sont égales, un entier négatif si la première est avant la
seconde dans l'ordre lexicographique, et un entier positif dans le cas contraire.

7.5 La gestion du buffer de saisie


Chaque appel à scanf laisse le caractère de saut de ligne (\n) dans le buffer d'entrée. Si ce caractère
n'est pas consommé, il perturbe la lecture suivante avec fgets. C'est pourquoi un appel à getchar() est
systématiquement placé après chaque scanf dans le programme.

7.6 Le tri à bulles


L'algorithme de tri à bulles parcourt le tableau plusieurs fois et échange les éléments adjacents qui sont
dans le mauvais ordre. Sa complexité est O(n²) dans le cas général, ce qui est acceptable pour de
petits volumes de données. Il est utilisé deux fois dans ce programme : une fois pour le tri par volume
décroissant, et une fois pour le tri alphabétique.

8. Compilation et Exécution
Pour compiler et exécuter le programme, les commandes suivantes doivent être utilisées dans un
terminal :
# Compilation
gcc -o bibliotheque bibliotheque.c

# Exécution (Linux/macOS)
./bibliotheque

# Exécution (Windows)
[Link]
Identifiants par défaut : Login = admin | Mot de passe = groupe4

9. Conclusion
Le programme réalisé répond à l'ensemble des exigences du projet Groupe 4. Il met en oeuvre les
concepts fondamentaux de la programmation en C : structures de données, tableaux, pointeurs,
fonctions, manipulation de chaînes, gestion des entrées/sorties, et algorithmes de tri. L'architecture est
modulaire, chaque fonctionnalité étant isolée dans sa propre fonction pour faciliter la lecture, la
maintenance et l'extension future du code.
Avant la remise, il est recommandé de personnaliser les noms des membres dans la fonction
page_membres() et de mettre à jour les identifiants d'authentification dans page_login() si nécessaire.

Page 6 — Explication détaillée du code C

Vous aimerez peut-être aussi