Menu
Coddy logo textTech

Logique de retrait

Fait partie de la section Programmation Orientée Objet du Journey C de Coddy. Leçon 25 sur 61.

challenge icon

Défi

Facile

Votre compte bancaire grandit ! Ajoutons maintenant la possibilité de retirer des fonds. Contrairement aux dépôts, les retraits ont une contrainte supplémentaire. Vous ne pouvez pas retirer plus d'argent que vous n'en avez. Votre fonction de retrait doit vérifier le solde avant d'autoriser la transaction.

En vous appuyant sur votre projet de compte bancaire existant, vous allez étendre le module avec une fonctionnalité de retrait. C'est ici que l'encapsulation révèle vraiment toute son utilité. Votre fonction peut accéder au solde masqué pour vérifier que les fonds sont suffisants, ce que du code externe ne pourrait jamais faire directement.

Vous travaillerez avec trois fichiers :

  • account.h : ajoutez un nouveau prototype de fonction : withdraw. Cette fonction prend un pointeur vers un Account et un montant double, et renvoie un int (1 en cas de réussite, 0 si le retrait échoue). Conservez toutes vos déclarations existantes pour create_account, destroy_account et deposit.
  • account.c : implémentez la fonction withdraw. Un retrait ne doit réussir que si deux conditions sont remplies : le montant doit être positif (supérieur à zéro) ET le compte doit disposer de fonds suffisants (solde >= montant). Si les deux conditions sont remplies, soustrayez le montant du solde et renvoyez 1. Sinon, renvoyez 0 sans modifier le solde.
  • main.c : présentez le flux complet de dépôt et de retrait. Créez un compte, effectuez un dépôt pour établir un solde, puis testez les retraits : ceux qui réussissent et ceux qui échouent.

Vous recevrez quatre entrées : l'identifiant du compte (un entier), le montant du dépôt (pour établir les fonds initiaux), le montant du retrait réussi (inférieur ou égal au montant déposé) et le montant du retrait échoué (supérieur au solde restant).

Dans votre fichier principal, créez un compte et affichez une confirmation. Déposez les fonds initiaux et affichez le résultat. Effectuez ensuite le retrait réussi et affichez s'il a réussi. Enfin, tentez le retrait qui doit échouer (fonds insuffisants) et affichez le résultat. Détruisez le compte et confirmez le nettoyage.

Affichez la sortie dans ce format :

Account 1001 created
Deposit 500.00: 1
Withdraw 200.00: 1
Withdraw 400.00: 0
Account destroyed

1001 est l'identifiant du compte, 500.00 est le dépôt, 200.00 est le retrait réussi et 400.00 est le retrait échoué (car il ne reste que 300.00 après le premier retrait). Formatez tous les montants avec deux décimales en utilisant %.2f.

Votre fonction withdraw démontre la puissance de l'encapsulation. Elle peut vérifier le solde masqué en interne pour prendre des décisions, tandis que le code externe ne peut ni contourner cette validation ni consulter directement le solde.

Essayez vous-même

#include <stdio.h>
#include "account.h"

int main() {
    int account_id;
    scanf("%d", &account_id);
    
    double valid_amount;
    scanf("%lf", &valid_amount);
    
    double invalid_amount;
    scanf("%lf", &invalid_amount);
    
    Account* account = create_account(account_id);
    printf("Account %d created\n", account_id);
    
    int result_invalid = deposit(account, invalid_amount);
    printf("Deposit %.2f: %d\n", invalid_amount, result_invalid);
    
    int result_valid = deposit(account, valid_amount);
    printf("Deposit %.2f: %d\n", valid_amount, result_valid);
    
    destroy_account(account);
    printf("Account destroyed\n");
    
    return 0;
}

Toutes les leçons de Programmation Orientée Objet

Entraînez-vous par vous-même : Compilateur C en ligne