Skip to content

babapuissance/cpp00

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📚 CPP Module 00 | 42 School

Introduction au langage C++98 : classes, objets, encapsulation, variables statiques
Un module progressif de 3 exercices pour maîtriser les fondamentaux de la POO en C++

C++ 42 School Status License Made with ❤️


🎯 Objectif du Module

Découvrir la programmation orientée objet en C++98 à travers des projets concrets et progressifs

🚀 Démarrage rapide📖 Documentation🎓 Objectifs


📊 Aperçu du projet

Métrique Valeur
📁 Exercices 3 (Ex00, Ex01, Ex02)
📝 Fichiers source 11 fichiers C++
🏗️ Classes 3 (Contact, PhoneBook, Account)
⚡ Lignes de code ~800 LOC
🎯 Conformité 100% C++98

📂 Table des matières

Exercice Description Concepts clés Difficulté
Ex00 — Megaphone Conversion en majuscules Arguments, boucles
Ex01 — PhoneBook Répertoire téléphonique Classes, encapsulation ⭐⭐
Ex02 — Account Gestion de comptes bancaires Variables statiques, logs ⭐⭐⭐

🚀 Installation & Usage

📋 Prérequis

  • Compilateur C++98 : g++ ou clang++
  • Make : Système de build
  • Terminal : Interface en ligne de commande

⚡ Compilation rapide

# Clone le repository
git clone https://github.com/nassimfx/CPP-Module-00.git
cd CPP-Module-00

# Compile tous les exercices
for dir in ex00 ex01 ex02; do
    echo "🔨 Compilation de $dir..."
    cd $dir && make && cd ..
done

🎮 Test rapide

# Test Ex00
cd ex00 && ./megaphone "Hello World"  # → HELLO WORLD

# Test Ex01  
cd ex01 && ./bin/phonebook  # Interface interactive

# Test Ex02
cd ex02 && ./account_tests | cat -e  # Logs formatés

🖼️ Démonstration

🔊 Ex00 - Megaphone en action
$ ./megaphone "hello world from 42"
HELLO WORLD FROM 42

$ ./megaphone
* LOUD AND UNBEARABLE FEEDBACK NOISE *
📱 Ex01 - PhoneBook Interface
╔══════════════════════════════════════╗
║      📱 My Awesome PhoneBook 📱      ║
╚══════════════════════════════════════╝

Available commands:
  ADD    - Add a new contact
  SEARCH - Search contacts  
  EXIT   - Quit program

PhoneBook> ADD
👤 Enter first name: John
👤 Enter last name: Doe
🏷️  Enter nickname: johndoe
📞 Enter phone number: 0123456789
🤫 Enter darkest secret: I love C++
✅ Contact added successfully!

PhoneBook> SEARCH
     INDEX|FIRST NAME| LAST NAME|  NICKNAME|
----------|----------|----------|----------|
         0|      John|       Doe|   johndoe|
Enter index (0-0): 0
👤 First Name: John
👤 Last Name: Doe
🏷️  Nickname: johndoe
📞 Phone Number: 0123456789
🤫 Darkest Secret: I love C++
🏦 Ex02 - Account System Logs
[20250127_184455] index:0;amount:42;created
[20250127_184455] index:1;amount:54;created
[20250127_184455] index:2;amount:957;created
[20250127_184455] accounts:3;total:1053;deposits:0;withdrawals:0
[20250127_184455] index:0;p_amount:42;deposit:5;amount:47;nb_deposits:1
[20250127_184455] index:1;p_amount:54;withdrawal:refused
[20250127_184455] index:0;amount:47;closed
[20250127_184455] index:1;amount:54;closed
[20250127_184455] index:2;amount:957;closed

🔊 Ex00 — Megaphone

🎯 Objectif : Créer un programme qui convertit les arguments en MAJUSCULES

Megaphone Demo

💡 Concept

Le premier contact avec les arguments de ligne de commande et la manipulation de chaînes en C++98.

🚀 Usage

cd ex00
make

