数据结构课堂设计报告

 

 

 

 

 

《数据结构课程设计》

 

课程题目

管理客户向公司打进来的咨询电话

课程编号

j1620102

学生姓名

吴倾

学生学号

201311671119

学生学号

201311671119

所在专业

信息管理与信息系统

所在班级

信管1131

任课老师

易学明

实习时间

 

设计成绩

 

老师评语

 

 

 


 

目录

一、问题描述····································1

二、问题分析····································1

三、逻辑结构和存储结构设计······················1

四、 算法设计····································1

五、时间复杂度和空间复杂度分析·················4

五、  源代码··································4

七、程序运行结果···························8

八、心得····································9

九、参考文献·······························10


 

一.    问题描述

赵斌是一个信管专业的学生,大学四年顺利毕业了。在毕业季,他也像其他学子一样,投身于求职大军,投出一份又一份求职简历,在苦苦地等待之后,他接到了中国移动通信公司广东分公司的面试通知书,通知他于本月1号10点到公司面试。当天,晴空万里,艳阳高照,他身着西装,高兴地早早来到公司楼下等待。10点钟整,他和其他新人一起,坐到公司的面试现场。他领取的一份程序设计题: 假如你是我公司一名客服技术人员,现请你选择自己熟悉的语言,来设计一个程序,管理客户向公司打进来的咨询电话。请事行分析使用方法和工具,说明自己的思路方法,写一份完整的程序,并实例测试。

二.  问题分析

客户向公司打来咨询电话,先打进来的先接受业务办理,后打进来的后接受业务办理,当客户来电时添加客户信息,当办理完客户业务时就可以删除客户信息。其思路就是队列,即先进先出,后进后出,在队列的一段插入数据,另一端删除数据。因为打进来的咨询电话比较多,所以用链队列比较好。

三.  逻辑结构和存储结构设计

1、     逻辑结构设计:队列中的元素之间存在着一对一的线性关系,因此队列采用线性结构来设计。

2、     存储结构设计:存储结构通常有两种,顺序存储结构和链接存储结构。顺序存储结构的基本思想是:用一组连续的存储单元依次存储数据元素,数据元素之间的逻辑关系由元素的存储位置来表示。链接存储结构的基本思路是:用一组任意的存储单元存储数据元素,数据元素之间的逻辑关系用指针来表示。因为每天打进来的电话的数量不确定,而且比较多,用链接存储结构比较好。

四.  算法设计

 

 数据结构课堂设计报告_第1张图片

 

构造函数算法linkqueue:

数据结构课堂设计报告_第2张图片

 

 

析构函数算法~linkqueue:

 数据结构课堂设计报告_第3张图片


链队列入队算法Enqueue:

数据结构课堂设计报告_第4张图片


链队列出队算法Dequeue:

数据结构课堂设计报告_第5张图片


取链队列队头元素算法Getqueue:

数据结构课堂设计报告_第6张图片


判断链队列是否为空算法Empty:

数据结构课堂设计报告_第7张图片


五.   时间复杂度和空间复杂度分析

时间复杂度:链队列基本操作的实现本质上也是单链表操作的简化,除析构函数外,算法的时间复杂度均为O(1).

空间复杂度:算法的空间复杂度是指在算法执行的过程中,需要的辅助空间数量。辅助空间是除算法本身和输入输出数据所占据的空间外,算法临时开辟的存储空间。通常记作:S(n)=O(f(n))。而链队列的空间复杂度较顺序存储队列好,因为顺序存储的队列首先申请一定的空间,可能用不完所申请的空间,这就造成了浪费空间,显然是不好的。而链队列的空间是需要的时候才申请,出队时有删除空间,这就没有浪费空间,所以链队列的空间复杂度好。

六.  源代码

#include

#include

usingnamespace std;

static intcount;

template

struct Node

{

Datatype data;

Node *next;

};

template

class linkqueue

{

public:

linkqueue();

~linkqueue();

void Enqueue(Datatype x);//入队函数,客户x入队

Datatype Dequeue();//队头元素出队,客户业务已办理

Datatype Getqueue();//取队头元素,即正在办理业务的客户

int Empty();//判断队列是否为空

    int Getcount(){return count;}//查找还有多少客户等待办理业务

private:

Node*front,*rear;

};

template

linkqueue::linkqueue()

{

Node*s=NULL;

    s=new Node;

    s->next=NULL;

    front=rear=s;

}

template                     

linkqueue::~linkqueue()   

