#include #include #define NAMELENGTH 20 using std::cout; using std::endl; using std::setprecision; using std::fixed; void initAccount(char acctName[], double& acctBalance) { strcpy(acctName,"Anonymous"); acctBalance = 0; } void initAccount(char acctName[], double& acctBalance, char name[], double initBalance) { strcpy(acctName,name); acctBalance = initBalance; } void initTransaction(char& type, double& amount) { type = 'D'; amount = 0; } void initTransaction(char& type, double& amount, char t, double a) { type = t; amount = a; } void processTransaction(char type, double amount, char acctName[], double& acctBalance) { if (type == 'C') { acctBalance -= amount; } else if (type == 'D') { acctBalance += amount; } } void undoTransaction(char type, double amount, char acctName[], double& acctBalance) { processTransaction(type,-amount,acctName, acctBalance); } int checkTransaction(char type, double amount, char acctName[], double acctBalance) { return type == 'D' || type == 'C' && amount <= acctBalance; } void displayAccount(char acctName[], double acctBalance) { cout << "Customer: " << acctName << " Balance: $" << fixed << setprecision(2) << acctBalance << endl; } void displayTransaction(char type, double amount) { cout << "$" << fixed << setprecision(2) << amount << " " << (type == 'C' ? "Check" : "Deposit") << endl; } int main() { char cust1Name[NAMELENGTH]; double cust1balance; char trans1Type; double trans1Amount; char trans2Type; double trans2Amount; char trans3Type; double trans3Amount; initAccount(cust1Name,cust1balance, "Smith", 100.00); displayAccount(cust1Name,cust1balance); initTransaction(trans1Type,trans1Amount,'D',400.00); processTransaction(trans1Type,trans1Amount, cust1Name,cust1balance); cout << "After "; displayTransaction(trans1Type,trans1Amount); displayAccount(cust1Name,cust1balance); initTransaction(trans2Type,trans2Amount,'C',1000.00); initTransaction(trans3Type,trans3Amount,'C',50.00); cout << endl; cout << "Thinking about this transaction ... " << endl; displayTransaction(trans2Type,trans2Amount); if (checkTransaction(trans2Type,trans2Amount,cust1Name,cust1balance)) { cout << "This transaction is OK" << endl; processTransaction(trans2Type,trans2Amount, cust1Name,cust1balance); } else { cout << "This transaction is not OK" << endl; } cout << endl; cout << "Thinking about this transaction ... " << endl; displayTransaction(trans3Type,trans3Amount); if (checkTransaction(trans3Type,trans3Amount,cust1Name,cust1balance)) { cout << "This transaction is OK" << endl; processTransaction(trans3Type,trans3Amount, cust1Name,cust1balance); } else { cout << "This transaction is not OK" << endl; } cout << endl; cout << "After the transaction" << endl; displayAccount(cust1Name,cust1balance); cout << "Undoing following transaction:" << endl; displayTransaction(trans3Type,trans3Amount); undoTransaction(trans3Type,trans3Amount,cust1Name,cust1balance); cout << endl; cout << "After undoing" << endl; displayAccount(cust1Name,cust1balance); return 0; }