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

Project 2

This document contains code for a banking application that allows users to manage client accounts. It includes functions for loading and saving client data to a file, adding, deleting, and updating client records, splitting strings, and displaying menus and client information on screen.

Uploaded by

k3302988
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
11 views

Project 2

This document contains code for a banking application that allows users to manage client accounts. It includes functions for loading and saving client data to a file, adding, deleting, and updating client records, splitting strings, and displaying menus and client information on screen.

Uploaded by

k3302988
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 55

Project2:

#include <iostream>

#include <fstream>

#include <string>

#include <vector>

#include <iomanip>

using namespace std;

const string ClientsFileName = "Clients.txt";

enum enMainMenueOptions

eListClients = 1, eAddNewClient = 2,

eDeleteClient = 3, eUpdateClient = 4,

eFindClient = 5, eTransactions = 6, eExit = 7

};

enum enTransactionsMenuOptions {

Deposit = 1,

WithDraw = 2, TotalBalances = 3, MainMenu = 4

};

enum enTransaction { Add = 1, Sub = -1 };

void ShowMainMenue();

void ShowTransactionsMenue();

struct sClient

{
string AccountNumber;

string PinCode;

string Name;

string Phone;

double AccountBalance;

bool MarkForDelete = false;

};

vector<string> SplitString(string S1, string Delim)

vector<string> vString;

size_t pos = 0;

string sWord; // define a string variable

// use find() function to get the position of the delimiters

while ((pos = S1.find(Delim)) != std::string::npos)

sWord = S1.substr(0, pos); // store the word

if (sWord != "")

vString.push_back(sWord);

S1.erase(0, pos + Delim.length()); /* erase() until positon and move to next word. */

if (S1 != "")

vString.push_back(S1); // it adds last word of the string.


}

return vString;

sClient ConvertLinetoRecord(string Line, string Seperator = "#//#")

sClient Client;

vector<string> vClientData;

vClientData = SplitString(Line, Seperator);

Client.AccountNumber = vClientData[0];

Client.PinCode = vClientData[1];

Client.Name = vClientData[2];

Client.Phone = vClientData[3];

Client.AccountBalance = stod(vClientData[4]);//cast string to double

return Client;

string ConvertRecordToLine(sClient Client, string Seperator = "#//#")

string stClientRecord = "";

stClientRecord += Client.AccountNumber + Seperator;

stClientRecord += Client.PinCode + Seperator;

stClientRecord += Client.Name + Seperator;

stClientRecord += Client.Phone + Seperator;

stClientRecord += to_string(Client.AccountBalance);
return stClientRecord;

bool ClientExistsByAccountNumber(string AccountNumber, string FileName)

vector <sClient> vClients;

fstream MyFile;

MyFile.open(FileName, ios::in);//read Mode

if (MyFile.is_open())

string Line;

sClient Client;

while (getline(MyFile, Line))

Client = ConvertLinetoRecord(Line);

if (Client.AccountNumber == AccountNumber)

MyFile.close();

return true;

vClients.push_back(Client);

MyFile.close();

}
return false;

sClient ReadNewClient()

sClient Client;

cout << "Enter Account Number? ";

// Usage of std::ws will extract allthe whitespace character

getline(cin >> ws, Client.AccountNumber);

while (ClientExistsByAccountNumber(Client.AccountNumber, ClientsFileName))

cout << "\nClient with [" << Client.AccountNumber << "] already exists, Enter another
Account Number? ";

getline(cin >> ws, Client.AccountNumber);

cout << "Enter PinCode? ";

getline(cin, Client.PinCode);

cout << "Enter Name? ";

getline(cin, Client.Name);

cout << "Enter Phone? ";

getline(cin, Client.Phone);

cout << "Enter AccountBalance? ";

cin >> Client.AccountBalance;


return Client;

vector <sClient> LoadCleintsDataFromFile(string FileName)

vector <sClient> vClients;

fstream MyFile;

MyFile.open(FileName, ios::in);//read Mode

if (MyFile.is_open())

string Line;

sClient Client;

while (getline(MyFile, Line))

Client = ConvertLinetoRecord(Line);

vClients.push_back(Client);

MyFile.close();

return vClients;

void PrintClientRecordLine(sClient Client)

cout << "| " << setw(15) << left << Client.AccountNumber;

cout << "| " << setw(10) << left << Client.PinCode;
cout << "| " << setw(40) << left << Client.Name;

cout << "| " << setw(12) << left << Client.Phone;

