How to use classes and inheritance to make a bank account/ATM program

Hi guys I have been given this assignment from uni, and I am completely stuck my assignment sheet tells me what to do, but i just don't know how to do it. I will post what I have done so far, so you guys can see where i'm at. Basically the program needs to use classes and inheritance and it reads in from a customer.dat file and a trans.dat file to implement the transactions it also should have basic ATM functionality which I will implement later.In fact heres exactly what it says in the assignment sheet " You are to continue the development of software for a simple banking situation. To extend the simulation we wish to now introduce the following features: customers will
now have up to three accounts, a savings account, a cheque account and a credit card account. Customer details will be loaded from and saved to files. An ATM
(Automatic Teller Machine) will be included which generates transactions to be saved to the file used in assignment 1.
Inheritance must be made use of in this assignment. You should modify the savings account class from assignment 1 to be a generic bank account similar features as before. From this generic bank account you will derive the specific accounts: savings, cheque and credit card. It is likely you will make use of polymorphic functions, a simple example would be to have different display functions. A high scoring assignment would also make use of pointers and linked lists instead of arrays."

Any help from anyone would be higly appreciated.



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
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;

//bank Account generic class
class bankAccount
{
      private:
              int accNumber;
              float balance;
              float interestRate;
      public:
             void deposit(float amount);
             void withdraw(float amount);
             void displayAccount(int, float);
             void setupAccount(int, float, float);
             bool matchAccount(int);
             float getBalance();
};

bool bankAccount::matchAccount(int accNo)
{
     if(accNo==accNumber) return true;
     else return false;
 }

void bankAccount::setupAccount(int aN, float bal,float iRate)
{
    accNumber=aN;
    balance=bal;
    interestRate=iRate;
}

void bankAccount::deposit(float amount)
{
     balance=balance+amount;

}

void bankAccount::withdraw(float amount)
{
     balance=balance-amount;

}

float bankAccount::getBalance()
{
      return balance;
}




class savingsAccount : public bankAccount
{
      private:
              int accNumber;
              float balance;
              float interestRate;
      public:
             void calculateInterest(float, float);
             savingsAccount (int, float, float);
};

bool savingsAccount::matchAccount(int accNo)
{
     if(accNo==accNumber) return true;
     else return false;
 }

void savingsAccount::setupAccount(int aN, float bal,float iRate)
{
    accNumber=aN;
    balance=bal;
    interestRate=iRate;
}

void savingsAccount::deposit(float amount)
{
     balance=balance+amount;

}

void savingsAccount::withdraw(float amount)
{
     balance=balance-amount;

}

float savingsAccount::getBalance()
{
      return balance;
}

void savingsAccount::calculateInterest()
{
     balance=balance+balance*interestRate;
}

// Constructor Function
savingsAccount::savingsAccount(int aN, float bal, float iRate)
{
    accNumber=aN;
    balance=bal;
    interestRate=iRate;
}



class checqueAccount : public bankAccount
{
      private:
              int accNumber;
              float balance;
      public:
             checqueAccount (int, float);
};

bool checqueAccount::matchAccount(int accNo)
{
     if(accNo==accNumber) return true;
     else return false;
 }

void checqueAccount::setupAccount(int aN, float bal,float iRate)
{
    accNumber=aN;
    balance=bal;
    interestRate=iRate;
}

void checqueAccount::deposit(float amount)
{
     balance=balance+amount;

}

void checqueAccount::withdraw(float amount)
{
     balance=balance-amount;

}

float checqueAccount::getBalance()
{
      return balance;
}

void checqueAccount::calculateInterest()
{
     balance=balance+balance*interestRate;
}

// Constructor Function
checqueAccount::checqueAccount(int aN, float bal)
{
    accNumber=aN;
    balance=bal;
}




class creditAccount : public bankAccount
{
      private:
              int accNumber;
              float balance;
              float interestRate;
              //int creditLim=500;
      public:
             void checkLimit(bool);
};

bool creditAccount::matchAccount(int accNo)
{
     if(accNo==accNumber) return true;
     else return false;
 }

void creditAccount::setupAccount(int aN, float bal,float iRate)
{
    accNumber=aN;
    balance=bal;
    interestRate=iRate;
}

void creditAccount::deposit(float amount)
{
     balance=balance+amount;

}

void creditAccount::withdraw(float amount)
{
     balance=balance-amount;

}

float creditAccount::getBalance()
{
      checkLimit(bool);
      return balance;
}

void creditAccount::calculateInterest()
{
     balance=balance+balance*interestRate;
}

// Constructor Function
creditAccount::creditAccount(int aN, float bal, float iRate, int)
{
    accNumber=aN;
    balance=bal;
    interestRate=iRate;
}
//needs a lot more work, at the moment a rough idea of what it needs to do
creditAccount::checkLimit(bool exceeded, float bal, int limit)
{
    limit=5000;
    if(credit > limit) return true;
    else return false;
}




class Customer
{
      private:
              string name;
              string address;
              savingsAccount sAccnt;
              checqueAccount cAccnt;
              creditAccount ccAccmt;
      public:
             Customer(string = "", string ="", char, int =0, float =0.0);
             void CreateCust(string, string, int);
             void accessAccount(char);
             bool searchAccounts(int);
             void applyTrans(char,float);
};


