细节是这样的,我需要上这门课。它只说要上一门课,工资单。 我应该只做规定的事情。
工资类 工资单类包含以下属性: 包含许多员工的员工数据,每个员工由以下内容组成: • 员工姓名:字符串 • 工作时间:浮动 • 工资标准:浮动 • 工资总额:浮动 Payroll 类具有以下方法: 读取数据() 读取员工数据文件(一名员工/每行),每行包含以下内容 字段之间有某种类型的分隔符。文件中的数据存储在工资单中 属性。 • 姓名, • 小时, • 每位员工的工资标准 该文件可能第一次不存在,也可能存在并包含数据。阅读完后关闭文件 信息放入列表中。处理这两种情况。 提示:您可以使用分割字符串功能将一行分成姓名、工作时间和工资率。 写数据() 将工资单属性中的员工数据写入一个文件,在单个文件中列出每个员工 每个字段之间带有分隔符的行。 输入数据() inputData 方法使用类属性来存储数据。它有一个循环,循环内部是 语句从用户获取以下数据: • 员工姓名 - 字符串 • 工作时间——浮动 • 工资率-浮动 循环重复读取多个员工信息,直到用户表示他们不再希望 输入数据。 需要进行错误检查来检查数据以确保它不会损坏列表。 计算支付() computePay() 方法计算要支付给每个员工的总金额并保存 类属性中的 amount: a) 前40小时,费率为给定费率; b) 超过40小时,费率为给定费率的1.5倍 显示支付() 该方法循环遍历类属性以显示以下格式的表: DOODAD 制造公司 6 月薪资 员工姓名 工作时间 工资率 总工资
这是我所拥有的,我知道这是错误的,但我只是迷失了。 这是班级的最后一个项目,我很困惑。
#payroll class 班级工资单:
def __init__(self):
self.name = name
self.hours = hours
self.pay = pay
self.total = total
#设置属性 def set_name(自身, 名称): self.name = name
def set_hours(self, hours):
self.hours = hours
def set_pay(self, pay):
self.pay = pay
def set_total(self, hours, pay):
self.total = hours * pay
#返回属性 def set_name(自身, 名称): 返回自己的名字
def set_hours(self):
return self.hours
def set_pay(self):
return self.pay
def set_total(self):
return self.total
你几乎要开始了!你的
Payroll
类定义很好地概述了你需要存储的单个员工数据。然而,这个项目的主要挑战在于处理
多个
员工以及他们的数据。这里有一个关于如何改进你的
Payroll
类来实现这个目标的细分:
class Payroll:
def __init__(self):
self.employees = [] # 存储所有员工数据的列表
def read_data(self, filename="employee_data.txt"):
"""从文件读取员工数据。"""
try:
with open(filename, "r") as file:
for line in file:
name, hours_str, rate_str = line.strip().split(",") # 假设用逗号分隔
hours = float(hours_str)
rate = float(rate_str)
self.employees.append({
"name": name,
"hours": hours,
"rate": rate,
"total": 0.0 # 计算前初始化为 0
})
except FileNotFoundError:
print(f"文件 '{filename}' 未找到。从一个空列表开始。")
def write_data(self, filename="payroll.txt"):
"""将员工工资单数据写入文件。"""
with open(filename, "w") as file:
for employee in self.employees:
file.write(f"{employee['name']},{employee['hours']},{employee['rate']},{employee['total']}\n")
def input_data(self):
"""从用户输入获取员工数据。"""
while True:
name = input("输入员工姓名(或按回车键停止):")
if not name:
break
while True:
try:
hours = float(input("输入工作时间:"))
if hours >= 0:
break
else:
print("小时数不能为负数。")
except ValueError:
print("输入无效。请输入一个数字。")
while True:
try:
rate = float(input("输入工资标准:"))
if rate >= 0:
break
else:
print("工资标准不能为负数。")
except ValueError:
print("输入无效。请输入一个数字。")
self.employees.append({
"name": name,
"hours": hours,
"rate": rate,
"total": 0.0 # 我们将在后面计算这个值
})
def compute_pay(self):
"""计算所有员工的工资单。"""
for employee in self.employees:
hours = employee['hours']
rate = employee['rate']
if hours > 40:
employee['total'] = (40 * rate) + ((hours - 40) * rate * 1.5)
else:
employee['total'] = hours * rate
def display_pay(self):
"""显示格式化的工资单数据。"""
print("DOODAD 制造公司 6 月工资单")
print("-------------------------------------")
print("员工姓名\t工作时间\t工资标准\t总工资")
print("-------------------------------------")
for employee in self.employees:
print(f"{employee['name']}\t\t{employee['hours']}\t\t{employee['rate']}\t\t{employee['total']:.2f}")
# 示例用法:
payroll = Payroll()
payroll.read_data()
payroll.input_data()
payroll.compute_pay()
payroll.write_data()
payroll.display_pay()
说明:
-
employees
列表:Payroll
类现在存储一个employees
列表,其中每个员工都是一个包含name
、hours
、rate
和total
键的字典。 -
read_data()
: 这个方法从一个文件读取数据,使用字符串分割来解析每一行,并将每个员工添加到employees
列表中。它还处理文件不存在的情况。 -
write_data()
: 这个方法将员工数据写入一个文件,每行对应一个员工,并使用逗号作为分隔符。 -
input_data()
: 这个方法从用户那里获取输入,包括输入验证以确保输入的是数字和非负值。 -
compute_pay()
: 这个方法循环遍历employees
列表,并根据工作时间和工资标准计算每个员工的工资。 -
display_pay()
: 这个方法以表格格式打印工资单信息。
现在,你有一个功能齐全的
Payroll
类,可以处理多个员工,从文件读取数据,将数据写入文件,从用户那里获取输入,以及计算和显示工资单!