PDA

View Full Version : سوال: سرچ درفایل+وراثت



minazare
سه شنبه 25 مرداد 1390, 14:02 عصر
سلام
دارم یه برنامه هتل داری مینویسم.توش از کلاس و وراثت و فایل استفاده میکنم.وقتی اطلاعات یه کلاسو وارد فایل میکنم بعدش از توی فایله یه چیزی سرچ میکنم پیدا میکنه ولی وقتی وراثت میاد وسط کارم خراب میشه.یعنی وقتی اول اطلاعات کلاس پایه رو میگیرم بعد اطلاعات کلاس مشتق بعد همه رو میریزم توی یه فایل بعد سرچ میکنم جواب نمیده.چه کار باید بکنم؟؟؟؟؟

minazare
چهارشنبه 26 مرداد 1390, 16:05 عصر
ممنون از جوابتون:عصبانی:

_hamid
چهارشنبه 26 مرداد 1390, 16:16 عصر
کدی ؟ توضیحی؟‌مثالی ؟ چیزی خوب؟
کجا مشکل پیش میاد آخه؟ :لبخند:

minazare
جمعه 28 مرداد 1390, 22:55 عصر
class person{
char firstName[20];
char lastName[20];
enum marriage{married,single};
int yearB;
char numberParson[11];
enum sex{man,woman};
public:
friend void give();
friend void search();
friend void add();
char *get_numberPerson(){return numberParson;}
friend ostream &operator<<(ostream &stream,person per );
friend istream &operator>>(istream &stream,person &per );
}per;

ostream &operator<<(ostream &stream,person per )
{
stream<<per.firstName;
stream<<"\n"<<per.lastName;
stream<<"\n"<<per.numberParson;
stream<<"\n"<<per.yearB;
switch(s)
{
case 0:stream<<"\nman";break;
case 1:stream<<"\nwoman";break;
}
switch(mar)
{
case 0:stream<<"\nmarried";break;
case 1:stream<<"\nsingle";break;
}

return stream;
}
istream &operator>>(istream &stream,person &per ){
cout<<"Enter First Name: "<<endl;
stream >>per.firstName;
cout<<"Enter Last Name: "<<endl;
stream>>per.lastName;
cout<<"Enter code Meli: "<<endl;
stream>>per.numberParson;
cout<<"Enter Birth Year: "<<endl;
stream>>per.yearB;
cout<<"Enter sex:(man:0 woman:1)"<<endl;
stream>>s;
cout<<"Enter position of marriage (married:0 single:1)"<<endl;
stream>>mar;

return stream;
}
//* * * * * * * * * * * * * * * * * * * * * * * * * *
class costumer:public person{
int numberFamily;
int numberRoom;
char nameHotel;
public:
friend ostream &operator<<(ostream &stream,costumer cost );
friend istream &operator>>(istream &stream,costumer &cost );
}cost;
ostream &operator<<(ostream &stream,costumer cost ){

stream<<cost.numberFamily;
stream<<cost.numberRoom;
stream<<cost.nameHotel;
return stream;
}
istream &operator>>(istream &stream,costumer &cost ){
cout<<"Enter Number of Family: "<<endl;
stream>>cost.numberFamily;
cout<<"Enter Number of Room: "<<endl;
stream>>cost.numberRoom;
cout<<"Enter Name of Hotel: "<<endl;
stream>>cost.nameHotel;

return stream;
}
//* * * * * * * * * * * * * * * * * * * * * * * * * *
void search()
{
char code[11];
cout<<"Enter code Mely for search :"<<endl;
cin>>code;
ifstream f1("person.c",ios::in);
int k=7;
while( f1.read((char *)&per,sizeof(class person))){
int p;
p=strcmp(per.get_numberPerson(),code);
if(p==0){
cout<<per;
k=1;
}
}
if(k==7)
cout<<"NOT FOUND...."<<endl;
f1.close();
}
void add()
{
ofstream file("person.c",ios::out |ios::binary |ios::app);
if(!file){
cout<<"CAN NOT OPEN FILE .";
getch();
exit(0);
}
while(1){
char b;
cin>>cost;
cin>>per;
file.write((char *)&cost,sizeof(class costumer));
cout<<"Do you want to continue (y,n) :";
cin>>b;
if(b=='n')
break;
else
continue;
}
getch();
file.close();
}

minazare
جمعه 28 مرداد 1390, 23:01 عصر
توی تابع addاگه cin>>cost;گذاشته بشه برنامه اجرا نمیشه .ولی اگه برش دارم درست کار میکنه

BeginnerProgrammer
جمعه 28 مرداد 1390, 23:08 عصر
خب شما وقتی دو کلاس با سایزهای مختلف رو تو یه فایل ذخیره میکنید و بعد تو تابع سرچتون به اندازه یکی از این کلاسا میخونید طبیعیه که مشکل پیش بیاد.
به نظرم اگه نیازی نیست اطلاعات این 2تا کلاسو تو یه فایل ادغام کنید فایل کلاسا رو جدا کنید

minazare
جمعه 28 مرداد 1390, 23:29 عصر
آخه یه کلاس مشتق دیگه ام دارم .بعد کد ملی مشتری با کد ملی اون یکی کلاس مشتقه قاطی میشه.
بعدش مگه کلاس مشتق همه اطلاعات کلاس پایه رو نداره؟پس وقتی به اندازه کلاس مشتق یه فایلی باز میشه باید جای اطلاعات کلاس پایه رو هم داشته باشه.
این برداشت منه اگه اشتباهه بگین.ممنون

BeginnerProgrammer
شنبه 29 مرداد 1390, 22:39 عصر
درسته اطلاعات کلاس پایه رو داره ولی اینجور نیست که بشه قسمت کلاس پایه رو ازش جدا کرد.