Menu
Coddy logo textTech

Système bancaire

Fait partie de la section Programmation Orientée Objet du Journey Dart de Coddy — leçon 108 sur 110.

challenge icon

Défi

Facile

Construisons un système bancaire qui modélise des opérations financières réelles en utilisant les principes de la POO que vous avez maîtrisés tout au long de ce cours. Vous créerez des comptes avec différentes règles, suivrez les transactions et gérerez les clients - le tout organisé sur plusieurs fichiers.

Votre système bancaire sera organisé en six fichiers :

  • transaction.dart : Créez une classe Transaction qui représente un enregistrement immuable d'une opération financière. Chaque transaction possède des champs final pour type (String - "deposit", "withdrawal", ou "transfer"), amount (double), et timestamp (DateTime). Surchargez toString() pour retourner [type] $amount.
  • account.dart : Créez une classe abstraite Account avec un _balance (double) privé, un numéro de compte final (accountNumber - String), et une List<Transaction> pour stocker l'historique des transactions. Incluez un getter pour le solde, un setter protégé set balance(double value) afin que les sous-classes dans d'autres fichiers puissent mettre à jour le solde, une méthode abstraite bool canWithdraw(double amount) que les sous-classes implémentent, et ces méthodes concrètes :
    • deposit(double amount) - ajoute au solde, enregistre une transaction, affiche Deposited $amount. Balance: $balance
    • withdraw(double amount) - si canWithdraw() retourne true, soustrait du solde, enregistre une transaction, affiche Withdrew $amount. Balance: $balance. Sinon, affiche Withdrawal denied.
    • getTransactionCount() - retourne le nombre de transactions
  • savings_account.dart : Créez un SavingsAccount qui étend Account. Les comptes d'épargne ont une limite de retrait - ils ne peuvent pas retirer plus de $500 en une seule transaction. Implémentez canWithdraw() pour appliquer cette règle (assurez-vous également que le solde est suffisant). Ajoutez une méthode applyInterest(double rate) qui augmente le solde du taux de pourcentage donné en utilisant le getter et le setter balance, puis affiche Interest applied. Balance: $balance.
  • checking_account.dart : Créez un CheckingAccount qui étend Account. Les comptes courants ont une protection contre les découverts jusqu'à $100 - ils peuvent être négatifs mais pas en dessous de -$100. Implémentez canWithdraw() pour autoriser les retraits tant que le solde résultant reste supérieur ou égal à -$100.
  • customer.dart : Créez une classe Customer avec un id (String), un name (String), et une List<Account> pour ses comptes. Incluez les méthodes addAccount(Account account) pour ajouter un compte, et getTotalBalance() qui retourne la somme de tous les soldes des comptes. Surchargez toString() pour retourner Customer: name (X accounts).
  • main.dart : Démontrez votre système bancaire. Créez un client (C001, John Smith). Créez un SavingsAccount (SAV001, solde initial $1000) et un CheckingAccount (CHK001, solde initial $500). Ajoutez les deux comptes au client et affichez le client. Ensuite, effectuez ces opérations :
    1. Déposez $200 sur le compte d'épargne
    2. Retirez $300 du compte d'épargne (devrait réussir)
    3. Essayez de retirer $600 du compte d'épargne (devrait être refusé - dépasse la limite)
    4. Appliquez 5 % d'intérêt au compte d'épargne
    5. Retirez $550 du compte courant (devrait réussir en utilisant le découvert)
    6. Essayez de retirer $100 de plus du compte courant (devrait être refusé - dépasserait la limite de découvert)
    Enfin, affichez Savings transactions: X et Total balance: $Y (formaté à 2 décimales).

Sortie attendue :

Customer: John Smith (2 accounts)
Deposited $200.0. Balance: $1200.0
Withdrew $300.0. Balance: $900.0
Withdrawal denied
Interest applied. Balance: $945.0
Withdrew $550.0. Balance: $-50.0
Withdrawal denied
Savings transactions: 3
Total balance: $895.0

Essayez vous-même

import 'transaction.dart';
import 'account.dart';
import 'savings_account.dart';
import 'checking_account.dart';
import 'customer.dart';

void main() {
  // TODO: Créer un client avec l'id "C001" et le nom "John Smith"
  
  // TODO: Créer un SavingsAccount avec le accountNumber "SAV001" et un solde initial de $1000
  
  // TODO: Créer un CheckingAccount avec le accountNumber "CHK001" et un solde initial de $500
  
  // TODO: Ajouter les deux comptes au client
  
  // TODO: Afficher le client
  
  // TODO: Effectuer les opérations suivantes :
  // 1. Déposer $200 sur le compte d'épargne
  // 2. Retirer $300 du compte d'épargne (devrait réussir)
  // 3. Essayer de retirer $600 du compte d'épargne (devrait être refusé - dépasse la limite)
  // 4. Appliquer 5% d'intérêt au compte d'épargne
  // 5. Retirer $550 du compte chèque (devrait réussir en utilisant le découvert)
  // 6. Essayer de retirer $100 de plus du compte chèque (devrait être refusé - dépasserait la limite de découvert)
  
  // TODO: Afficher "Savings transactions: X" où X est le nombre de transactions
  
  // TODO: Afficher "Total balance: \$Y" où Y est formaté avec 2 décimales
}

Toutes les leçons de Programmation Orientée Objet