银行排队系统实验报告_第1页
银行排队系统实验报告_第2页
银行排队系统实验报告_第3页
银行排队系统实验报告_第4页
银行排队系统实验报告_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、银行排队系统一、【设计要求:】假设有你n个窗口对外接待业务,从早晨银行开门起不断有客户进入。客户在客户人数众多时需在选择窗口排队。编制一个程序模拟这种排队活动,并计算一天中客户在银行逗留的平均时间。二、【实验目的:】将数据结构的语言、思想运用到现实生活中,学以至用,通过实验加深对数据结构知识的理解和运用,同时我们将银行排队系统转化为电脑语言时,对生活事物观察和学习也更加敏捷。三、【实验仪器:】海尔电脑一台。四、【编译软件:】microsoft visual c+ 6.0五、【设计思路:】见银行排队系统导航图六、【程序分析:】(一)、头函数 #include #include #include

2、#include #include (一)、主函数功能:生成系统主菜单,为进入各个界面提供通道。主要为switch开关语句进入不同的界面。源程序:void main() /主函数time_t strat ,end;float allsum=0,average=0;float a10=0,0,0,0,0,0,0,0,0,0; int c,x,v=0,w=0; initshuzu(); initqueue(); double sum=0; while(1) printf(n*欢迎光临中国银行*n); printf(n 1 顾客到达n); printf( 2 顾客离开n); printf( 3 查看

3、业务办理n); printf( 4 查看排队情况n); printf( 5 退出nn); time(); printf(*欢迎光临中国银行*n); printf(请输入:); scanf(%d,&c);switch(c)case 1:system(cls);printf(n*顾客到达界面*nn);int k=0; int a; printf(请选择你的用户类型:vip用户请按 1;n普通卡用户请按其它键.n);printf(请输入:); scanf(%d,&a); system(cls); break;case 2: system(cls); printf(n*顾客离开界面*nn); prin

4、tf(请输入离开顾客得编号:n); scanf(%d,&x); likai(x); mygrade() ; w+; allsum+=a0; getch(); system(cls); break;case 3: system(cls); printf(n*业务查询界面*nn); printl(); getch(); system(cls); break; case 4: system(cls); printf(n*排队查询界面*nn); print2(); getch(); system(cls); break; case 5: return; getch(); system(cls);cas

5、e 6: system(cls); printf(n*系统查询界面*nn);char cool3;int i=0,k=0;printf(请输入你的卡号:); scanf(%d,&i); printf(请您输入五位密码:);while(coolk-1!= ) coolk=getch(); k+; printf(*); if(i=000&cool0=1&cool1=1&cool2=1&cool3=1) average=allsum/w; printf(n至今已有 %d 位普通用户,%d 位vip用户成功办理业务!,w,vip1); printf(n普通用户业务办理总共用时 %0.2f,平均用时 %

6、0.2f,allsum,average); getch(); system(cls); break;default: printf(输入有误!请重新输入:n);getch();system(cls); 运行界面:到达界面:当客户到达时,在主菜单输入“1”进入“客户到达界面”。此界面区分vip客户到达和普通客户到达。vip:客户在“到达界面”输入“1”,进入vip验证,通过vip卡号和密码验证就可以进入vip区办理业务。普通客户:客户在“到达界面”输入“2”,系统即为客户分配业务号,凭此号办理业务、排队或离开。使用函数:vip(a);验证vip用户。daoda(v); enqueue(&q,x)

7、;将办理业务人员写入线性表,排队人员写入链表。time1();开始记录时间。vip(a)源程序:void vip(int x) /vip用户认证 int i,a; a=x; char ch3; int k=0; switch(a) case 1: printf(请输入你的卡号:); scanf(%d,&i); printf(请您输入五位密码:); while(chk-1!= ) chk=getch(); k+; printf(*); if(i=100&ch0=1&ch1=1&ch2=1&ch3=1)printf(n尊敬的vip用户您好,请您直接到vip区办理业务!n);vip1+; else

