/* Improved AccountClass demonstration program */

#include "account3.h"
#include "date.h"
#include <iostream.h>
#include <lvp\vector.h>
#include <conio.h>  // for getche()

int main()
{
	vector<AccountClass> Bank(100);
	fstream BankData;
	int NumAccounts = 0;
	int AcctNum;
   
	// Retrieve accounts from file
	BankData.open("Bankdata.dat", ios::in);
	BankData >> NumAccounts; BankData.ignore(80,'\n');
	for (AcctNum=0; AcctNum < NumAccounts; AcctNum++) {
		Bank[AcctNum].Retrieve(BankData);
	}
	BankData.close();

	//Test AccountClass
	char Choice;
	String Name;
	DateClass Date;
	double Amount;
	while (true) {
		cout << "AddAccount/Deposit/Withdrawal/disPlay/Quit: ";
		Choice = getche();
		cout << endl;
		if (Choice == 'Q' || Choice == 'q')
			break;
		switch (Choice) {
			case 'A':
			case 'a':    //Add an account
				cout << "Enter name: ";
				getline(cin, Name);
				cout << "Enter date: ";
				Date.Read(cin);
				cout << "Enter initial deposit: ";
				cin >> Amount; cin.ignore(80,'\n');
				Bank[NumAccounts].SpecifyAccount(Name, Date);
				Bank[NumAccounts].Deposit(Amount, Date);
				NumAccounts++;
				break;
			case 'D':
			case 'd':    //Deposit
				cout << "Enter account number: ";
				cin >> AcctNum;
				cout << "Enter amount: ";
				cin >> Amount; cin.ignore(80,'\n');
				cout << "Enter date: ";
				Date.Read(cin);
				Bank[AcctNum].Deposit(Amount, Date);
				break;
			case 'W':
			case 'w':    //Withdrawal
				cout << "Enter account number: ";
				cin >> AcctNum;
				cout << "Enter amount: ";
				cin >> Amount; cin.ignore(80,'\n');
				cout << "Enter date: ";
				Date.Read(cin);
				Bank[AcctNum].Withdrawal(Amount, Date);
				break;
			case 'P':
			case 'p':    //Display accounts
				for (AcctNum=0; AcctNum < NumAccounts; AcctNum++) {
					Bank[AcctNum].WriteTransactions(cout);
				}
				break;
		}
	}

	
	// Save accounts in file
	BankData.open("bankdata.dat", ios::out);
	BankData << NumAccounts << endl;
	for (AcctNum=0; AcctNum < NumAccounts; AcctNum++) {
		Bank[AcctNum].Store(BankData);
	}
	BankData.close();
	return (0);
}

