Account.cpp
1 /* ************************************************************************** */ 2 /* */ 3 /* ::: :::::::: */ 4 /* Account.cpp :+: :+: :+: */ 5 /* +:+ +:+ +:+ */ 6 /* By: gychoi <gychoi@student.42seoul.kr> +#+ +:+ +#+ */ 7 /* +#+#+#+#+#+ +#+ */ 8 /* Created: 2023/07/20 22:10:45 by gychoi #+# #+# */ 9 /* Updated: 2023/07/21 00:15:12 by gychoi ### ########.fr */ 10 /* */ 11 /* ************************************************************************** */ 12 13 #include <ctime> 14 #include <iostream> 15 #include <sstream> 16 #include "Account.hpp" 17 18 int Account::_nbAccounts = 0; 19 20 int Account::getNbAccounts(void) 21 { 22 return (_nbAccounts); 23 } 24 25 int Account::_totalAmount = 0; 26 27 int Account::getTotalAmount(void) 28 { 29 return (_totalAmount); 30 } 31 32 int Account::_totalNbDeposits = 0; 33 34 int Account::getNbDeposits(void) 35 { 36 return (_totalNbDeposits); 37 } 38 39 int Account::_totalNbWithdrawals = 0; 40 41 int Account::getNbWithdrawals(void) 42 { 43 return (_totalNbWithdrawals); 44 } 45 46 Account::Account(void) {} 47 48 Account::Account(int initial_deposit) 49 { 50 _accountIndex = _nbAccounts++; 51 _amount = initial_deposit; 52 _totalAmount += initial_deposit; 53 _nbDeposits = 0; 54 _nbWithdrawals = 0; 55 _displayTimestamp(); 56 std::cout << "index:" << _accountIndex << ";"; 57 std::cout << "amount:" << _amount << ";"; 58 std::cout << "created" << std::endl; 59 } 60 61 Account::~Account(void) 62 { 63 _displayTimestamp(); 64 std::cout << "index:" << _accountIndex << ";"; 65 std::cout << "amount:" << _amount << ";"; 66 std::cout << "closed" << std::endl; 67 } 68 69 void Account::displayAccountsInfos(void) 70 { 71 _displayTimestamp(); 72 std::cout << "accounts:" << getNbAccounts() << ";"; 73 std::cout << "total:" << getTotalAmount() << ";"; 74 std::cout << "deposits:" << getNbDeposits() << ";"; 75 std::cout << "withdrawals:" << getNbWithdrawals() << std::endl; 76 } 77 78 int Account::checkAmount(void) const 79 { 80 return (_amount); 81 } 82 83 void Account::makeDeposit(int deposit) 84 { 85 int newAmount = _amount + deposit; 86 87 _nbDeposits++; 88 _totalNbDeposits++; 89 _displayTimestamp(); 90 std::cout << "index:" << _accountIndex << ";"; 91 std::cout << "p_amount:" << _amount << ";"; 92 std::cout << "deposit:" << deposit << ";"; 93 std::cout << "amount:" << newAmount << ";"; 94 std::cout << "nb_deposits:" << _nbDeposits << std::endl; 95 _amount = newAmount; 96 _totalAmount += deposit; 97 } 98 99 bool Account::makeWithdrawal(int withdrawal) 100 { 101 int newAmount = _amount - withdrawal; 102 103 if (newAmount < 0) 104 { 105 _displayTimestamp(); 106 std::cout << "index:" << _accountIndex << ";"; 107 std::cout << "p_amount:" << _amount << ";"; 108 std::cout << "withdrawal:refused" << std::endl; 109 return (false); 110 } 111 _nbWithdrawals++; 112 _totalNbWithdrawals++; 113 _displayTimestamp(); 114 std::cout << "index:" << _accountIndex << ";"; 115 std::cout << "p_amount:" << _amount << ";"; 116 std::cout << "withdrawal:" << withdrawal << ";"; 117 std::cout << "amount:" << newAmount << ";"; 118 std::cout << "nb_withdrawals:" << _nbWithdrawals << std::endl; 119 _amount = newAmount; 120 _totalAmount -= withdrawal; 121 return (true); 122 } 123 124 void Account::displayStatus(void) const 125 { 126 _displayTimestamp(); 127 std::cout << "index:" << _accountIndex << ";"; 128 std::cout << "amount:" << _amount << ";"; 129 std::cout << "deposits:" << _nbDeposits << ";"; 130 std::cout << "withdrawals:" << _nbWithdrawals << std::endl; 131 } 132 133 void Account::_displayTimestamp(void) 134 { 135 std::time_t current_time; 136 std::tm* time_info; 137 char timestamp[24]; 138 139 std::time(¤t_time); 140 time_info = std::localtime(¤t_time); 141 std::strftime(timestamp, sizeof(timestamp), "%Y%m%d_%H%M%S", time_info); 142 std::cout << "[" << timestamp << "] "; 143 }