C++习题--学校主要有四类人员:从事管理的行政人员、只从事教学的纯教师、从事行政工作的教师(既有行政职务,又从事教学)和工人

学校主要有四类人员:从事管理的行政人员、只从事教学的纯教师、从事行政工作的教师(既有行政职务,又从事教学)和工人,现在要存储这些人员的姓名、编号、级别、当月薪水,计算月薪并显示全部信息。 人员编号基数为10000,每输入一个职工信息编号加1。 月薪的计算方法如下: 行政人员:固定月薪900*级别+奖金(850) 只从事教学的纯教师:固定月薪700*级别+课时*课时费(40/每课时) 从事行政工作的教师:固定月薪700*级别+课时*课时费(40/每课时)+奖金(650) 工人:固定月薪400*级别+特殊补(天数*30/天)。

设计要求:

       根据需求陈述,设计一个基类Employee,派生出类Teacher(纯教师类)、Manager(管理类)和Worker(工人类),再由纯教师类和管理类派生出Teach_Manager(从事行政工作的教师)类。

基类定义如下:

//employee.h

classEmployee

{

       protected:

                            char*name;  //姓名

int EmpNO; //个人编号

int grade;   //级别

float monthPay;  //固定月薪

float accumpay;  //月薪总和

static int employeeNO; //现在职员编号

       public:

              Employee();//构造函数

              ~employee();//析构函数

              void pay(); //计算月薪函数

              void Promote(int);//设定职级函数

              void DispalyStatus();//显示信息函数

};

注意:

       1、虚基类的应用。

       2、派生类重载函数的定义。

//Employee.cpp
#include "Employee.h"
#include<iostream>
using namespace std;



void Employee::Input()
{
	// TODO: 在此处添加实现代码.
	cout << "输入姓名:" << endl;
	cin.getline(name, 50);
	cout << "输入个人编号" << endl;
	cin >> EmpNO;
	cout << "输入级别" << endl;
	cin >> grade;
}

void Employee::pay()
{
	// TODO: 在此处添加实现代码.
	accumpay=monthPay * grade;
}


void Employee::Promote(int gra)
{
	grade = gra;// TODO: 在此处添加实现代码.
}


void Employee::DisplayStatus()
{
	// TODO: 在此处添加实现代码.
	cout << "姓名:" << name << endl;
	cout << "编号:" << EmpNO << endl;
	cout << "级别:" << grade << endl;
	pay();
	cout << "当月薪水:" << accumpay << endl;
}

//Employee.h
#pragma once
class Employee
{
protected:
	char name[50] = {};
	int EmpNO;
	int grade;
	float monthPay;//固定月薪
	float accumpay;//月薪总和
	static int employeeNO;//现在职员编号
public:
	Employee() {};
	~Employee() {};
	void Input();
	void pay();//计算月薪函数
	void Promote(int gra);//设定职级函数
	void DisplayStatus();//显示信息函数

};

//Worker.cpp
#include "Worker.h"
#include<iostream>
using namespace std;

void Worker::pay() {
	accumpay = monthPay * grade + 30 * Day;
}
float Worker::Get_pay() {
	return accumpay;
}

void Worker::Input()
{
	// TODO: 在此处添加实现代码.
	cout << "输入姓名:" << endl;
	cin.getline(name, 50);
	cout << "输入个人编号" << endl;
	cin >>EmpNO;
	cout << "输入级别" << endl;
	cin >> grade;
	cout << "输入天数" << endl;
	cin >> Day;
}


void Worker::DisplayStatus()
{
	// TODO: 在此处添加实现代码.
	cout << "姓名:" << name << endl;
	cout << "编号:" << EmpNO << endl;
	cout << "级别:" << grade << endl;
    pay();//这里千万不要忘记,否则accumpay会随机赋值
	cout << "当月薪水:" << accumpay << endl;
}

//Worker.h
#pragma once
#include "Employee.h"
class Worker :
	public Employee
{
	int Day;
	char name[50] = {};
	int EmpNO;
	int grade;
	float monthPay = 400;//固定月薪
	float accumpay;//月薪总和
	//static int employeeNO;//现在职员编号
public:
	//void Promote(int gra);
	//void Get_Day(int day);
	void Input();
	void pay();
	float Get_pay();
	void DisplayStatus();
};

//Manager.cpp
#include "Manager.h"
#include<iostream>
using namespace std;


void Manager::Input()
{
	// TODO: 在此处添加实现代码.
	cout << "输入姓名:" << endl;
	cin.getline(name, 50);
	cout << "输入个人编号" << endl;
	cin >> EmpNO;
	cout << "输入级别" << endl;
	cin >> grade;
}
void Manager::pay()
{
	accumpay=grade*monthPay+ 850;//固定月薪900*级别 + 奖金(850)
	 
}
float Manager::Get_pay() {
	return accumpay;
}


