首页 > 代码库 > Careercup | Chapter 8

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 };

 

Careercup | Chapter 8