Java面向对象编程入门练习:Manager类继承Employee类并实现求得员工平均业绩

Java面向对象编程入门练习:Manager类继承Employee类并实现求得员工平均业绩

  1. 请定义一个Manager类,该类继承Employee类,并定义两个变量及一个构造方法,两个变量:department代表该 Manager所管辖部门(String类型),subm代表该Manager管理的所有Employee(Employee的数组)。构造方法能够接受参数对类的所有成员变量设置初值。
class Employee {
	String name; //雇员姓名
	int age;     //年龄	
	char grade;  //业绩评等,从高到低为A,B,C,D四等。
	public Employee(String e_name,int e_age,char e_grade) {
		name = e_name;
		age = e_age;
		grade = e_grade;
	}
}
  1. 设名为staff的包中包含两个类,Employee和Manager,两个类的定义如题二,但允许在Manager中增加需要的方法。请在包中定义一个名为TopManager的类,在该类中定义若干Employee和Manager的样本值,然后写一方法,找出所有Manager中其下属雇员平均业绩评等最高的Manager姓名。

代码实现参考

package staff;

import java.util.HashMap;

import project.main;

public class TopManager {
    // Employee员工名数组,12个
    static String[] e_nameArr = { "Jack", "Bob", "Marry", "Kate", "Herry", "Frank", "Davin", "Sarah", "Planck",
            "Richard",
            "Susan", "Quean" };
    // Manager经理名数组,3个
    static String[] m_nameArr = { "Bill", "Volun", "Morgen" };
    static char[] gradeArr = { 'A', 'B', 'C', 'D' };

    // ------------------------------主程序入口----------------------------------------
    public static void main(String[] args) {
        Manager m1 = new Manager(m_nameArr[0], (int) Math.random() * 20 + 18, getRandomGrade(), "Department1",
                creatSubm(0));
        Manager m2 = new Manager(m_nameArr[1], (int) Math.random() * 20 + 18, getRandomGrade(), "Department1",
                creatSubm(1));
        Manager m3 = new Manager(m_nameArr[2], (int) Math.random() * 20 + 18, getRandomGrade(), "Department1",
                creatSubm(2));

        Manager[] mArr = new Manager[] { m1, m2, m3 };

        maxGradManager(mArr); // 求得平均业绩最高的经理部门
    }
    // -------------------------------------------------------------------------------

    // 获得随机分数
    static char getRandomGrade() {
        return gradeArr[(int) Math.random() * 4];
    }

    // 获得员工列表
    static Employee[] creatSubm(int i) {
        Employee[] ans = new Employee[4];
        Employee e1 = new Employee(e_nameArr[4 * i], (int) (Math.random() * 20 + 18),
                gradeArr[(int) (Math.random() * 4)]);
        Employee e2 = new Employee(e_nameArr[4 * i + 1], (int) (Math.random() * 20 + 18),
                gradeArr[(int) (Math.random() * 4)]);
        Employee e3 = new Employee(e_nameArr[4 * i + 2], (int) (Math.random() * 20 + 18),
                gradeArr[(int) (Math.random() * 4)]);
        Employee e4 = new Employee(e_nameArr[4 * i + 3], (int) (Math.random() * 20 + 18),
                gradeArr[(int) (Math.random() * 4)]);
        ans[0] = e1;
        ans[1] = e2;
        ans[2] = e3;
        ans[3] = e4;
        return ans;
    }

    // 求得平均业绩最高的经理
    static void maxGradManager(Manager[] mArr) {
        if (mArr.length == 0) {
            System.out.println("Empty!");
            return;
        }
        Manager res = mArr[0];
        for (int i = 1; i < mArr.length; i++) {
            if (res.avarageGrade() < mArr[i].avarageGrade()) {
                res = mArr[i];
            }
        }
        System.out.println("MAX AVARAGE GRADE MANAGER");
        res.show();
    }

}

class Employee {
    String name; // 雇员姓名
    int age; // 年龄
    char grade; // 业绩评等,从高到低为A,B,C,D四等。

    public Employee(String e_name, int e_age, char e_grade) {
        name = e_name;
        age = e_age;
        grade = e_grade;
    }
}

class Manager extends Employee {
    String department; // 所属部门
    Employee[] subm; // 管理的员工数组
    static HashMap<Character, Integer> score = new HashMap<Character, Integer>() { // 业绩量化
        {
            put('A', 100);
            put('B', 75);
            put('C', 50);
            put('D', 25);
        }
    };

    // 构造方法
    Manager(String e_name, int e_age, char e_grade, String dpt, Employee[] subm_) {
        super(e_name, e_age, e_grade);
        department = dpt;
        subm = subm_;
    };

    // 求平均业绩
    int avarageGrade() {
        int res = 0;
        for (int i = 0; i < subm.length; i++) {
            res += score.get(subm[i].grade);
        }
        return res / subm.length;
    }

    // 展示员工平均业绩
    void show() {
        System.out.println("Manager name:\t" + name);
        System.out.println("subm avarage score:\t" + avarageGrade());
        System.out.println("Employee:");
        for (int i = 0; i < subm.length; i++) {
            System.out.println(subm[i].name + "\t" + subm[i].grade);
        }
    }
}

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是创建员工 `Employee` 并设置属性,并将员工数据对象写入或读取至数据文件 `employees.txt` 的示例代码: ```python import json class Employee: def __init__(self, name, id_num, position, salary): self.name = name self.id_num = id_num self.position = position self.salary = salary def to_dict(self): return { "name": self.name, "id_num": self.id_num, "position": self.position, "salary": self.salary } def to_json(self): return json.dumps(self.to_dict()) @staticmethod def from_dict(emp_dict): return Employee(emp_dict["name"], emp_dict["id_num"], emp_dict["position"], emp_dict["salary"]) @staticmethod def from_json(emp_json): emp_dict = json.loads(emp_json) return Employee.from_dict(emp_dict) def __str__(self): return f"Name: {self.name}, ID number: {self.id_num}, Position: {self.position}, Salary: {self.salary}" # 写入员工数据到文件 employee1 = Employee("John Smith", "123456", "Teller", 30000) employee2 = Employee("Jane Doe", "789012", "Manager", 50000) with open("employees.txt", "w") as f: f.write(employee1.to_json() + "\n") f.write(employee2.to_json() + "\n") # 从文件中读取员工数据 employees = [] with open("employees.txt", "r") as f: for line in f: emp_json = line.strip() emp = Employee.from_json(emp_json) employees.append(emp) # 显示员工数据 for emp in employees: print(emp) ``` 在上面的代码中,我们定义了一个名为 `Employee` 的,它有四个属性:`name`、`id_num`、`position` 和 `salary`。我们还定义了将员工数据对象转换为字典和 JSON 格式的方法,以及将字典和 JSON 格式转换为员工对象的静态方法。最后,我们定义了 `__str__` 方法,用于显示员工的信息。 我们首先创建了两个员工对象 `employee1` 和 `employee2`,然后将它们的数据以 JSON 格式写入到文件 `employees.txt` 中。接着,我们从文件中读取员工数据,将其转换为员工对象,并将其存储在列表 `employees` 中。最后,我们遍历员工列表,并使用 `__str__` 方法显示员工的信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值