一、设计题目
职工信息表
二、设计目的
设计一个职工信息表,并由此产生一个信息简表。这里使用数组,利用赋值兼容规则实现简表,并使用虚函数实现多态性,完成显示不同简表信息的任务。
三、设计要求
使用继承的方法,编写最多能输入10个职工的信息表,再根据这个表产生一个职工信息简表,并利用多态性实现信息的输出。
具体设计要求如下:
- 建立职工信息数据,包括职工编号、姓名、性别和年龄。
- 根据职工信息表,建立只含有姓名和年龄的职工信息简表。
- 使用继承的方法构造2个类,使用相应的对象数组放置10个职工信息。
- 编写同名display()成员函数,用来输出数组的内容。
- 另外编制一个函数printer(),用来根据实际对象输出他们的内容。
四、设计思想
1、类的结构图
图1-1是使用类的长式形式表示方式画出的类的UML图。
这里把简表的内容作为基类worker,由它派生详表类workers。这样,简表可以利用赋值兼容规则得到。
例如workers的一个对象wks为:
编号 姓名 性别 年龄
101 张三 男 21
则worker的对象wk可以简单地通过下面的方法得到:
wk=wks;
这时wk的信息为:
编号 姓名
- 张三
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 |
图1-1 类图
2、多态性
将worker的display()成员函数设计为虚函数,printer()函数使用基类worker对象的引用作为参数(也可以使用指针),即可实现多态性。
void printer(worker &s)
{
s.display();
}
3、设计主函数
要求编写最多能输入10个职工的信息表,这里的意思是可以少于10个职工。这可以使用判断语句实现。使用字符数组ch存放读入的字符,当输入0时退出输入,同时将输入个数作为输出语句的循环次数。例如使用整型变量number存放输入个数,则可使用如下方法实现:
if(ch[0]==’0’)
{
number=i;
break;
}
没有给类设计构造函数,而是使用系统提供的无参数构造函数。因为使用类的数组,可通过输入进行逐项赋值。按要求可以定义如下两个数组:
workers wks[10];
worker wk[10];
使用const定义一个常量作为数组维数,这样可以增加程序的灵活性。
五、程序参考界面
图1-2 职工信息启动界面
图1-3 录入职工信息
图1-4 输出职工信息表和职工信息简表
话不多说,直接上代码
#include"iostream"
#include"cstring"
using namespace std;
const int size=10;
class worker{
protected:
char name[size];
char num[size];
public:
void setname(char n[]){strcpy(name,n);}
void setnum(char nu[]){strcpy(num,nu);}
char *getname(){return name;}
char *getnum(){return num;}
virtual void display(){
cout<<"\t"<<getnum()<<"\t"<<getname()<<"\t"<<endl;
}
};
class workers:public worker{
private:
char sex[size];
char age[size];
public:
void setsex(char s[]){strcpy(sex,s);}
void setage(char a[]){strcpy(age,a);}
char *getsex(){return sex;}
char *getage(){return age;}
void display(){
cout<<"\t"<<getnum()<<"\t"<<getname()<<"\t"<<sex<<"\t"<<getage()<<endl;
}
};
void print(worker &s){s.display();}
int main(){
worker wk[size];
workers wks[size];
char name[size];
char num[size];
char sex[size];
char age[size];
int i,j,k;
cout<<"输入人数(小于10):"<<endl;
cin>>i;
if(i<1||i>10){
cout<<"输入错误,请重新输入,请输入1-10"<<endl;
}
else{
for(j=0;j<i;j++){
cout<<"请输入员工编号";cin>>num;wks[j].setnum(num);
cout<<"请输入员工姓名";cin>>name;wks[j].setname(name);
cout<<"请输入员工性别";cin>>sex;wks[j].setsex(sex);
cout<<"请输入员工年龄";cin>>age;wks[j].setage(age);
wk[j]=wks[j];
}
cout<<"\t编号"<<"\t姓名"<<"\t性别"<<"\t年龄"<<endl;
for(k=0;k<i;k++){
print(wks[k]);
}
cout<<"*****************************"<<endl;
cout<<"\t编号"<<"\t姓名"<<endl;
for(k=0;k<i;k++){
print(wk[k]);
}
}return 0;
}