Vous êtes sur la page 1sur 4

ENSA–Khouribga Université Sultan

Dept Maths & Info Moulay Slimane


Info 3 : Programmation C
Listes des Mini-Projets
1 Mini-Projet de programmation C
Il s’agit de produire un programme (fichiers source et un exécutable testé et opérationnel avec la
documentation), dont le sujet est présenté dans la suite du document. Le développement de ce programme se
fera obligatoirement sous l’environnement CodesBlocks ou DevC (Winodows \ Linux \ MacOS), en langage
C.

1.1 Objectifs du projet


Le développement d’un projet est un moyen de progresser dans l’apprentissage d’un langage de program-
mation. C’est dans cet esprit qu’il vous est proposé. Il doit vous permettre de consolider les connaissances
acquises en TP et d’en acquérir de nouvelles.
Pour cela, vous devrez développer un programme dont vous vous aurez vous même défini les fonctionna-
lités.
En fin de réalisation, votre travail sera évalué par les enseignants, lors d’une séance de présentation orale
du travail réalisé.
Valider les compétences du cours « Info 3 : Programmation C » par l’écriture d’un programme original
d’environ 500 lignes en langage C, correspondant à 20 heures de travail effectives.

1.2 Organisation
Les étudiants travaillent en binôme, groupe par groupe.

1.3 Ce qu’il faut rendre :


* Le programme source complet largement commenté (obligatoire)
* Un exécutable testé et opérationnel avec sa documentation d’installation
* Un rapport (Maximum 15 pages) présentant le travail effectué :
1. Organisation du programme : découpage en fonctions, rôle de ces fonctions, explications du pro-
gramme
2. Mode d’emploi du programme
3. Bilan qualitatif du travail, difficultés rencontrées, etc.
Le tout sera placé dans un fichier archive (.zip ou .rar), à envoyer par mail à saadi_moyahoo.fr.

1.4 Évaluation du projet


Elle repose sur les éléments suivants :
* Le programme source :
– Respect de l’énoncé, originalité du thème proposé
– Qualité technique du programme : découpage en fonctions, instructions, algorithmes, efficacité, ges-
tion des erreurs...
* Présentation du programme : indentation, commentaires et nommage
* Documentation fornie
– Organisation du programme et son mode d’emploi
– Bilan
* Rapport de 15 pages au Maximum (imprimé).
* Soutenance du travail

API/2eme Anne page 1 Pr. M. SAADI – 2019-20


ENSA–Khouribga Université Sultan
Dept Maths & Info Moulay Slimane

– Démonstration du programme
– Interrogation individuelle sur le travail réalisé

1.5 Calendrier et notation


Les projets sont à rendre le 10 janvier 2020 (tout retard conduira à des pénalités). La soutenance du
travail, d’une durée de 10 minutes, aura lieu la semaine suivante des examens.

2 Présentation du projet
Vous devrez réaliser un programme permettant de gérer un système de réservation d’objets quelconques :
Personnels (Employe et enfant), livres (Livres et emprunteurs), cassettes vidéo(DVD, Emprunteurs), chambres
d’hôtel (Chambre et Client), voiture (Voiture et conducteur), ressources d’une école (salles de cours, enseigne-
ments...), etc. Les exemples donnés ci-dessous concernent une gestion de prêts de livres dans une bibliothèque,
et la gestion du personnels d’un groupe : vous devrez personnaliser votre programme en fonction de
votre choix.

A vous de choisir un système de gestion : soyez imaginatifs et créatifs

Le modèle à mettre en oeuvre contiendra deux structures différentes, dont les champs contiennent à
minima les informations données ci-dessous. Vous devrez sans doute ajouter des champs dans ces structures
en fonction du système de réservation que vous avez choisi.

2.1 Exemple 1 : Gestion de prêts de livres dans une bibliothèque


ADHERENT
typedef struct SAdherent {
int adh_Index;
char adh_Nom[CMAX];
int adh_NbEmprunts;
} Adherent;

