为员工经理设计数据结构

3
这个问题是要设计一个员工/经理系统的结构。
1) 员工属于一个经理。 2) 一个经理有多个员工。 3) 经理也可能属于一个经理。 4) 员工只有一个经理。
设计数据结构以支持以下操作:删除员工/经理,晋升(员工成为经理)。
任何编程语言都可以。
注意:我不需要代码,只需要口头解释即可。
4个回答

2
我的第一个想法是将员工作为基类,具有指向经理对象的经理属性(以及其他必要的属性,如'id'),并且创建一个继承自员工的经理类,它包含指向员工的指针列表。

这可以包装在一个模型中,包括所有员工/经理和方法,例如'晋升(员工)'。 Employee还可以具有'晋升'方法,该方法返回经理对象。 Manager类可以具有带有employee参数的构造函数...

更新(C#代码):

public class Employee
{

    public string ID;
    public Manager Manager;

    public Manager promote() { return new Manager(this); }

    public Employee() { }

}

public class Manager : Employee
{

    public List<Employee> Employees;

    public Manager() { }
    public Manager(Employee employee) {...}

}

public class EmployeeModel
{

    private List<Employee> employees;
    public List<Employee> Employees { get { return this.employees; } }

    public void addEmployee(...) {...}
    public void removeEmployee(...) {...}
    public void promoteEmployee(...) {...}

}

Somehow like this...


1
抱歉,您能否画一个UML图或者提供伪代码的类声明?谢谢。 - Ian McGrath

1
你只需要一个表格:
CREATE TABLE employees (
id integer NOT NULL,
name varchar(50) DEFAULT NULL,
manager_id integer DEFAULT NULL,
PRIMARY KEY (id)
)

这张表格有一个指向自身的引用(manager_id->id)。
如果记录在“manager_id”字段中具有NULL值,则它是顶级管理者。所有其他记录应该在“manager_id”字段中有一些值,这是对PrimaryKey字段“id”的引用。

+1,那是一个很好的答案,但我正在寻找与数据结构相关的内容。我应该清楚地提到这一点。抱歉。 - Ian McGrath

1

请您能否再详细解释一下?特别是关于这个例子。谢谢。 - Ian McGrath
你应该有一个类看起来像这样:Class Employee { Employee manager; String Name; LevelEnum level; List<Employee> employees; } 在晋升的情况下,仅更改枚举级别。在普通员工的情况下,员工列表将是一个空列表。 - Amir Bareket

1

我建议首先找出实体(你已经有了,员工和经理)。现在根据你的限制找出关系:

经理到员工(一对多)

员工到经理(一对一)

一个员工可以是经理。

选项:

  1. 拥有一个单一的Employee类,其中“has”(关联)ListEmployee
  2. 在Employee本身中引用Employee作为经理(Employee reportsTo)。

以上两个选项的问题所在:

选项#1:如果删除经理,则Employee列表将成为孤儿(没有经理的Employee)。

选项#2:如果要查看单个经理下的所有员工,则需要通过经理的employeeID遍历所有员工。

期待其他答案。


好的方法,但存在你提到的问题。我在面试中被问到这个问题,无法回答。我也在寻找其他答案。 - Ian McGrath
不需要遍历所有对象。你只需要查询具有特定经理的员工的数据库。SELECT * from EMPLOYEE where manager_id = "xxxx"; - Amir Bareket

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接