soroush68
جمعه 21 تیر 1387, 18:38 عصر
سلام دوستان عزیز :لبخندساده:
کد زیر یه برنامه ی ساده است که آبجکت هایی رو میگیره و در یک فایل ذخیره میکنه. بنابه درخواست میتونه اونا رو ادیت کنه یا با علامتگذاری در شی مورد نظر به نوعی اون رو پاک کنه. مساله اینجاست که ادیت و دیلیت کردن در مورد شی آخر فایل عمل نمی کند. این اشکال فقط در مورد آبجکت آخر ذخیره شده در فایل پیش میاد. :متفکر: برای درک بهتر مساله بهتره کد رو اجرا کنید چند آبجکت را در فایل ذخیره کنید و مساله ادیت یا پاک کردن اونا رو امتحان کنید.
ضمنا به خاطر کد طولانی که ممکنه خوندنش وقت گیر بشه عذر میخوام :چشمک:
/****************************************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::app);
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();
}
کد زیر یه برنامه ی ساده است که آبجکت هایی رو میگیره و در یک فایل ذخیره میکنه. بنابه درخواست میتونه اونا رو ادیت کنه یا با علامتگذاری در شی مورد نظر به نوعی اون رو پاک کنه. مساله اینجاست که ادیت و دیلیت کردن در مورد شی آخر فایل عمل نمی کند. این اشکال فقط در مورد آبجکت آخر ذخیره شده در فایل پیش میاد. :متفکر: برای درک بهتر مساله بهتره کد رو اجرا کنید چند آبجکت را در فایل ذخیره کنید و مساله ادیت یا پاک کردن اونا رو امتحان کنید.
ضمنا به خاطر کد طولانی که ممکنه خوندنش وقت گیر بشه عذر میخوام :چشمک:
/****************************************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::app);
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();
}