一个公司有不同工种的员工,每个工种员工的工资计算方式都不同,请用抽象类、继承等知识编写一个员工工资计算系统。该公司有以下工种:车间工人、行政人员、销售人员。各个工种工资计算方式: 车间工人工资=(基本工资*出勤率(出勤天数/因该出勤天数)+加班费(40元*1小时,周未)+ 计件工资(个数*0.5元)) * 社保基数(0.8) 行政人员=(基本工资*出勤率(出勤天数/因出勤天数)) * 社保基数(0.8)
时间: 2023-11-22 08:51:41 浏览: 95
销售人员=(基本工资*出勤率(出勤天数/因该出勤天数)+销售提成(销售额*提成比例)) * 社保基数(0.8)
根据上述需求,我们可以定义一个抽象类Employee,其中包含基本工资、出勤天数等属性和计算工资的抽象方法。然后再定义三个类,分别继承Employee并实现各自的计算工资方法。
具体代码实现如下:
```python
# 定义抽象类Employee
from abc import ABC, abstractmethod
class Employee(ABC):
def __init__(self, name, base_salary, work_days):
self.name = name
self.base_salary = base_salary
self.work_days = work_days
@abstractmethod
def calculate_salary(self):
pass
# 定义车间工人类
class Worker(Employee):
def __init__(self, name, base_salary, work_days, attendance_days, piece_count, overtime_hours):
super().__init__(name, base_salary, work_days)
self.attendance_days = attendance_days
self.piece_count = piece_count
self.overtime_hours = overtime_hours
def calculate_salary(self):
attendance_rate = self.attendance_days / self.work_days
overtime_pay = 40 * self.overtime_hours
piece_pay = self.piece_count * 0.5
social_security_base = 0.8
return (self.base_salary * attendance_rate + overtime_pay + piece_pay) * social_security_base
# 定义行政人员类
class Administrator(Employee):
def __init__(self, name, base_salary, work_days, attendance_days):
super().__init__(name, base_salary, work_days)
self.attendance_days = attendance_days
def calculate_salary(self):
attendance_rate = self.attendance_days / self.work_days
social_security_base = 0.8
return self.base_salary * attendance_rate * social_security_base
# 定义销售人员类
class Salesman(Employee):
def __init__(self, name, base_salary, work_days, attendance_days, sales_amount, commission_rate):
super().__init__(name, base_salary, work_days)
self.attendance_days = attendance_days
self.sales_amount = sales_amount
self.commission_rate = commission_rate
def calculate_salary(self):
attendance_rate = self.attendance_days / self.work_days
sales_commission = self.sales_amount * self.commission_rate
social_security_base = 0.8
return (self.base_salary * attendance_rate + sales_commission) * social_security_base
```
这样我们就可以使用上述类来进行工资的计算。例如:
```python
# 创建对象并计算工资
worker = Worker("张三", 3000, 22, 20, 50, 2)
worker_salary = worker.calculate_salary()
print(f"{worker.name} 的工资为 {worker_salary}")
administrator = Administrator("李四", 5000, 22, 21)
administrator_salary = administrator.calculate_salary()
print(f"{administrator.name} 的工资为 {administrator_salary}")
salesman = Salesman("王五", 4000, 22, 20, 100000, 0.05)
salesman_salary = salesman.calculate_salary()
print(f"{salesman.name} 的工资为 {salesman_salary}")
```
输出:
```
张三 的工资为 2720.0
李四 的工资为 3520.0
王五 的工资为 10800.0
```
阅读全文
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)