-
Notifications
You must be signed in to change notification settings - Fork 0
/
bankclass.cpp
487 lines (432 loc) · 34.9 KB
/
bankclass.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
/*********************************************************************************
* ASSIGNMENT 06 - BANK CLASSES
*
* This program enables the user to create three types of bank accounts: general, savings and checking
* The user will be able to enter the account number, account holder's name, balance
* and additional info depending on the account type.
*
* 3 Classes are implemented in this program. 1 base class (Bank) and 2 derived classes (savings and checking)
*
* The user will first be prompted to pick an option from a menu. Each option will call a different function.
* (1) Create Savings account:
* This will enable the user to enter the general bank info along with additional parameters
* such as annual interest and compund period. Once the account number is entered, itll check if
* the account already exists. If the account exists, the user will be asked if they want to go back
* to the main menu or enter another account number. If account with the entered account number does
* not exists, a new Savings account object will be created.
* (2) Create Checkings accout:
* Works similar to the create savings accoutn function but will create a Checkings Account object
* with the extra bank info parameters of minimum balance and monthly fee. Will validate account number
* similar to Savings account function.
* (3) Create general account:
* Will create a bank account without any additonal parameters. Will validate account number similar to
* Savings account function.
* (4) Deposit money:
* Will ask user to enter account number. Will validate that account number. Amount to be deposited will be asked.
* Amount will be deposited in required account.
* (5) Withdraw money:
* Will ask user to enter account number. Will validate that account number. Amount to be withdrawn will be asked.
* Amount will be witdrawn in required account.
* (6) Display Info:
* All the info entered will be displayed. Checkings and Savings accounts will be specified.
* (7) Zero to Exit:
* Will exit the function.
*
* Written by Sindhura L Boppudi (slb170330)
* CS 1337. 004
* Professor: John Cole
*********************************************************************************/
#include "stdafx.h"
#include "Bank.h"
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
//max number of accounts ie size of array of pointers to bank objects
const int MAX = 10;
//FUNCTION PROTOTYPES
void createSavingsAccount(Bank *account[MAX], int &accountNum);
void createCheckingsAccount(Bank *account[MAX], int &accountNum);
void createGeneralAccount(Bank *account[MAX], int &accountNum);
void depositMoney(Bank *account[MAX], int accountNum);
void withdrawMoney(Bank *account[MAX], int accountNum);
void displayAccountInfo(Bank *account[MAX], int accountNum);
int main()
{
int menuOption, accountNum = 0;
//Dynamically allocate an array of objects
Bank *account[MAX];
while (true)
{
account[accountNum] = new Bank;
//Create and display menu
cout << "(1) Create a Savings account" << endl;
cout << "(2) Create a Checkings account" << endl;
cout << "(3) Create a general Bank account" << endl;
cout << "(4) Deposit to Bank account" << endl;
cout << "(5) Withdraw from Bank account" << endl;
cout << "(6) Display information for all accounts" << endl;
cout << "(7) Exit the program" << endl;
cin >> menuOption;
switch (menuOption)
{
case 1:
{
createSavingsAccount(account, accountNum);
break;
}
case 2:
{
createCheckingsAccount(account, accountNum);
break;
}
case 3:
{
createGeneralAccount(account, accountNum);
break;
}
case 4:
{
depositMoney(account, accountNum);
break;
}
case 5:
{
withdrawMoney(account, accountNum);
break;
}
case 6:
{
displayAccountInfo(account, accountNum);
break;
}
case 7:
return 0;
default:
{
cout << "Please enter a valid menu option." << endl;
}
}
}
return 0;
}
/***WORKING********************************************************
User is asked for account number
Account number is validated
-> If account already exists, display error message and ask user to
either go back to the main menu or enter another account number
-> If account doesnt exists, continue
User is asked for name, balance, annual interest and compound period.
Savings account object is created in the array of pointers to bank objects
with all the required parameters.
Counter to keep track of number of accounts is increased
*******************************************************************/
void createSavingsAccount(Bank *account[MAX], int &accountNum)
{
int userOption, cp;
double aN, balance, annInt;
bool accountExists = true;
string name;
cout << "Enter the account number: ";
cin >> aN;
//Check if account already exists and validate it
/***VALIDATION METHOD****************************************************
* Within a while loop, bool is set to false. A for-loop is used
* to go through all the existing bank objects (savings and checking).
* If-statement within the for-loop compares all the account numbers
* of the created bank objects with the user entered account no.
* If identical account number is found,boolean value is set to true
* so when/if new account number is entered, it will be validated again.
* Loop will exit if account number entered by number is not already used
* because boolean is set to false intitally within the while-loop
***********************************************************************/
while (accountExists)
{
accountExists = false;
for (int ix = 0; ix < accountNum; ix++)
{
if (account[ix]->getAccountNumber() == aN)
{
accountExists = true; //If account number exists, set bool to true and show error message
cout << "An account with the number you have entered already exists." << endl;
cout << "Enter 0 to return to main menu or 1 to enter a different account number." << endl;
cin >> userOption;
if (userOption == 0) //Return to main function and display menu again
{
return;
}
else //Ask for new account number.
{
cout << "Enter the account number: ";
cin >> aN;
ix = 0; //Set for-loop counter to 0 so new account number can be checked with all Bank array elements
}
}
}
}
//Ask for the rest of the information
cout << "Enter account holder's name: ";
cin >> name;
cout << "Enter current balance in account: ";
cin >> balance;
cout << "Enter rate of annual interest: ";
cin >> annInt;
cout << "Enter the compounding period (in days): ";
cin >> cp;
cout << "" << endl;
account[accountNum] = new SavingsAccount (aN, name, balance, annInt, cp);
accountNum++;
}
/***WORKING********************************************************
User is asked for account number
Account number is validated
-> If account already exists, display error message and ask user to
either go back to the main menu or enter another account number
-> If account doesnt exists, continue
User is asked for name, balance, minimum balance and monthly fee.
Checking account object is created in the array of pointers to bank objects
with all the required parameters.
Counter to keep track of number of accounts is increased
*******************************************************************/
void createCheckingsAccount(Bank *account[MAX], int &accountNum)
{
int userOption;
double aN, balance, mb, mf;
bool accountExists = true;
string name;
cout << "Enter the account number: ";
cin >> aN;
//Check if account already exists and validate it
/***VALIDATION METHOD****************************************************
* Within a while loop, bool is set to false. A for-loop is used
* to go through all the existing bank objects (savings and checking).
* If-statement within the for-loop compares all the account numbers
* of the created bank objects with the user entered account no.
* If identical account number is found,boolean value is set to true
* so when/if new account number is entered, it will be validated again.
* Loop will exit if account number entered by number is not already used
* because boolean is set to false intitally within the while-loop
***********************************************************************/
while (accountExists)
{
accountExists = false;
for (int ix = 0; ix < accountNum; ix++)
{
if (account[ix]->getAccountNumber() == aN)
{
accountExists = true; //If account number exists, set bool to true and show error message
cout << "An account with the number you have entered already exists." << endl;
cout << "Enter 0 to return to main menu or 1 to enter a different account number." << endl;
cin >> userOption;
if (userOption == 0) //Return to main function and display menu again
{
return;
}
else //Ask for new account number.
{
cout << "Enter the account number: ";
cin >> aN;
ix = 0; //Set for-loop counter to 0 so new account number can be checked with all Bank array elements
}
}
}
}
//Ask for the rest of the information
cout << "Enter account holder's name: ";
cin >> name;
cout << "Enter current balance in account: ";
cin >> balance;
cout << "Enter minimum balance (in dollars): ";
cin >> mb;
cout << "Enter monthly fee (in dollars): ";
cin >> mf;
cout << "" << endl;
account[accountNum] = new CheckingAccount(aN, name, balance, mb, mf);
accountNum++;
}
/***WORKING********************************************************
User is asked for account number
Account number is validated
-> If account already exists, display error message and ask user to
either go back to the main menu or enter another account number
-> If account doesnt exists, continue
User is asked for name and balance
Bank object is created in the array of pointers to bank objects
with all the required parameters.
Counter to keep track of number of accounts is increased
*******************************************************************/
void createGeneralAccount(Bank *account[MAX], int &accountNum)
{
int userOption;
double aN, balance;
bool accountExists = true;
string name;
cout << "Enter the account number: ";
cin >> aN;
//Check if account already exists and validate it
/***VALIDATION METHOD****************************************************
* Within a while loop, bool is set to false. A for-loop is used
* to go through all the existing bank objects (savings and checking).
* If-statement within the for-loop compares all the account numbers
* of the created bank objects with the user entered account no.
* If identical account number is found,boolean value is set to true
* so when/if new account number is entered, it will be validated again.
* Loop will exit if account number entered by number is not already used
* because boolean is set to false intitally within the while-loop
***********************************************************************/
while (accountExists)
{
accountExists = false;
for (int ix = 0; ix < accountNum; ix++)
{
if (account[ix]->getAccountNumber() == aN)
{
accountExists = true; //If account number exists, set bool to true and show error message
cout << "An account with the number you have entered already exists." << endl;
cout << "Enter 0 to return to main menu or 1 to enter a different account number." << endl;
cin >> userOption;
if (userOption == 0) //Return to main function and display menu again
{
return;
}
else //Ask for new account number.
{
cout << "Enter the account number: ";
cin >> aN;
ix = 0; //Set for-loop counter to 0 so new account number can be checked with all Bank array elements
}
}
}
}
//Ask for the rest of the information
cout << "Enter account holder's name: ";
cin >> name;
cout << "Enter current balance in account: ";
cin >> balance;
cout << "" << endl;
account[accountNum] = new Bank;
account[accountNum]->setActNum(aN);
account[accountNum]->setName(name);
account[accountNum]->setBalance(balance);
accountNum++;
}
/***WORKING***************************************************************
Boolean is created and initialised to false.
User will be asked for account number.
Account number will be validated
An if-statement within a for-loop will compare all the account numbers
of existing accounts with user-entered account number
If account number exists, the array position will be recorded and boolean
will be set to true.
If account number does not exist, program continues without altering boolean
Boolean will be checked and used to determine if account exists or not.
If account does not exists, user will be shown an error message and returned to main menu
If account exists, user will be asked for amount to deposit, bank object deposit
function will be called. This function will add the amount to the balance.
*************************************************************************/
void depositMoney(Bank *account[MAX], int accountNum)
{
double reqAcctNumber, depAmt;
int reqAcct;
bool accountExists = false;
//Ask user for act number to which funds need to be deposited
cout << "Enter the account number: ";
cin >> reqAcctNumber;
//Acquire the array element position of the account.
for (int ix = 0; ix < accountNum; ix++)
{
if (account[ix]->getAccountNumber() == reqAcctNumber)
{
reqAcct = ix;
accountExists = true; //Bool used to determine if account exists in database or not
break;
}
}
if (accountExists) //Deposit how much ever money into the account
{
cout << "Enter amount to be deposited into the account: ";
cin >> depAmt;
account[reqAcct]->deposit(depAmt);
}
else //If account doesnt exist, give user error message and return to main menu
{
cout << "The account number entered is invalid." << endl;
return;
}
}
/***WORKING***************************************************************
Boolean is created and initialised to false.
User will be asked for account number.
Account number will be validated
An if-statement within a for-loop will compare all the account numbers
of existing accounts with user-entered account number
If account number exists, the array position will be recorded and boolean
will be set to true.
If account number does not exist, program continues without altering boolean
Boolean will be checked and used to determine if account exists or not.
If account does not exists, user will be shown an error message and returned to main menu
If account exists, user will be asked for amount to withdraw, bank object withdraw
function will be called.
This function will subtract the amount from the balance.
*************************************************************************/
void withdrawMoney(Bank *account[MAX], int accountNum)
{
double reqAcctNumber, wtdrwAmt;
int reqAcct;
bool accountExists = false;
//Ask user for act number to which funds need to be deposited
cout << "Enter the account number: ";
cin >> reqAcctNumber;
//Acquire the array element position of the account.
for (int ix = 0; ix < accountNum; ix++)
{
if (account[ix]->getAccountNumber() == reqAcctNumber)
{
reqAcct = ix;
accountExists = true; //Bool used to determine if account exists in database or not
break;
}
}
if (accountExists) //Deposit how much ever money into the account
{
cout << "Enter amount to be withdrawn from account: ";
cin >> wtdrwAmt;
account[reqAcct]->withdraw(wtdrwAmt);
}
else //If account doesnt exist, give user error message and return to main menu
{
cout << "The account number entered is invalid." << endl;
return;
}
}
/***WORKING***********************************************************
Within a for loop:
General bank info will be dislpayed first.
Account type will be compared and respective extra info will be displayed
**********************************************************************/
void displayAccountInfo(Bank *account[MAX], int accountNum)
{
//Print general bank info, determine which accounts are checking and which are saving, display respective extrainfo.
for (int ix = 0; ix < accountNum; ix++)
{
//Display general bank info
cout << setw(30) << left << "Account Number" << ": " << account[ix]->getAccountNumber() << endl;
cout << setw(30) << left << "Account Type" << ": " << account[ix]->getAccountType() << endl;
cout << setw(30) << left << "Name of Account Holder" << ": " << account[ix]->getName() << endl;
cout << setw(30) << left << "Current Balance" << ": " << account[ix]->getBalance() << endl;
//Check account type
if (account[ix]->getAccountType() == "Savings")
{
//Display bank info for savings
cout << setw(30) << left << "Annual Interest" << ": " << ((SavingsAccount*)account[ix])->getAnnInt() << endl;
cout << setw(30) << left << "Compounding Period (in days)" << ": " << ((SavingsAccount*)account[ix])->getNumDays() << endl;
}
else if (account[ix]->getAccountType() == "Checking")
{
//Display extra bank info for checking account
cout << setw(30) << left << "Minimum Balance" << ": " << ((CheckingAccount*)account[ix])->getMinBalance() << endl;
cout << setw(30) << left << "Monthly Fee" << ": " << ((CheckingAccount*)account[ix])->getMonthlyFee() << endl;
}
cout << "" << endl;
}
}