Bank Program to Add Account to file and Validate account question.

Hi guys, first post here, so please don't kill the nub.

The homework assignemnt is basically to take a cpp file and add a switch case to be able to add account to the file then validate the account doesn't exist.

After some time I can now add account to file, but once the account is added, the program won't go back to start, as in, I can't check other accounts.

I haven't started on Validation since I can't get this part to work.

Thank you for any help in advance.

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
// Fig. 17.8: Fig17_08.cpp
// Credit inquiry program.
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
#include <cstdlib> // exit function prototype
using namespace std;

enum RequestType { ZERO_BALANCE = 1, CREDIT_BALANCE, DEBIT_BALANCE, ADD_ACCOUNT, END };
int getRequest();
bool shouldDisplay( int, double );
void outputLine( int, const string, double );

int main()
{
   // ifstream constructor opens the file
   ifstream inClientFile( "clients.txt", ios::in );

   // exit program if ifstream could not open file
   if ( !inClientFile ) 
   {
      cerr << "File could not be opened" << endl;
      exit( 1 );
   } // end if

   int request;
   int account;
   string name;
   double balance;

   // get user's request (e.g., zero, credit or debit balance)
   request = getRequest();

   // process user's request
   while ( request != END ) 
   {
      switch ( request ) 
      {
         case ZERO_BALANCE:
            cout << "\nAccounts with zero balances:\n";
            break;
         case CREDIT_BALANCE:
            cout << "\nAccounts with credit balances:\n";
            break;
         case DEBIT_BALANCE:
            cout << "\nAccounts with debit balances:\n";
            break;
		 case ADD_ACCOUNT:
			cout << "\nAdd Account\n";
			inClientFile.close();
			ofstream outClientFile( "clients.txt", ios::out | ios::app );
			int newAccount = 0;
			string newName;
			double newBalance = 0;
			cout << "\nEnter account #, Name, and Balance:\n";
            cin >> newAccount >> newName >> newAccount;
			cout << endl;
			outClientFile << newAccount << ' ' <<  newName << ' ' << newBalance << endl;
			cout << endl;
			outClientFile.clear();
			outClientFile.close();
			break;
      } // end switch

      // read account, name and balance from file
      inClientFile >> account >> name >> balance;

      // display file contents (until eof)
      while ( !inClientFile.eof() ) 
      {
         // display record
         if ( shouldDisplay( request, balance ) )
            outputLine( account, name, balance );

         // read account, name and balance from file
         inClientFile >> account >> name >> balance;
      } // end inner while
      
      inClientFile.clear();    // reset eof for next input
      inClientFile.seekg( 0 ); // reposition to beginning of file
      request = getRequest();  // get additional request from user
   } // end outer while
   
   cout << "End of run." << endl;
} // end main

// obtain request from user
int getRequest()
{ 
   int request; // request from user

   // display request options
   cout << "\nEnter request" << endl
      << " 1 - List accounts with zero balances" << endl
      << " 2 - List accounts with credit balances" << endl
      << " 3 - List accounts with debit balances" << endl
      << " 4 - Add Account" << endl
      << " 5 - End of run" << fixed << showpoint;

   do // input user request
   {
      cout << "\n? ";
      cin >> request;
   } while ( request < ZERO_BALANCE && request > END );

   return request;
} // end function getRequest

// determine whether to display given record
bool shouldDisplay( int type, double balance )
{
   // determine whether to display zero balances
   if ( type == ZERO_BALANCE && balance == 0 )
      return true;
   
   // determine whether to display credit balances
   if ( type == CREDIT_BALANCE && balance < 0 )
      return true;

   // determine whether to display debit balances
   if ( type == DEBIT_BALANCE && balance > 0 )
      return true;

   return false;
} // end function shouldDisplay

// display single record from file
void outputLine( int account, const string name, double balance )
{
   cout << left << setw( 10 ) << account << setw( 13 ) << name
      << setw( 7 ) << setprecision( 2 ) << right << balance << endl;
} // end function outputLine 
Last edited on
Try using less functions and putting more of the cout text within your main. Maybe that will help you with your problem.

In your switch statement you should always have a default case.

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
while ( request != END ) 
   {
      switch ( request ) 
      {
         case ZERO_BALANCE:
            cout << "\nAccounts with zero balances:\n";
            break;
         case CREDIT_BALANCE:
            cout << "\nAccounts with credit balances:\n";
            break;
         case DEBIT_BALANCE:
            cout << "\nAccounts with debit balances:\n";
            break;
		 case ADD_ACCOUNT:
			cout << "\nAdd Account\n";
			inClientFile.close();
			ofstream outClientFile( "clients.txt", ios::out | ios::app );
			int newAccount = 0;
			string newName;
			double newBalance = 0;
			cout << "\nEnter account #, Name, and Balance:\n";
            cin >> newAccount >> newName >> newAccount;
			cout << endl;
			outClientFile << newAccount << ' ' <<  newName << ' ' << newBalance << endl;
			cout << endl;
			outClientFile.clear();
			outClientFile.close();
			break;
// Insert default function here
default:
"Please choose an option from the menu above.";
break;

      } // end switch 


From what I see, I have a feeling your switch statement is the problem. You are asking the user to input a number, yet your "switches" only function on the contents within your bool.

 
<< " 1 - List accounts with zero balances" << endl


Yet your switch is ...

 
if ( type == ZERO_BALANCE && balance == 0 )


The two do not correlate.
*EDIT* Problem Solved, there was an error in the cin and I removed closing the document, which was causing the error.
Last edited on
Topic archived. No new replies allowed.