cout << "| " << setw(12) << left << Client.AccountBalance;

void PrintTotalBalances(vector<sClient> vClients)

double TotalBalance = 0;

for (sClient& Client : vClients)

TotalBalance += Client.AccountBalance;

cout << setw(15) << left << "Total Balance = " << TotalBalance;

void PrintClientBalances(sClient Client)

cout << "| " << setw(15) << left << Client.AccountNumber;

cout << "| " << setw(40) << left << Client.Name;

cout << "| " << setw(12) << left << Client.AccountBalance;

void ShowAllClientsScreen()

vector <sClient> vClients = LoadCleintsDataFromFile(ClientsFileName);

cout << "\n\t\t\t\t\tClient List (" << vClients.size() << ") Client(s).";

cout << "\n_______________________________________________________";


cout << "_________________________________________\n" << endl;

cout << "| " << left << setw(15) << "Accout Number";

cout << "| " << left << setw(10) << "Pin Code";

cout << "| " << left << setw(40) << "Client Name";

cout << "| " << left << setw(12) << "Phone";

cout << "| " << left << setw(12) << "Balance";

cout << "\n_______________________________________________________";

cout << "_________________________________________\n" << endl;

if (vClients.size() == 0)

cout << "\t\t\t\tNo Clients Available In the System!";

else

for (sClient Client : vClients)

PrintClientRecordLine(Client);

cout << endl;

cout << "\n_______________________________________________________";

cout << "_________________________________________\n" << endl;

void PrintClientCard(sClient Client)

cout << "\nThe following are the client details:\n";

cout << "-----------------------------------";


cout << "\nAccout Number: " << Client.AccountNumber;

cout << "\nPin Code : " << Client.PinCode;

cout << "\nName : " << Client.Name;

cout << "\nPhone : " << Client.Phone;

cout << "\nAccount Balance: " << Client.AccountBalance;

cout << "\n-----------------------------------\n";

bool FindClientByAccountNumber(string AccountNumber, vector <sClient> vClients, sClient&


Client)

for (sClient C : vClients)

if (C.AccountNumber == AccountNumber)

Client = C;

return true;

return false;

sClient ChangeClientRecord(string AccountNumber)

sClient Client;

Client.AccountNumber = AccountNumber;
cout << "\n\nEnter PinCode? ";

getline(cin >> ws, Client.PinCode);

cout << "Enter Name? ";

getline(cin, Client.Name);

cout << "Enter Phone? ";

getline(cin, Client.Phone);

cout << "Enter AccountBalance? ";

cin >> Client.AccountBalance;

return Client;

bool MarkClientForDeleteByAccountNumber(string AccountNumber, vector <sClient>& vClients)

for (sClient& C : vClients)

if (C.AccountNumber == AccountNumber)

C.MarkForDelete = true;

return true;

}
return false;

vector <sClient> SaveCleintsDataToFile(string FileName, vector <sClient> vClients)

fstream MyFile;

MyFile.open(FileName, ios::out);//overwrite

string DataLine;

if (MyFile.is_open())

for (sClient C : vClients)

if (C.MarkForDelete == false)

//we only write records that are not marked for delete.

DataLine = ConvertRecordToLine(C);

MyFile << DataLine << endl;

MyFile.close();

return vClients;

}
void AddDataLineToFile(string FileName, string stDataLine)

fstream MyFile;

MyFile.open(FileName, ios::out | ios::app);

if (MyFile.is_open())

MyFile << stDataLine << endl;

MyFile.close();

void AddNewClient()

sClient Client;

Client = ReadNewClient();

AddDataLineToFile(ClientsFileName, ConvertRecordToLine(Client));

void AddNewClients()

char AddMore = 'Y';

do

//system("cls");

cout << "Adding New Client:\n\n";


AddNewClient();

cout << "\nClient Added Successfully, do you want to add more clients? Y/N? ";

cin >> AddMore;

} while (toupper(AddMore) == 'Y');

bool DeleteClientByAccountNumber(string AccountNumber, vector <sClient>& vClients)

sClient Client;

char Answer = 'n';

if (FindClientByAccountNumber(AccountNumber, vClients, Client))

PrintClientCard(Client);

cout << "\n\nAre you sure you want delete this client? y/n ? ";

cin >> Answer;

if (Answer == 'y' || Answer == 'Y')

MarkClientForDeleteByAccountNumber(AccountNumber, vClients);

SaveCleintsDataToFile(ClientsFileName, vClients);

