一、实训目的
通过课程设计,学会运用数据结构知识,针对具体应用,自己设计合理数据结构,确定存储结构,并能设计具体操作算法,选择使用具体语言进行实现。掌握C++较复杂程序的组织和设计过程,调试技巧。学习解决实际问题的能力。
二、实训环境
计算机windows xp或其它版本,VC6.0或更高版本,或其它语言环境。
三、实习题目
赵斌是一个信管专业的学生,大学四年顺利毕业了。在毕业季,他也像其他学子一样,投身于求职大军,投出一份又一份求职简历,在苦苦地等待之后,他接到了中国移动通信公司广东分司的面试通知书,通知他于本月1号10点到公司面试。当天,晴空万里,艳阳高照,他身着西装,高兴地早早来到公司楼下等待。10点钟整,他和其他新人一起,坐到公司的面试现场。他领取的一一份程序设计题: 假如你是我公司一名客服技术人员,现请你选择自己熟悉的语言,来设计一个程序,管理客户向公司打进来的咨询电话。请事行分析析使用方法和工具,说明自己的思路方法,写一份完整的程序,并实例测试。
源代码:
#include<iostream>
using namespace std;
template<class DT>
struct Node
{
DT data;
Node<DT> *next;
Node<DT> *phone;
};
template<class DT>
class Link
{
public:
Link(){}; //构造函数
Link(DT a[],DT b[]); //建立有n个元素的单链表
~Link(){}; //析构函数
int Find(DT d); //在表中查找某日的所有咨询电话
int Locate(DT x); //在表中查找电话号码为x的元素
void Insert(DT d,DT x); //插入
void Printlink(); //遍历
private:
Node<DT> *first;
};
template<class DT>
Link<DT>::Link(DT a[],DT b[])
{
Node<DT> *r,*s,*p;
first=new Node<DT>; //头结点
r=first;
int n=15;
for(int i=0;i<n;i++)
{
s=new Node<DT>; //创造一个新的节点
s->data=a[i]; //把日期输入该节点
r->next=s;r=s; //连接在尾节点,尾指针指向尾节点
}
for(int j=0;i<n;j++)
{
s=new Node<DT>
s->data=b[j];
p->phone = s;p=s;
}
}
template<class DT>
int Link<DT>::Find(DT d)
{
Node<DT> *p = first; //工作指针p指向头结点
while(p->next!=NULL)
{
p = p->next;
if(p->data==d)
break;
}
if(p==NULL)
cout<<"查无此日信息"<<endl;
else{
cout<<"在"<<p->data<<"的所有咨询电话如下:\n";
while(p!=NULL){
p=p->phone;
cout<<p->data<<endl;
}
}
return 0;
}
template<class DT>
int Link<DT>::Locate(DT x)
{
bool pp=false;
Node<DT> *p=first;
while(p!=NULL)
{
p=p->next;
Node<DT> *q=p;
while(q!=NULL)
{
q=q->phone;
if(q->data==x){
cout<<"此号码在"<<p->data<<"打过咨询电话。"<<endl;
pp=true;break;
}
}
if(pp==false)
cout<<"查无此号码的咨询记录"<<endl;
}
return 0;
}
/*
template<class DT>
void Link::Insert(DT d,DT x) //来电存储一般按顺序
{
Node<DT> *p=first;
while(p->next!=NULL) //所以只要存在他们的末尾即可
p=p->next;
if(p->data==d){
while(p->phone!=NUll)
{
p=p->phone;
}
s=new Node<DT>;
s->data=x;
p->phone=s
}
else
{
s=new Node<DT>;
p->next=s;p=s;
s=new Node<DT>;
s->data=x;
p->phone=s;
}
}
*/
template<class DT>
void Link<DT>::Printlink()
{
Node<DT> *a, *b;
Node<DT> *s = NULL;
s=new Node<DT>;
s->next = NULL;
a = b = s;
Node<DT> *p = first;
while(p!=NULL)
{
s=new Node<DT>;
s=p;
p=p->next;
cout<<"在"<<s->data<<" 的咨询电话如下:"<<endl;
while(s!=NULL)
{
s=s->phone;
cout<<s->data<<endl;
}
cout<<endl;
}
}
void main()
{
Link<double> L;
double a[14]={20130101,20130102,20130103,20130104,20130105,};
double b[15][15]={10000,10086,10010,95588,12580,12315};
L.Link(a,b);
int l;double d,x;
cout<<"请选择你要执行的功能:\n"
<<"1:按咨询日期查询\n"
<<"2:按咨询号码查询\n"
<<"3:查看所有咨询号码\n"
<<"*:任意键回车退出\n"<<endl;
cin>>l;
if(l==1)
{
cout<<"请输入某日:";
cin>>d;
L.Find(d);
}
else if(l==2)
{
cout<<"清输入查询号码:";
cin>>x;
L.Locate(x);
}
else if(l==3)
L.Printlink();
}
特此申明,该源代码还未通过测试。
4.课程设计心得及体会:
思考用了一周,实现用了2天,但还是未能通过,因爲遇到了我最烦遇到的问题,就是这个位置冲突。无法得知原因,问了挺多人的,都说没见过这情况,心情有点急躁。
也从这次课程设计知道,自己知道的还是太少了,想当日,肖老师跟我们说,没敲过一万行以上代码的程序都不能称之为程序。想想,道理至简,不过如此。勤!方可进步!