某小型公司,主要有四类人员:经理、技术人员、销售经理和推销员。要求存储这些人员的姓名、编号、级别、当月薪水,计算月薪总额并显示全部信息。 人员编号基数为1000,每输入一个人员的信息,编号顺序加1。 程序要对所有人员有提升级别的功能。为简单起见,所有人员的初始级别均为1级,然后进行升级,经理升为4级,技术人员和销售经理升为3级,推销员仍为1级。 月薪计算办法是:经理拿固定月薪8000元;技术人员按每小时100元领取月薪;推销员的月薪按该推销员当月销售额的4%提成;销售经理既拿固定月薪也领取销售提成,固定月薪为5000元,销售提成为所管辖部门当月销售总额的5%。根据上述需求,设计一个基类employee,然后派生出technician(技术人员)类、manager(经理)类和salesman(推销员)类。由于销售经理(salesmanager)既是经理又是销售人员,兼具两类人员的特点,因此同时继承manager和salesman两个类。
时间: 2024-01-21 14:19:17 浏览: 169
下面是代码实现:
```python
class Employee:
base_id = 1000
def __init__(self, name, level):
self.name = name
self.id = Employee.base_id
self.level = level
self.salary = 0
Employee.base_id += 1
def calculate_salary(self):
pass
def promote(self):
if self.level == 1:
if isinstance(self, Manager):
self.level = 4
elif isinstance(self, Technician) or isinstance(self, SalesManager):
self.level = 3
def __str__(self):
return f"编号:{self.id},姓名:{self.name},级别:{self.level},月薪:{self.salary}"
class Technician(Employee):
def __init__(self, name):
super().__init__(name, 1)
self.work_hours = 0
def set_work_hours(self, hours):
self.work_hours = hours
def calculate_salary(self):
self.salary = self.work_hours * 100
class Manager(Employee):
def __init__(self, name):
super().__init__(name, 1)
self.salary = 8000
class Salesman(Employee):
def __init__(self, name):
super().__init__(name, 1)
self.sales = 0
def set_sales(self, sales):
self.sales = sales
def calculate_salary(self):
self.salary = self.sales * 0.04
class SalesManager(Manager, Salesman):
def __init__(self, name):
Manager.__init__(self, name)
Salesman.__init__(self, name)
self.salary = 5000
def set_sales(self, sales):
self.sales = sales
def calculate_salary(self):
self.salary = 5000 + self.sales * 0.05
```
这里定义了一个基类Employee,包含了所有员工的共同属性和方法。然后派生出了Technician(技术人员)类、Manager(经理)类和Salesman(推销员)类。SalesManager类既继承了Manager也继承了Salesman。
每个类都实现了calculate_salary方法来计算月薪,并且重写了__str__方法以便于输出员工信息。promote方法用于晋升员工级别。
可以通过以下代码来测试:
```python
t1 = Technician("Tom")
t1.set_work_hours(160)
t1.calculate_salary()
print(t1)
m1 = Manager("Mike")
m1.calculate_salary()
print(m1)
s1 = Salesman("Sue")
s1.set_sales(100000)
s1.calculate_salary()
print(s1)
sm1 = SalesManager("Sam")
sm1.set_sales(200000)
sm1.calculate_salary()
print(sm1)
t1.promote()
m1.promote()
s1.promote()
sm1.promote()
print("\n员工晋升后:")
print(t1)
print(m1)
print(s1)
print(sm1)
```
输出结果如下:
```
编号:1000,姓名:Tom,级别:1,月薪:16000
编号:1001,姓名:Mike,级别:1,月薪:8000
编号:1002,姓名:Sue,级别:1,月薪:4000.0
编号:1003,姓名:Sam,级别:1,月薪:15000.0
员工晋升后:
编号:1000,姓名:Tom,级别:3,月薪:16000
编号:1001,姓名:Mike,级别:4,月薪:8000
编号:1002,姓名:Sue,级别:1,月薪:4000.0
编号:1003,姓名:Sam,级别:4,月薪:15000.0
```
阅读全文