//Refresh Clients

vClients = LoadCleintsDataFromFile(ClientsFileName);
cout << "\n\nClient Deleted Successfully.";

return true;

else

cout << "\nClient with Account Number (" << AccountNumber << ") is Not Found!";

return false;

bool UpdateClientByAccountNumber(string AccountNumber, vector <sClient>& vClients)

sClient Client;

char Answer = 'n';

if (FindClientByAccountNumber(AccountNumber, vClients, Client))

PrintClientCard(Client);

cout << "\n\nAre you sure you want update this client? y/n ? ";

cin >> Answer;

if (Answer == 'y' || Answer == 'Y')

for (sClient& C : vClients)

if (C.AccountNumber == AccountNumber)
{

C = ChangeClientRecord(AccountNumber);

break;

SaveCleintsDataToFile(ClientsFileName, vClients);

cout << "\n\nClient Updated Successfully.";

return true;

else

cout << "\nClient with Account Number (" << AccountNumber << ") is Not Found!";

return false;

string ReadClientAccountNumber()

string AccountNumber = "";

cout << "\nPlease enter AccountNumber? ";

cin >> AccountNumber;

return AccountNumber;

}
void ShowDeleteClientScreen()

cout << "\n-----------------------------------\n";

cout << "\tDelete Client Screen";

cout << "\n-----------------------------------\n";

vector <sClient> vClients = LoadCleintsDataFromFile(ClientsFileName);

string AccountNumber = ReadClientAccountNumber();

DeleteClientByAccountNumber(AccountNumber, vClients);

void ShowUpdateClientScreen()

cout << "\n-----------------------------------\n";

cout << "\tUpdate Client Info Screen";

cout << "\n-----------------------------------\n";

vector <sClient> vClients = LoadCleintsDataFromFile(ClientsFileName);

string AccountNumber = ReadClientAccountNumber();

UpdateClientByAccountNumber(AccountNumber, vClients);

void ShowAddNewClientsScreen()

cout << "\n-----------------------------------\n";

cout << "\tAdd New Clients Screen";

cout << "\n-----------------------------------\n";


AddNewClients();

void ShowFindClientScreen()

cout << "\n-----------------------------------\n";

cout << "\tFind Client Screen";

cout << "\n-----------------------------------\n";

vector <sClient> vClients = LoadCleintsDataFromFile(ClientsFileName);

sClient Client;

string AccountNumber = ReadClientAccountNumber();

if (FindClientByAccountNumber(AccountNumber, vClients, Client))

PrintClientCard(Client);

else

cout << "\nClient with Account Number[" << AccountNumber << "] is not found!";

void ShowEndScreen()

cout << "\n-----------------------------------\n";

cout << "\tProgram Ends :-)";

cout << "\n-----------------------------------\n";

void GoBackToMainMenue()

cout << "\n\nPress any key to go back to Main Menue...";


system("pause>0");

ShowMainMenue();

void GoBackToTransactionsMenue()

cout << "\n\nPress any key to go back to Main Menue...";

system("pause>0");

ShowTransactionsMenue();

short ReadMainMenueOption()

cout << "Choose what do you want to do? [1 to 7]? ";

short Choice = 0;

cin >> Choice;

return Choice;

short ReadTransactionsMenuOption()

cout << "Choose what do you want to do? [1 to 4]? ";

short Choice = 0;

cin >> Choice;

return Choice;

}
void PerfromMainMenueOption(enMainMenueOptions MainMenueOption)

switch (MainMenueOption)

case enMainMenueOptions::eListClients:

system("cls");

ShowAllClientsScreen();

GoBackToMainMenue();

break;

case enMainMenueOptions::eAddNewClient:

system("cls");

ShowAddNewClientsScreen();

GoBackToMainMenue();

break;

case enMainMenueOptions::eDeleteClient:

system("cls");

ShowDeleteClientScreen();

GoBackToMainMenue();

break;

case enMainMenueOptions::eUpdateClient:

system("cls");

ShowUpdateClientScreen();

GoBackToMainMenue();

break;
case enMainMenueOptions::eFindClient:

system("cls");

ShowFindClientScreen();

GoBackToMainMenue();

break;

case enMainMenueOptions::eTransactions:

system("cls");

ShowTransactionsMenue();

break;

case enMainMenueOptions::eExit:

system("cls");

ShowEndScreen();

break;

void Transaction(sClient& Client, enTransaction Transactions)

double DepositAmount = 0;

