This repository has been archived on 2026-04-19. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
eoop-project/bank.h
T
Abdulkadir Furkan Şanlı fe5269b6ed More stuff.
Signed-off-by: Abdulkadir Furkan Şanlı <me@abdulocra.cy>
2022-01-04 18:05:39 +01:00

103 lines
2.4 KiB
C++

#pragma once
#include <ctime>
#include <string>
#include <vector>
class Bank;
class Client;
class Employee;
class Gov;
class Gov
{
public:
static const int FACTOR = 6; // Money multiplier.
int rate = 2; // Interest rate (%).
bool associate (Bank *const x);
double reserveDeposit (Bank &x, const double amount);
double reserveWithdraw (Bank &x, const double amount);
bool bailout (Bank &x, const double amount);
double getReserve ();
private:
time_t lastBailout = 0; // Time since last bailout.
double reserve = 0; // Total in bank reserves.
std::vector<Bank *> banks;
};
class Bank
{
friend class Gov;
public:
Bank (Gov *x) : centralBank (x) { x->associate (this); }; // Must have Gov.
double deposit (Client &x, const double amount);
double withdraw (Client &x, const double amount);
double getCurrent ();
double getCurrent (const Client &x);
double getCreditable ();
double getCredited ();
bool hire (Employee &x);
bool fire (Employee &x);
bool openAccount (Client &x);
bool closeAccount (Client &x);
bool newCredit (const std::string id, const double amount,
const int installments, const int days,
const float interest); // interest is additional interest on
// top of Gov rate.
double payInstallment (const int index);
void countEmployees ();
void listClients ();
private:
Gov *centralBank;
const int CLIENT_EMPLOYEE = 2; // Max number of clients to employees.
double current = 0; // Total current accts. of clients.
double creditable = 0; // Amount able to be loaned to clients.
double credited = 0; // Amount loaned.
struct creditRecord
{
time_t start;
long interval; // Interval of payments in number of seconds.
double amount;
int installments;
float interest;
};
struct clientRecord
{
std::string id;
double current = 0;
std::vector<creditRecord> loans;
};
std::vector<clientRecord> clients;
std::vector<Employee *> employees;
};
class Employee
{
friend class Bank;
public:
std::string name;
Employee (std::string x) : name (x){};
private:
Bank *employer = nullptr;
};
class Client
{
friend class Bank;
public:
std::string id;
Client (std::string x) : id (x), underMattress (0){};
double earn (const double amount); // Earn money.
double getMattress ();
private:
double underMattress;
std::vector<Bank *> accounts;
};