File Handling(deleting) problem?

this works fine but when i go in option 6. Close An Account , it doesnt function well.
For example:

Created account number : S12345678

then if i go to 6. Close An Account, type in t123456678, or s00000000, the account number s12345678 will be deleted also (as long as either the 'type' or 'acno' correct)... I keep looking through the codes but cant find the mistake?? Can anyone kindly point it out if you find it? Thanks!!~

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
 //***************************************************************
//                   HEADER FILE USED IN PROJECT
//****************************************************************

#include<iostream>
#include<stdio.h>
#include<fstream>
#include<cctype>
#include<iomanip>
using namespace std;

//***************************************************************
//                   CLASS USED IN PROJECT
//****************************************************************


class account
{
	int acno;
	char icnumber[50];
	char name[50];
	char date[50];
	long long int deposit;
	char type;
public:
	void create_account();	//function to get data from user
	void show_account() const;	//function to show some data on screen
	void show_account_full () const; //show full data
	void modify();	//function to add new data
	void dep(int);	//function to accept amount and add to balance amount
	void draw(int);	//function to accept amount and subtract from balance amount
	void report() const;	//function to show data in tabular format
	int retacno() const;	//function to return account number
	int retdeposit() const;	//function to return balance amount
	char rettype() const;	//function to return type of account
};         //class ends here

void account::create_account()
{
	
	cout<<"\nEnter Type of The account (S for Savings, C for Current and T for Trading) : ";
	cin>>type;
	type=toupper(type);
	cout<<"\nEnter The account No. (8 digits):";
	cin>>acno;	
	cout<<"\n\nEnter The Name of The account Holder : ";
	cin.ignore();
	cin.getline(name,50);
	cout<<"\n\nEnter the Identity Card Number of The account Holder (YYMMDD-BP-####) : \n";
	cin.getline(icnumber,50);
	cout<<"\n\nEnter the date DD-MM-YYYY: ";
	cin.getline(date,50);
	cout<<"\nEnter The Starting Balance of The account : ";
	cin>>deposit;
	cout<<"\n\n\nAccount Created..";
}

void account::show_account () const
{
	cout<<"\nAccount No. : "<<type;
	printf("%08d",acno);
	cout<<"\nAccount Holder Name : "<<name;
	
}
void account::show_account_full() const
{
	cout<<"\nAccount No. : "<<type;
	printf("%08d",acno);
	cout<<"\nDate Created : "<<date;
	cout<<"\nAccount Holder Name : "<<name;
	cout<<"\nIdentity Card Number : "<<icnumber;
	cout<<"\nType of Account : ";

	if (type == 'S')
		cout<<"Savings";
	else if (type == 'C')
		cout<<"Current";
	else
		cout<<"Trading";

	cout<<"\nBalance amount : "<<deposit;
}


void account::modify()
{
	cout<<"\nAccount No. : ";
	cin>>type>>acno;
	cout<<"\nModify Account Holder Name : ";
	cin.ignore();
	cin.getline(name,50);
	cout<<"\nModify Identity Card Number : ";
	cin.getline(icnumber,50);
	cout<<"\nModify Type of Account : ";
	cin>>type;
	type=toupper(type);
	cout<<"\nModify Balance amount : ";
	cin>>deposit;
}

	
void account::dep(int x)
{
	deposit+=x;
}
	
void account::draw(int x)
{
	deposit-=x;
}
	
void account::report() const
{
	cout<<type;
	printf("%08d",acno);
	cout<<"  ";
	cout<<left<<setw(30)<<setfill(' ')<<name;
	cout<<left<<setw(18)<<setfill(' ')<<icnumber;
	cout<<left<<setw(25)<<setfill(' ')<<deposit<<endl;
}

	
int account::retacno() const
{
	return acno;
}

int account::retdeposit() const
{
	return deposit;
}

char account::rettype() const
{
	return type;
}


//***************************************************************
//    	function declaration
//****************************************************************
void write_account();	//function to write record in binary file
void display_sp(char,int);	//function to display account details given by user
void modify_account(char,int);	//function to modify record of file
void delete_account(char,int);	//function to delete record of file
void display_all();		//function to display all account details
void deposit_withdraw(char,int, int); // function to desposit/withdraw amount for given account
void intro();	//introductory screen function