char AreYouSure = 'N';

if(Transactions == enTransaction::Add)

cout << "Please Enter Deposit Amount? ";

else

cout << "Please Enter Withdraw Amount? ";

cin >> DepositAmount;


cout << "Are you sure you want this transaction? Y/N ? ";

cin >> AreYouSure;

if (AreYouSure == 'Y' || AreYouSure == 'y')

Client.AccountBalance += (DepositAmount * Transactions);

if (Transactions == enTransaction::Add)

cout << "\nDeposit done successfully, New balance is: " << Client.AccountBalance << endl;

else

cout << "\nWithdraw done successfully, New balance is: " << Client.AccountBalance << endl;

void AccountBalanceTransaction(enTransaction Transactions)

sClient Client;

vector <sClient> vClients = LoadCleintsDataFromFile(ClientsFileName);

char TryAgain = 'Y';

while (TryAgain == 'Y')

Client.AccountNumber = ReadClientAccountNumber();

if (!FindClientByAccountNumber(Client.AccountNumber, vClients, Client))

cout << "Client with [" << Client.AccountNumber << "] is not exist.\n";

else

PrintClientCard(Client);

Transaction(Client, Transactions);
TryAgain = 'N';

void ShowTransactionScreen(enTransaction Transaction)

switch (Transaction)

case enTransaction::Add:

cout << "\n-----------------------------------\n";

cout << "\t\tDeposit Screen";

cout << "\n-----------------------------------\n";

AccountBalanceTransaction(enTransaction::Add);

break;

case enTransaction::Sub:

cout << "\n-----------------------------------\n";

cout << "\t\tWithDraw Screen";

cout << "\n-----------------------------------\n";

AccountBalanceTransaction(enTransaction::Sub);

break;

}
void ShowBalancesList()

vector <sClient> vClients = LoadCleintsDataFromFile(ClientsFileName);

cout << "\n\t\t\t\t\tClient List (" << vClients.size() << ") Client(s).";

cout << "\n_______________________________________________________";

cout << "_________________________________________\n" << endl;

cout << "| " << left << setw(15) << "Accout Number";

cout << "| " << left << setw(40) << "Client Name";

cout << "| " << left << setw(24) << "Balance";

cout << "\n_______________________________________________________";

cout << "_________________________________________\n" << endl;

if (vClients.size() == 0)

cout << "\t\t\t\tNo Clients Available In the System!";

else

for (sClient Client : vClients)

PrintClientBalances(Client);

cout << endl;

cout << "_______________________________________________________";

cout << "_________________________________________\n" << endl;


PrintTotalBalances(vClients);

void PerfromTransactionsMenuOption(enTransactionsMenuOptions TransactionsMenuOptions)

switch (TransactionsMenuOptions)

case enTransactionsMenuOptions::Deposit:

system("cls");

ShowTransactionScreen(enTransaction::Add);

GoBackToTransactionsMenue();

break;

case enTransactionsMenuOptions::WithDraw:

system("cls");

ShowTransactionScreen(enTransaction::Sub);

GoBackToTransactionsMenue();

break;

case enTransactionsMenuOptions::TotalBalances:

system("cls");

ShowBalancesList();

GoBackToTransactionsMenue();

break;

case enTransactionsMenuOptions::MainMenu:
{

system("cls");

ShowTransactionsMenue();

break;

void ShowTransactionsMenue()

system("cls");

cout << "===========================================\n";

cout << "\tTransactions Menu Screen\n";

cout << "===========================================\n";

cout << "\t[1] Deposit.\n";

cout << "\t[2] WithDraw.\n";

cout << "\t[3] Total Balance.\n";

cout << "\t[4] Main Menue.\n";

cout << "===========================================\n";

PerfromTransactionsMenuOption((enTransactionsMenuOptions)ReadTransactionsMenuOption(
));

void ShowMainMenue()

system("cls");

cout << "===========================================\n";

cout << "\t\tMain Menue Screen\n";


cout << "===========================================\n";

cout << "\t[1] Show Client List.\n";

cout << "\t[2] Add New Client.\n";

cout << "\t[3] Delete Client.\n";

cout << "\t[4] Update Client Info.\n";

cout << "\t[5] Find Client.\n";

cout << "\t[6] Transactions Screen.\n";

cout << "\t[7] Exit.\n";

cout << "===========================================\n";

PerfromMainMenueOption((enMainMenueOptions)ReadMainMenueOption());

int main()

ShowMainMenue();

system("pause>0");

return 0;

Code2:

#include <iostream>

#include <fstream>

#include <string>

#include <vector>

#include <iomanip>

using namespace std;

const string ClientsFileName = "Clients.txt";


void ShowMainMenue();

void ShowTransactionsMenue();

struct sClient

string AccountNumber;

string PinCode;

string Name;

string Phone;

double AccountBalance;

bool MarkForDelete = false;

};

