一、实训目的
通过课程设计,学会运用数据结构知识,针对具体应用,自己设计合理数据结构,确定存储结构,并能设计具体操作算法,选择使用具体语言进行实现。掌握C++较复杂程序的组织和设计过程,调试技巧。学习解决实际问题的能力。
二、实训环境
计算机windows xp或其它版本,VC6.0或更高版本,或其它语言环境。
三、实习题目
题目4. 赵斌是一个信管专业的学生,大学四年顺利毕业了。在毕业季,他也像其他学子一样,投身于求职大军,投出一份又一份求职简历,在苦苦地等待之后,他接到了中国移动通信公司广东分司的面试通知书,通知他于本月1号10点到公司面试。当天,晴空万里,艳阳高照,他身着西装,高兴地早早来到公司楼下等待。10点钟整,他和其他新人一起,坐到公司的面试现场。他领取的一一份程序设计题: 假如你是我公司一名客服技术人员,现请你选择自己熟悉的语言,来设计一个程序,管理客户向公司打进来的咨询电话。请事行分析析使用方法和工具,说明自己的思路方法,写一份完整的程序,并实例测试。
四、设计说明书。
功能:拨打10086的基本功能在这里都能实现,为了真实性,昨天晚上特意打了5、6次10086,再次特地鸣谢中国移动10086。(下面有图文说明)
要求:以个人独立完成。
分析:我的分析与老师的不一样,所以有了上一篇文章。这篇课程设计的分析是借鉴信管班同学的,他的分析让我茅塞顿开!于是这片文章出现了。
代码:在最后。
收获和体会:这篇文章,要感谢中国移动,以及物联的小伙伴和信管班那位让我茅塞顿开的同学!下面的源代码于昨晚20:30左右,到今天14:40,历时多久,不知道!收获是巨大的。更深层次的了解到类函数的调用,返回值的使用,指针方方面面!还有激发我那死不认命的倔性!这么说吧,昨晚到今天我按F5(调试程序按钮)的次数,比我这半年来按的次数还要多!
不足:该程序代码本来是这个的1.5倍,后来被我删了好多,有一些我存在侥幸心理的,也就是说,这个代码有好多还是有bug的。但,我实在无法改了,已经到了我现在的极限了。我会继续努力的!
最后,附上一张电脑屏幕截图:
源代码如下:
头文件:
/*头文件aa.h*/
#include<iostream>
#include<stdlib.h>
#include<string>
#include <windows.h>
using namespace std;
struct Node //定义链表的节点
{
string phone,yewu;
bool zhuangtai;
int huafei,liuliang,duanxin;
Node *next;
};
class Phone
{
public:
Phone();
//Phone(string a);
~Phone(){};
int Insert(string a,int c);
int chaxun(string a);
int chongzhi(string a);
int banli(string a);
int tingji(string a);
int rengong();
void bianli(int c);
private:
Node *first;
};
Phone::Phone() //构造函数
{
first = new Node;
first->next=NULL;
}
int Phone::Insert(string a,int c) //虽名为插入,实质是初始化
{
Node *p=first,*s=NULL;
bool t=false;
int count = 0;
while(count<c-1 && p->phone!=a){
p=p->next;
count++;
}
if(p->phone!=a){
t=true;
s = new Node; //构造新节点
s->phone=a; //初始化
s->huafei=rand()/100+21; //随机数规律特定,原因未知
s->liuliang=rand()/100+200;
s->duanxin=rand()/100+29;
s->yewu="无";
s->zhuangtai=true;
p->next=s;p=s;
}
return t;
}
int Phone::chaxun(string a) //查询服务
{
Node *p=first;
while(p->phone!=a) //找到你的手机号码
p=p->next;
for(;;){
system("cls");
int xuanze;
cout<<"\n\n\t话费查询请按 1 ;"
<<"\n\n\t流量查询请按 2 ;"
<<"\n\n\t套餐查询请按 3 ;"
<<"\n\n\t返回上层请按 0 ;"<<endl;
cin>>xuanze;
switch(xuanze)
{
system("cls");
case 1:cout<<"您的余额为"<<p->huafei
<<"元"<<endl;break;
case 2:cout<<"您的剩余流量为"<<p->liuliang
<<"MB"<<endl;break;
case 3:cout<<"您的套餐使用情况如下:"
<<"您的余额为"<<p->huafei<<"元;"
<<"剩余流量为"<<p->liuliang<<"MB;"
<<"剩余短信为"<<p->duanxin<<"条."<<endl;break;
case 0:return 0;
default:cout<<"对不起,您的输入有误~"<<endl;
}
system("pause");
}
}
int Phone::chongzhi(string a) //充值服务
{
Node *p=first;
while(p->phone!=a) //找到你的手机号码
{
p=p->next;
}
int x;
for(;;){
system("cls");
cout<<"\n\n\t请选择您的银行卡开行银行"
<<"\n\n\t中 国 银 行 请按 1 ;"
<<"\n\n\t中国人民银行请按 2 ;"
<<"\n\n\t中国建设银行请按 3 ;"
<<"\n\n\t中国工商银行请按 4 ;"
<<"\n\n\t中国农业银行请按 5 ;"
<<"\n\n\t中国交通银行请按 6 ;"
<<"\n\n\t返回上 一 层请按 0 ;"<<endl;
cin>>x;
if(1<=x&&x<=6){
system("cls");
cout<<"请输入您的银行卡号码,回车键结束:";
string id;
cin>>id;
cout<<"请输入您的银行卡密码,回车键结束:";
cin>>id;
cout<<"请输入您所要充值的金额,回车键结束:";
int j;
cin>>j;
//if(p->phone==a)
p->huafei=p->huafei+j;
cout<<"您的充值已完成,你的余额为:"<<p->huafei<<"元"<<endl;
system("pause");
}
else if(x==0)
return 0;
else
cout<<"对不起,您的输入有误~!";
}
}
int Phone::banli(string a) //套餐办理
{
string tel = a;
Node *p=first;
while(p->phone!=a) //找到你的手机号码
{
p=p->next;
}
string yewu;
int x;
for(;;){
system("cls");
cout<<"\n\n\t开通19元包月套餐请按 1 ;"
<<"\n\n\t开通29元包月套餐请按 2 ;"
<<"\n\n\t开通49元包月套餐请按 3 ;"
<<"\n\n\t开通99元包月套餐请按 4 ;"
<<"\n\n\t 返 回 上 一 层 请按 0 ;"<<endl;
cin>>x;
switch(x)
{
case 0:return 0;
case 1:yewu = "19元包月套餐";break;
case 2:yewu = "29元包月套餐";break;
case 3:yewu = "49元包月套餐";break;
case 4:yewu = "99元包月套餐";break;
default:cout<<"对不起,您的输入有误~!";
}
if(x==1||x==2||x==3||x==4){
p->yewu=yewu;
cout<<"您已开通"<<p->yewu<<",即日起开始生效。"<<endl;
system("pause");
}
}
}
int Phone::tingji(string a)
{
system("cls");
Node *p=first;
while(p->phone!=a) //找到你的手机号码
{
p=p->next;
}
char k;
if(p->zhuangtai!=true)
{
cout<<"您的手机卡已停机,是否开通(Y/N)?";
cin>>k;
if(k=='Y'||k=='y'){
p->zhuangtai=true;
cout<<"您的手机卡已重新开通。按任意键返回上一层~!"<<endl;
system("pause");
}
return 0;
}
else
{
cout<<"您的手机卡确定要停机(Y/N)?";
cin>>k;
if(k=='Y'||k=='y'){
p->zhuangtai=false;
cout<<"您的手机卡已停机。按任意键返回上一层~!"<<endl;
system("pause");
}
return 0;
}
}
int Phone::rengong() //人工服务,想要人性化服务,请拨打10086按0!
{
system("cls");
cout<<"\n\t您好,000"<<rand()%100+1
<<"号客服为您服务~!"<<endl;
Sleep(1000);
cout<<"... ...\n";
Sleep(1000);
cout<<"... ...\n";
Sleep(1000);
cout<<"... ...\n";
Sleep(1000);
cout<<"感谢您的来电,谢谢再见~!"<<endl;
system("pause");
return 0;
}
void Phone::bianli(int c) //今天谁打电话来了
{
system("cls");
string ting = " ";
Node *p = first->next;
int count=0;
cout<<"\n今天查询的号码情况如下:";
while(count<c-1){
if(p->zhuangtai!=true)
ting = "已停机";
cout<<"\n号码:"<<p->phone
<<'\n'<<ting
<<"\n已开通"<<p->yewu<<";"
<<"\n套餐使用情况如下:"
<<"余额为"<<p->huafei<<"元;"
<<"剩余流量为"<<p->liuliang<<"MB;"
<<"剩余短信为"<<p->duanxin<<"条."<<endl;
p=p->next;
count++;
}
}
源程序代码:
#include<iostream>
#include<stdlib.h>
#include<string>
#include <windows.h>
#include"aa.h"
using namespace std;
int main()
{
Phone P;
string a,s1;
int ss,c=1;
for(;;){
cout<<"您的电话号码:";
cin>>a;
if(P.Insert(a,c)!=0)
c++;
for(;;){
system("cls");
cout<<"请选择语言:" //此处纯属搞怪~!
<<"\n\n\t普通话请按 1 ;"
<<"\n\n\t潮汕话请按 2 ;"
<<"\n\n\t粤 语 请按 3 ;"
<<"\n\n\t英 语 请按 4 ;"<<endl;
cin>>ss;
if(ss==4){
system("cls");
cout<<"对不起,该地区暂未开通英语服务,"
<<"请选择其他语言咨询,谢谢~!"<<endl;
system("pause");
}
if(ss==1||ss==2||ss==3)
break;
}
//system("cls");
for(;;){
system("cls");
cout<<"\n\n\t欢迎致电10086!"
<<"\n\n\t业务查询请按 1 ;"
<<"\n\n\t话费充值请按 2 ;"
<<"\n\n\t业务办理请按 3 ;"
<<"\n\n\t停 开 机请按 4 ;"
<<"\n\n\t人工服务请按 0 ;"
<<"\n\n\t挂 机 请按 999 ;"<<endl;
int b;
cin>>b;
switch(b)
{
case 1:P.chaxun(a);break; //查询话费、流量之类的
case 2:P.chongzhi(a);break; //手机充值
case 3:P.banli(a);break; //套餐办理
case 4:P.tingji(a);break; //停机?
case 0:P.rengong();break; //人工服务,有惊喜哦!
case 999:cout<<"感谢您的来电,祝您生活愉快,再见~!";break;
default:cout<<"对不起,该服务尚未开启。"<<endl;
}
if(b==999){
system("pause");
break;
}
}
system("cls");
cout<<"\n拨打10086请按任意键回车~!"
<<"\n如无需重新拨打10086咨询,请按88(拜拜)结束~!";
cin>>s1;
if(s1=="88")
{
P.bianli(c);
system("pause");
return 0;
}
}
}
以下是调试运行情况:
拨打10086:注:图片中电话号码为您的电话号码;
接通电话:
界面:
查询:
充值:
套餐办理:
停/开机:
人工服务:
挂机:
再次拨打:
最后这一个属于
中国移动内部的页面