{  

Node*p=NULL;

    while(front!=NULL)

{

     p=front->next;

   delete front;

   front=p;

}

}

 

template

voidlinkqueue::Enqueue(Datatype x)

{

int n;

cout<<"请输入来电客户人数:";

cin>>n;

for(int i=1;i<=n;i++)

{

     count++;

     cout<<"请输入来电的客户号码:"<

     cin>>x;      

     Node *s=NULL;

    s=newNode;

     s->data=x;//申请一个数据域为X的结点s

     s->next=NULL;

     rear->next=s;

     rear=s;//将结点S插入到队尾

}

}

template

Datatypelinkqueue::Dequeue()

{

char cl;

Node*p=NULL;

int x;

cout<<"是否要完成该客户业务(是:y/Y,否:n/N):";

cin>>cl;

if(cl=='y'||cl=='Y')

{

     count--;

cout<<"完成办理该客户业务为:";

     if(rear==front)throw"下溢";

   p=front->next;

        x=p->data;

        front->next=p->next;

        if(p->next=NULL)rear=front;

        delete p;

        return x;

   

}

    else

     cout<<"退出办理该客户业务!"<

}

 

template

Datatypelinkqueue::Getqueue()

{

if(front!=rear)

     return front->next->data;

}

template

intlinkqueue::Empty()

{

if(front==rear)

     return 1;//队列为空

else

     return 0;//队列非空

}

void main()

{

linkqueueQ;

    char q[100];

int choice;

do

{

     cout<<"|---欢迎使用中国移动通信公司广东分公司客服系统---|"<

     cout<<"|------------------1、输入来电客户-------------|"<

     cout<<"|------------------2、客户等待数量-------------|"<

     cout<<"|------------------3、完成客户业务-------------|"<

     cout<<"|------------------4、正在办理业务-------------|"<

     cout<<"|------------------5、EXIT---------------------|"<

     cout<

     cin>>choice;

     switch(choice)

     {

     case 1:

        {

            if(Q.Empty())

               cout<<"没有待办理的客户!"<

            Q.Enqueue(q[100]);

        }

        break;    

     case 2:

        cout<<"还有"<

     case 3:

        {

            if(Q.Empty())

               cout<<"没有待办理的客户!"<

            else

               cout<

        }

     case 4:

        cout<<"正在办理业务的客户号码:"<

     case 5:

        cout<<"您已安全退出系统!"<

     default:cout<<"没有此选项,请重选!"<

     }

}while(choice!=5);

cout<

}

七.    程序运行结果


插入客户信息的运行结果:


数据结构课堂设计报告_第8张图片


显示等待办理业务的客户数量:

数据结构课堂设计报告_第9张图片

 

显示完成办理业务的客户:

数据结构课堂设计报告_第10张图片

 

显示正在办理业务的客户:

数据结构课堂设计报告_第11张图片

 

显示退出客服系统: 

 数据结构课堂设计报告_第12张图片

 

八.    心得

我这次课堂设计的题目要求是管理客户向公司打进来的咨询电话,虽然知道是用队列的知识来做,但还是无从下手,尽管之前有做过对队列实现的实验,也知道是怎么实现的,但这次课堂设计的除了实现队列,还要与实际管理形式相结合,难度也相应增加了不少。从中,我也明白了理论与实际应用相结合的重要性,培养了基本的、良好的程序设计技能的能力。这次的课堂设计同样提高了我的综合运用所学知识来解决问题的能力,并使我对VC有了更深入的了解。《数据结构》是一门实践性很强的课程,上机实习是对学生全面综合素质进行训练的一种最基本的方法,是与课堂听讲、自学和练习相辅相成、必不可少的一个教学环节。而课堂设计使我们书本上的知识变“活”,起到深化理解和灵活掌握书本内容的作用,更是培养了我们对软件设计的动手能力和综合能力,把我们所学的知识应用于生活与工作中。

不过这次的课堂设计还是有好多不足的地方,比如:1、客户的手机号码如果是11位的话,就会陷入死循环,少于11位数字的才可以;2、没有显示接受办理客户业务的服务人员的信息等等。

总之,这次的课堂设计让我受益匪浅,明白了理论与实践相结合的重要性。

 

九、参考文献

   【1】数据结构(C++版)(第2版)王红梅,胡明,王涛编著 北京:清华大学出版社,2011.6

    【2】数据结构(C++版)学习辅导与实验指导(第2版) 王红梅,胡明,王涛编著 北京清华大学出版社,2011.9

 

 

 

 

你可能感兴趣的:(数据结构课堂设计报告)