2014-04-23 17:45

题目:假设有个呼叫中心,有接线员、经理、主管三种角色。如果接线员无法处理呼叫,就上传给经理;如果仍无法处理,则上传给主管。请用代码描述这一过程。

解法:第一眼觉得这题肯定是在考察设计模式,很像exception的throw过程。对于我这种对设计模式一窍不通的人,这题还无法很好解答。待稍后专门学习设计模式之后,再回来好好琢磨一遍。

代码:

  1 // 8.2 Design a call center system to handle calls, the order will be respondent->manager->director, find the first employee to handle a call.
  2 #include <iostream>
  3 #include <vector>
  4 using namespace std;
  5 
  6 class People {
  7 public:
  8     People() {};
  9     virtual void handle() = 0;
 10     virtual ~People() {};
 11 };
 12 
 13 class Respondent: public People {
 14 public:
 15     Respondent() {};
 16     void handle() {
 17         cout << "Respondent is handling the call." << endl;
 18     };
 19     ~Respondent() {};
 20 };
 21 
 22 class Manager: public People {
 23 public:
 24     Manager() {};
 25     void handle() {
 26         cout << "Manager is handling the call." << endl;
 27     };
 28     ~Manager() {};
 29 };
 30 
 31 class Director: public People {
 32 public:
 33     Director() {};
 34     void handle() {
 35         cout << "Director is handling the call." << endl;
 36     };
 37     ~Director() {};
 38 };
 39 
 40 class CallCenter {
 41 public:
 42     CallCenter(int num_respondent = 0, int num_manager = 0, int num_director = 0) {
 43         respondents.resize(num_respondent);
 44         managers.resize(num_manager);
 45         directors.resize(num_director);
 46         respondents_available.resize(num_respondent);
 47         managers_available.resize(num_manager);
 48         directors_available.resize(num_director);
 49         fill(respondents_available.begin(), respondents_available.end(), true);
 50         fill(managers_available.begin(), managers_available.end(), true);
 51         fill(directors_available.begin(), directors_available.end(), true);
 52     }
 53     
 54     void handle() {
 55         size_t i;
 56         
 57         for (i = 0; i < respondents.size(); ++i) {
 58             if (respondents_available[i]) {
 59                 break;
 60             }
 61         }
 62         if (i < respondents.size()) {
 63             respondents_available[i] = false;
 64             respondents[i].handle();
 65             respondents_available[i] = true;
 66             return;
 67         }
 68 
 69         for (i = 0; i < managers.size(); ++i) {
 70             if (managers_available[i]) {
 71                 break;
 72             }
 73         }
 74         if (i < managers.size()) {
 75             managers_available[i] = false;
 76             managers[i].handle();
 77             managers_available[i] = true;
 78             return;
 79         }
 80         
 81         for (i = 0; i < directors.size(); ++i) {
 82             if (directors_available[i]) {
 83                 break;
 84             }
 85         }
 86         if (i < directors.size()) {
 87             directors_available[i] = false;
 88             directors[i].handle();
 89             directors_available[i] = true;
 90             return;
 91         }
 92     }
 93 private:
 94     vector<Respondent> respondents;
 95     vector<Manager> managers;
 96     vector<Director> directors;
 97     vector<bool> respondents_available;
 98     vector<bool> managers_available;
 99     vector<bool> directors_available;
100 };
101 
102 int main()
103 {
104     CallCenter *p_call_center = nullptr;
105     int r, m, d;
106     
107     while (cin >> r >> m >> d) {
108         p_call_center = new CallCenter(r, m, d);
109         p_call_center->handle();
110         delete p_call_center;
111         p_call_center = nullptr;
112     }
113     
114     return 0;
115 }

 

 posted on 2014-04-23 18:09  zhuli19901106  阅读(277)  评论(0编辑  收藏  举报