void Manager::DisplayStatus()
{
	// TODO: 在此处添加实现代码.
	cout << "姓名:" << name << endl;
	cout << "编号:" << EmpNO << endl;
	cout << "级别:" << grade << endl;
	pay();
	cout << "当月薪水:" << Get_pay() << endl;
}
//Manager.h
#pragma once
#include "Employee.h"
class Manager :
	virtual public Employee
{
	char name[50] = {};
	int EmpNO;
	int grade;
	float monthPay=900;//固定月薪
	float accumpay;//月薪总和
//	static int employeeNO;//现在职员编号
public:
	void Input();
	void pay();
	float Get_pay();
	void DisplayStatus();
};

//Teach_Manager.cpp
#include "Teach_Manager.h"
#include<iostream>
using namespace std;
void Teach_Manager::Promote(int gra) {
	grade = gra;
}
void Teach_Manager::Get_Class(int classes) {
	Classes = classes;
}
void Teach_Manager::pay() {
	accumpay = monthPay * grade + 40 * Classes+650;
}
float Teach_Manager::Get_pay() {
	return accumpay;
}

void Teach_Manager::Input()
{
	// TODO: 在此处添加实现代码.
	cout << "输入姓名:" << endl;
	cin.getline(name, 50);
	cout << "输入个人编号" << endl;
	cin >> EmpNO;
	cout << "输入级别" << endl;
	cin >> grade;
	cout << "输入课节数量:" << endl;
	cin >> Classes;
}
void Teach_Manager::DisplayStatus()
{
		// TODO: 在此处添加实现代码.
		cout << "姓名:" << name << endl;
		cout << "编号:" << EmpNO << endl;
		cout << "级别:" << grade << endl;
		pay();
		cout << "当月薪水:" << accumpay << endl;
	}




//Teach_Manager.h
#pragma once
#include"Manager.h"
#include"Teacher.h"
class Teach_Manager:
	public Teacher,public Manager
{
	int Classes;
	char name[50] = {};
	int EmpNO;
	int grade;
	float monthPay= 700;//固定月薪
	float accumpay;//月薪总和
	//static int employeeNO;//现在职员编号
public:
	void Promote(int gra);
	void Get_Class(int classes);	
	void Input();
	void pay();
	float Get_pay();
	void DisplayStatus();
};

//Teacher.cpp
#include "Teacher.h"
#include<iostream>
using namespace std;
void Teacher::pay() {
	accumpay = monthPay * grade + 40 * classes;
}
void Teacher::Promote(int gra) {
	grade = gra;
}
void Teacher::GetClass(int cl) {
	classes = cl;
}
float Teacher::Get_pay() {
	return accumpay;
}
void Teacher::Input()
{
	cout << "输入姓名:" << endl;
	cin.getline(name, 50);
	cout << "输入个人编号" << endl;
	cin >> EmpNO;
	cout << "输入级别" << endl;
	cin >> grade;
	cout << "输入课节数量:" << endl;
	cin >> classes;
	// TODO: 在此处添加实现代码.
}


void Teacher::DisplayStatus()
{
	// TODO: 在此处添加实现代码.
	cout << "姓名:" << name << endl;
	cout << "编号:" << EmpNO << endl;
	cout << "级别:" << grade << endl;
	pay();
	cout << "当月薪水:" << accumpay << endl;
}

//Teacher.h
#pragma once
#include "Employee.h"
class Teacher :
	virtual public Employee
{
	int classes;
	char name[50] = {};
	int EmpNO;
	int grade;
	float monthPay=700;//固定月薪
	float accumpay;//月薪总和
	//static int employeeNO;//现在职员编号
public:
	void Input();
	void pay();
	void Promote(int gra);
	void GetClass(int cl);
	float Get_pay();
	void DisplayStatus();
};

//main.cpp
#include<iostream>
using namespace std;
#include"Employee.h"
#include"Manager.h"
#include"Teacher.h"
#include"Worker.h"
#include"Teach_Manager.h"
static int employeeNO = 0;
void main() {

	/*char name[50] = {};
	int EmpNO; //个人编号
	int grade;   //级别
	float monthPay;  //固定月薪
	float accumpay;  //月薪总和*/
	do {
		cout << "请输入人员类别(worker/teacher/teach_manager/manager)" << endl;
		char employee[50] = {};
		cin.getline(employee, 50);
		int i = strcmp(employee, "worker");
		int j = strcmp(employee, "teacher");
		int k = strcmp(employee, "teach_manager");
		int z = strcmp(employee, "manager");
		if (i == 0) {
			Worker w1;
			w1.Input();
			w1.DisplayStatus();
		}
		if (j == 0) {
			Teacher t1;
			t1.Input();
			t1.DisplayStatus();
		}
		if (k == 0) {
			Teach_Manager tm1;
			tm1.Input();
			tm1.DisplayStatus();
		}
		if (z == 0) {
			Manager m1;
			m1.Input();
			m1.DisplayStatus();
		}
		employeeNO++;
	} while (employeeNO <= 10000);
}

虽然文件很多,但是每个类的成员大体上是相似的

需要注意的是函数之间如果有成员互相引用,那么需要调用函数,形成嵌套

Input()类函数要会用

其实本题也可以用初始化列表来做,就不需要input了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值