为Employee-Manager设计数据结构

时间:2014-05-21 10:20:46

标签: java c# c++

问题是为员工/经理系统设计一个结构。

1)员工属于经理。

2)经理有几名员工。

3)经理也可能属于经理。

4)员工只有一名经理

设计数据结构,使其支持以下操作:删除员工/经理,晋升(员工成为经理)。

任何编程语言都足够了。

注意:我不想要代码。只是口头上的解释是可以的。

4 个答案:

答案 0 :(得分: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 :(得分:1)

从设计角度来看,我会使用复合设计模式。 [复合数据]:http://en.wikipedia.org/wiki/File:Composite_UML_class_diagram_(fixed).svg。每个员工(可能是经理)都掌握着指向其经理的指针,每个经理都持有指向其员工的指针列表。但只有一个班级(员工)。

答案 2 :(得分:1)

我的第一个想法是使用 employee 作为基类,使用属性 manager 作为指向manager-object(以及其他必要属性,如'id')和类的指针 manager ,继承自员工,其中包含指向员工的指针列表。

这可以包含在一个模型中,该模型包含所有员工/经理和“促销(员工)”等方法的列表。员工也可以使用像'promote'这样的方法,它返回一个manager-object。 manager-class可以有一个带有employee-parameter的构造函数......

更新(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(...) {...}

}

不知怎的这样......

答案 3 :(得分:1)

我会说首先找出实体(你已经拥有的,Employee和Manager)。 现在根据您的约束找出关系:

  

员工经理(一对多)

     

员工与经理(一对一)

员工可以是经理。

选项

  1. 让一位Class员工拥有&#39; List
  2. Employee
  3. 在员工本身中引用员工(作为经理,Employee reportsTo)。
  4. 以上两种选择的疼痛区域: 选项#1如果你删除了经理,那么员工名单就会变成孤儿(没有经理的员工) 选项#2如果您想在单个Manager下查看所有员工,那么您需要遍历管理员employeeID的所有EMployee。

    期待其他答案。