数据结构课程设计
一、实训目的
通过课程设计,学会运用数据结构知识,针对具体应用,自己设计合理数据结构,确定存储结构,并能设计具体操作算法,
选择使用具体语言进行实现。掌握C++较复杂程序的组织和设计过程,调试技巧。学习解决实际问题的能力。
二、问题描述
赵斌是一个信管专业的学生,大学四年顺利毕业了。在毕业季,他也像其他学子一样,投身于求职大军,投出一份又一份求职简历,在苦苦地等待之后,他接到了中国移动通信公司广东分司的面试通知书,通知他于本月1号10点到公司面试。当天,晴空万里,艳阳高照,他身着西装,高兴地早早来到公司楼下等待。10点钟整,他和其他新人一起,坐到公司的面试现场。他领取的一一份程序设计题:假如你是我公司一名客服技术人员,现请你选择自己熟悉的语言,来设计一个程序,管理客户向公司打进来的咨询电话。
三、要求
1.请事行分析析使用方法和工具,说明自己的思路方法;
2.写一份完整的程序,并实例测试。
四、分析
1.使用方法:题目要求使用数据结构的知识来设计一个程序管理客户打进公司的电话,那么管理就应该包括客户信息的输入、查找、删除、清空输入记录等功能。而单链表可以实现上述的功能,因此可以使用从单链表中学到的知识、结合结构体与类来设计一个程序,完成对客户打进公司的电话的管理。
2.实训环境:计算机Windows 8系统,编程软件Microsoft Visual Studio vc6.0
五、实现代码
源代码:
头文件;
system.h
#ifndef system_H
#define system_H
static int count;
template<class T>
struct node
{
T data;
node<T>*next;
};
template<class T>
class queue
{
private:
node<T>*front,*rear;
public:
admin();
queue();
~queue();
void input(T x);
T delque();
T getque();
int empty();
int getcount(){return count-1;}
};
#endif;
system one
#include "system.h"
template<class T>
queue<T>::queue()
{
node<T>*s=NULL;
s=new node<T>;
s->next=NULL;
front=rear=s;
}
template<class T>
queue<T>::~queue()
{
node<T>*p=NULL;
while(front!=NULL)
{
p=front->next;
delete front;
front=p;
}
}
template<class T>
queue<T>::admin()
{
int mima;
cout<<"请输入密码:";
cin>>mima;
while(mima!=161950)
{
cout<<"登录失败,请重新输入密码:";
cin>>mima;
}
}
template<class T>
void queue<T>::input(T x)
{
int n;
cout<<"请输入要录入的来电客户人数:";
cin>>n;
for(int i=1;i<=n;i++)
{ count++;
cout<<"请输入排队的客户号码:"<<endl;
cin>>x;
node<T> *s=NULL;
s=new node<T>;
s->data=x;//申请一个数据域为X的结点s
s->next=NULL;
rear->next=s;
rear=s;//将结点S插入到队尾
}
}
template<class T>
T queue<T>::delque()
{
char sc7;
node<T> *p=NULL;
int x;
cout<<"是否完成该客户业务(是:y/Y,否:n/N):";
cin>>sc7;
if(sc7=='y'||sc7=='Y')
{count--;
if(rear==front)throw"输入错了!(下溢)";
p=front->next;
x=p->data; //暂存队头元素,暂存客户
front->next=p->next;//将队头元素所在的结点摘链
if(p->next==NULL) rear=front;//判断出队前队列长度是否为1
delete p;
return x;
}
else {cout<<"亲~还没有完成该客户的业务哦!"<<endl;
return 0;}
}
template<class T>
T queue<T>::getque()
{
if(front!=rear)
return front->next->data;
}
template<class T>
int queue<T>::empty()
{
if(front==rear)
return 1;
else return 0;
}
主函数;
#include<iostream>
#include<iomanip>
#include<string>
using namespace std;
#include"system_one.cpp"
queue<int> q1; char q;
void output()
{
int t;
cout<<endl;
if(q1.empty())
{
cout<<setw(4)<<"所在窗口"<<setw(20)<<"客户等待人数"<<setw(24)<<"正在办理业务客户号码"<<setw(14)<<"办理情况"<<endl;
cout<<setw(4)<<"窗口1"<<setw(18)<<q1.getcount()<<setw(24)<<"无客户办理业务"<<setw(24)<<"空闲等待中..."<<endl;
}
else
{
cout<<setw(4)<<"所在窗口"<<setw(20)<<"客户等待人数"<<setw(24)<<"正在办理业务客户号码"<<setw(14)<<"办理情况"<<endl;
cout<<setw(4)<<"窗口1"<<setw(18)<<q1.getcount()<<setw(20)<<q1.getque()<<setw(24)<<"办理中..."<<endl;cout<<endl;
}
}
void main()
{
q1.admin();
system("cls");
int choice;
do
{
cout<<setw(60)<<"|----------------------登录成功--------------------|"<<endl;
cout<<setw(60)<<"| |"<<endl;
cout<<setw(60)<<"| |"<<endl;
cout<<setw(60)<<"| 1、输入客户排队情况 |"<<endl;
cout<<setw(60)<<"| 2、客户等待数量 |"<<endl;
cout<<setw(60)<<"| 3、完成客户业务 |"<<endl;
cout<<setw(60)<<"| 4、正在办理业务 |"<<endl;
cout<<setw(60)<<"| 5、查看等待信息 |"<<endl;
cout<<setw(60)<<"| 6、退出 |"<<endl;
cout<<setw(60)<<"| |"<<endl;
cout<<setw(60)<<"|--------------------------------------------------|"<<endl;
cout<<setw(8)<<"请输入选项(1—6):";
cin>>choice;
switch(choice)
{
case 1:cout<<endl;
if(q1.empty())
{cout<<"没有排队的客户!"<<endl; q1.input(q);}
else
{cout<<"还有排队的客户哦!"<<endl;q1.input(q);break;}
case 2:cout<<endl;
cout<<"共有"<<q1.getcount()+1<<"个客户在等待!"<<endl;break;
case 3:cout<<endl;
output();
q1.delque();break;
case 4:cout<<endl;
cout<<"正在办理业务的客户号码:"<<q1.getque()<<endl;break;
case 5:output();break;
case 6:cout<<endl;
cout<<"感谢您的使用,已安全退出系统!祝您生活愉快!*^-^*"<<endl;break;
default:cout<<endl;
cout<<"您好!您所输入的有误!请重新输入:"<<endl;break;
}
}while(choice!=6);
}
六、体会
好难,真的好难。老师,我以后会好好看书的了。