python习题
编写一个简单的工资管理程序
系统可以管理以下四类人:工人(worker)、销售员(salesman)、经理(manager)、销售经理(salemanger)
所有的员工都具有员工号,
工资等属性,有设置姓名,获取姓名,获取员工号,计算工资等方法。
1)工人:工人具有工作小时数和时薪的属性,工资计算法方法为工作小时数*时薪。
2)销售员:具有销售额和提成比例的属性,工资计算方法为销售额*提成比例。
3)经理:具有固定月薪的属性,工资计算方法为固定月薪。
4)销售经理:工资计算方法为销售额*提成比例+固定月薪。
请根据以上要求设计合理的类,完成以下功能:
1)添加所有类型的人员
2)计算月薪
3)显示所有人工资情况
解法一
class Person :
def __init__ ( self, no, name, salary) :
self. no = no
self. name= name
self. salary = salary
def __str__ ( self) :
msg = '工号:{}名字:{}薪水:{}' . format ( self. no, self. name, self. salary)
return msg
def getSalary ( self) :
return self. salary
class Worker ( Person) :
def __init__ ( self, no, name, salary, hours, per_hour) :
super ( ) . __init__( no, name, salary)
self. hours = hours
self. per_hour= per_hour
def getSalary ( self) :
money = self. hours* self. per_hour
self. salary+= money
return self. salary
class Salman ( Person) :
def __init__ ( self, no, name, salary, salemoney, percent) :
super ( ) . __init__( no, name, salary)
self. salemoney = salemoney
self. percent = percent
def getSalary ( self) :
money = self. salemoney* self. percent
self. salary+= money
return self. salary
class Manager ( Person) :
def __init__ ( self, no, name, fixed_monthly_salary) :
super ( ) . __init__( no, name, fixed_monthly_salary)
def calculate_salary ( self) :
return self. fixed_monthly_salary
class SaleManager ( Person) :
def __init__ ( self, no, sales_amount, commission_rate, fixed_monthly_salary) :
super ( ) . __init__( no, sales_amount, commission_rate, fixed_monthly_salary)
self. sales_amount = sales_amount
self. commission_rate = commission_rate
self. fixed_monthly_salary = fixed_monthly_salary
def calculate_salary ( self) :
return self. sales_amount * self. commission_rate + self. fixed_monthly_salary
class Manager ( Person) :
def __init__ ( self, no, name, fixed_monthly_salary) :
super ( ) . __init__( no, name, fixed_monthly_salary)
def calculate_salary ( self) :
return self. fixed_monthly_salary
class Salemanager ( Person) :
def __init__ ( self, no, name, fixed_monthly_salary, salemoney, percent) :
super ( ) . __init__( no, name, fixed_monthly_salary)
self. salemoney = salemoney
self. percent = percent
def getSalary ( self) :
money = self. salemoney * self. percent + self. fixed_monthly_salary
self. salary += money
return self. salary
workers = [
Worker( 1 , '工人 1' , 0 , 160 , 50 ) ,
Worker( 2 , '工人 2' , 0 , 180 , 60 )
]
salesmans = [
Salman( 3 , '销售员 1' , 0 , 100000 , 0.1 ) ,
Salman( 4 , '销售员 2' , 0 , 120000 , 0.12 )
]
managers = [
Manager( 5 , '经理 1' , 10000 ) ,
Manager( 6 , '经理 2' , 12000 )
]
salemanagers = [
Salemanager( 7 , '销售经理 1' , 15000 , 150000 , 0.15 ) ,
Salemanager( 8 , '销售经理 2' , 18000 , 180000 , 0.18 )
]
all_people = workers + salesmans + managers + salemanagers
for person in all_people:
print ( person)
print ( '月薪:' , person. getSalary( ) )
w = Worker( '001' , 'king' , 100 , 160 , 100 )
s = w. getSalary( )
print ( '月薪' )
解法二
class Employee :
def __init__ ( self, employee_number) :
self. employee_number = employee_number
self. name = ""
self. salary = 0
def set_name ( self, name) :
self. name = name
def get_name ( self) :
return self. name
def get_employee_number ( self) :
return self. employee_number
def calculate_salary ( self) :
pass
class Worker ( Employee) :
def __init__ ( self, employee_number, working_hours, hourly_rate) :
super ( ) . __init__( employee_number)
self. working_hours = working_hours
self. hourly_rate = hourly_rate
def calculate_salary ( self) :
return self. working_hours * self. hourly_rate
class Salesman ( Employee) :
def __init__ ( self, employee_number, sales_amount, commission_rate) :
super ( ) . __init__( employee_number)
self. sales_amount = sales_amount
self. commission_rate = commission_rate
def calculate_salary ( self) :
return self. sales_amount * self. commission_rate
class Manager ( Employee) :
def __init__ ( self, employee_number, fixed_monthly_salary) :
super ( ) . __init__( employee_number)
self. fixed_monthly_salary = fixed_monthly_salary
def calculate_salary ( self) :
return self. fixed_monthly_salary
class SaleManager ( Employee) :
def __init__ ( self, employee_number, sales_amount, commission_rate, fixed_monthly_salary) :
super ( ) . __init__( employee_number)
self. sales_amount = sales_amount
self. commission_rate = commission_rate
self. fixed_monthly_salary = fixed_monthly_salary
def calculate_salary ( self) :
return self. sales_amount * self. commission_rate + self. fixed_monthly_salary
class SalaryManagementSystem :
def __init__ ( self) :
self. employees = [ ]
def add_employee ( self, employee_type, employee_number, * args) :
if employee_type == "worker" :
working_hours, hourly_rate = args
self. employees. append( Worker( employee_number, working_hours, hourly_rate) )
elif employee_type == "salesman" :
sales_amount, commission_rate = args
self. employees. append( Salesman( employee_number, sales_amount, commission_rate) )
elif employee_type == "manager" :
fixed_monthly_salary = args[ 0 ]
self. employees. append( Manager( employee_number, fixed_monthly_salary) )
elif employee_type == "salemanger" :
sales_amount, commission_rate, fixed_monthly_salary = args
self. employees. append( SaleManager( employee_number, sales_amount, commission_rate, fixed_monthly_salary) )
def calculate_monthly_salary ( self) :
for employee in self. employees:
salary = employee. calculate_salary( )
print ( f" { employee. get_name( ) } 的月薪为: { salary} " )
salary_system = SalaryManagementSystem( )
salary_system. add_employee( "worker" , 1 , 160 , 50 )
salary_system. add_employee( "salesman" , 2 , 10000 , 0.1 )
salary_system. add_employee( "manager" , 3 , 10000 )
salary_system. add_employee( "salemanger" , 4 , 20000 , 0.2 , 8000 )
salary_system. calculate_monthly_salary( )