3. 一个公司有不同工种的员工,每个工种员工的工资计算方式都不同,请用抽象类、继承等知识编写一个员工工资计算系统。该公司有以下工种:车间工人、行政人员、销售人员。各个工种工资计算方式: 车间工人工资=(基本工资*出勤率(出勤天数/因该出勤天数)+加班费(40元*1小时,周未)+ 计件工资(个数*0.5元)) * 社保基数(0.8) 行政人员=(基本工资*出勤率(出勤天数/因出勤天数)) * 社保基数(0.8)
时间: 2023-12-03 16:43:34 浏览: 30
销售人员=(基本工资+销售提成(销售额*0.1)) * 社保基数(0.8)
其中,出勤天数、因该出勤天数、个数、销售额均为输入参数,社保基数为固定值0.8。
我们可以先创建一个抽象类Employee,用于表示员工,其中包含属性基本工资、出勤天数等,并定义一个抽象方法calculate_salary,用于计算员工工资。然后通过继承Employee类,创建具体的工种类,分别实现calculate_salary方法。
代码如下:
```python
from abc import ABC, abstractmethod
class Employee(ABC):
def __init__(self, base_salary, attendance_days):
self.base_salary = base_salary
self.attendance_days = attendance_days
@abstractmethod
def calculate_salary(self):
pass
class WorkshopWorker(Employee):
def __init__(self, base_salary, attendance_days, piece_count, overtime_hours):
super().__init__(base_salary, attendance_days)
self.piece_count = piece_count
self.overtime_hours = overtime_hours
def calculate_salary(self):
attendance_rate = self.attendance_days / 30
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 AdministrativeEmployee(Employee):
def __init__(self, base_salary, attendance_days):
super().__init__(base_salary, attendance_days)
def calculate_salary(self):
attendance_rate = self.attendance_days / 30
social_security_base = 0.8
return (self.base_salary * attendance_rate) * social_security_base
class Salesperson(Employee):
def __init__(self, base_salary, attendance_days, sales_volume):
super().__init__(base_salary, attendance_days)
self.sales_volume = sales_volume
def calculate_salary(self):
sales_commission = self.sales_volume * 0.1
social_security_base = 0.8
return (self.base_salary + sales_commission) * social_security_base
```
这样,我们就可以通过实例化具体的工种类,调用calculate_salary方法,计算员工的工资了。例如:
```python
worker = WorkshopWorker(5000, 28, 200, 5)
print(worker.calculate_salary()) # 输出 3456.0
admin = AdministrativeEmployee(8000, 25)
print(admin.calculate_salary()) # 输出 6400.0
sales = Salesperson(6000, 26, 50000)
print(sales.calculate_salary()) # 输出 48000.0
```