Récapitulatif - Gestionnaire de compte bancaire
Fait partie de la section Programmation Orientée Objet du Journey C++ de Coddy. Leçon 33 sur 104.
Défi
FacileConstruisons un gestionnaire complet de comptes bancaires qui réunit tous les concepts de propriétés de classe que tu as appris dans ce chapitre : membres privés avec accesseurs et mutateurs, fonctions membres const, membres mutable, variables et méthodes statiques, ainsi que fonctions amies.
Tu vas créer deux fichiers pour organiser ton code :
BankAccount.h: définis une classeBankAccountqui gère les données des comptes avec un encapsulation appropriée. Ta classe doit comporter :- Membres privés :
accountNumber(chaîne de caractères),ownerName(chaîne de caractères),balance(double) et unmutable int queryCountpour suivre le nombre de fois où le solde a été vérifié - Un membre statique privé
totalAccountspour suivre le nombre de comptes existants - Un constructeur qui prend le numéro de compte, le nom du titulaire et le solde initial. Il doit initialiser
queryCountà0et incrémentertotalAccounts - Accesseurs const :
getAccountNumber(),getOwnerName()etgetBalance(); l’accesseur du solde doit incrémenterqueryCountchaque fois qu’il est appelé - Un accesseur const
getQueryCount()qui renvoie le nombre de fois où le solde a été vérifié - Une méthode
deposit(double amount)qui ajoute le montant au solde uniquement si celui-ci est positif - Une méthode
withdraw(double amount)qui soustrait le montant du solde uniquement si celui-ci est positif et ne dépasse pas le solde actuel - Une méthode statique
getTotalAccounts()qui renvoie le nombre total de comptes créés - Déclare une fonction amie
transfer(BankAccount& from, BankAccount& to, double amount)qui transfère de l’argent entre les comptes. Elle ne doit effectuer le transfert que si le montant est positif et que la source dispose de fonds suffisants
Définis le membre statique et la fonction amie après la définition de la classe.
- Membres privés :
main.cpp: démontre le fonctionnement conjoint de toutes ces fonctionnalités. Lis deux noms de titulaires et deux soldes initiaux depuis l’entrée (quatre lignes au total : name1, balance1, name2, balance2), puis :- Crée deux objets
BankAccountavec les numéros de compte"ACC001"et"ACC002" - Affiche
"Total accounts: <count>" - Affiche
"<name>: $<balance>"pour le premier compte - Affiche
"<name>: $<balance>"pour le deuxième compte - Dépose
500.0sur le premier compte - Affiche
"After deposit - <name>: $<balance>"pour le premier compte - Transfère
300.0du premier compte vers le deuxième à l’aide de la fonction amie - Affiche
"After transfer:" - Affiche
" <name>: $<balance>"pour le premier compte - Affiche
" <name>: $<balance>"pour le deuxième compte - Affiche
"Query count for <name>: <count>"pour le premier compte
- Crée deux objets
Formate toutes les valeurs de solde avec deux décimales en utilisant std::fixed et std::setprecision(2) de <iomanip>. Convertis les soldes saisis depuis des chaînes de caractères en nombres flottants à l’aide de std::stod().
N’oublie pas les gardes d’inclusion dans ton fichier d’en-tête et d’inclure <string> et <iostream> lorsque cela est nécessaire.
Essayez vous-même
#include <iostream>
#include <string>
#include <iomanip>
#include "BankAccount.h"
int main() {
// Lire l'entrée
std::string name1, name2;
std::string balance1Str, balance2Str;
std::getline(std::cin, name1);
std::getline(std::cin, balance1Str);
std::getline(std::cin, name2);
std::getline(std::cin, balance2Str);
double balance1 = std::stod(balance1Str);
double balance2 = std::stod(balance2Str);
// Définir le formatage de sortie pour 2 décimales
std::cout << std::fixed << std::setprecision(2);
// TODO: Créer deux objets BankAccount avec les numéros de compte "ACC001" et "ACC002"
// TODO: Print "Total accounts: <count>"
// TODO: Afficher "<name>: $<balance>" pour le premier compte
// TODO: Afficher "<name>: $<balance>" pour le second compte
// TODO: Déposer 500.0 sur le premier compte
// TODO: Print "After deposit - <name>: $<balance>" for the first account
// TODO: Transférer 300.0 du premier compte au second en utilisant la fonction amie
// TODO: Print "After transfer:"
// TODO: Afficher " <name>: $<balance>" pour le premier compte (noter l'indentation de 2 espaces)
// TODO: Afficher " <name>: $<balance>" pour le second compte (noter l'indentation de 2 espaces)
// TODO: Print "Query count for <name>: <count>" for the first account
return 0;
}
Toutes les leçons de Programmation Orientée Objet
1Fondamentaux de la POO
Fichiers externesGénération et compilation en C++Fichiers d’en-tête et fichiers sourceEspaces de noms et portéeIntroduction à la POO en C++Classes et objetsLe pointeur « this »Méthodes (fonctions membres)Attributs (membres de données)Bases des constructeurs et destructeursRécapitulatif - Calculatrice simple4Propriétés de classe
Membres d’instance et statiquesAccesseurs et mutateursFonctions membres constMot-clé mutableMéthodes et variables statiquesFonctions et classes amiesRécapitulatif - Gestionnaire de compte bancaire7Héritage
Héritage de baseNiveaux d’accès de l’héritageOrdre d’appel des constructeurs et destructeursRedéfinition des méthodesFonctions virtuelles et VTableHéritage multipleHéritage virtuelRécapitulatif : hiérarchie des employés10Vue d’ensemble de la STL
Vue d’ensemble et philosophie de la STLConteneurs de la STLItérateursAlgorithmes de la STLFoncteurs et expressions lambdaRécapitulatif - fréquence des mots13Modèles de conception, partie 1
Introduction aux modèles de conceptionModèle SingletonFabrique et fabrique abstraiteModèle BuilderModèle ObserverModèle Strategy2Gestion de la mémoire
Mémoire de pile ou de tasPointeurs et référencesMémoire dynamique (new/delete)Pointeurs intelligents en C++RAII en C++Récapitulatif - Gestionnaire de tableaux dynamiques5Encapsulation
Spécificateurs d’accès en C++Spécificateurs d’accès en profondeurMasquage de l’informationStruct vs classeClasses imbriquées et internesRécapitulatif - Système de gestion des dossiers étudiants8Polymorphisme
Polymorphisme à la compilation vs à l’exécutionSurcharge de fonctionsRetour sur les fonctions virtuellesFonctions virtuelles puresClasses abstraitesConception d’interfaces en C++Conversion dynamique et RTTIRécapitulatif - Calculateur de formes3Constructeurs et destructeurs
Constructeur par défautConstructeur paramétréConstructeur de copieConstructeur de déplacementListes d’initialisation des constructeursConstructeurs déléguésApprofondissement des destructeursRègle des trois / cinq / zéroRécapitulatif - Classe String6Surcharge des opérateurs
Introduction à la surcharge des opérateursSurcharge des opérateurs arithmétiquesSurcharge des opérateurs de comparaisonOpérateurs de fluxSurcharge de l’opérateur d’affectationSurcharge des opérateurs [] et ()Opérateurs de conversion de typeRécapitulatif – Classe Matrix9Templates
Templates de fonctionsTemplates de classesSpécialisation des templatesTemplates variadiquesBases de SFINAE et des traits de typesRécapitulatif - Conteneur génériqueEntraînez-vous par vous-même : Compilateur C++ en ligne