• 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 };
  • 相关阅读:
    Visual Studio 2008 每日提示(十一)
    Visual Studio 2008 每日提示(十二)
    13 个应该记住的最不寻常的搜索引擎
    Web1.0及WEB2.0的比较
    Comparing Properties to Methods
    1
    Struct Constructor Restrictions
    简单的动态下拉菜单
    权限设计(转)
    conceptpolymorphism
  • 原文地址:https://www.cnblogs.com/linyx/p/3970776.html
Copyright © 2020-2023  润新知