C++语言课程设计——职工信息表

一、设计题目

职工信息表

二、设计目的

设计一个职工信息表,并由此产生一个信息简表。这里使用数组,利用赋值兼容规则实现简表,并使用虚函数实现多态性,完成显示不同简表信息的任务。

三、设计要求

使用继承的方法,编写最多能输入10个职工的信息表,再根据这个表产生一个职工信息简表,并利用多态性实现信息的输出。

具体设计要求如下:

  1. 建立职工信息数据,包括职工编号、姓名、性别和年龄。
  2. 根据职工信息表,建立只含有姓名和年龄的职工信息简表。
  3. 使用继承的方法构造2个类,使用相应的对象数组放置10个职工信息。
  4. 编写同名display()成员函数,用来输出数组的内容。
  5. 另外编制一个函数printer(),用来根据实际对象输出他们的内容。

四、设计思想

1、类的结构图

图1-1是使用类的长式形式表示方式画出的类的UML图。

这里把简表的内容作为基类worker,由它派生详表类workers。这样,简表可以利用赋值兼容规则得到。

例如workers的一个对象wks为:

编号   姓名 性别   年龄

101    张三   男     21

则worker的对象wk可以简单地通过下面的方法得到:

wk=wks;

这时wk的信息为:

编号 姓名

  1. 张三

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;
}
  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值