0% found this document useful (0 votes)
6 views

clsBankClient H

it's library im c++ that can create a project for bank system easier

Uploaded by

y.yahiaoui.inf
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
6 views

clsBankClient H

it's library im c++ that can create a project for bank system easier

Uploaded by

y.yahiaoui.inf
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 6

#pragma once

#include <iostream>
#include <string>
#include "clsPerson.h"
#include "clsString.h"
#include <vector>
#include <fstream>

using namespace std;


class clsBankClient : public clsPerson
{
private:

enum enMode { EmptyMode = 0, UpdateMode = 1, AddNewMode = 2 };


enMode _Mode;
string _AccountNumber;
string _PinCode;
float _AccountBalance;

static clsBankClient _ConvertLinetoClientObject(string Line, string Seperator =


"#//#")
{
vector<string> vClientData;
vClientData = clsString::Split(Line, Seperator);

return clsBankClient(enMode::UpdateMode, vClientData[0], vClientData[1],


vClientData[2],
vClientData[3], vClientData[4], vClientData[5], stod(vClientData[6]));

static string _ConverClientObjectToLine(clsBankClient Client, string Seperator


= "#//#")
{

string stClientRecord = "";


stClientRecord += Client.FirstName + Seperator;
stClientRecord += Client.LastName + Seperator;
stClientRecord += Client.Email + Seperator;
stClientRecord += Client.Phone + Seperator;
stClientRecord += Client.AccountNumber() + Seperator;
stClientRecord += Client.PinCode + Seperator;
stClientRecord += to_string(Client.AccountBalance);

return stClientRecord;

static vector <clsBankClient> _LoadClientsDataFromFile()


{

vector <clsBankClient> vClients;

fstream MyFile;
MyFile.open("Clients.txt", ios::in);//read Mode

if (MyFile.is_open())
{
string Line;

while (getline(MyFile, Line))


{

clsBankClient Client = _ConvertLinetoClientObject(Line);

vClients.push_back(Client);
}

MyFile.close();

return vClients;

static void _SaveCleintsDataToFile(vector <clsBankClient> vClients)


{

fstream MyFile;
MyFile.open("Clients.txt", ios::out);//overwrite

string DataLine;

if (MyFile.is_open())
{

for (clsBankClient C : vClients)


{
DataLine = _ConverClientObjectToLine(C);
MyFile << DataLine << endl;

MyFile.close();

void _Update()
{
vector <clsBankClient> _vClients;
_vClients = _LoadClientsDataFromFile();

for (clsBankClient& C : _vClients)


{
if (C.AccountNumber() == AccountNumber())
{
C = *this;
break;
}

}
_SaveCleintsDataToFile(_vClients);

void _AddNew()
{

_AddDataLineToFile(_ConverClientObjectToLine(*this));
}

void _AddDataLineToFile(string stDataLine)


{
fstream MyFile;
MyFile.open("Clients.txt", ios::out | ios::app);

if (MyFile.is_open())
{

MyFile << stDataLine << endl;

MyFile.close();
}

static clsBankClient _GetEmptyClientObject()


{
return clsBankClient(enMode::EmptyMode, "", "", "", "", "", "", 0);
}

public:

clsBankClient(enMode Mode, string FirstName, string LastName,


string Email, string Phone, string AccountNumber, string PinCode,
float AccountBalance) :
clsPerson(FirstName, LastName, Email, Phone)

{
_Mode = Mode;
_AccountNumber = AccountNumber;
_PinCode = PinCode;
_AccountBalance = AccountBalance;

bool IsEmpty()
{
return (_Mode == enMode::EmptyMode);
}

string AccountNumber()
{
return _AccountNumber;
}

void SetPinCode(string PinCode)


{
_PinCode = PinCode;
}

string GetPinCode()
{
return _PinCode;
}
__declspec(property(get = GetPinCode, put = SetPinCode)) string PinCode;

void SetAccountBalance(float AccountBalance)


{
_AccountBalance = AccountBalance;
}

float GetAccountBalance()
{
return _AccountBalance;
}
__declspec(property(get = GetAccountBalance, put = SetAccountBalance)) float
AccountBalance;

void Print()
{
cout << "\nClient Card:";
cout << "\n___________________";
cout << "\nFirstName : " << FirstName;
cout << "\nLastName : " << LastName;
cout << "\nFull Name : " << FullName();
cout << "\nEmail : " << Email;
cout << "\nPhone : " << Phone;
cout << "\nAcc. Number : " << _AccountNumber;
cout << "\nPassword : " << _PinCode;
cout << "\nBalance : " << _AccountBalance;
cout << "\n___________________\n";

static clsBankClient Find(string AccountNumber)


{

fstream MyFile;
MyFile.open("Clients.txt", ios::in);//read Mode

if (MyFile.is_open())
{
string Line;
while (getline(MyFile, Line))
{
clsBankClient Client = _ConvertLinetoClientObject(Line);
if (Client.AccountNumber() == AccountNumber)
{
MyFile.close();
return Client;
}

MyFile.close();
}

return _GetEmptyClientObject();
}

static clsBankClient Find(string AccountNumber, string PinCode)


{

fstream MyFile;
MyFile.open("Clients.txt", ios::in);//read Mode

if (MyFile.is_open())
{
string Line;
while (getline(MyFile, Line))
{
clsBankClient Client = _ConvertLinetoClientObject(Line);
if (Client.AccountNumber() == AccountNumber && Client.PinCode ==
PinCode)
{
MyFile.close();
return Client;
}

MyFile.close();

}
return _GetEmptyClientObject();
}

enum enSaveResults { svFaildEmptyObject = 0, svSucceeded = 1,


svFaildAccountNumberExists = 2 };

enSaveResults Save()
{

switch (_Mode)
{
case enMode::EmptyMode:
{
if (IsEmpty())
{

return enSaveResults::svFaildEmptyObject;

case enMode::UpdateMode:
{
_Update();

return enSaveResults::svSucceeded;

break;
}

case enMode::AddNewMode:
{
//This will add new record to file or database
if (clsBankClient::IsClientExist(_AccountNumber))
{
return enSaveResults::svFaildAccountNumberExists;
}
else
{
_AddNew();

//We need to set the mode to update after add new


_Mode = enMode::UpdateMode;
return enSaveResults::svSucceeded;
}

break;
}
}

static bool IsClientExist(string AccountNumber)


{

clsBankClient Client1 = clsBankClient::Find(AccountNumber);


return (!Client1.IsEmpty());
}

static clsBankClient GetAddNewClientObject(string AccountNumber)


{
return clsBankClient(enMode::AddNewMode, "", "", "", "", AccountNumber, "",
0);
}

};

You might also like