# Avec arguments
./megaphone "shhhh... students are asleep"
# Output: SHHHH... STUDENTS ARE ASLEEP

# Sans arguments
./megaphone
# Output: * LOUD AND UNBEARABLE FEEDBACK NOISE *

✨ Fonctionnalités

  • Conversion automatique en majuscules (std::toupper)
  • Gestion des arguments multiples (concatenation)
  • Message par défaut si aucun argument fourni
  • Gestion des caractères spéciaux et accents

🧠 Concepts appris

  • Arguments argc et argv
  • Boucles for avec index
  • Fonctions de caractères (toupper)
  • Conditions simples

📱 Ex01 — PhoneBook

🎯 Objectif : Créer un répertoire téléphonique interactif avec 8 contacts maximum

PhoneBook Demo Ring Buffer

💡 Concept

Introduction à la programmation orientée objet : classes, encapsulation, et gestion d'état.

🎮 Interface

╔══════════════════════════════════════╗
║      📱 My Awesome PhoneBook 📱      ║
╚══════════════════════════════════════╝

Available commands:
  ADD    - Add a new contact
  SEARCH - Search contacts  
  EXIT   - Quit program

PhoneBook> 

🚀 Usage

cd ex01
make
./bin/phonebook

✨ Fonctionnalités

  • Interface interactive avec couleurs ANSI et emojis
  • Validation robuste des entrées utilisateur
  • Ring buffer intelligent : remplace le plus ancien contact
  • Affichage formaté : colonnes de 10 caractères alignées à droite
  • Gestion d'erreurs : EOF, entrées vides, index invalides
  • Recherche intuitive par index avec validation

🎯 Règles d'affichage SEARCH

Champ Largeur Alignement Troncature
Index 10 Droite -
First Name 10 Droite .
Last Name 10 Droite .
Nickname 10 Droite .

🧠 Concepts appris

  • Classes et objets (Contact, PhoneBook)
  • Encapsulation : membres privés avec getters/setters
  • Constructeurs/destructeurs
  • Algorithmes de données : ring buffer
  • Interface utilisateur : entrée/sortie interactive
  • Validation d'entrées et gestion d'erreurs

🏦 Ex02 — Account

🎯 Objectif : Implémenter un système bancaire avec variables statiques et logging

Banking System Static Variables

💡 Concept

Maîtrise des variables statiques de classe : partage d'état entre toutes les instances.

🏗️ Architecture

class Account {
private:
    // Variables STATIQUES (partagées entre toutes les instances)
    static int _nbAccounts;        // Nombre total de comptes
    static int _totalAmount;       // Montant total de tous les comptes
    static int _totalNbDeposits;   // Nombre total de dépôts
    static int _totalNbWithdrawals; // Nombre total de retraits
    
    // Variables D'INSTANCE (propres à chaque compte)
    int _accountIndex;    // Index unique du compte
    int _amount;          // Solde actuel
    int _nbDeposits;      // Nombre de dépôts sur ce compte
    int _nbWithdrawals;   // Nombre de retraits sur ce compte
};

🚀 Usage

cd ex02
make
./account_tests | cat -e

📊 Exemple de logs

[20250127_184455] index:0;amount:42;created
[20250127_184455] index:1;amount:54;created
[20250127_184455] accounts:2;total:96;deposits:0;withdrawals:0
[20250127_184455] index:0;p_amount:42;deposit:5;amount:47;nb_deposits:1
[20250127_184455] index:0;p_amount:47;withdrawal:refused
[20250127_184455] index:0;amount:47;closed

✨ Fonctionnalités

  • Gestion multi-comptes avec index automatique
  • Dépôts sécurisés avec mise à jour des statistiques
  • Retraits contrôlés : refus si solde insuffisant
  • Statistiques globales en temps réel
  • Logs horodatés : format [YYYYMMDD_HHMMSS]
  • Destruction propre avec décompte automatique

🎯 Format de logs strict