//***************************************************************
//    	THE MAIN FUNCTION OF PROGRAM
//****************************************************************


int main()
{
	char menu;
	char type;
	int num;
	intro();
	do
	{
		system("cls");
		cout<<"\n\n\n\tMAIN MENU";
		cout<<"\n\n\t1. NEW ACCOUNT";
		cout<<"\n\n\t2. MODIFY AN ACCOUNT";
		cout<<"\n\n\t3. DEPOSIT AMOUNT";
		cout<<"\n\n\t4. WITHDRAW AMOUNT";
		cout<<"\n\n\t5. ACCOUNT AND BALANCE ENQUIRY";
		cout<<"\n\n\t6. CLOSE AN ACCOUNT";
		cout<<"\n\n\t7. ALL ACCOUNT HOLDER LIST";
		cout<<"\n\n\t8.  cccc   ";
		cout<<"\n\n\t9.  zzzz   ";
		cout<<"\n\n\t0. EXIT";
		cout<<"\n\n\tSelect Your Option ";
		cin>>menu;
		system("cls");
		switch(menu)
		{
		case '1':
			write_account();
			break;
		case '2':
			cout<<"\n\n\tEnter The account No. : "; cin>>type>>num;
			type=toupper(type);
			modify_account(type,num);
			break;
		case '3':
			cout<<"\n\n\tEnter The account No. : "; cin>>type>>num;
			type=toupper(type);
			deposit_withdraw(type, num, 1);
			break;
		case '4': 
			cout<<"\n\n\tEnter The account No. : "; cin>>type>>num;
			type=toupper(type);
			deposit_withdraw(type, num, 2);
			break;
		case '5':
			cout<<"\n\n\tEnter The account No. : "; cin>>type>>num;
			type=toupper(type);
			display_sp(type,num);
			break;
		case '6':
			cout<<"\n\n\tEnter The account No. : "; cin>>type>>num;
			type=toupper(type);
			delete_account(type,num);
			break;
		 case '7':
			display_all();
			break;
		 case '8':

			 break;
		 case '9':

			 break;
		 case '0':
			cout<<"\n\n\tThanks for using bank managemnt system";
			break;
		 default :cout<<"\a";
		}
		cin.ignore();
		cin.get();
	}while(menu!='0');
	return 0;
}


//***************************************************************
//    	function to write in file
//****************************************************************

void write_account()
{
	account ac;
	ofstream outFile;
	outFile.open("account.dat",ios::binary|ios::app);
	ac.create_account();
	outFile.write(reinterpret_cast<char *> (&ac), sizeof(account));
	outFile.close();
}
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
//***************************************************************
//    	function to read specific record from file
//****************************************************************

void display_sp(char t,int n)
{
	account ac;
	bool flag=false;
	ifstream inFile;
	inFile.open("account.dat",ios::binary);
	if(!inFile)
	{
		cout<<"File could not be open !! Press any Key...";
		return;
	}
	cout<<"\nBALANCE DETAILS\n";

    	while(inFile.read(reinterpret_cast<char *> (&ac), sizeof(account)))
	{
		if(ac.retacno()==n && ac.rettype()==t)
		{
			ac.show_account_full();
			flag=true;
		}
	}
	inFile.close();
	if(flag==false)
		cout<<"\n\nAccount number does not exist";
}


//***************************************************************
//    	function to modify record of file
//****************************************************************

void modify_account(char t,int n)
{
	bool found=false;
	account ac;
	fstream File;
	File.open("account.dat",ios::binary|ios::in|ios::out);
	if(!File)
	{
		cout<<"File could not be open !! Press any Key...";
		return;
	}
	while(!File.eof() && found==false)
	{
		File.read(reinterpret_cast<char *> (&ac), sizeof(account));
		if(ac.retacno()==n && ac.rettype()==t)
		{
			ac.show_account();
			cout<<"\n\nEnter The New Details of account"<<endl;
			ac.modify();
			int pos=(-1)*static_cast<int>(sizeof(account));
			File.seekp(pos,ios::cur);
			File.write(reinterpret_cast<char *> (&ac), sizeof(account));
			cout<<"\n\n\t Record Updated";
			found=true;
		  }
	}
	File.close();
	if(found==false)
		cout<<"\n\n Record Not Found ";
}

