Java面向对象编程入门练习:Manager类继承Employee类并实现求得员工平均业绩
- 请定义一个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;
}
}
- 设名为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);
}
}
}