Go 語言程式:查詢哪些員工應該獲得獎金
在公司辦公室,可能會有一些情況,您需要提供一份員工列表,並根據工作、經驗或特定屬性為他們提供額外的獎金。在本文中,我們將探討一種使用基於績效的計算和基於工齡的計算來計算獎金的方法。
方法 1:基於績效的計算
績效是決定員工獎金的常見基礎,在這種方法中,我們將根據員工的績效來計算獎金。
演算法
建立 Employee 結構體,其中包含 Name(姓名)、Salary(薪資)和 Projects(專案)的值。
實現 calculateBonus 函式,該函式接受一個 Employee 並返回一個 float64,表示獎金。
在 calculateBonus 函式中將獎金變數設定為 0.0。
使用條件語句根據完成的任務數量計算員工的獎勵。
在 main 函式中建立一個 Employee 結構體切片,並用員工資料填充它。使用 for 迴圈遍歷 workers 切片。
呼叫 calculateBonus 函式來確定每個員工的獎金。
使用 fmt.Printf 函式列印員工姓名和獎金。
示例
下面給出的示例演示了一種根據員工績效計算發放給員工的獎金的方法。
package main import "fmt" type Employee struct { Name string Salary float64 Projects int } func calculateBonus(employee Employee) float64 { bonus := 0.0 if employee.Projects > 10 { bonus = employee.Salary * 0.2 } else if employee.Projects > 5 { bonus = employee.Salary * 0.1 } else { bonus = employee.Salary * 0.05 } return bonus } func main() { employees := []Employee{ {Name: "Akhil Sharma", Salary: 5000.0, Projects: 12}, {Name: "Akshay kumar", Salary: 6000.0, Projects: 7}, {Name: "Sahil verma", Salary: 4500.0, Projects: 3}, } fmt.Println("Performance-based Bonuses:") for _, employee := range employees { bonus := calculateBonus(employee) fmt.Printf("%s: $%.2f\n", employee.Name, bonus) } }
輸出
Performance-based Bonuses: Akhil Sharma: $1000.00 Akshay kumar: $600.00 Sahil verma: $225.00
方法 2:基於工齡的獎金
決定員工獎金的另一個常見基礎是考慮員工的工齡,在這種方法中,我們將根據員工的工齡來計算獎金。
演算法
建立 Employee 結構體,它將具有 Name(姓名)、Salary(薪資)和 HireDate(入職日期)欄位來表示員工的資料。
實現 calculateBonus 函式,該函式有兩個輸入引數:一個 Employee 和當前時間。
從當前時間減去 HireDate 以確定員工的工齡。
透過將總小時數除以 24 和 365.25,您可以將工齡轉換為年數。
在 main() 函式中,建立一個 Employee 物件陣列,並用適當的資料填充它。
獲取當前的 UTC 時間並將其放入 now 變數中。迭代 employees 陣列。
使用 calculateBonus 函式根據工齡和當前時間計算每個員工的獎金。同時列印員工姓名和計算出的獎金。
示例
下面的示例計算員工工齡中的完整年數,然後根據工齡為員工提供獎金。
package main import ( "fmt" "time" ) type Employee struct { Name string Salary float64 HireDate time.Time } func calculateBonus(employee Employee, now time.Time) float64 { bonus := 0.0 tenure := now.Sub(employee.HireDate) // Calculate the number of complete years in the tenure years := int(tenure.Hours() / 24 / 365.25) if years > 5 { bonus = employee.Salary * 0.1 } else if years > 2 { bonus = employee.Salary * 0.05 } else { bonus = 0.0 } return bonus } func main() { employees := []Employee{ {Name: "Akhil Sharma", Salary: 5000.0, HireDate: time.Date(2016, time.January, 1, 0, 0, 0, 0, time.UTC)}, {Name: "Akshay Kuamr", Salary: 6000.0, HireDate: time.Date(2019, time.February, 15, 0, 0, 0, 0, time.UTC)}, {Name: "Sahil Verma", Salary: 4500.0, HireDate: time.Date(2022, time.March, 20, 0, 0, 0, 0, time.UTC)}, } now := time.Now().UTC() fmt.Println("Tenure-based Bonuses:") for _, employee := range employees { bonus := calculateBonus(employee, now) fmt.Printf("%s: $%.2f\n", employee.Name, bonus) } }
輸出
Tenure-based Bonuses: Akhil Sharma: $500.00 Akshay Kuamr: $300.00 Sahil Verma: $0.00
結論
在本文中,我們探討了兩種不同的確定員工獎勵的方法。第一種方法涉及基於績效的獎金,另一種方法涉及根據工齡發放給員工的獎金。