【C++】C++公司人事管理系统(源码)【独一无二】

请添加图片描述


👉博__主👈:米码收割机
👉技__能👈:C++/Python语言
👉公众号👈:测试开发自动化【获取源码+商业合作】
👉荣__誉👈:阿里云博客专家博主、51CTO技术博主
👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。


【C++】C++公司人事管理系统(源码)【独一无二】



一、设计要求

该代码设计了一个员工管理系统,包含以下主要功能点:

  1. 员工基本信息管理

    • 定义了一个 Date 类,用于表示员工的出生日期,包括年、月、日三个属性。
    • Employee 抽象基类包含员工的基本信息:编号、姓名、性别、出生日期、职位和薪水。
  2. 经理类

    • 定义了一个 Manager 类,继承自 Employee 基类,表示经理角色。

    • 实现了 pay() 方法,返回经理的薪水。

    • 重写了 display() 方法,显示经理的详细信息。

  3. 技术员类

    • 定义了一个 Technician 类,继承自 Employee 基类,表示技术员角色。
    • 技术员的薪水按工作小时数计算,每小时25元。
    • 实现了 pay() 方法,根据工作小时数计算技术员的薪水。
    • 重写了 display() 方法,显示技术员的详细信息,包括工作小时数。
  4. 销售员类

    • 定义了一个 Salesman 类,继承自 Employee 基类,表示销售员角色。
    • 销售员的薪水按销售额的4%计算。
    • 实现了 pay() 方法,根据销售额计算销售员的薪水。
    • 重写了 display() 方法,显示销售员的详细信息,包括销售额。
  5. 销售经理类

    • 定义了一个 Salesmanager 类,继承自 ManagerSalesman 类,表示销售经理角色。
    • 销售经理的基本薪水为5000元,外加销售额的0.5%。
    • 实现了 pay() 方法,根据基本薪水和销售额计算销售经理的薪水。
    • 重写了 display() 方法,显示销售经理的详细信息,包括销售额。

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 人事 ” 获取。👈👈👈

  1. 多态性和虚函数

    • Employee 基类中的 pay() 方法是一个纯虚函数,使得 Employee 成为抽象类。
    • 各派生类(ManagerTechnicianSalesmanSalesmanager)都实现了 pay() 方法,用于计算各自的薪水。
    • 使用虚函数机制,通过基类指针调用派生类的 display()pay() 方法,实现多态性。
  2. 主函数

    • 创建 Date 对象,用于表示员工的出生日期。
    • 创建不同类型的员工对象,包括 Manager 对象 mTechnician 对象 tSalesman 对象 sSalesmanager 对象 sm
    • 使用指向 Employee 基类的指针数组,存储各员工对象的地址。
    • 遍历指针数组,调用每个员工对象的 display() 方法显示其详细信息,并调用 pay() 方法计算和显示其薪水。

通过这些功能点,代码实现了一个灵活且高效的员工管理系统,能够根据不同类型的员工显示特定的信息和计算薪水,同时具备良好的扩展性和可维护性。

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 人事 ” 获取。👈👈👈


二、设计思路

该代码设计了一个员工管理系统,包括不同类型的员工:经理、技术员、销售员和销售经理。每种员工类型都有自己的属性和计算工资的方法。使用了继承和多态的概念,使得代码结构清晰、扩展性强。

类的设计
  1. Date类:用于表示员工的出生日期,包含年、月、日三个属性。

    class Date {
    public:
        int year;
        int month;
        int day;
        Date(int y = 0, int m = 0, int d = 0) : year(y), month(m), day(d) {}
    };
    
  2. Employee类:这是一个抽象基类,包含员工的基本信息和一个纯虚函数pay(),表示计算工资的方法。

    class Employee {
    protected:
        int id;
        std::string name;
        std::string gender;
        Date birthdate;
        std::string position;
        double salary;
    public:
        Employee(int i, std::string n, std::string g, Date b, std::string p, double s)
            : id(i), name(n), gender(g), birthdate(b), position(p), salary(s) {}
    
    	// 略        
    	
    	//👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 人事 ” 获取。👈👈👈
    
    	// 略
    
        virtual double pay() const = 0; // 纯虚函数
    };
    
  3. Manager类:继承自Employee类,表示经理,固定工资为8000。

    class Manager : virtual public Employee {
    public:
        Manager(int i, std::string n, std::string g, Date b, std::string p)
            : Employee(i, n, g, b, p, 8000) {}
    
    	// 略        
    	
    	//👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 人事 ” 获取。👈👈👈
    
    	// 略
    };
    

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 汽车租赁 ” 获取。👈👈👈

  1. Technician类:继承自Employee类,表示技术员,工资按工作小时数计算(每小时25元)。

    class Technician : public Employee {
    protected:
        int workHours;
    public:
        Technician(int i, std::string n, std::string g, Date b, std::string p, int h)
            : Employee(i, n, g, b, p, h * 25), workHours(h) {}
    
    	// 略        
    	
    	//👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 人事 ” 获取。👈👈👈
    
    	// 略
    
        void display() const override {
            Employee::display();
            std::cout << "工作时间: " << workHours << " 小时" << std::endl;
        }
    };
    
  2. Salesman类:继承自Employee类,表示销售员,工资按销售额的4%计算。

    class Salesman : virtual public Employee {
    protected:
        double salesAmount;
    public:
        Salesman(int i, std::string n, std::string g, Date b, std::string p, double s)
            : Employee(i, n, g, b, p, s * 0.04), salesAmount(s) {}
    
    	// 略        
    	
    	//👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 人事 ” 获取。👈👈👈
    
    	// 略		// 略        
    	
    	//👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 人事 ” 获取。👈👈👈
    
    	// 略
    };
    
  3. Salesmanager类:继承自Manager和Salesman类,表示销售经理,基本工资为5000,外加销售额的0.5%。

    class Salesmanager : public Manager, public Salesman {
    public:
        Salesmanager(int i, std::string n, std::string g, Date b, std::string p, double s)
            : Employee(i, n, g, b, p, 5000 + s * 0.005), Manager(i, n, g, b, p), Salesman(i, n, g, b, p, s) {}
    
        		// 略        
    	
    	//👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 人事 ” 获取。👈👈👈
    
    	// 略
    };
    

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 人事 ” 获取。👈👈👈

main函数

在主函数中,创建不同类型的员工对象,并通过指向Employee基类的指针数组来遍历和展示每个员工的信息及其工资。

int main() {
    Date birthdate(1985, 5, 15);
    		// 略        
		
		//👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 人事 ” 获取。👈👈👈

		// 略
		// 略
				// 略
						// 略
								// 略
								
    Employee* employees[] = { &m, &t, &s, &sm };

    for (Employee* e : employees) {
        e->display();
        std::cout << "月薪: " << e->pay() << " 元\n" << std::endl;
    }

    return 0;
}

这个设计思路通过面向对象编程的方式,使用继承和多态来管理不同类型的员工。各个类的职责分明,使得代码具有良好的可读性和可维护性。通过基类指针数组来调用派生类的displaypay方法,实现了多态性。

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 人事 ” 获取。👈👈👈


三、运行结果

在这里插入图片描述

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 人事 ” 获取。👈👈👈


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

米码收割机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值