سلام دوستان عزیز
کد زیر یه برنامه ی ساده است که آبجکت هایی رو میگیره و در یک فایل ذخیره میکنه. بنابه درخواست میتونه اونا رو ادیت کنه یا با علامتگذاری در شی مورد نظر به نوعی اون رو پاک کنه. مساله اینجاست که ادیت و دیلیت کردن در مورد شی آخر فایل عمل نمی کند. این اشکال فقط در مورد آبجکت آخر ذخیره شده در فایل پیش میاد. برای درک بهتر مساله بهتره کد رو اجرا کنید چند آبجکت را در فایل ذخیره کنید و مساله ادیت یا پاک کردن اونا رو امتحان کنید.
ضمنا به خاطر کد طولانی که ممکنه خوندنش وقت گیر بشه عذر میخوام

/****************************************HeaderFile  s*/

#include <iostream.h>
#include <conio.h>
#include <fstream.h>
#include <stdio.h>

/****************************************Class definition*/

class pay
{
public:
char tit[80],det[400];
float c;
int y,m,d;
pay(){};
void getdata();
void showdata();
};
void pay::getdata()
{
cout<<"Title: ";
gets(tit);
cout<<"Cost: ";
cin>>c;
cout<<"Date: ";
do{
cout<<"\n Year: ";
cin>>y;
}while(y<1380||y>1400);
do{
cout<<" Month: ";
cin>>m;
}while(m>12||m<1);
if(m>0&&m<7)
do{
cout<<" Day: ";
cin>>d;
}while(d>31||d<1);
if(m>6&&m<12)
do{
cout<<" Day: ";
cin>>d;
}while(d>30||d<1);
if(m==12&&y%4==3)
do{
cout<<" Day: ";
cin>>d;
}while(d>30||d<1);
if(m==12&&y%4!=3)
do{
cout<<" Day: ";
cin>>d;
}while(d>29||d<1);
cout<<"Det: ";
gets(det);
}
void pay::showdata()
{
cout<<"Title: ";
puts(tit);
cout<<"Cost: "<<c;
cout<<"\nDate: "<<y<<" / "<<m<<" / "<<d;
if(det[0])
{
cout<<"\nDetails: ";
puts(det);
cout<<endl;
for(int m=0;m<75;m++)
cout<<"*";
return;
}
cout<<endl<<endl;
for(int m=0;m<75;m++)
cout<<"*";
}

/****************************************function prototypes*/

void enter();
void view();
void edit();
void del();

/****************************************Main function*/

void main()
{
char ans;
while(1)
{
clrscr();
cout<<"1)Enter\n2)View\n3)Edit\n4)Delete\n5)Exit";
ans=getch();
switch(ans)
{
case '1': enter(); break;
case '2': view(); break;
case '4': del(); break;
case '3': edit(); break;
case '5': return;
}
}
}

/****************************************functions definition*/

void enter()
{
clrscr();
pay p;
fstream f;
f.open("Datafile.dat",ios::out|ios::binary|ios::ap p);
p.getdata();
f.write((char*) &p,sizeof(pay));
f.close();
return;
}


void view()
{
clrscr();
int i=0;
fstream f;
pay p;
f.open("Datafile.dat",ios::in|ios::binary);
while(f.read((char*) &p,sizeof(pay)))
{
if(p.d!=0)
{
cout<<++i<<":\n";
p.showdata();
cout<<"\n\n";
}
}
f.close();
getch();
}


void edit()
{
clrscr();
clrscr();
int n,i=0,e=0;
pay p;
fstream f;
f.open("Datafile.dat",ios::in|ios::out|ios::binary );
cout<<"Enter num of record to edit: ";
cin>>n;
while(f.read((char*) &p,sizeof(pay))&&i<n)
{
if(p.d==0)
{
e++;
i--;
}
i++;
}
n=n+e-1;
f.seekg(n*sizeof(pay));
f.read((char*)&p,sizeof(pay));
cout<<"\n\n";
p.showdata();
char ans;
cout<<"\nAre you sure to edit? <y>";
ans=getch();
if(ans!='y')
return;
cout<<"\n\n";
p.getdata();
f.seekp(n*sizeof(pay));
f.write((char*) &p,sizeof(pay));
f.close();
}


void del()
{
clrscr();
int n,i=0,e=0;
pay p;
fstream f;
f.open("Datafile.dat",ios::in|ios::out|ios::binary );
cout<<"Enter num of record to delete: ";
cin>>n;
while(f.read((char*) &p,sizeof(pay))&&i<n)
{
if(p.d==0)
{
e++;
i--;
}
i++;
}
n=n+e-1;
f.seekg(n*sizeof(pay));
f.read((char*)&p,sizeof(pay));
cout<<"\n\n";
p.showdata();
char ans;
cout<<"\nAre you sure to delete? <y>";
ans=getch();
if(ans!='y')
return;
p.d=0;
f.seekp(n*sizeof(pay));
f.write((char*) &p,sizeof(pay));
f.close();
}