8、if(i=200&ch0=2&ch1=2&ch2=2&ch3=2)printf(n尊敬的vip用户您好,请您直接到vip区办理业务!n); vip1+; else if(i=300&ch0=3&ch1=3&ch2=3&ch3=3)printf(n尊敬的vip用户您好,请您直接到vip区办理业务!n);vip1+; else if(i=400&ch0=4&ch1=4&ch2=4&ch3=4) printf(n尊敬的vip用户您好,请您直接到vip区办理业务!n); vip1+; else if(i=500&ch0=5&ch1=5&ch2=5&ch3=5)printf(n尊敬的vip用户您好,请您

9、直接到vip区办理业务!n);vip1+;else printf(n你的输入有误!n);break; default : break; daoda(v)源程序:void daoda(int x) /解决顾客到达事件算法 int i=l.len+1;if (l.lendata=elem; s-next=null; q-rear-next=s; q-rear=s;time1()源程序:time1() /时间函数 time_t timep;time (&timep);time= difftime(end,start);运行结果:客户离开界面:当客户完成办理业务需要离开时。在主菜单输入“2”进入“客户

10、离开界面”。此界面提供服务评分。首先输入自己的客户号,然后选择自己办理业务的柜台号,结合自己对这次服务的满意度给出评分,然后系统给出此柜台的平均分和自己办理业务过程中所需要的时间。使用函数:likai(x) int dlqueue(linkqueue *q) 离开时出队操作,便将排队的客户写到业务办理的线性表里。 mygrade() int pingfeng( ) 柜台报务评分。time1() 中止时间记录,显示从开始记时到此时候的时间。likai(x)源程序:void likai(int x) /解决顾客离开事件算法 int i=0;doif(xl.len)printf(输入有误!n请重新输

11、入:);scanf(%d,&x);else for(i=0;ifront=q-rear) printf(队列为空!n); exit(1); else t=q-front-next; q-front-next=t-next; x=t-data; free(t); return x;mygrade()源程序:void mygrade() /主评分函数 printf(为了改善服务质量,请你对我们的服务进行评价。谢谢!n);z=guitai( );y=pingfeng( ); switch (z) /柜台评分处理 case 1: /1号柜台评分处理 sum1+=y;i1+;ave1=sum1/i1;

12、printf( %d号柜台的平均满意度为%0.2f。感谢你的评分,谢谢!n,z,ave1);break;case 2: /2号柜台评分处理 sum2+=y;i2+;ave2=sum2/i2; printf( %d号柜台的平均满意度为%0.2f。感谢你的评分,谢谢!n,z,ave2);break; case 3: /3号柜台评分处理 sum3+=y;i3+;ave3=sum3/i3; printf( %d号柜台的平均满意度为%0.2f。感谢你的评分,谢谢!n,z,ave3);break;case 4: /4号柜台评分处理 sum4+=y;i4+;ave4=sum4/i4; printf( %d号

13、柜台的平均满意度为%0.2f。感谢你的评分,谢谢!n,z,ave4);break;case 5: /5号柜台评分处理 sum5+=y;i5+;ave5=sum5/i5; printf( %d号柜台的平均满意度为%0.2f。感谢你的评分,谢谢!n,z,ave5);break;default : printf(你的输入有误,请重新输入!n); getch();int pingfeng( ) 源程序:int pingfeng( ) /判断输入的分数是否正确int y=0; printf(请输入你评分(1-5):n 1分非常不满意;n 2分比较不满意;n 3分一般满意;n 4分比较满意;n 5分非常满

14、意。n);printf(请输入:);scanf(%d,&y);if(y5)printf(你输入评分有误,请重新输入!n); printf(请输入你的评分(1-5):n); scanf(%d,&y);else printf( 你的评分为%d.n,y);return y; 运行结果:业务查询界面:在主菜单输入“3”进入“业务查询界面”,在此界面可查询到正在业务办理的情况。使用函数:printl() 显示正在办理业务的客户。printl()源程序:void printl() /输出数组算法 int i; printf(正在办理业务的顾客编号为:n); for( i=1;inext; while(s!

15、=null) printf(%d ,s-data); s=s-next; i+; printf(n您的前面一共有%d人在排队,请您稍候!,i);printf(n);运行结果:系统查询:因为此功能为内部工作人员使用,所以通道选项在主菜单上隐藏。在主菜单输入“6”,进入“系统查询界面”。通过此此界面的卡号、密码验证,就可以查询到系统开起至查询时办理业务的普通客户、vip客户人数。并可以显示所有普通客户办理业务的总时间,每个客户所用的平均时间。查询系统运行的时间。源程序:system(cls); printf(n*系统查询界面*nn);char cool3;int i=0,k=0;printf(请输

16、入你的卡号:); scanf(%d,&i); printf(请您输入五位密码:);while(coolk-1!= ) coolk=getch(); k+; printf(*); if(i=000&cool0=1&cool1=1&cool2=1&cool3=1) average=allsum/w; xi=difftime(end,start); printf(n至今已有 %d 位普通用户,%d 位vip用户成功办理业务!,w,vip1); printf(n普通用户业务办理总共用时 %0.2f,平均用时 %0.2fn,allsum,average); printf(系统已运行%0.2f秒!,xi)

17、; getch(); system(cls); break;运行结果:附:全部源代码#include #include #include #include #include #define n 3int vip1=0;int y,z;float sum1=0,sum2=0,sum3=0,sum4=0,sum5=0;float i1=0,i2=0,i3=0,i4=0,i5=0;float ave1=0,ave2=0,ave3=0,ave4=0,ave5=0;static int n;struct list int an+1; /顾客用来办理业务的n个窗口 int len; /表示数组中的元素个数

18、l;struct lnode /链表结点类型 int data; lnode *next;struct linkqueue /链式存储的等候队列的类型定义 lnode *front; lnode *rear;q;void initshuzu() /初始化线性的算法 for(int i=1;inext=null;void enqueue(linkqueue *q,int elem) /进队算法 lnode *s; s=(lnode *)malloc(sizeof(lnode); s-data=elem; s-next=null; q-rear-next=s; q-rear=s;int dlque

19、ue(linkqueue *q) /出队算法 lnode *t; int x; if(q-front=q-rear) printf(队列为空!n); exit(1); else t=q-front-next; q-front-next=t-next; x=t-data; free(t); return x;void printl() /输出数组算法 int i; printf(正在办理业务的顾客编号为:n); for( i=1;inext; while(s!=null) printf(%d ,s-data); s=s-next; i+; printf(n您的前面一共有%d人在排队,请您稍候!,

20、i);printf(n);void daoda(int x) /解决顾客到达事件算法 int i=l.len+1;if (l.lenl.len)printf(输入有误!n请重新输入:);scanf(%d,&x);else for(i=0;i=l.len;i+) if(i=x) printf(尊敬的%d号顾客您好!n,x); l.ai=0; l.len-; if(q.front!=q.rear) int y=dlqueue(&q);l.ai=y; l.len+; while(i=0);int guitai( ) /判断输入的柜台号是否正确int y=0; printf(请输入你所办理业务的柜台号

21、(1-3):n);scanf(%d,&y);if(y5)printf(你输入的柜台号有误,请重新输入!n); printf(请输入你所办理业务的柜台号(1-3):n); scanf(%d,&y);elseprintf( 你所办理业务的柜台为%d.n,y);return y; int pingfeng( ) /判断输入的分数是否正确int y=0; printf(请输入你评分(1-5):n 1分非常不满意;n 2分比较不满意;n 3分一般满意;n 4分比较满意;n 5分非常满意。n);printf(请输入:);scanf(%d,&y);if(y5)printf(你输入评分有误,请重新输入!n);

22、 printf(请输入你的评分(1-5):n); scanf(%d,&y);else printf( 你的评分为%d.n,y);return y; void mygrade() /主评分函数 printf(为了改善服务质量,请你对我们的服务进行评价。谢谢!n);z=guitai( );y=pingfeng( ); switch (z) /柜台评分处理 case 1: /1号柜台评分处理 sum1+=y;i1+;ave1=sum1/i1; printf( %d号柜台的平均满意度为%0.2f。感谢你的评分,谢谢!n,z,ave1);break;case 2: /2号柜台评分处理 sum2+=y;i

23、2+;ave2=sum2/i2; printf( %d号柜台的平均满意度为%0.2f。感谢你的评分,谢谢!n,z,ave2);break; case 3: /3号柜台评分处理 sum3+=y;i3+;ave3=sum3/i3; printf( %d号柜台的平均满意度为%0.2f。感谢你的评分,谢谢!n,z,ave3);break;case 4: /4号柜台评分处理 sum4+=y;i4+;ave4=sum4/i4; printf( %d号柜台的平均满意度为%0.2f。感谢你的评分,谢谢!n,z,ave4);break;case 5: /5号柜台评分处理 sum5+=y;i5+;ave5=sum

24、5/i5; printf( %d号柜台的平均满意度为%0.2f。感谢你的评分,谢谢!n,z,ave5);break;default : printf(你的输入有误,请重新输入!n); getch(); void vip(int x) /vip用户认证 int i,a; a=x; char ch3; int k=0; switch(a) case 1: printf(请输入你的卡号:); scanf(%d,&i); printf(请您输入五位密码:); while(chk-1!= ) chk=getch(); k+; printf(*); if(i=100&ch0=1&ch1=1&ch2=1&c

25、h3=1)printf(n尊敬的vip用户您好,请您直接到vip区办理业务!n);vip1+; else if(i=200&ch0=2&ch1=2&ch2=2&ch3=2)printf(n尊敬的vip用户您好,请您直接到vip区办理业务!n); vip1+; else if(i=300&ch0=3&ch1=3&ch2=3&ch3=3)printf(n尊敬的vip用户您好,请您直接到vip区办理业务!n);vip1+; else if(i=400&ch0=4&ch1=4&ch2=4&ch3=4) printf(n尊敬的vip用户您好,请您直接到vip区办理业务!n); vip1+; else i

26、f(i=500&ch0=5&ch1=5&ch2=5&ch3=5)printf(n尊敬的vip用户您好,请您直接到vip区办理业务!n);vip1+;else printf(n你的输入有误!n);break; default : break; void time() /时间函数 time_t timep; time (&timep); printf( 现在时刻:%s,ctime(&timep);void main() /主函数11 time_t a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,start,end;float b1=0,b2=0,b3=0,b4=0,b5=0,b6=0

27、,b7=0,b8=0,b9=0,b10=0,allsum=0,average=0,xi=0;float a10=0,0,0,0,0,0,0,0,0,0; int c,x,v=0,w=0; initshuzu(); initqueue(); double sum=0; while(1) printf(n*欢迎光临中国银行*n); printf(n 1 顾客到达n); printf( 2 顾客离开n); printf( 3 查看业务办理n); printf( 4 查看排队情况n); printf( 5 退出nn); time(); printf(*欢迎光临中国银行*n); printf(请输入:); scanf(%d,&c); switch(c) case 1:system(cls);printf(n*顾客到达界面*nn);int k=0; int a; printf(请选择你的用户类型:vip用户请按 1;n 普通卡用户请按2.n);printf(请输入:); scanf(%d,&a); if (a=1) vip(a); getch(); else v+;printf(尊敬的普通卡用户,你的业务号为%d.n,v);da

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论