⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bank.cpp

📁 数据结构 银行程序
💻 CPP
字号:
/////////////////////////////////
//输入服务窗口数(小于等于8个)
//程序开始演示
/////////////////////////////////
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <dos.h>
#include <bios.h>
#include "bank/typedef.h"


float Arr=1,Proc=5,t;  //Arr=客户到达的平均时间间隔;
											 //Proc=业务处理的平均时间间隔

											 //可自行调整
node Node[9];
server S_W[8];
int h=0,m=0,s=0;
int total=0;
customer *Customer;
int win,i,j,q;         //win=记录服务窗口数
queue *fd,*td;
float AW,AQ;

//显示数据
void print()
{
 clrscr();
 for (i=0;i<win;i++)
 {
 cout<<"Server_"<<i+1<<" : ";
 Customer=S_W[i].person;
	for (j=S_W[i].num;j>0;j--)
	{
	 printf("%d ",j);
	 Customer=Customer->next;
	}
 printf("\n\n");
 }
 printf("Finished Customer Total: %d  \nQueue Length: %f \nCustomer Pause Time: %f ", total, AQ, AW);
 printf("\nUsed Time %d:%d:%d",h,m,s);
 printf("\n\nPress any key to exit...");
}

//产生客户到达事件
void arrive()
{
 Node[8].time=t+random(Arr*2);
 Customer=new customer;
 Customer->ct=t;
 Customer->st=random(Proc*2);
 j=S_W[0].num;
 for (i=1;i<win;i++)
 {
	if (j>S_W[i].num) j=S_W[i].num;
 }
 for (i=0;i<win;i++)
 {
	if (S_W[i].num==j)
	{
	 Customer->next=S_W[i].person;
	 S_W[i].person=Customer;
	 S_W[i].num++;
	 if (S_W[i].num==1) Node[i].time=t+Customer->st;
	 break;
	}
 }
}

//业务处理事件
void process()
{
	if (Node[8].time<t) arrive();
	for (q=0;q<8;q++)
	{
	 if (Node[q].time<t)
	 {
		if (S_W[q].num!=0)
		{
			S_W[q].num--;
			Customer=S_W[q].person;
			S_W[q].person=Customer->next;
			Node[q].time=t+Customer->next->st;

			td->t=Customer->st;//写入记录最近二十个客户等待时间的循环链表
			td=td->next;
			total++;

			delete Customer;
		}
	 }
	}

}



void main()
{
 fd=new queue;//创建记录最近二十个客户等待时间的循环链表
 fd->t=0;
 td=fd;
 for (i=0;i<19;i++)
 {
	td->next=new queue;
	td=td->next;
  td->t=0;
 }
 td->next=fd;

 clrscr();
 do{
	printf("Input the window count(<8): ");
	scanf("%d",&win);
 }while(win>8 || win<0);
 //接受用户输入的服务窗口数

 clrscr();
 randomize();
 arrive();  //产生客户到达事件

 while(1)
 {

 AQ=0;//计算平均队长
 for (i=0;i<win;i++)
 {
  AQ+=S_W[i].num;
 }
 AQ/=win;


 AW=0;//计算最近二十个客户的平均等待时间
 for (i=0;i<20;i++)
 {
  AW+=fd->t;
	fd=fd->next;
 }
 AW/=20;


	process();
	print();
	sleep(1);
				if(++s>=60)
				{
					s=0;
					if(++m>=60)
					{
						m=0;
						h++;
					}
				}
	if (bioskey(1)!=0)
	{
	 exit(0);
	}
	t++;
 } // 循环处理事件
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -