<<C++语言程序设计>>中的第4题,想请各位大侠帮帮忙!先谢谢了!

4.设计一个职工信息表,使用数组,利用赋值兼容包括规则实现简表,并使用虚函数实现多态性,完成显示不同简表信息的任务.设计要求:(1)建立一个能输入10个职工信息的表,信息... 4.设计一个职工信息表,使用数组,利用赋值兼容包括规则实现简表,并使用虚函数实现多态性,完成显示不同简表信息的任务.
设计要求:
(1)建立一个能输入10个职工信息的表,信息数包括职工编号、姓名、性别和年龄。
(2)根据职工信息表,建立只含有姓名和年龄的职工信息简表。
(3)使用继承的方法构造2个类,使用相应的对象数组放置10个职工内容。
(4)编写同名display()成员函数,用来输出数组的内容。
(5)另外编制一个函数printer(),用来根据实际对象输出它们的内容。
通过定义一个基类和一个派生类来实现。具体类关系与源代码如下:
worker
num:char; name:char
setname:void;setnum:void;*getname:char;
*getnum:char;display:virtual void

Workers
sex:char;age:int
setsex:void;setage:void;*getsex:char;getage:int;
display:void

源程序:
#if!defined(zgxxb)
#define zgxxb
#include<iostream>
using namespace std;
const int SIZE=10;
class worker
{private:
char num[8];
char name[10];
public:
void setname(char[]);
char*getname();
void setnum(char[]);
char*getnum();
virtual void display();
};
class workers:public worker
{
private:
int age;
char sex[6];
public:
void setage(int a);
void setsex(char s[]);
int getage();
char*getsex();
void display();
};
void printer(worker &);
#endif

#include"zgxxb.h"
void worker::setname(char s[])
{strcpy(name,s);}
char*worker::getname()
{return name;}
void worker::setnum(char n[])
{strcpy(num,n);}
char*worker::getnum()
{return num;}
void worker::display()
{cout<<"\t"<<num<<"\t"<<name<<endl;
}
void workers::setage(int a)
{age=a;}
void workers::setsex(char s[])
{strcpy(sex,s);}
int workers::getage()
{return age;}
char*workers::getsex()
{return sex;}
void workers::display()
{cout<<"\t"<<getnum()<<"\t"<<getname()<<"\t"<<sex<<"\t"<<age<<endl;
}
void printer(worker &s)
{s.display();}

void main()
{
workers wks[SIZE];
worker wk[SIZE];
int number(0);
char ch[10];
int age;
for(int i=0;i<SIZE;i++)
{cout<<"\t 编号:";
cin.getline(ch,'\n');
if(ch[0]=='0')
{number=i;
break;
}
wks[i].setnum(ch);
cout<<"\t姓名:";
cin.getline(ch,'\n');
wks[i].setname(ch);
cout<<"\t性别:";
cin.getline(ch,'\n');
wks[i].setsex(ch);
cout<<"\t年龄:";
cin>>age;
wks[i].setage(age);
getchar();
}
for(i=0;i<number;i++)
wk[i]=wks[i];
cout<<"\n\t编号"<<"\t姓名"<<"\t性别"<<"\t年龄"<<endl;
for(i=0;i<number;i++)
printer(wks[i]);
cout<<"\n\t编号"<<"\t姓名"<<endl;
for(i=0;i<number;i++)
printer(wk[i]);

}

我把这个程序分别建了:zgxxb.h \ zgxxb.cpp \main.cpp,建好以后,运行老出现错误,唉,不知道如何是好,花了半天都没有找到错误,希望各位大侠多帮忙,谢谢了!
展开
 我来答
oyquan
2008-01-01 · TA获得超过168个赞
知道小有建树答主
回答量:80
采纳率:0%
帮助的人:0
展开全部
前几天写过的,修改了一下

#include<iostream>
#include<cstdio>//strcpy()
using namespace std;

const int N=20;//字符长度的最大值
const int M=3;//职工数

class BaseEmployee
{
protected:
char serialnumber[N];
char name[N];
public:
BaseEmployee(char *s="Null",char *n="Null");
virtual void display() const;//动态联编
void setBase(char *s,char *n);
};
BaseEmployee::BaseEmployee(char *s,char *n)
{
strcpy(serialnumber,s);
strcpy(name,n);
}
void BaseEmployee::display() const
{
cout<<"编号"<<"\t"<<"姓名"<<endl;
cout<<serialnumber<<"\t"<<name<<endl;
}
void BaseEmployee::setBase(char *s,char *n)
{
strcpy(serialnumber,s);
strcpy(name,n);
}

class DerivedEmployee:public BaseEmployee
{
protected:
char gender[N];
int age;
public:
DerivedEmployee(char *s="Null",char *n="Null",char *g="Null",int a=0);
void display() const;
void setDerived(char *s,char *n,char *g,int a);
};
DerivedEmployee::DerivedEmployee(char *s,char *n,char *g,int a):BaseEmployee(s,n)
{
strcpy(gender,g);
age=a;
}
void DerivedEmployee::display() const
{
cout<<"编号"<<"\t"<<"姓名"<<"\t"<<"性别"<<"\t"<<"年龄"<<endl;
cout<<serialnumber<<"\t"<<name<<"\t"<<gender<<"\t"<<age<<endl;
}
void DerivedEmployee::setDerived(char *s,char *n,char *g,int a)
{
setBase(s,n);
strcpy(gender,g);
age=a;
}

void print(BaseEmployee *maybebase_maybederived)
{
maybebase_maybederived->display();
}

int main()
{
BaseEmployee base[M];
char s[N];
char n[N];
for(int i=0;i<M;i++)
{
cout<<"输入第"<<i+1<<"位BaseEmployee类员工的编号,姓名:";
cin>>s>>n;
base[i].setBase(s,n);
}
for(int k=0;k<M;k++)
print(base+k);

cout<<endl;
DerivedEmployee derived[M];
char g[M];
int a;
for(int j=0;j<M;j++)
{
cout<<"输入第"<<j+1<<"位DerivedEmployee类员工的编号,姓名,性别,年龄:";
cin>>s>>n>>g>>a;
derived[j].setDerived(s,n,g,a);
}
for(int l=0;l<M;l++)
print(derived+l);

return 0;
}
/*若令const int M=3,运行结果为:
输入第1位BaseEmployee类员工的编号,姓名:a aa
输入第2位BaseEmployee类员工的编号,姓名:b bb
输入第3位BaseEmployee类员工的编号,姓名:c cc
编号 姓名
a aa
编号 姓名
b bb
编号 姓名
c cc

输入第1位DerivedEmployee类员工的编号,姓名,性别,年龄:d dd ddd 24
输入第2位DerivedEmployee类员工的编号,姓名,性别,年龄:e ee eee 25
输入第3位DerivedEmployee类员工的编号,姓名,性别,年龄:f ff fff 26
编号 姓名 性别 年龄
d dd ddd 24
编号 姓名 性别 年龄
e ee eee 25
编号 姓名 性别 年龄
f ff fff 26
*/
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
HiRockCY
推荐于2016-06-30 · TA获得超过127个赞
知道小有建树答主
回答量:187
采纳率:0%
帮助的人:268万
展开全部
没问题,你应该是你划分的有问题,参考一下下面,我运行没问题:
======================================================
文件zgxxb.h
======================================================

#if!defined(zgxxb)
#define zgxxb
#include<iostream>
using namespace std;
const int SIZE=10;
class worker
{private:
char num[8];
char name[10];
public:
void setname(char[]);
char*getname();
void setnum(char[]);
char*getnum();
virtual void display();
};
class workers:public worker
{
private:
int age;
char sex[6];
public:
void setage(int a);
void setsex(char s[]);
int getage();
char*getsex();
void display();
};
void printer(worker &);
#endif
======================================================
文件zgxxb.cpp
======================================================
#include"zgxxb.h"

void worker::setname(char s[])
{strcpy(name,s);}
char*worker::getname()
{return name;}
void worker::setnum(char n[])
{strcpy(num,n);}
char*worker::getnum()
{return num;}
void worker::display()
{cout<<"\t"<<num<<"\t"<<name<<endl;
}
void workers::setage(int a)
{age=a;}
void workers::setsex(char s[])
{strcpy(sex,s);}
int workers::getage()
{return age;}
char*workers::getsex()
{return sex;}
void workers::display()
{cout<<"\t"<<getnum()<<"\t"<<getname()<<"\t"<<sex<<"\t"<<age<<endl;
}
void printer(worker &s)
{s.display();}

======================================================
文件main.cpp
======================================================
#include"zgxxb.h"

void main()
{
workers wks[SIZE];
worker wk[SIZE];
int number(0);
char ch[10];
int age;
for(int i=0;i<SIZE;i++)
{cout<<"\t 编号:";
cin.getline(ch,'\n');
if(ch[0]=='0')
{number=i;
break;
}
wks[i].setnum(ch);
cout<<"\t姓名:";
cin.getline(ch,'\n');
wks[i].setname(ch);
cout<<"\t性别:";
cin.getline(ch,'\n');
wks[i].setsex(ch);
cout<<"\t年龄:";
cin>>age;
wks[i].setage(age);
getchar();
}
for(i=0;i<number;i++)
wk[i]=wks[i];
cout<<"\n\t编号"<<"\t姓名"<<"\t性别"<<"\t年龄"<<endl;
for(i=0;i<number;i++)
printer(wks[i]);
cout<<"\n\t编号"<<"\t姓名"<<endl;
for(i=0;i<number;i++)
printer(wk[i]);
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式