代码中包含两个类,chain 是 associator 的友元类。在编译调试完毕后,执行代码会发现选择 1,之后输入序号不管输入任何字符都无法继续执行,为什么会
#include<iostream>#include<fstream>
#include<iomanip>
#include<string>
#define n 100
using namespace std;
class Chain;
class Associator
{
public:
Associator *ptrnext;
void input(Associator *p,int ji) //该函数使得序号唯一
{
int j;
int q=-1;
cout<<"序号:";
cin>>xh;
while(q!=0){
q=-1;
for(j=0;j<=ji;j++){
if(p[j].i==1 && strcmp(p[j].xh,xh)==0){
cout<<"序列号不能相同"<<endl;
q=1;
cin>>xh;
break;
}
}
if(q==1) continue;
else q=0;
}
cout<<"用户名:";
cin>>yhm;
cout<<"性别:";
cin>>xb;
cout<<"年龄:";
cin>>nl;
cout<<"职业:";
cin>>zhy;
cout<<"资金:";
cin>>zj;
cout<<"时间:";
cin>>sj;
i=1;
}
void input(ifstream &in) //新会员入会登记
{
in>>yhm>>xb>>nl>>zhy>>zj>>sj;
i=1;
}
void display()
{
cout<<xh<<setw(10)<<yhm<<setw(10)<<nl<<setw(10)<<zhy<<setw(10)<<zj<<setw(10)<<sj<<endl;
}
void display(ofstream &out)
{
out<<xh<<setw(10)<<yhm<<setw(10)<<xb<<setw(10)<<nl<<setw(10)<<zhy<<setw(10)<<zj<<setw(10)<<sj<<endl;
}
friend Chain;
private:
int i; //标记,0删除,1未删
char xh[15];
char yhm[15];
char xb[2];
int nl;
char zhy[18];
float zj;
char sj[20];
};
class Chain
{
public:
void panduan()
{
int h;
for(h=0;h<n;h++)
p[h].i=0;
pb.open("associator.txt",ios::in);
if(!pb)
{
cout<<"错误!"<<endl;
exit(1);
}
for(ji=0;;ji++)
{
pb>>p[ji].xh;
if(strcmp(p[ji].xh,"*")==0)
break;
p[ji].input(pb);
}
pb.close();
}
void input()
{
p[ji].input(p,ji);
ji++;
}
void display()
{
int y;
for(y=0;y<ji;y++)
if(p[y].i==1)
p[y].display();
}
void Delete() //会员不想继续入会则必须将其记录删除
{
int l;
char k[15];
cout<<"请输入你想删除的序号:";
cin>>k;
for(l=0;l<ji;l++)
if(p[l].i==1&&strcmp(p[l].xh,k)==0)
{
p[l].i=0;
cout<<"删除成功"<<endl;
break;
}
if(l==ji)
cout<<"无此人"<<endl;
}
void find() //按序号查询会员所剩资金
//按用户名查询用户相关信息
{
char k[15];
int g;
string c;
cout<<"1-查资金 2-查会员信息"<<endl;
cin>>c;
if(c=="1")
{
cout<<"请输入你想查的序号:";
cin>>k;
for(g=0;g<ji;g++)
if(p[g].i==1&&strcmp(p[g].xh,k)==0)
{
cout<<"资金为:";
cout<<p[g].zj<<endl;
break;
}
if(g==ji)
cout<<"无此人"<<endl;
}
else if(c=="2")
{
cout<<"请输入你想查的姓名:";
cin>>k;
for(g=0;g<ji;g++)
if(p[g].i==1&&strcmp(p[g].yhm,k)==0)
{
p[g].display();
break;
}
if(g==ji)
cout<<"无此人"<<endl;
}
}
void change() //只能修改会员的资金情况
{
char k[15];
int j,c;
cout<<"请输入你想查的序号:"<<endl;
cin>>k;
for(j=0;j<ji;j++)
if(p[j].i==1&&strcmp(p[j].xh,k)==0)
{
cout<<"请输入你想重的资金"<<endl;
cin>>c;
p[j].zj=c+p[j].zj;
cout<<"资金已重入"<<endl;
break;
}
if(j==ji)
cout<<"无此人"<<endl;
}
int string_int(char *k)// 将char的数转化为int 的数
{
int i,j=0;
for(i=0;k[i]!='\0';i++)
j=j*10+k[i]-'0';
return j;
}
void kong()
{
string k;
for(;;)
{
cout<<"1-按年龄统计 2-按入会时间统计"<<endl;
cin>>k;
if(k=="1")
{
kong_age();
break;
}
else if(k=="2")
{
kong_time();
break;
}
else
{
cout<<"输入错误!"<<endl;
}
}
}
void kong_age() //按年龄统计
{
int i,a[8],j;
int c=10;
for(i=0;i<8;i++)
a[i]=0;
for(i=0;i<ji;i++)
{
if(p[i].i==1)
{
j=p[i].nl;
if(10<=j&&j<20) a[0]++;
else if(20<=j&&j<30) a[1]++;
else if(30<=j&&j<40) a[2]++;
else if(40<=j&&j<50) a[3]++;
else if(50<=j&&j<60) a[4]++;
else if(60<=j&&j<70) a[5]++;
else if(70<=j&&j<80) a[6]++;
else if(80<=j&&j<90) a[7]++;
else cout<<p[i].yhm<<"不在统计范围内"<<endl;
}
}
for(i=0;i<8;i++)
{
cout<<c<<"~~"<<c+10<<"的人数为:"<<a[i]<<endl;
c=c+10;
}
}
void kong_time() //按入会时间统计
{
int a[8];
int i;
for(i=0;i<8;i++)
a[i]=0;
for(i=0;i<ji;i++)
{
if(p[i].i==1)
{
if(strcmp(p[i].sj,"2000")==0) { a[0]=a[0]+p[i].zj;}
else if(strcmp(p[i].sj,"2001")==0) {a[1]=a[1]+p[i].zj;}
else if(strcmp(p[i].sj,"2002")==0) {a[2]=a[2]+p[i].zj;}
else if(strcmp(p[i].sj,"2003")==0) {a[3]=a[3]+p[i].zj;}
else if(strcmp(p[i].sj,"2004")==0) {a[4]=a[4]+p[i].zj;}
else if(strcmp(p[i].sj,"2005")==0) {a[5]=a[5]+p[i].zj;}
else if(strcmp(p[i].sj,"2006")==0) {a[6]=a[6]+p[i].zj;}
else if(strcmp(p[i].sj,"2007")==0) {a[7]=a[7]+p[i].zj;}
}
}
for(i=0;i<8;i++)
{
cout<<"200"<<i<<"的资金:"<<a[i]<<endl;
}
}
void save() //进行对会员信息的储存函数,输入结束后应该输入"7"来结束,否则无法对会员信息进行储存
{
Associator *p1=p;
int j;
pc.open("associator.txt",ios::out);
for(j=0;j<ji;j++)
p1[j].display(pc);
pc<<"*";
pc.close();
}
~Chain()
{
save();
}
private:
ifstream pb;//输入流
ofstream pc;//输出流
Associator p[n];
int ji;//链表长度
};
int main()
{
Chain a;
int choose;
choose=-1;
cout<<"__________________足球俱乐部会员管理系统___________________"<<endl;
cout<<"1-录入信息 2-重值 3-查询 4-输出全部信息 5-删除信息 6-统计 7-结束"<<endl;
while(choose!=7){
cout<<"请选择:";
cin>>choose;
switch(choose){
case 1:
a.input();
break;
case 2:
a.change();
break;
case 3:
a.find();
break;
case 4:
a.display();
break;
case 5:
a.Delete();
break;
case 6:
a.kong();
break;
case 7:
break;
}
cout<<endl;
}
return 0;
}