LIVRE
typedef struct SLivre {
int liv_Index;
char liv_Titre[CMAX];
char liv_Auteur[CMAX];
int liv_Emprunteur;
} Livre;

adh_Index (resp. liv_Index) identifie de manière unique un adhérent (resp. un livre). Il vous appartient
de gérer la notion de numéro unique. liv_Emprunteur contient la valeur de adh_Index de l’emprunteur
du livre. Le nombre de livres empruntés par un adhérent est stocké dans adh_NbEmprunts (un adhérent
peut donc emprunter plusieurs livres).

2.2 Exemple 2 :Gestion de personnels


Il faut créé un fichier où vous avez toutes les informations nécessaires concernant des personnes. Une
personne est connue par son : nom, prénom, sexe, date de naissance (jour, mois, année), un identifiant le N°
CIN (6 caractères ex : PP0001), le nombre d’enfants et leurs identifiants
CIN identifie de manière unique une personne.
Ex : perso.txt

API/2eme Anne page 2 Pr. M. SAADI – 2019-20


ENSA–Khouribga Université Sultan
Dept Maths & Info Moulay Slimane

Mohamed Amine (nom prénom)


M (Sexe).
10/02/1984 (date de naissance ).
0 (nombre d’enfants).
P0001 (l‘identifiant)

Said Mounir (nom prénom)


M (Sexe).
11/08/1976 (date de naissance ).
0 (nombre d’enfants).
P0002 (l‘identifiant)

Fadili Zahra
F
05/02/1966
3 P0005 P0006 P0007 (Ce sont les identifiants des enfants de Fadili )
P0002

Toutes les personnes seront stockées dans une liste qui est un pointeur.

3 Contraintes de programmation
3.1 Travail à faire
Les traitements (fonctions) qu’il faut faire :
– Charger les données du fichier dans une liste ou tableau (en utilisant une structure personne).
– Ajouter dans la liste ou le tableau (donnée en paramètre).
– Ajouter les enfants d’une personne (donnée en paramètre).
– Supprimer de la liste ou tableau.
– Consulter la liste ou tableau des personnes/adhérents.
– Chercher une personne/adhérent par son nom ou prénom (utiliser fseek).
– Afficher les informations sur les enfants d’une personne donnée en paramètre.
– Retourner le nom de mère ou père d’une personne. (le nom de la personne est donné en paramètre)
– Retourner les informations d’une personne/adhérent.
– Modifier les enregistrements d’une personne. (Mise à jour).
– Trier la liste des personnes/adhérents (selon le nom et l’identifiant).
– Sauvegarder les données de la liste / tableau dans un fichier.
– Toutes autres fonctions que vous considérez utiles ...

3.2 La fonction main :


La fonction main() devra contenir un tableau ou liste de structures Adherent \ Personne et un
tableau ou liste de structure Livre \ Groupe (ce ne seront pas des variables globales). Vous devrez
enregistrer les données de ces structures dans deux fichiers, en utilisant fscanf() et fprintf().
Votre programme devra proposer un menu comme celui-ci :
1. Gestion des adhérents/clients
– Ajouter, modifier ou supprimer un adhérent/client
– afficher la liste des adhérents/clients par ordre alphabétique
2. Gestion des livres/produits
– Ajouter, modifier ou supprimer un livre/produit
– afficher la liste des livres/produits par ordre alphabétique (titre)

API/2eme Anne page 3 Pr. M. SAADI – 2019-20


ENSA–Khouribga Université Sultan
Dept Maths & Info Moulay Slimane

3. Gestion des emprunts/achats


– Emprunter un livre / acheter un produit
– Afficher la liste des livres empruntés / des produits vendus
– Rendre un livre
– Afficher la liste des emprunteurs de livres / la liste des clients par produit
4. Quitter le programme

3.3 Notes de mise en œuvre


La suppression d’un élément du tableau ou liste implique de décaler la « case libre » vers la fin du
tableau ou liste afin de supprimer les « trous » du tableau ou liste.

API/2eme Anne page 4 Pr. M. SAADI – 2019-20