لدي التمرين التالي حاولت فيه ونفذ لكن عند الوصول التنفيذ للتابع searsh يتوقف التنفيذ ويكون حجم الملف كبير جدا
سألت أساتذة مهندسين لكن للأسف لم يعرفو أرجو المساعدة وشكرا
بفرض لدينا شركة تتضمن مجموعة من الزبائن كل زبون يعرف ب(رقم - اسم -تاريخ الميلاد -رصيد) والمطلوب:
1تابع لادخال بيانات الزبون ضمن ملف تسلسلي
2تابع لطباعة محتويات الملف
3تابع للبحث عن زبون حسب رقمه ضمن الملف التسلسي
4تابع لتعديل رقم زبو ن من خلال رقمه ضمن الملف
5تابع يعيد مصفوفة تحوي ارقام الزبائن الذين لهم سنة ميلاد معينة
6تابع يعيد اسم الزبون ذو الرصيد الادنى
#include<iostream.h>
#include<fstream.h>
#include<string.h>
struct birth_date
{ int day,month,year;
};
struct client
{ int num;
char name[20];
float balance;
birth_date date;
};
///////
void enter (ofstream &f,client c)
{
cin>>c.num>>c.name>>c.balance>>c.date.day>>c.date.month>>c.date.year;
f<<c.num<<"\t"<<c.name<<"\t"<<c.balance<<"\t"<<c.date.day<<"\t"<<c.date.month<<"\t"<<c.date.year<<endl;
}
/////////
void print(ifstream &f)
{client c;
while(f>>c.num>>c.name>>c.balance>>c.date.day>>c.date.month>>c.date.year)
cout<<c.num<<"\t"<<c.name<<"\t"<<c.balance<<"\t"<<c.date.day<<"\t"<<c.date.month<<"\t"<<c.date.year<<endl;
}
////////
bool search(ifstream &f,int n)
{client c;
f.seekg(0);
f>>c.num>>c.name>>c.balance>>c.date.day>>c.date.month>>c.date.year;
while(!f.eof())
{if(c.num==n)
return true;
f>>c.num>>c.name>>c.balance>>c.date.day>>c.date.month>>c.date.year;}
return false;
}
//////////
void replace(int x,int y,ifstream &inf,ofstream &of)
{
inf.seekg(0);
client c;
inf>>c.num>>c.name>>c.balance>>c.date.day>>c.date.month>>c.date.year;
while(!inf.eof())
{
if(c.num==x)
of<<y<<"\t"<<c.name<<"\t"<<c.balance<<"\t"<<c.date.day<<"\t"<<c.date.month<<"\t"<<c.date.year<<endl;
else
of<<c.num<<"\t"<<c.name<<"\t"<<c.balance<<"\t"<<c.date.day<<"\t"<<c.date.month<<"\t"<<c.date.year<<endl;
inf>>c.num>>c.name>>c.balance>>c.date.day>>c.date.month>>c.date.year;
}
cout<<"the operation completed successfully";
}
void array(ifstream &f,int n,int *a)
{f.seekg(0);
client c;
int i=0;
while(f>>c.num>>c.name>>c.balance>>c.date.day>>c.date.month>>c.date.year)
if(c.date.year==n)
{a=c.num;
i++;}
//////////
void low_balance(ifstream &f,char *b)
{
f.seekg(0);
client c;
f>>c.num>>c.name>>c.balance>>c.date.day>>c.date.month>>c.date.year;
float low=c.balance;
strcpy(b,c.name);
while(!f.eof())
{f>>c.num>>c.name>>c.balance>>c.date.day>>c.date.month>>c.date.year;
if(c.balance<low)
{low=c.balance;
strcpy(b,c.name);
}
}
/////////
main()
{
ofstream outf("c:\\mh.txt",ios::out);
ifstream inf("c:\\mh.txt",ios::in);
ofstream of("c:\\new1.txt",ios::out);
if(!outf ||!inf|| !of)
{cerr<<"coudnot opend ";
exit(1);
}
client c;
int n,m;
cout<<"enter the number of clients";cin>>m; //áÇÏÎÇá ÇßËÑ ãä ÒÈæä
for(int i=0;i<m;i++)
enter(outf,c);
cout<<"the contents of the file \n";
print(inf);
cout<<"enter the number of the client for search";
cin>>n;
bool g;
g=search(inf,n)
cout<<g<<endl;
cout<<"enter the birth year \n";
cin>>n;
int m=sizeof(mh.txt)/sizeof(c);
int a*=new int [m];
array(inf,n,a);
for(int i=0;i<n;i++)cout<<a;
char b[20];
low_balance(inf,b);
cout<<b;
int x,y;
cout<<"enter number ";cin>>x;
cout<<"enter new number ";cin>>y;
replace(x,y,inf,of);
getchar();
return 0;
}