vector<string> SplitString(string S1, string Delim)

vector<string> vString;

short pos = 0;

string sWord; // define a string variable

// use find() function to get the position of the delimiters

while ((pos = S1.find(Delim)) != std::string::npos)

sWord = S1.substr(0, pos); // store the word

if (sWord != "")

{
vString.push_back(sWord);

S1.erase(0, pos + Delim.length()); /* erase() until positon and move to next word. */

if (S1 != "")

vString.push_back(S1); // it adds last word of the string.

return vString;

sClient ConvertLinetoRecord(string Line, string Seperator = "#//#")

sClient Client;

vector<string> vClientData;

vClientData = SplitString(Line, Seperator);

Client.AccountNumber = vClientData[0];

Client.PinCode = vClientData[1];

Client.Name = vClientData[2];

Client.Phone = vClientData[3];

Client.AccountBalance = stod(vClientData[4]);//cast string to double


return Client;

string ConvertRecordToLine(sClient Client, string Seperator = "#//#")

string stClientRecord = "";

stClientRecord += Client.AccountNumber + Seperator;

stClientRecord += Client.PinCode + Seperator;

stClientRecord += Client.Name + Seperator;

stClientRecord += Client.Phone + Seperator;

stClientRecord += to_string(Client.AccountBalance);

return stClientRecord;

bool ClientExistsByAccountNumber(string AccountNumber, string FileName)

vector <sClient> vClients;

fstream MyFile;

MyFile.open(FileName, ios::in);//read Mode

if (MyFile.is_open())
{

string Line;

sClient Client;

while (getline(MyFile, Line))

Client = ConvertLinetoRecord(Line);

if (Client.AccountNumber == AccountNumber)

MyFile.close();

return true;

vClients.push_back(Client);

MyFile.close();

return false;

sClient ReadNewClient()
{

sClient Client;

cout << "Enter Account Number? ";

// Usage of std::ws will extract allthe whitespace character

getline(cin >> ws, Client.AccountNumber);

while (ClientExistsByAccountNumber(Client.AccountNumber, ClientsFileName))

cout << "\nClient with [" << Client.AccountNumber << "] already exists, Enter another
Account Number? ";

getline(cin >> ws, Client.AccountNumber);

cout << "Enter PinCode? ";

getline(cin, Client.PinCode);

cout << "Enter Name? ";

getline(cin, Client.Name);

cout << "Enter Phone? ";

getline(cin, Client.Phone);

cout << "Enter AccountBalance? ";

cin >> Client.AccountBalance;

return Client;
}

vector <sClient> LoadCleintsDataFromFile(string FileName)

vector <sClient> vClients;

fstream MyFile;

MyFile.open(FileName, ios::in);//read Mode

if (MyFile.is_open())

string Line;

sClient Client;

while (getline(MyFile, Line))

Client = ConvertLinetoRecord(Line);

vClients.push_back(Client);

MyFile.close();

}
return vClients;

void PrintClientRecordLine(sClient Client)

cout << "| " << setw(15) << left << Client.AccountNumber;

cout << "| " << setw(10) << left << Client.PinCode;

cout << "| " << setw(40) << left << Client.Name;

cout << "| " << setw(12) << left << Client.Phone;

cout << "| " << setw(12) << left << Client.AccountBalance;

void PrintClientRecordBalanceLine(sClient Client)

cout << "| " << setw(15) << left << Client.AccountNumber;

cout << "| " << setw(40) << left << Client.Name;

cout << "| " << setw(12) << left << Client.AccountBalance;

void ShowAllClientsScreen()

vector <sClient> vClients = LoadCleintsDataFromFile(ClientsFileName);


cout << "\n\t\t\t\t\tClient List (" << vClients.size() << ") Client(s).";

cout << "\n_______________________________________________________";

cout << "_________________________________________\n" << endl;

cout << "| " << left << setw(15) << "Accout Number";

cout << "| " << left << setw(10) << "Pin Code";

cout << "| " << left << setw(40) << "Client Name";

cout << "| " << left << setw(12) << "Phone";

cout << "| " << left << setw(12) << "Balance";

cout << "\n_______________________________________________________";

cout << "_________________________________________\n" << endl;

if (vClients.size() == 0)

cout << "\t\t\t\tNo Clients Available In the System!";

else

for (sClient Client : vClients)

PrintClientRecordLine(Client);

cout << endl;

cout << "\n_______________________________________________________";

cout << "_________________________________________\n" << endl;

}
void ShowTotalBalances()

