mirror of
https://github.com/Ladebeze66/cpp-partie-1.git
synced 2025-12-16 05:58:04 +01:00
120 lines
5.8 KiB
C++
120 lines
5.8 KiB
C++
// ************************************************************************** //
|
|
// //
|
|
// Account.cpp for GlobalBanksters United //
|
|
// Created on : Sat Dec 23 19:43:15 2023 //
|
|
// //
|
|
// Made by : fgras-ca //
|
|
// //
|
|
// ************************************************************************** //
|
|
|
|
#include "Account.hpp"
|
|
#include <iostream>
|
|
#include <string>
|
|
#include <ctime>
|
|
#include <iomanip>
|
|
|
|
// Initialisation des variables statiques
|
|
int Account::_nbAccounts = 0;
|
|
int Account::_totalAmount = 0;
|
|
int Account::_totalNbDeposits = 0;
|
|
int Account::_totalNbWithdrawals = 0;
|
|
|
|
// Constructeur : Initialise un compte avec un dépôt initial et met à jour les informations globales
|
|
Account::Account(int initial_deposit) : _amount(initial_deposit), _nbDeposits(0), _nbWithdrawals(0)
|
|
{
|
|
_accountIndex = _nbAccounts++; // Assignation d'un index unique au compte et incrémentation du nombre total de comptes
|
|
_totalAmount += _amount; // Mise à jour du montant total détenu par tous les comptes
|
|
_displayTimestamp(); // Affichage de l'horodatage de la création du compte
|
|
std::cout << "index:" << _accountIndex << ";amount:" << _amount << ";created\n"; // Enregistrement de la création du compte
|
|
}
|
|
|
|
// Destructeur : Met à jour les informations globales lors de la fermeture d'un compte
|
|
Account::~Account()
|
|
{
|
|
_nbAccounts--; // Décrémentation du nombre total de comptes
|
|
_totalAmount -= _amount; // Mise à jour du montant total détenu par tous les comptes
|
|
_displayTimestamp(); // Affichage de l'horodatage de la fermeture du compte
|
|
std::cout << "index:" << _accountIndex << ";amount:" << _amount << ";closed\n"; // Enregistrement de la fermeture du compte
|
|
}
|
|
|
|
// Dépôts : Ajoute un montant au compte et met à jour les informations globales
|
|
void Account::makeDeposit(int deposit)
|
|
{
|
|
_displayTimestamp(); // Affichage de l'horodatage de l'opération
|
|
std::cout << "index:" << _accountIndex << ";p_amount:" << _amount << ";deposit:" << deposit;
|
|
_amount += deposit; // Mise à jour du montant dans le compte
|
|
_nbDeposits++; // Incrémentation du nombre de dépôts pour ce compte
|
|
_totalAmount += deposit; // Mise à jour du montant total détenu par tous les comptes
|
|
_totalNbDeposits++; // Incrémentation du nombre total de dépôts effectués sur tous les comptes
|
|
std::cout << ";amount:" << _amount << ";nb_deposits:" << _nbDeposits << "\n"; // Enregistrement de l'opération de dépôt
|
|
}
|
|
|
|
// Retraits : Diminue le montant du compte si possible et met à jour les informations globales
|
|
bool Account::makeWithdrawal(int withdrawal)
|
|
{
|
|
_displayTimestamp(); // Affichage de l'horodatage de l'opération
|
|
std::cout << "index:" << _accountIndex << ";p_amount:" << _amount << ";withdrawal:";
|
|
if (withdrawal > _amount)
|
|
{ // Vérification si le retrait est possible (fonds suffisants)
|
|
std::cout << "refused\n"; // Enregistrement d'un retrait refusé
|
|
return (false);
|
|
}
|
|
_amount -= withdrawal; // Mise à jour du montant dans le compte
|
|
_nbWithdrawals++; // Incrémentation du nombre de retraits pour ce compte
|
|
_totalAmount -= withdrawal; // Mise à jour du montant total détenu par tous les comptes
|
|
_totalNbWithdrawals++; // Incrémentation du nombre total de retraits effectués sur tous les comptes
|
|
std::cout << withdrawal << ";amount:" << _amount << ";nb_withdrawals:" << _nbWithdrawals << "\n"; // Enregistrement de l'opération de retrait
|
|
return (true);
|
|
}
|
|
|
|
// Vérifier le montant : Retourne le montant actuel du compte
|
|
int Account::checkAmount() const
|
|
{
|
|
return (_amount);
|
|
}
|
|
|
|
// Afficher le statut du compte : Affiche les informations détaillées sur le compte
|
|
void Account::displayStatus() const
|
|
{
|
|
_displayTimestamp(); // Affichage de l'horodatage de l'opération
|
|
std::cout << "index:" << _accountIndex << ";amount:" << _amount
|
|
<< ";deposits:" << _nbDeposits << ";withdrawals:" << _nbWithdrawals << "\n"; // Enregistrement de l'état actuel du compte
|
|
}
|
|
|
|
// Retourner le nombre total de comptes
|
|
int Account::getNbAccounts() { return _nbAccounts; }
|
|
|
|
// Retourner le montant total détenu par tous les comptes
|
|
int Account::getTotalAmount() { return _totalAmount; }
|
|
|
|
// Retourner le nombre total de dépôts effectués sur tous les comptes
|
|
int Account::getNbDeposits() { return _totalNbDeposits; }
|
|
|
|
// Retourner le nombre total de retraits effectués sur tous les comptes
|
|
int Account::getNbWithdrawals() { return _totalNbWithdrawals; }
|
|
|
|
// Afficher les informations globales de tous les comptes
|
|
void Account::displayAccountsInfos()
|
|
{
|
|
_displayTimestamp(); // Affichage de l'horodatage de l'opération
|
|
std::cout << "accounts:" << getNbAccounts() << ";total:" << getTotalAmount()
|
|
<< ";deposits:" << getNbDeposits() << ";withdrawals:" << getNbWithdrawals() << "\n"; // Enregistrement des informations globales
|
|
}
|
|
|
|
void Account::_displayTimestamp()
|
|
{
|
|
// Obtenir l'heure et la date actuelles
|
|
std::time_t now = std::time(nullptr);
|
|
std::tm *ltm = std::localtime(&now);
|
|
|
|
std::cout << "["
|
|
<< 1900 + ltm->tm_year // Ajouter 1900 pour obtenir l'année complète
|
|
<< std::setw(2) << std::setfill('0') << 1 + ltm->tm_mon // Mois (0-11 donc +1 pour 1-12)
|
|
<< std::setw(2) << std::setfill('0') << ltm->tm_mday // Jour (1-31)
|
|
<< "_"
|
|
<< std::setw(2) << std::setfill('0') << ltm->tm_hour // Heures (0-23)
|
|
<< std::setw(2) << std::setfill('0') << ltm->tm_min // Minutes (0-59)
|
|
<< std::setw(2) << std::setfill('0') << ltm->tm_sec // Secondes (0-59)
|
|
<< "] ";
|
|
}
|