版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
银行排队系统一、【设计要求:】假设有你n个窗口对外接待业务,从早晨银行开门起不断有客户进入。客户在客户人数众多时需在选择窗口排队。编制一个程序模拟这种排队活动,并计算一天中客户在银行逗留的平均时间。二、【实验目的:】将数据结构的语言、思想运用到现实生活中,学以至用,通过实验加深对数据结构知识的理解和运用,同时我们将银行排队系统转化为电脑语言时,对生活事物观察和学习也更加敏捷。三、【实验仪器:】海尔电脑一台。四、【编译软件:】MicrosoftVisualC++6.0五、【设计思路:】见银行排队系统导航图六、【程序分析:】(一)、头函数#include<stdio.h>#include<malloc.h>#include<stdlib.h>#include<conio.h>#include<time.h>(一)、主函数功能:生成系统主菜单,为进入各个界面提供通道。主要为SWITCH开关语句进入不同的界面。源程序:voidmain()//主函数 time_tstrat,end; floatallsum=0,average=0; floatA[10]={0,0,0,0,0,0,0,0,0,0};intc,x,v=0,w=0;Initshuzu();Initqueue();doublesum=0;while(1)printf("\n******************欢迎光临中国银行***************\n");printf("\n1顾客到达\n");printf("2顾客离开\n");printf("3查看业务办理\n");printf("4查看排队情况\n");printf("5退出\n\n"); time(); printf("***************欢迎光临中国银行********************\n"); printf("请输入:");scanf("%d",&c);switch(c)case1: system("cls"); printf("\n****************顾客到达界面*******************\n\n"); intk=0; inta; printf("请选择你的用户类型:VIP用户请按1;\n普通卡用户请按其它键.\n"); printf("请输入:"); scanf("%d",&a); system("cls"); break;case2: system("cls");printf("\n***************顾客离开界面*****************\n\n");printf("请输入离开顾客得编号:\n");scanf("%d",&x);likai(x);mygrade(); w++; allsum+=A[0]; getch(); system("cls");break;case3: system("cls"); printf("\n******************业务查询界面**************************\n\n");printl(); getch(); system("cls");break;case4:system("cls"); printf("\n******************排队查询界面************************\n\n");print2(); getch(); system("cls");break;case5:return; getch(); system("cls");case6: {system("cls"); printf("\n**************系统查询界面**************************\n\n"); charcool[3]; inti=0,k=0; printf("请输入你的卡号:"); scanf("%d",&i);printf("请您输入五位密码:"); while(cool[k-1]!='')cool[k]=getch(); k++;printf("*"); if(i==000&&cool[0]=='1'&&cool[1]=='1'&&cool[2]=='1'&&cool[3]=='1') average=allsum/w; printf("\n至今已有%d位普通用户,%d位vip用户成功办理业务!",w,vip1); printf("\n普通用户业务办理总共用时%0.2f,平均用时%0.2f",allsum,average); getch(); system("cls"); break;default:printf("输入有误!请重新输入:\n"); getch(); system("cls");运行界面:到达界面:当客户到达时,在主菜单输入“1”进入“客户到达界面”。此界面区分VIP客户到达和普通客户到达。VIP:客户在“到达界面”输入“1”普通客户:客户在“到达界面”输入“2”,系统即为客户分配业务号,凭此号办理业务、排队或离开。使用函数:vip(a);验证VIP用户。daoda(v);Enqueue(&Q,x);将办理业务人员写入线性表,排队人员写入链表。time1();开始记录时间。vip(a)源程序:voidvip(intx)//vip用户认证 inti,a; a=x; charch[3];intk=0; switch(a) case1:{ printf("请输入你的卡号:"); scanf("%d",&i);printf("请您输入五位密码:");while(ch[k-1]!='')ch[k]=getch(); k++;printf("*"); if(i==100&&ch[0]=='1'&&ch[1]=='1'&&ch[2]=='1'&&ch[3]=='1') printf("\n尊敬的VIP用户您好,请您直接到VIP区办理业务!\n"); vip1++; elseif(i==200&&ch[0]=='2'&&ch[1]=='2'&&ch[2]=='2'&&ch[3]=='2') printf("\n尊敬的VIP用户您好,请您直接到VIP区办理业务!\n"); vip1++; elseif(i==300&&ch[0]=='3'&&ch[1]=='3'&&ch[2]=='3'&&ch[3]=='3') printf("\n尊敬的VIP用户您好,请您直接到VIP区办理业务!\n"); vip1++;elseif(i==400&&ch[0]=='4'&&ch[1]=='4'&&ch[2]=='4'&&ch[3]=='4') printf("\n尊敬的VIP用户您好,请您直接到VIP区办理业务!\n"); vip1++;elseif(i==500&&ch[0]=='5'&&ch[1]=='5'&&ch[2]=='5'&&ch[3]=='5') printf("\n尊敬的VIP用户您好,请您直接到VIP区办理业务!\n"); vip1++; elseprintf("\n你的输入有误!\n"); break; default: break; daoda(v)源程序:voiddaoda(intx)//解决顾客到达事件算法 inti=L.len+1; if(L.len<n) { L.A[i]=x; i++; L.len++;elseEnqueue(&Q,x);voidEnqueue(Linkqueue*Q,intelem)//进队算法Lnode*s;s=(Lnode*)malloc(sizeof(Lnode));s->data=elem;s->next=NULL;Q->rear->next=s;Q->rear=s;time1()源程序:time1()//时间函数time_ttimep;time(&timep);time=difftime(end,start);运行结果:客户离开界面:当客户完成办理业务需要离开时。在主菜单输入“2”进入“客户离开界面”。此界面提供服务评分。首先输入自己的客户号,然后选择自己办理业务的柜台号,结合自己对这次服务的满意度给出评分,然后系统给出此柜台的平均分和自己办理业务过程中所需要的时间。使用函数:likai(x)intDlqueue(Linkqueue*Q)离开时出队操作,便将排队的客户写到业务办理的线性表里。mygrade()intpingfeng()柜台报务评分。time1()中止时间记录,显示从开始记时到此时候的时间。likai(x)源程序:voidlikai(intx)//解决顾客离开事件算法 inti=0; do if(x>L.len) printf("输入有误!\n请重新输入:"); scanf("%d",&x); else for(i=0;i<=L.len;i++) if(i==x) printf("尊敬的%d号顾客您好!\n",x); L.A[i]=0; L.len--; if(Q.front!=Q.rear) inty=Dlqueue(&Q); L.A[i]=y; L.len++; }while(i==0);intDlqueue(Linkqueue*Q)源程序:intDlqueue(Linkqueue*Q)//出队算法Lnode*t;intx;if(Q->front==Q->rear)printf("队列为空!\n");exit(1);elset=Q->front->next;Q->front->next=t->next;x=t->data;free(t);returnx;mygrade()源程序:voidmygrade()//主评分函数 printf("为了改善服务质量,请你对我们的服务进行评价。谢谢!\n"); z=guitai(); y=pingfeng();switch(z)//柜台评分处理 case1://1号柜台评分处理 sum1+=y; i1++; ave1=sum1/i1; printf("%d号柜台的平均满意度为%0.2f。感谢你的评分,谢谢!!!\n",z,ave1); break; case2://2号柜台评分处理 sum2+=y; i2++; ave2=sum2/i2; printf("%d号柜台的平均满意度为%0.2f。感谢你的评分,谢谢!!!\n",z,ave2); break;case3://3号柜台评分处理 sum3+=y; i3++; ave3=sum3/i3; printf("%d号柜台的平均满意度为%0.2f。感谢你的评分,谢谢!!!\n",z,ave3); break; case4://4号柜台评分处理 sum4+=y; i4++; ave4=sum4/i4; printf("%d号柜台的平均满意度为%0.2f。感谢你的评分,谢谢!!!\n",z,ave4); break; case5://5号柜台评分处理 sum5+=y; i5++; ave5=sum5/i5; printf("%d号柜台的平均满意度为%0.2f。感谢你的评分,谢谢!!!\n",z,ave5); break; default:printf("你的输入有误,请重新输入!\n");getch();intpingfeng()源程序:intpingfeng()//判断输入的分数是否正确 inty=0;printf("请输入你评分(1-5):\n1分…………非常不满意;\n2分…………比较不满意;\n3分…………一般满意;\n4分…………比较满意;\n5分…………非常满意。\n"); printf("请输入:"); scanf("%d",&y); if(y<1||y>5) printf("你输入评分有误,请重新输入!\n");printf("请输入你的评分(1-5):\n"); scanf("%d",&y); else printf("你的评分为%d.\n",y); returny;运行结果:业务查询界面:在主菜单输入“3”进入“业务查询界面”,在此界面可查询到正在业务办理的情况。使用函数:printl()显示正在办理业务的客户。printl()源程序:voidprintl()//输出数组算法 inti;printf("正在办理业务的顾客编号为:\n");for(i=1;i<=L.len;i++) printf("%d",L.A[i]); printf("\n");运行结果:排队查询界面:在主菜单输入“4”,进入“排队查询界面”,此界面提供客户的排队情况、排队人数。使用函数:print2()显示排队情况。print2()源程序:voidprint2()//输出队列算法 inti=0;printf("正在等候办理业务的顾客编号为:");Lnode*s=Q.front->next;while(s!=NULL)printf("%d",s->data);s=s->next; i++;printf("\n您的前面一共有%d人在排队,请您稍候!",i);printf("\n");运行结果:系统查询:因为此功能为内部工作人员使用,所以通道选项在主菜单上隐藏。在主菜单输入“6”,进入“系统查询界面”。通过此此界面的卡号、密码验证,就可以查询到系统开起至查询时办理业务的普通客户、VIP客户人数。并可以显示所有普通客户办理业务的总时间,每个客户所用的平均时间。查询系统运行的时间。源程序:system("cls"); printf("\n************************系统查询界面**************************\n\n"); charcool[3]; inti=0,k=0; printf("请输入你的卡号:"); scanf("%d",&i);printf("请您输入五位密码:"); while(cool[k-1]!='')cool[k]=getch(); k++;printf("*"); if(i==000&&cool[0]=='1'&&cool[1]=='1'&&cool[2]=='1'&&cool[3]=='1') average=allsum/w; xi=difftime(end,start); printf("\n至今已有%d位普通用户,%d位vip用户成功办理业务!",w,vip1); printf("\n普通用户业务办理总共用时%0.2f,平均用时%0.2f\n",allsum,average); printf("系统已运行%0.2f秒!",xi); getch(); system("cls"); break;运行结果:附:全部源代码#include<stdio.h>#include<malloc.h>#include<stdlib.h>#include<conio.h>#include<time.h>#definen3intvip1=0;inty,z;floatsum1=0,sum2=0,sum3=0,sum4=0,sum5=0;floati1=0,i2=0,i3=0,i4=0,i5=0;floatave1=0,ave2=0,ave3=0,ave4=0,ave5=0;staticintN;structList{intA[n+1];//顾客用来办理业务的N个窗口intlen;//表示数组中的元素个数}L;structLnode{//链表结点类型intdata;Lnode*next;structLinkqueue{//链式存储的等候队列的类型定义Lnode*front;Lnode*rear;}Q;voidInitshuzu()//初始化线性的算法for(inti=1;i<=n;i++)L.A[i]=0;//元素值为0,表示编号为I的窗口当前状态为空L.len=0;voidInitqueue()//初始化队列的算法Q.front=Q.rear=(Lnode*)malloc(sizeof(Lnode));Q.front->next=NULL;voidEnqueue(Linkqueue*Q,intelem)//进队算法Lnode*s;s=(Lnode*)malloc(sizeof(Lnode));s->data=elem;s->next=NULL;Q->rear->next=s;Q->rear=s;intDlqueue(Linkqueue*Q)//出队算法Lnode*t;intx;if(Q->front==Q->rear)printf("队列为空!\n");exit(1);elset=Q->front->next;Q->front->next=t->next;x=t->data;free(t);returnx;voidprintl()//输出数组算法 inti;printf("正在办理业务的顾客编号为:\n");for(i=1;i<=L.len;i++) printf("%d",L.A[i]); printf("\n");voidprint2()//输出队列算法 inti=0;printf("正在等候办理业务的顾客编号为:");Lnode*s=Q.front->next;while(s!=NULL)printf("%d",s->data);s=s->next; i++;printf("\n您的前面一共有%d人在排队,请您稍候!",i);printf("\n");voiddaoda(intx)//解决顾客到达事件算法 inti=L.len+1; if(L.len<n) { L.A[i]=x; i++; L.len++;elseEnqueue(&Q,x);voidlikai(intx)//解决顾客离开事件算法 inti=0; do if(x>L.len) printf("输入有误!\n请重新输入:"); scanf("%d",&x); else for(i=0;i<=L.len;i++) if(i==x) printf("尊敬的%d号顾客您好!\n",x); L.A[i]=0; L.len--; if(Q.front!=Q.rear) inty=Dlqueue(&Q); L.A[i]=y; L.len++; }while(i==0);intguitai()//判断输入的柜台号是否正确 inty=0;printf("请输入你所办理业务的柜台号(1-3):\n"); scanf("%d",&y); if(y<1||y>5) printf("你输入的柜台号有误,请重新输入!\n");printf("请输入你所办理业务的柜台号(1-3):\n"); scanf("%d",&y); else printf("你所办理业务的柜台为%d.\n",y); returny;intpingfeng()//判断输入的分数是否正确 inty=0;printf("请输入你评分(1-5):\n1分…………非常不满意;\n2分…………比较不满意;\n3分…………一般满意;\n4分…………比较满意;\n5分…………非常满意。\n"); printf("请输入:"); scanf("%d",&y); if(y<1||y>5) printf("你输入评分有误,请重新输入!\n");printf("请输入你的评分(1-5):\n"); scanf("%d",&y); else printf("你的评分为%d.\n",y); returny;voidmygrade()//主评分函数 printf("为了改善服务质量,请你对我们的服务进行评价。谢谢!\n"); z=guitai(); y=pingfeng();switch(z)//柜台评分处理 case1://1号柜台评分处理 sum1+=y; i1++; ave1=sum1/i1; printf("%d号柜台的平均满意度为%0.2f。感谢你的评分,谢谢!!!\n",z,ave1); break; case2://2号柜台评分处理 sum2+=y; i2++; ave2=sum2/i2; printf("%d号柜台的平均满意度为%0.2f。感谢你的评分,谢谢!!!\n",z,ave2); break;case3://3号柜台评分处理 sum3+=y; i3++; ave3=sum3/i3; printf("%d号柜台的平均满意度为%0.2f。感谢你的评分,谢谢!!!\n",z,ave3); break; case4://4号柜台评分处理 sum4+=y; i4++; ave4=sum4/i4; printf("%d号柜台的平均满意度为%0.2f。感谢你的评分,谢谢!!!\n",z,ave4); break; case5://5号柜台评分处理 sum5+=y; i5++; ave5=sum5/i5; printf("%d号柜台的平均满意度为%0.2f。感谢你的评分,谢谢!!!\n",z,ave5); break; default:printf("你的输入有误,请重新输入!\n");getch();voidvip(intx)//vip用户认证 inti,a; a=x; charch[3];intk=0; switch(a) case1:{ printf("请输入你的卡号:"); scanf("%d",&i);printf("请您输入五位密码:");while(ch[k-1]!='')ch[k]=getch(); k++;printf("*"); if(i==100&&ch[0]=='1'&&ch[1]=='1'&&ch[2]=='1'&&ch[3]=='1') printf("\n尊敬的VIP用户您好,请您直接到VIP区办理业务!\n"); vip1++; elseif(i==200&&ch[0]=='2'&&ch[1]=='2'&&ch[2]=='2'&&ch[3]=='2') printf("\n尊敬的VIP用户您好,请您直接到VIP区办理业务!\n"); vip1++; elseif(i==300&&ch[0]=='3'&&ch[1]=='3'&&ch[2]=='3'&&ch[3]=='3') printf("\n尊敬的VIP用户您好,请您直接到VIP区办理业务!\n"); vip1++;elseif(i==400&&ch[0]=='4'&&ch[1]=='4'&&ch[2]=='4'&&ch[3]=='4') printf("\n尊敬的VIP用户您好,请您直接到VIP区办理业务!\n"); vip1++;elseif(i==500&&ch[0]=='5'&&ch[1]=='5'&&ch[2]=='5'&&ch[3]=='5') printf("\n尊敬的VIP用户您好,请您直接到VIP区办理业务!\n"); vip1++; elseprintf("\n你的输入有误!\n"); break; default: break; voidtime()//时间函数time_ttimep;time(&timep);printf("现在时刻:%s",ctime(&timep));voidmain()//主函数{11 time_ta1,a2,a3,a4,a5,a6,a7,a8,a9,a10,start,end; floatb1=0,b2=0,b3=0,b4=0,b5=0,b6=0,b7=0,b8=0,b9=0,b10=0,allsum=0,average=0,xi=0; floatA[10]={0,0,0,0,0,0,0,0,0,0};intc,x,v=0,w=0;Initshuzu();Initqueue();doublesum=0;while(1)printf("\n*****************************欢迎光临中国银行*****************************\n");printf("\n1顾客到达\n");printf("2顾客离开\n");printf("3查看业务办理\n");printf("4查看排队情况\n");printf("5退出\n\n"); time(); printf("*****************************欢迎光临中国银行***************************\n"); printf("请输入:");scanf("%d",&c);switch(c)case1: system("cls"); printf("\n*****************顾客到达界面*****************************\n\n"); intk=0; inta; printf("请选择你的用户类型:VIP用户请按1;\n普通卡用户请按2.\n"); printf("请输入:"); scanf("%d",&a); if(a==1) {vip(a); getch(); else v++; printf("尊敬的普通卡用户,你的业务号为%d.\n",v); daoda(v); system("cls");
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 乙方解除合同范例
- 河道管理合同范例
- 活动承揽合同范例
- 客服兼职聘用合同范例
- 承包森林合同范例
- 上铺租赁合同范例
- 拆除砌墙吊顶合同范例
- 棉织购买合同范例
- 房租合同范例简版
- 挂靠责任合同范例
- 2024天猫男装行业秋冬趋势白皮书
- 运营内控副行长/经理资格认证考试题库(2021版)
- 办公技能竞赛试题
- 2024年绵阳科技城新区事业单位考核公开招聘高层次人才10人(高频重点复习提升训练)共500题附带答案详解
- 韶关市仁化县教育局招聘中小学临聘教师笔试真题2022
- 七年级英语上册(人教版2024)新教材解读课件
- 新大象版六年级上册科学全册知识点 (超全)
- 电力专业数据传输(EPDT)通信系统 空中接口呼叫控制层技术规范 标准编制说明
- 2024年东南亚集装箱班轮运输市场深度研究及预测报告
- 建筑项目安全风险分级管控清单建筑风险分级管控清单(范例)
- 马背上的民族蒙古族少数民族蒙古族介绍课件
评论
0/150
提交评论