//***************************************************************
//    	function to delete record of file
//****************************************************************


void delete_account(char t,int n)
{
	account ac;
	ifstream inFile;
	ofstream outFile;
	inFile.open("account.dat",ios::binary);
	if(!inFile)
	{
		cout<<"File could not be open !! Press any Key...";
		return;
	}
	outFile.open("Temp.dat",ios::binary);
	inFile.seekg(0,ios::beg);
	while(inFile.read(reinterpret_cast<char *> (&ac), sizeof(account)))
	{
		if(ac.retacno()!=n && ac.rettype () != t)
		{
			outFile.write(reinterpret_cast<char *> (&ac), sizeof(account));
		}
	}
	inFile.close();
	outFile.close();
	remove("account.dat");
	rename("Temp.dat","account.dat");
	cout<<"\n\n\tRecord Deleted ..";
}

//***************************************************************
//    	function to display all accounts deposit list
//****************************************************************

void display_all()
{
	account ac;
	ifstream inFile;
	inFile.open("account.dat",ios::binary);
	if(!inFile)
	{
		cout<<"File could not be open !! Press any Key...";
		return;
	}
	cout<<"\n\n\t\tACCOUNT HOLDER LIST\n\n";
	cout<<"================================================================================\n";
	cout<<"A/c no.    NAME                          IC Number         Balance   \n";
	cout<<"================================================================================\n";
	while(inFile.read(reinterpret_cast<char *> (&ac), sizeof(account)))
	{
		ac.report();
	}
	inFile.close();
}

//***************************************************************
//    	function to deposit and withdraw amounts
//****************************************************************

void deposit_withdraw(char t, int n, int option)
{
	int amt;
	bool found=false;
	account ac;
	fstream File;
	File.open("account.dat", ios::binary|ios::in|ios::out);
	if(!File)
	{
		cout<<"File could not be open !! Press any Key...";
		return;
	}
	while(!File.eof() && found==false)
	{
		File.read(reinterpret_cast<char *> (&ac), sizeof(account));
		if(ac.retacno()==n && ac.rettype()==t)
		{
			ac.show_account();
			if(option==1)
			{
				cout<<"\n\n\tTO DEPOSITE AMOUNT ";
				cout<<"\n\nEnter The amount to be deposited : ";
				cin>>amt;
				ac.dep(amt);
			}
			if(option==2)
			{
				cout<<"\n\n\tTO WITHDRAW AMOUNT ";
				cout<<"\n\nEnter The amount to be withdraw : ";
				cin>>amt;
				int bal=ac.retdeposit()-amt;
				if((bal<500 && ac.rettype()=='S') || (bal<1000 && ac.rettype()=='C'))
					cout<<"Insufficience balance";
				else
					ac.draw(amt);
			}
			int pos=(-1)*static_cast<int>(sizeof(ac));
			File.seekp(pos,ios::cur);
			File.write(reinterpret_cast<char *> (&ac), sizeof(account));
			cout<<"\n\n\t Record Updated";
			found=true;
	       }
         }
	File.close();
	if(found==false)
		cout<<"\n\n Record Not Found ";
}


//***************************************************************
//    	INTRODUCTION FUNCTION
//****************************************************************


void intro()
{
	cout<<"\n\n\n\t   WELCOME";
	cout<<"\n\n\t     TO";
	cout<<"\n\n\tBANK MANAGEMENT SYSTEM";
	cout<<"\n\n\n\nMADE BY : PUNG KAH HENG, CHAN KIM HAO, NG WAN YEE\n\n";
	system("pause");
}

//***************************************************************
//    			END OF PROJECT
//*************************************************************** 
Topic archived. No new replies allowed.