/ CPP_Modules / CPP_Module_00 / ex02 / Account.cpp
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(&current_time);
140  	time_info = std::localtime(&current_time);
141  	std::strftime(timestamp, sizeof(timestamp), "%Y%m%d_%H%M%S", time_info);
142  	std::cout << "[" << timestamp << "] ";
143  }