一、问题描述
赵斌是一个信管专业的学生,大学四年顺利毕业了。在毕业季,他也像其他学子一样,投身于求职大军,投出一份又一份求职简历,在苦苦地等待之后,他接到了中国移动通信公司广东分司的面试通知书,通知他于本月1号10点到公司面试。当天,晴空万里,艳阳高照,他身着西装,高兴地早早来到公司楼下等待。点钟整,他和其他新人一起,坐到公司的面试现场。他领取的一一份程序设计题:假如你是我公司一名客服技术人员,现请你选择自己熟悉的语言,来设计一个程序,管理客户向公司打进来的咨询电话。请事行分析析使用方法和工具,说明自己的思路方法,写一份完整的程序,并实例测试。
二、功能说明
此程序可管理所有打入该公司的咨询电话,并及时反馈客服目前的服务情况,也可向客户反应前面客户的数量及需要等待时长。
定义一个队列CustomerService,每次电话打进来时将其入队,电话接入客服时可将其出队。
在整体的设计上将程序分为三个部分,第一个部分
“CustomerTeleManagement.h”在这个文件中对所要用到的队列CustomerService进行了声明,第二个文件“CustomerTeleManagement.cpp”是对在“CustomerTeleManagement.h”中所声明的队列CustomerService定义了一个实体,也可以说是完成了管理咨询电话的操作函数,第三个文件“CustomerTeleManagement_main.cpp“是主函数main()所在文件,在其中不仅定义了主函数,而且完成了咨询电话管理操作函数。
三个文件各有各的内容,实现了不同的功能,同时也在查错和对程序的维护方面带来很多便利。程序运行时,首先输入电话号码并对该号码编号,然后入队,入队后即可等待客服。
三、程序分析
定义了队列CustomerService,该队列表示打进来的但未接通客服的电话。该队列主要定义了入队函数Insert、出队函数OutLian、取对头元素函数GetLian、判空函数Empty等,对管理咨询电话起了很大作用。
入队函数Insert:将打入的但未接通客服的电话入队;
出队函数OutLian:将队里的电话接通客服;
取对头元素函数GetLian:获得当前接受服务的电话;
判空函数Empty:判断当前队列是否为空。
运行结果如图:
四、收获总结
学数据结构这一个学期以来,做了很多次实验,但这次是第一次完全自己写一个可以实现其特定的程序。
在这个过程中,我通过运用课本上及老师课堂上补充的很多知识点,让我发现了知识的重要性,老师平时讲的很多重点是编程时需要注意的,一不注意很可能就会出错。同时这个课程设计也让我了解了基础的重要性,学习没有捷径,每一步我们都要认认真真的学,打好基础才能有提升的可能。
这次课程设计中遇到了一些问题与同学一起讨论解决,让我明白同学间合作的重要性。这个课程设计并不完美,还有很多要改善的地方,通过这次课程设计,让我进一步了解了C++程序设计方法。更重要的是培养了自己耐心、细心、用心的良好品质。希望以后能有机会对这门课进行更深一步的了解,也很乐意通过自己的努力来提高自己在这个知识领域的水平。同时也非常感谢同学的帮助及老师的建议与指导。
五、程序代码
CustomerTeleManagement.h: template<class Hong> struct Node { Hong data; Hong num; Hong tel_num; Node<Hong> *next; }; const int m=100; template<class Hong> class CustomerService { public: CustomerService(); ~CustomerService(); void Insert(Hong x,int d,long f); Hong OutLian(); Hong GetLian(); int Empty(); int waiting(int i,int d); Hong tel(); private: Node<Hong> *front,*rear; }; CustomerTeleManagement.cpp: #include<string> #include"CustomerTeleManagement.h" template<class Hong> CustomerService<Hong>::CustomerService() { Node<Hong> * s=NULL; s=new Node<Hong>; s->next=NULL; rear=s; front=s; } template<class Hong> CustomerService<Hong>::~CustomerService() { Node<Hong>*p=NULL; while(front!=NULL) { p=front->next; delete front; front=p; } } template<class Hong> void CustomerService<Hong>::Insert(Hong x,long f) { Node<Hong>*k=NULL; k=new Node<Hong>; k->data=x; k->num=d; k->tel_num=f; k->next=NULL; rear->next=k; rear=k; } template<class Hong> Hong CustomerService<Hong>::OutLian() { Node<Hong>*m=NULL; m=new Node<Hong>; if(rear==front)throw"下溢"; m=front->next; int g,h,j; g=m->data; h=m->num; j=m->tel_num; front->next=m->next; if(m->next==NULL)rear=front; delete m; return g,j; } template<class Hong> Hong CustomerService<Hong>::GetLian() { if(front!=rear) return front->next->num; } template<class Hong> int CustomerService<Hong>::Empty() { if(front==rear) return 1; else return 0; } template<class Hong> int CustomerService<Hong>::waiting(int i,int d) { int c; c=i*d; return c; } template<class Hong> Hong CustomerService<Hong>::tel() { if(front!=rear) return front->next->tel_num; } CustomerTeleManagement_main.cpp: #include<iostream> #include<iomanip> #include"CustomerTeleManagement.cpp" using namespace std; void main() { int count=0,b; char a; long e; CustomerService<int> L; if(L.Empty()) { cout<<"\t------欢迎致电中国移动通信公司广东分公司!------"<<endl; } else cout<<"\t队伍非空"<<endl; cout<<"\t有客户来电,估计本次通话时间(分钟):"; cin>>b; cout<<"\t正在呼入的号码(#):"; while(cin>>a) { try { cin>>e; count++; L.Insert(a,count,e); } catch(char *q) { cout<<q<<endl; } } cout<<endl; cout<<"\t---目前客服正在通话的编号为:"<<L.GetLian()<<"---"<<endl; cout<<"\t"<<endl; cout<<"\t---正在服务的是:"<<L.tel()<<"---"<<endl; cout<<"\t"<<endl; cout<<"\t---你前面还有"<<count<<"位客人,请等候约"<<L.waiting(b,count)<<"分钟---"<<endl; _sleep(5*1000);//延迟5秒 cout<<"\t---结束第"<<L.GetLian()<<"位客人的服务---"<<endl; try { L.OutLian(); } catch(char *q) { cout<<q<<endl; } if(L.Empty()) cout<<"\t队伍为空"<<endl; else { cout<<"\t即将为第"<<L.GetLian()<<"位客人服务"<<endl; cout<<"\tWe are working for the next"<<endl; cout<<"\t此号码正在等待客服:"<<L.tel()<<endl; } }