Employee Department Salary Level Query II


Submit solution

Points: 10 (partial)
Time limit: 1.0s
Memory limit: 64M

Authors:
Problem type
Allowed languages
Java 19, Java 8

題目說明

請撰寫一個 Java 程式,實現一個員工部門薪資統計系統。程式將讀取五位員工的部门與薪資資料,並能根據指定的部門名稱,計算出該部門內員工的平均薪資。

薪資等級與具體薪資的換算規則如下:

senior = 50000
middle = 40000
junior = 30000

若出現上述以外的非預期薪資等級,則該位員工的薪資以 0 計算。

程式的運作規則如下:

員工資料輸入:前 5 行每行輸入一位員工的資料,由「姓名」、「部門名稱」、「薪資等級」三個字串組成,以空格分隔。程式會自動將其封裝為HashMap<String, String>並存入 ArrayList 中。

目標部門輸入:第 6 行輸入一個指定的部門名稱。

薪資統計機制:EmployeeAnalyzer類別必須盤點所有員工紀錄,篩選出屬於該指定部門的員工,將他們的薪資等級轉換為具體數值後計算平均薪資(結果需四捨五入轉為整數)。

本題的所有輸入與輸出不分大小寫。

輸出結果:

  • 若該部門內有員工,則印出該部門的平均薪資,並且經過四捨五入。
  • 若該部門在輸入資料中不存在(即該部門員工數為 0),則印出 0。
  • 請利用下方的樣板程式碼為基礎,在標記 // TODO 的空格處填入關鍵程式碼以完成上述功能。

參考程式碼

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Scanner;

public class MyProgram {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        ArrayList<HashMap<String, String>> records = EmployeeCollector.getInputData(scanner, 5);

        // 讀取要統計平均薪資的部門名稱
        String targetDepartment = scanner.next();
        scanner.close();

        // 建立 EmployeeAnalyzer 實體並計算平均薪資
        EmployeeAnalyzer analyzer = new EmployeeAnalyzer(records);
        int averageSalary = analyzer.calculateAverageSalary(targetDepartment);

        // 印出最終結果
        System.out.println(averageSalary);
    }
}

class EmployeeCollector {
    public static ArrayList<HashMap<String, String>> getInputData(Scanner scanner, int numberOfRecords) {
        ArrayList<HashMap<String, String>> records = new ArrayList<>();
        for (int i = 0; i < numberOfRecords; i++) {
            HashMap<String, String> record = new HashMap<>();
            String name = scanner.next();
            String department = scanner.next();
            String salaryLevel = scanner.next();
            record.put("name", name);
            record.put("department", department);
            record.put("salaryLevel", salaryLevel);
            records.add(record);
        }
        return records;
    }
}

class EmployeeAnalyzer {
    private ArrayList<HashMap<String, String>> records;

    // 建構子初始化資料
    public EmployeeAnalyzer(ArrayList<HashMap<String, String>> records) {
        this.records = records;
    }

    // 計算指定部門的平均薪資
    public int calculateAverageSalary(String departmentName) {
        int totalSalary = 0;
        int count = 0;

        // TODO: 盤點 records 容器,篩選出符合 departmentName 的員工
        // 針對每個員工,依據薪資等級(level)轉換為對應的數值金額
        // 累加薪資總額並計算該部門符合條件的人數
        for (...) {


        }

        // TODO: 計算並傳回四捨五入後的平均薪資
    }
}

輸入值的格式

輸入共 6 行,格式如下:

  • 前 5 行:每行輸入一位員工的資料,由「姓名」、「部門名稱」、「薪資等級」三個字串組成,以空格分隔。
  • 第 6 行:輸入要統計的部門名稱。

輸出值的格式

輸出一行數字,代表該部門員工的平均薪資。若無該部門員工,輸出 0。

sample input1

david engineering senior
lisa marketing junior
mike engineering senior
sarah engineering middle
tom marketing junior
engineering

sample output1

46667

sample input2

david engineering senior
lisa marketing junior
mike engineering senior
sarah finance middle
tom marketing junior
it

sample output2

0

Comments

There are no comments at the moment.