Careercup | Chapter 8

8.2 Imagine you have a call center with three levels of employees: respondent, manager, and director. An incoming telephone call must be first allocated to a respondent who is free. If the respondent can't handle the call, he or she must escalate the call to a manager. If the manager is not free or notable to handle it, then the call should be escalated to a director. Design the classes and data structures for this problem. Implement a method dispatchCaL L () which assigns a call to the first available employee

 1 struct Call {

 2     string phoneNumber;

 3     string content;

 4 };

 5 enum RANK {

 6 RESPONDENT, MANAGER, DIRECTOR

 7 };

 8 class Employee {

 9 public:

10     Employee(int level) : level(level) {}

11     int getLevel() const { return level; }

12     bool isFree() const { return calls.empty(); }

13     virtual bool handleCall(Call call) = 0;

14 protected:

15     queue<Call> calls;

16 private:

17     int level;

18 };

19 

20 class Respondent : public Employee {

21 public:

22     Respondent() : Employee(RANK::RESPONDENT) {}

23     bool handleCall(Call call) { /*...*/ return true;}

24 };

25 

26 class Manager: public Employee {

27 public:

28     Manager() : Employee(RANK::MANAGER) {}

29     bool handleCall(Call call) { /*...*/ return true;}

30 };

31 

32 class Director : public Employee {

33 public:

34     Director(): Employee(RANK::DIRECTOR) {}

35 bool handleCall(Call call) {/*...*/ return true; }    

36 };

37 

38 class CallCenter {

39 public:

40     bool dispatchCall(Call call) {

41         for (map<int, vector<Employee> >::iterator it = employees.begin();

42             it != employees.end(); it++) {

43             for (int i = 0; i < it->second.size(); ++i) {

44                 if (it->second[i].isFree() && it->second[i].handleCall(call)) {

45                     return true;

46                 }

47             }

48         }

49         return false;

50     }

51 

52     void addEmployee(Employee &employee) {

53         employees[employee.getLevel()].push_back(employee);

54 }

55 private:

56     map<int, vector<Employee> > employees;

57 };

 

你可能感兴趣的:(apt)