银行客户排队等候系统模拟.docx
- 文档编号:11158886
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:17
- 大小:18.27KB
银行客户排队等候系统模拟.docx
《银行客户排队等候系统模拟.docx》由会员分享,可在线阅读,更多相关《银行客户排队等候系统模拟.docx(17页珍藏版)》请在冰点文库上搜索。
银行客户排队等候系统模拟
《数据结构》实验报告
题目:
银行客户排队等候系统模拟
班级:
姓名:
学号:
完成日期:
2012/4/16
1.问题描述
客户到银行办理业务,需要取号排队等候。
客户分为VIP客户、理财客户、一般客户三种类型。
不同类型客户,取得不同的排队序号凭证,进入不同序列排队等候。
当服务窗口出现空闲时,按既定策略从三种类型客户中选取客户接受服务。
选取客户接受服务的策略如下:
(1)三种类型客户的服务优先顺序从高到低依次为:
VIP客户、理财客户、一般客户;
(2)相同类型的客户采取先来先服务的原则;
(3)当一般客户连续5次未被选中时,下一次优先选取一般客户接受服务。
用C语言编写程序,模拟上述操作过程。
2.需求分析
(1)输入的形式和输入值的范围;
输入的形式:
提示的一些数字,若输入错误,系统将会提示用户重新输入。
输入值的范围:
不为特殊的字母等。
(2)输出的形式;
输出的形式:
进入银行模拟系统。
VIP客户,理财客户,一般客户的排队号码。
每个客户接受服务的时间和次序。
退出银行模拟系统。
(3)程序所能达到的功能。
不同类型客户,取得不同的排队序号凭证,进入不同序列排队等候。
当服务窗口出现空闲时,按既定策略从三种类型客户中选取客户接受服务。
3.概要设计
(1)队列的ADT定义:
ADTQueue{
数据对象:
D={ai|ai∈ElemSet,i=1,2,...,n,n≥0}
数据关系:
R1={
约定an端为队尾,a1端为队首。
基本操作:
InitQueue(LinkQueue&Q);初始化客户排队队列
EnQueue(LinkQueue&Q,inte);客户进入排队队列
DeQueue(LinkQueue&S,inte);客户进入服务队列
}ADTqueue
(2)系统中子程序及功能
intEnQueue(LinkQueue&Q,inte){//使客户进入排队队列
QNode*p;
p=(QueuePtr)malloc(sizeof(QNode));
if(!
p){
returnOVERFLOW;
};
p->data=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
returnOK;
};
intDeQueue(LinkQueue&Q,inte){//使客户从排队队列进入服务状态
QNode*p;
if(Q.front==Q.rear){
returnOVERFLOW;
};
p=Q.front->next;
e=p->data;
Q.front->next=p->next;
if(Q.rear==p){
Q.rear=Q.front;
}
free(p);
returnOK;
};
intInitQueue(LinkQueue&Q){//使客户排队队列初始化
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
if(!
Q.front){
returnOVERFLOW;
};
Q.rear->data=0;
Q.front->next=NULL;
returnOK;
};
(3)主程序及各程序模块(函数)之间的层次(调用)关系。
case0:
printf("谢谢使用\n");
break;
case1:
c1++;
EnQueue(Q1,c1);//调用函数进入VIP队列
printf("%d号VIP客户入队\n",c1);
break;
case2:
c2++;
EnQueue(Q2,c2);//调用函数进入理财队列
printf("%d号理财客户入队\n",c2);
break;
case3:
c3++;
EnQueue(Q3,c3);
printf("%d号一般客户入队\n",c3);//调用函数进入一般队列
break;
case4:
if(count==5){
if(!
DeQueue(Q3,c3)){//调用函数使Q3出队列并判断
}
if(!
DeQueue(Q1,c1)){//调用函数使Q1出队列并判断
if(!
DeQueue(Q2,c2)){//调用函数使Q2出队列并判断
if(!
DeQueue(Q3,c3)){//调用函数使Q3出队列并判断
printf("无客户服务\n");
break;
4.测试分析
(1)测试数据与测试结果:
**********************************************************
欢迎进入银行模拟系统
**********************************************************
1.开始模拟0.退出
1
1VIP进入
2理财客户进入
3一般客户进入
4客户接受服务
0结束服务
1
10001号VIP客户入队
1VIP进入
2理财客户进入
3一般客户进入
4客户接受服务
0结束服务
2
20001号理财客户入队
1VIP进入
2理财客户进入
3一般客户进入
4客户接受服务
0结束服务
3
30001号一般客户入队
1VIP进入
2理财客户进入
3一般客户进入
4客户接受服务
0结束服务
4
10001号VIP客户服务
1VIP进入
2理财客户进入
3一般客户进入
4客户接受服务
0结束服务
4
20001号理财客户服务
1VIP进入
2理财客户进入
3一般客户进入
4客户接受服务
0结束服务
4
30001号普通客户服务
1VIP进入
2理财客户进入
3一般客户进入
4客户接受服务
0结束服务
4
无客户服务
1VIP进入
2理财客户进入
3一般客户进入
4客户接受服务
0结束服务
5
输入错误,请重新输入
1VIP进入
2理财客户进入
3一般客户进入
4客户接受服务
0结束服务
0
谢谢使用
Pressanykeytocontinue
(2)调试过程中遇到的问题及解决方法
1.初始想法是创建三对指针,从而创建三组队列,从而实现三组队列的入队出对等一系列操作。
修改程序使函数中只有一对指针,并通过函数的重复调用使函数重复执行三遍,实现队列的操作。
2.编写if,else循环的时候有一些小错误。
利用已经学习的c语言只是自己解决。
3.switch,case语句在一定程度上有一些问题,部分时候没有预想中的效果,存在一些明显的错误。
和同学商量解决。
4.多个if语句套用的时候出现一些小问题,不能出现原有的循环效果,并且出现语法错误。
自己上网查找资料解决。
(3)算法的时间复杂度分析、空间复杂度分析和改进设想。
时间复杂度:
需要根据用户输入的信息来确定。
改进设想:
1,利用函数使用户输入字母等特殊符号的时候我们可以利用函数返回一定的值,使函数不至于陷入死循环。
2,利用函数使整个函数程序代码更高效,并且是函数的代码的可用性更高。
3,考虑用户一些的实际情况使银行模拟系统更加完善,更加人性化。
5.使用说明
弹出窗口为:
**********************************************************
欢迎进入银行模拟系统
**********************************************************
1.开始模拟0.退出
用户数如0或者1,使用户进入银行模拟系统。
进入银行模拟系统时:
1VIP进入
2理财客户进入
3一般客户进入
4客户接受服务
0结束服务
选择1、2、3、4、0使程序执行一定的操作,1VIP进入,2理财客户进入,3一般客户进入,4客户接受服务,0结束服务。
6.总结
这次实验是数据结构的第一次实验,由于老师早些时候九二将实验内容放在了教务系统上,因此实验我们在实验前已经编写好了,实验过程中,遇到了一些困难和一些自己不太了解的语法错误,在自己的认真修改的过程中,最终编出这个程序了。
这个程序时有关队列的小程序,只涉及三个队列的三个操作,分别是初始化,入队,出队,这个程序可以说是程序设计中比较简单的一个程序,因此实验难度也不大。
在这次试验中,我不仅巩固了我在理论上对于数据结构中对队列的理解,也使我对数据结构试验有了一定的了解,有利于数据结构后续的学习。
总之这次实验在老师的知道下,我收获很多,希望下次试验能做的更加出色。
7.附录
源程序代码:
/*此程序将构造三个队列,
当VIP客户利用其编号对10000取余为1判断并执行相应操作,
当理财客户利用其编号对10000取余为2判断并执行相应操作,
当一般客户利用其编号对10000取余为3判断并执行相应操作,
*/
#include
#include
#include
#defineOK1
#defineERROR-1
#defineOVERFLOW0
typedefstructQNode{
intdata;
structQNode*next;
}QNode,*QueuePtr;
typedefstruct{
QueuePtrfront;
QueuePtrrear;
}LinkQueue;
intEnQueue(LinkQueue&Q,inte){//入队列
QNode*p;
p=(QueuePtr)malloc(sizeof(QNode));
if(!
p){
returnOVERFLOW;
};
p->data=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
returnOK;
};
intDeQueue(LinkQueue&Q,inte){//出队列
QNode*p;
if(Q.front==Q.rear){
returnOVERFLOW;
};
p=Q.front->next;
e=p->data;
Q.front->next=p->next;
if(Q.rear==p){
Q.rear=Q.front;
}
free(p);
returnOK;
};
intInitQueue(LinkQueue&Q){
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
if(!
Q.front){
returnOVERFLOW;
};
Q.rear->data=0;
Q.front->next=NULL;
returnOK;
};
intmain(){
printf("**********************************************************\n");
printf("欢迎进入银行模拟系统\n");
printf("**********************************************************\n");
printf("1.开始模拟0.退出\n");
intn;
scanf("%d",&n);
if(n==1){
LinkQueueQ1;
LinkQueueQ2;
LinkQueueQ3;
InitQueue(Q1);
InitQueue(Q2);
InitQueue(Q3);
intcount=0;//判断五次的不为一般客户后执行一般客户
intshur;
intc1=10000;
intc2=20000;
intc3=30000;
while(shur){
printf("1VIP进入\n2理财客户进入\n3一般客户进入\n4客户接受服务\n0结束服务\n");
scanf("%d",&shur);
switch(shur){
case0:
printf("谢谢使用\n");
break;
case1:
c1++;
EnQueue(Q1,c1);
printf("%d号VIP客户入队\n",c1);
break;
case2:
c2++;
EnQueue(Q2,c2);
printf("%d号理财客户入队\n",c2);
break;
case3:
c3++;
EnQueue(Q3,c3);
printf("%d号一般客户入队\n",c3);
break;
case4:
if(count==5){
if(!
DeQueue(Q3,c3)){
printf("%d号一般客户进入服务\n",c3);
count=0;
break;
}
}
if(!
DeQueue(Q1,c1)){
if(!
DeQueue(Q2,c2)){
if(!
DeQueue(Q3,c3)){
printf("无客户服务\n");
break;
}
else{
printf("%d号普通客户服务\n",c3);
count=0;
}
}
else{
printf("%d号理财客户服务\n",c2);
count++;
}
}
else{
printf("%d号VIP客户服务\n",c1);
count++;
}
break;
default:
printf("输入错误,请重新输入\n");
}
}
}
else{
printf("谢谢合作\n");
}
returnOK;
}
运行结果:
**********************************************************
欢迎进入银行模拟系统
**********************************************************
1.开始模拟0.退出
1
1VIP进入
2理财客户进入
3一般客户进入
4客户接受服务
0结束服务
2
20001号理财客户入队
1VIP进入
2理财客户进入
3一般客户进入
4客户接受服务
0结束服务
3
30001号一般客户入队
1VIP进入
2理财客户进入
3一般客户进入
4客户接受服务
0结束服务
4
20001号理财客户服务
1VIP进入
2理财客户进入
3一般客户进入
4客户接受服务
0结束服务
4
30001号普通客户服务
1VIP进入
2理财客户进入
3一般客户进入
4客户接受服务
0结束服务
4
无客户服务
1VIP进入
2理财客户进入
3一般客户进入
4客户接受服务
0结束服务
0
谢谢使用
Pressanyshurtocontinue
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 银行 客户 排队 等候 系统 模拟