Ruby循环结合用户输入:员工薪资统计程序开发技术求助
搞定Ruby多员工薪资计算程序的循环逻辑
嘿,我来帮你把这个多员工输入的逻辑补全,顺便把整个程序的核心功能都实现好!你的基础代码已经有了单员工的输入,现在只需要把这些步骤放进循环里,再用数组来存储所有员工的数据,最后就能轻松算出你要的各种信息啦。
完整实现代码
# 初始化数组存储所有员工数据 employees = [] loop do # 收集员工基本信息 puts "Name of your employee" name = gets.chomp! puts "How much does #{name} make per hour?" # 转成浮点数,支持时薪是小数的情况 hourly_wage = gets.chomp!.to_f puts "How many hours does #{name} work per day?" daily_hours = gets.chomp!.to_f # 计算年薪资和年总工时(假设一年工作250天,你可以根据实际调整这个数值) annual_days = 250 annual_salary = hourly_wage * daily_hours * annual_days annual_total_hours = daily_hours * annual_days # 把员工信息存入数组 employees << { name: name, hourly_wage: hourly_wage, daily_hours: daily_hours, annual_salary: annual_salary, annual_total_hours: annual_total_hours } # 询问是否继续输入下一个员工 puts "Do you have another employee you would like to enter? (yes/no)" continue = gets.chomp!.downcase # 如果输入no或n,退出循环 break if continue == "no" || continue == "n" end # 输出所有员工的年薪资 puts "\n--- 所有员工年薪资信息 ---" employees.each do |emp| puts "#{emp[:name]} 的年薪资为: $#{emp[:annual_salary].round(2)}" end # 找出工作量最多的员工(按年总工时计算) most_hours_employee = employees.max_by { |emp| emp[:annual_total_hours] } puts "\n--- 工作量最多的员工 ---" puts "#{most_hours_employee[:name]} 年总工时为 #{most_hours_employee[:annual_total_hours]} 小时" # 找出薪资最高的员工 highest_salary_employee = employees.max_by { |emp| emp[:annual_salary] } puts "\n--- 薪资最高的员工 ---" puts "#{highest_salary_employee[:name]} 年薪资为 $#{highest_salary_employee[:annual_salary].round(2)}"
关键逻辑说明
- 循环输入:用
loop创建一个无限循环,直到用户输入no或n时,通过break退出循环,这样就能支持任意数量的员工输入。 - 数据存储:用数组+哈希的方式存储每个员工的完整信息,方便后续计算和查询。
- 数值转换:把用户输入的时薪和工时转成
float类型,避免字符串运算导致错误,同时支持小数数值。 - 最大值查询:用Ruby内置的
max_by方法,一行代码就能找出年总工时最多和年薪资最高的员工,简洁高效。 - 格式优化:用
round(2)把薪资保留两位小数,输出更符合货币格式的规范。
你可以根据实际需求调整annual_days的数值(比如有些公司是260工作日),或者添加更多员工信息的收集项,这个结构扩展性很强哦!
内容的提问来源于stack exchange,提问作者N.A
相关产品推荐
相关产品推荐