vector <sClient> vClients = LoadCleintsDataFromFile(ClientsFileName);

cout << "\n\t\t\t\t\tBalances List (" << vClients.size() << ") Client(s).";

cout << "\n_______________________________________________________";

cout << "_________________________________________\n" << endl;

cout << "| " << left << setw(15) << "Accout Number";

cout << "| " << left << setw(40) << "Client Name";

cout << "| " << left << setw(12) << "Balance";

cout << "\n_______________________________________________________";

cout << "_________________________________________\n" << endl;

double TotalBalances = 0;

if (vClients.size() == 0)

cout << "\t\t\t\tNo Clients Available In the System!";

else

for (sClient Client : vClients)

PrintClientRecordBalanceLine(Client);

TotalBalances += Client.AccountBalance;

cout << endl;

}
cout << "\n_______________________________________________________";

cout << "_________________________________________\n" << endl;

cout << "\t\t\t\t\t Total Balances = " << TotalBalances;

void PrintClientCard(sClient Client)

cout << "\nThe following are the client details:\n";

cout << "-----------------------------------";

cout << "\nAccout Number: " << Client.AccountNumber;

cout << "\nPin Code : " << Client.PinCode;

cout << "\nName : " << Client.Name;

cout << "\nPhone : " << Client.Phone;

cout << "\nAccount Balance: " << Client.AccountBalance;

cout << "\n-----------------------------------\n";

bool FindClientByAccountNumber(string AccountNumber, vector <sClient> vClients, sClient&


Client)

for (sClient C : vClients)

if (C.AccountNumber == AccountNumber)

{
Client = C;

return true;

return false;

sClient ChangeClientRecord(string AccountNumber)

sClient Client;

Client.AccountNumber = AccountNumber;

cout << "\n\nEnter PinCode? ";

getline(cin >> ws, Client.PinCode);

cout << "Enter Name? ";

getline(cin, Client.Name);

cout << "Enter Phone? ";

getline(cin, Client.Phone);

cout << "Enter AccountBalance? ";

cin >> Client.AccountBalance;

return Client;
}

bool MarkClientForDeleteByAccountNumber(string AccountNumber, vector <sClient>& vClients)

for (sClient& C : vClients)

if (C.AccountNumber == AccountNumber)

C.MarkForDelete = true;

return true;

return false;

vector <sClient> SaveCleintsDataToFile(string FileName, vector <sClient> vClients)

fstream MyFile;

MyFile.open(FileName, ios::out);//overwrite

string DataLine;

if (MyFile.is_open())
{

for (sClient C : vClients)

if (C.MarkForDelete == false)

//we only write records that are not marked for delete.

DataLine = ConvertRecordToLine(C);

MyFile << DataLine << endl;

MyFile.close();

return vClients;

void AddDataLineToFile(string FileName, string stDataLine)

fstream MyFile;

MyFile.open(FileName, ios::out | ios::app);

if (MyFile.is_open())
{

MyFile << stDataLine << endl;

MyFile.close();

void AddNewClient()

sClient Client;

Client = ReadNewClient();

AddDataLineToFile(ClientsFileName, ConvertRecordToLine(Client));

void AddNewClients()

char AddMore = 'Y';

do

//system("cls");

cout << "Adding New Client:\n\n";

AddNewClient();

cout << "\nClient Added Successfully, do you want to add more clients? Y/N? ";
cin >> AddMore;

} while (toupper(AddMore) == 'Y');

bool DeleteClientByAccountNumber(string AccountNumber, vector <sClient>& vClients)

sClient Client;

char Answer = 'n';

if (FindClientByAccountNumber(AccountNumber, vClients, Client))

PrintClientCard(Client);

cout << "\n\nAre you sure you want delete this client? y/n ? ";

cin >> Answer;

if (Answer == 'y' || Answer == 'Y')

MarkClientForDeleteByAccountNumber(AccountNumber, vClients);

SaveCleintsDataToFile(ClientsFileName, vClients);

//Refresh Clients

vClients = LoadCleintsDataFromFile(ClientsFileName);

cout << "\n\nClient Deleted Successfully.";

return true;
}