Événement Format Exemple
Création index:X;amount:Y;created index:0;amount:42;created
Dépôt index:X;p_amount:Y;deposit:Z;amount:W;nb_deposits:N index:0;p_amount:42;deposit:5;amount:47;nb_deposits:1
Retrait OK index:X;p_amount:Y;withdrawal:Z;amount:W;nb_withdrawals:N index:0;p_amount:47;withdrawal:5;amount:42;nb_withdrawals:1
Retrait refusé index:X;p_amount:Y;withdrawal:refused index:0;p_amount:42;withdrawal:refused
Fermeture index:X;amount:Y;closed index:0;amount:42;closed
Infos globales accounts:X;total:Y;deposits:Z;withdrawals:W accounts:8;total:19349;deposits:8;withdrawals:8

🧠 Concepts appris

  • Variables statiques : partage d'état entre instances
  • Méthodes statiques : accès aux données globales
  • Horodatage : manipulation de std::time et std::strftime
  • Gestion de mémoire : constructeurs/destructeurs
  • Logging structuré : format de sortie strict
  • Validation métier : règles bancaires (solde suffisant)

⚙️ Stack Technique & Architecture

🛠️ Technologies utilisées

Composant Version Description
Langage C++98 Standard ISO/IEC 14882:1998
Compilateur c++ Flags: -Wall -Wextra -Werror -std=c++98
Build System Make Règles: all, clean, fclean, re
Architecture POO Classes, encapsulation, héritage

📁 Organisation des fichiers

CPP-Module-00/
├── ex00/
│   ├── megaphone.cpp
│   └── Makefile
├── ex01/
│   ├── Contact.hpp/cpp
│   ├── PhoneBook.hpp/cpp
│   ├── main.cpp
│   ├── Makefile
│   ├── obj/          # Fichiers objets (.o)
│   └── bin/          # Exécutable
├── ex02/
│   ├── Account.hpp/cpp
│   ├── tests.cpp
│   ├── Makefile
│   └── obj/          # Fichiers objets (.o)
└── README.md

✅ Standards de qualité respectés

  • 🚫 Pas de using namespace std; : Utilisation explicite de std::
  • 🔒 Include guards : Protection contre les inclusions multiples
  • 📝 Headers propres : Déclarations uniquement, pas d'implémentation
  • 📐 Format strict : Respect exact des spécifications de sortie
  • 🗂️ Organisation : Séparation claire des fichiers objets et exécutables
  • ⚡ Performance : Compilation optimisée avec flags de sécurité
  • 🧹 Code propre : Noms de variables explicites, commentaires pertinents

🎯 Conformité 42

  • Norme C++98 strictement respectée
  • Flags de compilation : -Wall -Wextra -Werror
  • Structure des fichiers conforme aux exigences
  • Format de sortie identique aux spécifications
  • Gestion d'erreurs robuste et cohérente

📖 Ressources & Documentation

🔗 Liens utiles

📚 Concepts approfondis


🎯 Objectifs pédagogiques

🎓 Compétences acquises

Concept Description Exercice
🔤 Arguments CLI Gestion argc/argv Ex00
🏗️ Classes Définition et instanciation Ex01
🔒 Encapsulation Membres privés/publics Ex01
⚡ Variables statiques Partage d'état global Ex02
🎮 Interface utilisateur Entrée/sortie interactive Ex01
📊 Algorithmes Ring buffer, validation Ex01-02
📝 Logging Formatage et horodatage Ex02

🚀 Progression d'apprentissage

  1. Ex00 : Bases - Arguments, boucles, manipulation de chaînes
  2. Ex01 : POO - Classes, objets, encapsulation, algorithmes
  3. Ex02 : Avancé - Variables statiques, logging, architecture

💡 Valeur ajoutée

  • Code production-ready avec gestion d'erreurs robuste
  • Architecture propre respectant les standards C++98
  • Interface utilisateur moderne avec couleurs et emojis
  • Documentation complète pour faciliter la maintenance


Développé avec ❤️ dans le cadre du cursus 42 School - Module 00 C++

About

42 School — C++ Module 00 (Megaphone, PhoneBook, Account)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published