//used for the ATM transactions
void Customer::applyTrans(char transType, float amt)
{
  if(transType=='C') sAccnt.addDeposit(amt) ;
  else if(transType=='D') sAccnt.subWdrawal(amt) ;
       else sAccnt.addInterest();
}
//constructor function calling savingsAccount constructor
Customer::Customer(string nme, string addr,int an, float b, float ir):sAccnt(an,b,ir)
{
   name = nme;
   address = addr;
}
//constructor function calling checqueAccount constructor
Customer::Customer(string nme, string addr,int an, float b, float ir):cAccnt(an,b,ir)
{
   name = nme;
   address = addr;
}
//constructor function calling creditAccount constructor
Customer::Customer(string nme, string addr,int an, float b, float ir):ccAccnt(an,b,ir)
{
   name = nme;
   address = addr;
}

bool Customer::searchAccounts(int accNo)
{
   if (sAccnt.matchAccount(accNo)) return true;
   else return false;
   
   if (cAccnt.matchAccount(accNo)) return true;
   else return false;
   
   if (ccAccnt.matchAccount(accNo)) return true;
   else return false;
}
// Access account to get balance
void Customer::accessAccount(char op)
{    float amt;
     cout<<fixed;
     if (op=='B') cout<<"Balance of "<<setw(10)<<name<<"s account is: "<<setw(10)<<setprecision(2)<<sAccnt.getBalance()<<endl;

}
// Transaction class - simple version, other functions in ProcessTrans class
class Transact
{
      private:
              int accNo;
              float amt;
              char transType;
      public:
             void readRecord(ifstream&);
             int getTransAccNo();
             float getTransAmt();
             char getCode();

};
// Read one transaction record from file
void Transact::readRecord(ifstream &infile)
{
   infile>>accNo;
   infile >> amt;
   infile>>transType;

}
int Transact::getTransAccNo()
{
  return accNo;
}

float Transact::getTransAmt()
{
  return amt;
}
char Transact::getCode()
{
  return transType;
}
heres the second part of the code, because it wouldnt let me submit it coz its to long :p
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
//Process transactions class containing customers and transactions
class ProcessTrans
{
    private:
       Customer custs[maxCustomers];
       Transact trans[maxTrans];
       ifstream infile;
       int numTrans;                //Actual number of transactions read from file
                                    //could include number of customers if using file---dont know how
       int findAcc(int);                             
    public:
        void getCustomers();
        void getTrans();
        void Process();
        void Report();
};

void ProcessTrans::getCustomers()//this wont work properly because of the structure of the customers.dat file
{
     inFile.open("customers.dat");               //reads in the customers.dat file
    
        
    if(inFile.fail())                         //what to do when the file can not be found
    {
      cout << "file could no be opened, file does not exist" << endl;
    }
    else
    {
       
       while(inFile.peek() !=EOF && !inFile.eof())
       { 
       for(int i=0; i < 10; i++)
       {
        inFile >> nme
               >> addr
               >> //dont know what to put here.
               >> aNum
               >> intr;
               
        accnt[i].setUpAccount(/*dont know*/, intr, nme, addr);      //initialises line by line from the file to the array
       }
       cout << "\n-+-Loading Data. Please Wait...-+-" << endl;
    }

// Load tranactions into array from file
void ProcessTrans::getTrans()
{   int count=0;
    infile.open("trans.dat");
    if(infile.fail()) cout<<"File not found";
    else {
      while(infile.peek()!=EOF) {
       trans[count].readRecord(infile);
       count++;
      }
    }
    infile.close();
    numTrans=count-1;

}

void ProcessTrans::Report()
{
  for(int i=0;i<maxCustomers;i++)
    custs[i].accessAccount('B');
}
// Find the customer whose account matches the transaction account number
int ProcessTrans::findAcc( int accNo)
{
        for(int i=0;i<maxCustomers;i++)
         if (custs[i].searchAccounts(accNo))   return i;
        return -1;
}
// Main processing driver function
void ProcessTrans::Process()
{    int cust,i;
     for(i=0;i<numTrans;i++) {                   // Loop through transaction array
       cust = findAcc(trans[i].getTransAccNo()); // find customer for that transaction
       if (cust>=0)
         custs[cust].applyTrans(trans[i].getCode(),trans[i].getTransAmt()); // apply the transaction
       else cout<<"No customer found";
     }
}

int main(){
 ProcessTrans pt;
 pt.getCustomers();
 cout<<"Bank system"<<endl;
 cout<<"Transaction Daily Report"<<endl;
 cout<<"========================"<<endl;
 cout<<"Initial Balances"<<endl;
 cout<<"----------------"<<endl;
 pt.Report();
 pt.getTrans();
 cout<<endl<<"Processing Transactions"<<endl<<endl;
 pt.Process();
 cout<<"Final Balances"<<endl;
 cout<<"--------------"<<endl;
 pt.Report();
 system("pause");
 return 0;
}


below is the customers.dat file (x indicates the end of the accounts for that customer)
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
Simon Templar
63 Ninth Ave, Castlecrag
S
123456
0.00
X
Mata Hari
20 Wattle Ave, Doonside
K
937568
0.00
S
246890
0.00
C
917355
0.00
X
James Bond
C/- MI6, London
C
293567
0.00
X
Napolean Solo
Delflorios, New York City
S
337761
0.00
C
846579
0.00
X
have you got the program running?
Topic archived. No new replies allowed.