else

cout << "\nClient with Account Number (" << AccountNumber << ") is Not Found!";

return false;

bool UpdateClientByAccountNumber(string AccountNumber, vector <sClient>& vClients)

sClient Client;

char Answer = 'n';

if (FindClientByAccountNumber(AccountNumber, vClients, Client))

PrintClientCard(Client);

cout << "\n\nAre you sure you want update this client? y/n ? ";

cin >> Answer;

if (Answer == 'y' || Answer == 'Y')

for (sClient& C : vClients)

if (C.AccountNumber == AccountNumber)
{

C = ChangeClientRecord(AccountNumber);

break;

SaveCleintsDataToFile(ClientsFileName, vClients);

cout << "\n\nClient Updated Successfully.";

return true;

else

cout << "\nClient with Account Number (" << AccountNumber << ") is Not Found!";

return false;

bool DepositBalanceToClientByAccountNumber(string AccountNumber, double Amount, vector


<sClient>& vClients)

char Answer = 'n';


cout << "\n\nAre you sure you want perfrom this transaction? y/n ? ";

cin >> Answer;

if (Answer == 'y' || Answer == 'Y')

for (sClient& C : vClients)

if (C.AccountNumber == AccountNumber)

C.AccountBalance += Amount;

SaveCleintsDataToFile(ClientsFileName, vClients);

cout << "\n\nDone Successfully. New balance is: " << C.AccountBalance;

return true;

return false;

string ReadClientAccountNumber()

string AccountNumber = "";


cout << "\nPlease enter AccountNumber? ";

cin >> AccountNumber;

return AccountNumber;

void ShowDeleteClientScreen()

cout << "\n-----------------------------------\n";

cout << "\tDelete Client Screen";

cout << "\n-----------------------------------\n";

vector <sClient> vClients = LoadCleintsDataFromFile(ClientsFileName);

string AccountNumber = ReadClientAccountNumber();

DeleteClientByAccountNumber(AccountNumber, vClients);

void ShowUpdateClientScreen()

cout << "\n-----------------------------------\n";

cout << "\tUpdate Client Info Screen";

cout << "\n-----------------------------------\n";

vector <sClient> vClients = LoadCleintsDataFromFile(ClientsFileName);

string AccountNumber = ReadClientAccountNumber();

UpdateClientByAccountNumber(AccountNumber, vClients);

}
void ShowAddNewClientsScreen()

cout << "\n-----------------------------------\n";

cout << "\tAdd New Clients Screen";

cout << "\n-----------------------------------\n";

AddNewClients();

void ShowFindClientScreen()

cout << "\n-----------------------------------\n";

cout << "\tFind Client Screen";

cout << "\n-----------------------------------\n";

vector <sClient> vClients = LoadCleintsDataFromFile(ClientsFileName);

sClient Client;

string AccountNumber = ReadClientAccountNumber();

if (FindClientByAccountNumber(AccountNumber, vClients, Client))

PrintClientCard(Client);

else

cout << "\nClient with Account Number[" << AccountNumber << "] is not found!";

void ShowEndScreen()

