银行排队系统实验报告.docx

上传人:b****8 文档编号:9040371 上传时间:2023-02-02 格式:DOCX 页数:35 大小:104.91KB
下载 相关 举报
银行排队系统实验报告.docx_第1页
第1页 / 共35页
银行排队系统实验报告.docx_第2页
第2页 / 共35页
银行排队系统实验报告.docx_第3页
第3页 / 共35页
银行排队系统实验报告.docx_第4页
第4页 / 共35页
银行排队系统实验报告.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

银行排队系统实验报告.docx

《银行排队系统实验报告.docx》由会员分享,可在线阅读,更多相关《银行排队系统实验报告.docx(35页珍藏版)》请在冰豆网上搜索。

银行排队系统实验报告.docx

银行排队系统实验报告

银行排队系统

一、【设计要求:

】假设有你n个窗口对外接待业务,从早晨银行开门起不断有客户进入。

客户在客户人数众多时需在选择窗口排队。

编制一个程序模拟这种排队活动,并计算一天中客户在银行逗留的平均时间。

二、【实验目的:

】将数据结构的语言、思想运用到现实生活中,学以至用,通过实验加深对数据结构知识的理解和运用,同时我们将银行排队系统转化为电脑语言时,对生活事物观察和学习也更加敏捷。

三、【实验仪器:

】海尔电脑一台。

四、【编译软件:

】MicrosoftVisualC++6.0

五、【设计思路:

】见银行排队系统导航图

六、【程序分析:

(一)、头函数

#include

#include

#include

#include

#include

(一)、主函数

功能:

生成系统主菜单,为进入各个界面提供通道。

主要为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”,进入VIP验证,通过VIP卡号和密码验证就可以进入VIP区办理业务。

普通客户:

客户在“到达界面”输入“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++;

}

else

printf("\n你的输入有误!

\n");

break;

}

default:

break;

}

}

daoda(v)源程序:

voiddaoda(intx)//解决顾客到达事件算法

{

inti=L.len+1;

if(L.len

{L.A[i]=x;

i++;

L.len++;

}

else

Enqueue(&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);

}

else

{

t=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

#include

#include

#include

#include

#definen3

intvip1=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);

}

else

{

t=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

{L.A[i]=x;

i++;

L.len++;

}

else

Enqueue(&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)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1