优秀的编程知识分享平台

网站首页 > 技术文章 正文

c++:实现公司员工计算薪资功能(计算员工工资c语言)

nanyue 2024-08-16 00:42:07 技术文章 7 ℃

1、首先明确Person.h里面的内容

(1)公司职员包括:经理Manager、技术人员Technician、销售SalesMan、销售经理SaleManager。

(2)当每增加一个员工,对应的员工工号就加一。

(3)薪资:经理每月固定工资8000元;技术人员每天300元,根据工作天数计算工资;销售人员每月工资是个人销售总额的4%;销售经理每月工资是部门销售总额的2%,再Sale加上固定的工资4000元。

(4)销售经理SaleManager既有固定薪水又有提成,所以直接让它继承Manager和SaleMan;为了减省代码和空间,将manager和SaleMan都是虚继承。

(5)c++中没有java中接口这个概念,可以用纯虚函数实现接口 。

(6)为了计算销售人员的数目,用了两个静态成员变量,一个用来计算总人数,来获取工号,一个用来计算销售总额。


  1. #ifndef _PERSON_H
  2. #define _PERSON_H
  3. #include<iostream>
  4. #include<string.h>
  5. using namespace std;
  6. class Person
  7. {
  8. protected:
  9. static int count;
  10. string m_name;
  11. double m_salary; //访问权限定义为保护类型是为了能被继承下去
  12. int m_id; //工号
  13. public:
  14. virtual void print() = 0;
  15. virtual double Get() = 0; //纯虚函数
  16. };
  17. class Manager : virtual public Person //经理
  18. {
  19. protected:
  20. int m_base;
  21. public:
  22. Manager(string n,int b);
  23. double Get();
  24. void show();
  25. };
  26. class Technician : public Person //技术人员
  27. {
  28. private:
  29. int m_day;
  30. public:
  31. Technician(string n,int d);
  32. double Get();
  33. void show();
  34. };
  35. class SaleMan : virtual public Person //销售人员
  36. {
  37. protected:
  38. static int sum;
  39. int m_s1;
  40. public:
  41. SaleMan(string n,int s1);
  42. double Get();
  43. void show();
  44. };
  45. class SaleManager : public Saleman,public Manager //销售经理
  46. {
  47. public:
  48. SaleManager(string n);
  49. double Get();
  50. void show();
  51. };
  52. #endif

2、根据类中内容编写各个类的成员函数


  1. #include<iostream>
  2. #include<string.h>
  3. #include"Person.h"
  4. using namespace std;
  5. int Person::count = 0; //静态成员变量 计算工号
  6. int SaleMan::sum = 0; //静态成员变量 计算部门销售总额
  7. Person::Person()
  8. {
  9. count++;
  10. m_id = count;
  11. }
  12. Manager::Manager(string n,int b=8000)
  13. {
  14. m_name = n;
  15. m_base = b;
  16. }
  17. double Manager::Get()
  18. {
  19. m_salary = m_base; //基本的固定工资
  20. return m_salary;
  21. }
  22. void Manager::show()
  23. {
  24. cout<< "名字:" << m_name << "工号:" << m_id << "工资:" << Get() <<endl;
  25. }
  26. Technician::Technician(string n,int d)
  27. {
  28. m_name = n;
  29. m_day = d;
  30. }
  31. double Technician::Get()
  32. {
  33. m_salary = m_day*300
  34. return m_salary;
  35. }
  36. void Technician::show()
  37. {
  38. cout<< "名字:" << m_name << "工号:" << m_id << "工资:" << Get() <<endl;
  39. }
  40. SaleMan::SaleMan(string n,int s1=0)
  41. {
  42. m_name = n;
  43. m_s1 = s1;
  44. sum += m_s1; //部门销售总额就是个人销售总额的和
  45. }
  46. double SaleMan::Get()
  47. {
  48. m_salary = 0.04*m_s1;
  49. return m_salary;
  50. }
  51. void Saleman::show()
  52. {
  53. cout<< "名字:" << m_name << "工号:" << m_id << "工资:" << Get() <<endl;
  54. }
  55. SaleManager::SaleManager(string n) : SaleMan(n),Manager(n,4000)
  56. {
  57. //已经继承,不需再写
  58. }
  59. double SaleManager::Get()
  60. {
  61. m_salary = 0.02*sum + m_base;
  62. return m_salary;
  63. }
  64. void SaleManager::show()
  65. {
  66. cout<< "名字:" << m_name << "工号:" << m_id << "工资:" << Get() <<endl;
  67. }

3、最后编写main函数,实现功能


  1. #include <iostream>
  2. #include "Person.h"
  3. using namespace std;
  4. int main()
  5. {
  6. srand(time(NULL));
  7. char name[20] = {0};
  8. Person *p1[5] = {0};
  9. Person *p2[10] = {0};
  10. Person *p3 = NULL;
  11. Person *p4 = new Manager("aa",8000);
  12. for(int i=0;i<5;i++) //技术人员
  13. {
  14. sprintf(name,"Technician%d",i);
  15. p1[i] = new Technician(name,rand() % 22 + 1);
  16. p1[i]->show();
  17. }
  18. for(int i=0;i<10;i++) //销售人员
  19. {
  20. sprintf(name,"S%d",i);
  21. p2[i] = new SaleMan(name,rand() % 100000);
  22. p2[i]->show();
  23. }
  24. p3 = new SaleManager("bb");
  25. p3->show();
  26. return 0;
  27. }

最近发表
标签列表