{
cout << "\n-----------------------------------\n";

cout << "\tProgram Ends :-)";

cout << "\n-----------------------------------\n";

void ShowDepositScreen()

cout << "\n-----------------------------------\n";

cout << "\tDeposit Screen";

cout << "\n-----------------------------------\n";

sClient Client;

vector <sClient> vClients = LoadCleintsDataFromFile(ClientsFileName);

string AccountNumber = ReadClientAccountNumber();

while (!FindClientByAccountNumber(AccountNumber, vClients, Client))

cout << "\nClient with [" << AccountNumber << "] does not exist.\n";

AccountNumber = ReadClientAccountNumber();

PrintClientCard(Client);

double Amount = 0;
cout << "\nPlease enter deposit amount? ";

cin >> Amount;

DepositBalanceToClientByAccountNumber(AccountNumber, Amount, vClients);

void ShowWithDrawScreen()

cout << "\n-----------------------------------\n";

cout << "\tWithdraw Screen";

cout << "\n-----------------------------------\n";

sClient Client;

vector <sClient> vClients = LoadCleintsDataFromFile(ClientsFileName);

string AccountNumber = ReadClientAccountNumber();

while (!FindClientByAccountNumber(AccountNumber, vClients, Client))

cout << "\nClient with [" << AccountNumber << "] does not exist.\n";

AccountNumber = ReadClientAccountNumber();

PrintClientCard(Client);

double Amount = 0;

cout << "\nPlease enter withdraw amount? ";


cin >> Amount;

//Validate that the amount does not exceeds the balance

while (Amount > Client.AccountBalance)

cout << "\nAmount Exceeds the balance, you can withdraw up to : " <<
Client.AccountBalance << endl;

cout << "Please enter another amount? ";

cin >> Amount;

DepositBalanceToClientByAccountNumber(AccountNumber, Amount * -1, vClients);

void ShowTotalBalancesScreen()

ShowTotalBalances();

enum enTransactionsMenueOptions { eDeposit = 1, eWithdraw = 2, eShowTotalBalance = 3,


eShowMainMenue = 4 };

enum enMainMenueOptions { eListClients = 1, eAddNewClient = 2, eDeleteClient = 3,


eUpdateClient = 4, eFindClient = 5, eShowTransactionsMenue = 6, eExit = 7 };

void GoBackToMainMenue()

{
cout << "\n\nPress any key to go back to Main Menue...";

system("pause>0");

ShowMainMenue();

void GoBackToTransactionsMenue()

cout << "\n\nPress any key to go back to Transactions Menue...";

system("pause>0");

ShowTransactionsMenue();

short ReadTransactionsMenueOption()

cout << "Choose what do you want to do? [1 to 4]? ";

short Choice = 0;

cin >> Choice;

return Choice;

void PerfromTranactionsMenueOption(enTransactionsMenueOptions TransactionMenueOption)

switch (TransactionMenueOption)

case enTransactionsMenueOptions::eDeposit:

system("cls");

ShowDepositScreen();
GoBackToTransactionsMenue();

break;

case enTransactionsMenueOptions::eWithdraw:

system("cls");

ShowWithDrawScreen();

GoBackToTransactionsMenue();

break;

case enTransactionsMenueOptions::eShowTotalBalance:

system("cls");

ShowTotalBalancesScreen();

GoBackToTransactionsMenue();

break;

case enTransactionsMenueOptions::eShowMainMenue:

ShowMainMenue();

}
}

void ShowTransactionsMenue()

system("cls");

cout << "===========================================\n";

cout << "\t\tTransactions Menue Screen\n";

cout << "===========================================\n";

cout << "\t[1] Deposit.\n";

cout << "\t[2] Withdraw.\n";

cout << "\t[3] Total Balances.\n";

cout << "\t[4] Main Menue.\n";

cout << "===========================================\n";

PerfromTranactionsMenueOption((enTransactionsMenueOptions)ReadTransactionsMenueOpti
on());

short ReadMainMenueOption()

cout << "Choose what do you want to do? [1 to 7]? ";

short Choice = 0;

cin >> Choice;

return Choice;

void PerfromMainMenueOption(enMainMenueOptions MainMenueOption)


{

switch (MainMenueOption)

case enMainMenueOptions::eListClients:

system("cls");

ShowAllClientsScreen();

GoBackToMainMenue();

break;

case enMainMenueOptions::eAddNewClient:

system("cls");

ShowAddNewClientsScreen();

GoBackToMainMenue();

break;

case enMainMenueOptions::eDeleteClient:

system("cls");

ShowDeleteClientScreen();

GoBackToMainMenue();

break;

case enMainMenueOptions::eUpdateClient:

system("cls");

ShowUpdateClientScreen();

GoBackToMainMenue();

break;

case enMainMenueOptions::eFindClient:
system("cls");

ShowFindClientScreen();

GoBackToMainMenue();

break;

case enMainMenueOptions::eShowTransactionsMenue:

system("cls");

ShowTransactionsMenue();

break;

case enMainMenueOptions::eExit:

system("cls");

ShowEndScreen();

break;

void ShowMainMenue()

system("cls");

cout << "===========================================\n";

cout << "\t\tMain Menue Screen\n";

cout << "===========================================\n";

cout << "\t[1] Show Client List.\n";

cout << "\t[2] Add New Client.\n";

cout << "\t[3] Delete Client.\n";

cout << "\t[4] Update Client Info.\n";

cout << "\t[5] Find Client.\n";


cout << "\t[6] Transactions.\n";

cout << "\t[7] Exit.\n";

cout << "===========================================\n";

PerfromMainMenueOption((enMainMenueOptions)ReadMainMenueOption());

int main()

ShowMainMenue();

system("pause>0");

return 0;

You might also like