Python面向对象实战之工资结算系统
一、Python面向对象实战之工资结算系统
要求:某公司有三种类型的员工,分别是部门经理、程序员和销售员。需要设计一个工资结算系统,根据提供的员工信息来计算员工的月薪。其中,部门经理的月薪是固定 15000 元;程序员按工作时间(以小时为单位)支付月薪,每小时 200 元;销售员的月薪由 1800 元底薪加上销售额 5% 的提成两部分构成。
from abc import ABCMeta, abstractmethod
class Employee(metaclass=ABCMeta):
"""员工"""
def __init__(self, name):
self.name = name
# 声明为抽象方法(为了让子类去重写这个方法)
@abstractmethod
def get_salary(self):
"""结算月薪"""
pass
class Manager(Employee):
"""部门经理"""
def get_salary(self):
return 15000.0
class Programmer(Employee):
"""程序员"""
def __init__(self, name, working_hour=0):
super().__init__(name)
self.working_hour = working_hour
def get_salary(self):
return 200 * self.working_hour
class Salesman(Employee):
"""销售员"""
def __init__(self, name, sales=0):
super().__init__(name)
self.sales = sales
def get_salary(self):
return 1800 + self.sales * 0.05
emps = [Manager('哥哥'), Programmer('开朗天'), Manager('码头'), Programmer('bin'), Salesman('黄区')]
for emp in emps:
# 判断员工对象的类型
if isinstance(emp, Programmer):
emp.working_hour = int(input(f'请输入{emp.name}本月工作时长:'))
elif isinstance(emp, Salesman):
emp.sales = float(input('请输入{emp.name}本月销售额:'))
print(f'{emp.name}本月工资为:¥{emp.get_salary():.2f}元')

浙公网安备 33010602011771号