#include "account.h"
#include "bank.h"
int main()
{
Bank bank;
for (auto i = 0; i < 100; i++) {
auto account = bank.CreateAccount();
account->Deposit(i * 2.0);
}
bank.PayInterest();
return 0;
}
#ifndef ACCOUNT_H_
#define ACCOUNT_H_
#include <fstream>
class Account {
private:
double balance_;
public:
Account() noexcept;
double GetBalance() const noexcept;
void Deposit(double amount);
double Withdraw(double amount);
double CalculateInterest() const noexcept;
private:
template <class T>
static void WriteLog(const char* message, const T& data);
};
template <class T>
void Account::WriteLog(const char* message, const T& data)
{
std::ofstream outfile("c:\\temp\\logfile.txt",
std::ios_base::out | std::ios_base::app);
outfile << message << " " << data << "\n";
}
#endif // ACCOUNT_H_
#include "account.h"
Account::Account() noexcept { balance_ = 0.0; }
double Account::GetBalance() const noexcept { return balance_; }
void Account::Deposit(const double amount)
{
balance_ += amount;
WriteLog("\nDeposit, amount: ", amount);
}
double Account::Withdraw(const double amount)
{
balance_ -= amount;
WriteLog("\nWithdraw, amount: ", amount);
return amount;
}
double Account::CalculateInterest() const noexcept { return balance_ * 0.001; }
#ifndef BANK_H_
#define BANK_H_
#include <fstream>
#include <list>
#include <memory>
class Account;
class Bank {
private:
std::list<std::shared_ptr<Account>> accounts_;
public:
std::shared_ptr<Account> CreateAccount();
void PayInterest();
private:
template <class T>
static void WriteLog(const char* message, const T& data);
};
template <class T>
void Bank::WriteLog(const char* message, const T& data)
{
std::ofstream outfile("c:\\temp\\logfile.txt",
std::ios_base::out | std::ios_base::app);
outfile << message << " " << data << "\n";
}
#endif // BANK_H_
#include "bank.h"
#include <ctime>
#include "account.h"
std::shared_ptr<Account> Bank::CreateAccount()
{
auto account = std::make_shared<Account>();
accounts_.push_back(account);
WriteLog("\nCreate account, number of accounts:", accounts_.size());
return account;
}
void Bank::PayInterest()
{
for (const auto& account : accounts_) {
const auto interest = account->CalculateInterest();
account->Deposit(interest);
WriteLog("\nDeposit, balance:", account->GetBalance());
}
time_t current_time;
time(¤t_time);
const auto time_string = ctime(¤t_time);
if (time_string != nullptr) {
WriteLog("\nInterest paid on:", time_string);
}
}