公司内部的树型关系(java)

1.案例需求

根据下图中的公司内部树形关系,完成设计,要求:
类中有 name 和 dept 两个属性,分别存储人员的名字和所属部门;
编写有参构造函数,并包含 name 和 dept 两个参数;
创建 addSub() 函数,实现为某个人添加下属;
创建 show() 函数,实现公司内部树形关系的展示。
请添加图片描述

2.案例源码

Enployee.java

import java.util.ArrayList;
import java.util.List;

public class Employee { 
    // 姓名
    private String name;
    // 职位
    private String dept;
    // 添加属性: 下属员工
    // Add attribute: subordinates
    // --- write your code here ---
    private List<Employee> subordinates;

    // 完成构造函数的编写
    // Complete the constructor.
    public Employee(String name, String dept) {
        // --- write your code here ---
        this.name=name;
        this.dept=dept;
        this.subordinates=new ArrayList<>();
    }

    // 添加下属方法
    // Add subordinates method.
    public void addSub(Employee e) {
        // --- write your code here ---
        this.subordinates.add(e);
    }


    // Do not modify the code below
    public void show(int dept) {

        for (int i = 0; i < dept; i++) {
            System.out.print("-");
        }

        System.out.println(this.toString());

        for (Employee e : subordinates) {
            e.show(dept + 2);
        }

    }

    @Override
    public String toString() {
        return "name='" + name + '\'' +
                ", dept='" + dept + '\'';
    }
}

Main.java

public class Main {

    public static void main(String[] args) {

        Employee CEO = new Employee("Jason", "CEO");
        Employee headSales = new Employee("Bob", "Head Sales");
        Employee headMarketing = new Employee("Michel", "Head Marketing");

        Employee clerkOne = new Employee("Tom", "Marketing");
        Employee clerkTwo = new Employee("Jerry", "Marketing");
        Employee clerkThree = new Employee("Jack", "Sales");
        Employee clerkFour = new Employee("Lucy", "Sales");

        CEO.addSub(headSales);
        CEO.addSub(headMarketing);

        headMarketing.addSub(clerkOne);
        headMarketing.addSub(clerkTwo);

        headSales.addSub(clerkThree);
        headSales.addSub(clerkFour);

        CEO.show(1);

    }

}

3.技术细节

①属性:
name: 员工的姓名,类型为String。
dept: 员工所在的部门名称,类型为String。
subordinates: 用于存储该员工下属的列表(ArrayList),类型为List。

②构造函数:
构造函数接受两个参数:name和dept,用于初始化新创建的员工对象的姓名和部门信息。同时,它还会初始化一个空的subordinates列表。

③方法:
addSub(Employee e): 用于向当前员工的下属列表中添加一个员工。接受一个Employee类型的参数e,并调用ArrayList的add()方法将该员工添加到下属列表中。

④show(int dept) 方法:
该方法用于递归地展示员工及其下属的层级结构。dept参数用于控制输出时每一层的缩进量,以直观地呈现上下级关系。
首先输出当前员工的字符串表示形式(通过重写toString()方法实现)。
然后遍历下属列表,对每个下属递归调用show()方法,传入更长的dept值以便增加缩进。

⑤toString() 方法:
重写Object类的toString()方法,返回一个格式化的字符串,包含员工的姓名和所在部门信息,便于打印或显示。

4.小结

Java类Employee用于表示公司中的一个员工,具有姓名、部门属性以及下属列表。构造函数接收员工的姓名和部门信息进行初始化,并创建一个空的下属列表。通过addSub()方法可向当前员工添加下属。show()方法采用递归方式展示员工及其下属的层级结构,其中dept参数控制输出时的缩进级别以反映上下级关系。同时,重写toString()方法,方便简洁地输出员工基本信息。
Main类的main方法中,创建了一个模拟公司组织架构的实例。首先初始化了四个不同层级的角色:CEO、两个部门主管和四位员工,并通过调用addSub()方法将他们按照实际的上下级关系进行关联。最后,调用CEO对象的show(1)方法以递归形式输出整个公司的组织结构信息,展示出从CEO到普通员工之间的层级关系。

  • 33
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值