主题:[原创]【求助】有关于虚函数的问题,没有语法错误,但是连接出错
好像是虚函数出问题,可是检查不出,贴上来请高手看看
[code=c]
#include<iostream.h>
#include<string.h>
#include<stdlib.h>
class CPerson
{
public:
CPerson() {}
char Name[10];//姓名
char ID[20];//身份证
CPerson *next;//下个结点指针
virtual void Print();
virtual void Edit(char*,char*,float,float,float);
};
CPerson *head;
class CTeacher:public CPerson
{
int Classes;//课时
float BWages;//基本工资
float AWages;//总工资
public:
CTeacher() {}
void Edit(char *name,char *id,float classes,float wages,float a)
{strcpy(Name,name);strcpy(ID,id);Classes=(int)classes;BWages=wages;AWages=BWages+(Classes-10)*30;}
void Print();
};
class CStudent:public CPerson
{
float Score[3];//3门课成绩
float Aver;//平均分
float Amount;//总分
public:
CStudent() {}
void Edit(char *name,char *id,float s1,float s2,float s3,float a)
{strcpy(Name,name);strcpy(ID,id);Score[0]=s1;Score[1]=s2;Score[2]=s3;Amount=s1+s2+s3;Aver=Amount/3.;}
void Print();
};
class CManager:public CPerson
{
float BWages;//基本工资
float AWages;//总工资
float Bonus;//月奖金
public:
CManager() {}
void Edit(char *name,char *id,float wages,float bonus,float a)
{strcpy(Name,name);strcpy(ID,id);BWages=wages;Bonus=bonus;AWages=BWages+Bonus;}
void Print();
};
void CTeacher::Print()
{
cout<<"姓名\t\t身份证\t\t课时\t\t基本工资\t\t总工资"<<endl;
cout<<Name<<"\t\t"<<ID<<"\t\t"<<Classes<<"\t\t"<<BWages<<"\t\t"<<AWages<<endl;
}
void CStudent::Print()
{
cout<<"姓名\t\t身份证\t\t成绩1\t\t成绩2\t\t成绩3\t\t总分\t\t平均分"<<endl;
cout<<Name<<"\t\t"<<ID<<"\t\t"<<Score[0]<<"\t\t"<<Score[1]<<"\t\t"<<Score[2]<<"\t\t"<<Amount<<"\t\t"<<Aver<<endl;
}
void CManager::Print()
{
cout<<"姓名\t\t身份证\\t\t基本工资\t\t奖金\t\t总工资"<<endl;
cout<<Name<<"\t\t"<<ID<<"\t\t"<<BWages<<"\t\t"<<Bonus<<"\t\t"<<AWages<<endl;
}
void Add()
{
int choice,n=1;
float b,c,s1,s2,s3,x,y;
char name[10],id[20];
CPerson *t,*s,*m;
while(n)
{
cout<<"1.添加教师信息2.添加学生信息3.添加行政人员信息"<<endl;
cout<<"请输入选择:"; cin>>choice;
switch(choice)
{
case 1:t=new CTeacher;
cout<<"\n请输入姓名:";cin>>name;
cout<<"请输入身份证号:";cin>>id;
cout<<"请输入基本课时:";cin>>c;
cout<<"请输入基本工资:";cin>>b;
t->Edit(name,id,c,b,0.);
t->next=head->next;head->next=t;
cout<<"添加完成,添加的信息为:"<<endl;
t->Print();
n=0;
break;
case 2:s=new CStudent;
cout<<"\n请输入姓名:";cin>>name;
cout<<"请输入身份证号:";cin>>id;
cout<<"请输入成绩1:";cin>>s1;
cout<<"请输入成绩2:";cin>>s2;
cout<<"请输入成绩3:";cin>>s3;
s->Edit(name,id,s1,s2,s3);
s->next=head->next;head->next=s;
cout<<"添加完成,添加的信息为:"<<endl;
s->Print();
n=0;
break;
case 3:m=new CManager;
cout<<"\n请输入姓名:";cin>>name;
cout<<"请输入身份证号:";cin>>id;
cout<<"请输入基本工资:";cin>>x;
cout<<"请输入月奖金:";cin>>y;
m->Edit(name,id,x,y,0.);
m->next=head->next;head->next=m;
cout<<"添加完成,添加的信息为:"<<endl;
m->Print();
n=0;
break;
default:cout<<"输入错误!"<<endl;
}
}
}
void Del()
{
if(head->next==NULL) {cout<<"当前人员库为空!"<<endl;return;}
CPerson *p=head,*s;
char keywords[20];
int choice,n=1;
while(n)
{
cout<<"1.输入姓名查找 2.输入身份证号查找"<<endl;
cout<<"请输入选择:";cin>>choice;
switch(choice)
{
case 1:cout<<"\n请输入姓名:";cin>>keywords;
while(s->Name!=keywords&&s!=NULL) {s=p->next;p=s;}
if(s!=NULL) {p->next=s->next;delete s;cout<<"删除成功!"<<endl;}
else cout<<keywords<<"不存在!"<<endl;
n=0;
break;
case 2:cout<<"\n请输入身份证号:";cin>>keywords;
while(s->ID!=keywords&&s!=NULL) {s=p->next;p=s;}
if(s!=NULL) {p->next=s->next;delete s;cout<<"删除成功!"<<endl;}
else cout<<keywords<<"不存在!"<<endl;
n=0;
break;
default:cout<<"输入错误!";
}
}
}
void Display()
{
if(head->next==NULL) {cout<<"当前人员库为空!"<<endl;return;}
CPerson *p=head->next;
cout<<"当前库中所有的记录为:\n\n"<<endl;
while(p!=NULL)
{p->Print(); p=p->next;}
}
void RPrint()
{
if(head->next==NULL) {cout<<"当前人员库为空!"<<endl;return;}
CPerson *s=head->next;
char keywords[20];
int choice,n=1;
while(n)
{
cout<<"1.输入姓名查找 2.输入身份证号查找"<<endl;
cout<<"请输入选择:";cin>>choice;
switch(choice)
{
case 1:cout<<"\n请输入姓名:";cin>>keywords;
while(s->Name!=keywords&&s!=NULL) s=s->next;
if(s!=NULL) s->Print();
else cout<<keywords<<"不存在!"<<endl;
n=0;
break;
case 2:cout<<"\n请输入身份证号:";cin>>keywords;
while(s->ID!=keywords&&s!=NULL) s=s->next;
if(s!=NULL) s->Print();
else cout<<keywords<<"不存在!"<<endl;
n=0;
break;
default:cout<<"输入错误!";
}
}
}
void Menu()
{
cout<<"<.=========================学校人员信息管理===========================.>"<<endl;
cout<<"<.==(1).添加人员信息========"<<endl;
cout<<"<.==(2).查找人员信息========"<<endl;
cout<<"<.==(3).删除人员信息========"<<endl;
cout<<"<.==(4).显示所有人员信息===="<<endl;
cout<<"<.==(0).退出系统============"<<endl;
cout<<"\n请输入选择:";
}
void main()
{
head=new CPerson;head->next=NULL;
int choice;
while(1)
{
Menu();
cin>>choice;
switch(choice)
{
case 1:Add();break;
case 2:RPrint();break;
case 3:Del();break;
case 4:Display();break;
case 0:exit(1);
}
}
}
[/code]