银行业务活动模拟__数据结构
题目:银行业务活动的模拟
C++编写
VS2008调试
1.题目要求
假设某银行有4个窗口对外接待客户,从早晨银行开门起不断有客户进入银行,由于每个窗口在某个时刻只能接待一个客户。因此在客户人数众多时需要在每个窗
口前顺次排队,对于刚进入银行的客户。如果某个窗口的业务员正空闲,则可上前
输业务。反之,若个窗口均有客户所占,他便会排在为数最少的队伍后面。编制一
个程序模拟银行的这种业务活动并计算一天中客户在银行的平均逗留时间。
2.实现功能
功能要求:
1).实现数据的输入;
2).各个窗口数据的访问和输出;
3)当前窗口的人员分布情况动态显示。
界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功
能要求。
存储结构:学生自己根据系统功能要求自己设计。请在最后的上交资料中指明你用
到的存储结构;
总体设计
从题目要求不难得出,银行排队是典型的队列操作,4个窗口就是四个队列,客户的进出就是出队,入队操作,客户窗口的选择,以及平均逗留时间可以对队列的长度进行相应计算得出。
因此,可以设计两个类,一个队列类,四个窗口就是四个队列对象,一个数据类,用于对客户排队编号的文件读取,写入,计算逗留时间。通过两个类的连接,实现数据的输入,动态显示。
代码部分:
//bank.h
#include"iostream"
#include"fstream"
using namespace std;
intconst SIZE=100;
struct node
{
intnum;
node *next;
};
class link
{
public:
link();
void add(intnum);
void dele();
void print();
intr_count();
node* r_head();
intr_rear();
private:
node *head,*rear,*front; int count;
};
class data
{
public:
void write(node *head,inti);
void read(inti);
void wait(int count[4]);
intnum[4][SIZE],count_rear[4];
private:
ofstream we;
ifstream re;
};
//data函数.cpp
#include"iostream"
#include"fstream"
#include"bank.h"
using namespace std;
void data::write(node *head,inti)
{
int a[SIZE];
int count=0;
node *p=new node;
if(head->next!=NULL)
{
p=head->next;
while(p!=NULL)
{
a[count]=p->num;
p=p->next;
++count;
}
}
switch(i)
{
case 1:
{
we.open("1.txt",ios_base::trunc|ios_base::binary);
for(inti=0;i we.write(reinterpret_cast break; } case 2: { ofstream we2; we2.open("2.txt",ios_base::in|ios_base::binary); for(inti=0;i we2.write(reinterpret_cast break; } case 3: { ofstream we3; we3.open("3.txt",ios_base::in|ios_base::binary); for(inti=0;i we3.write(reinterpret_cast we3.close(); break; } case 4: { ofstream we4; we4.open("4.txt",ios_base::in|ios_base::binary); for(inti=0;i we4.write(reinterpret_cast break; } } } void data::read(inti) { int j=0; switch(i) { re.open("1.txt",ios_base::binary|ios_base::in); while(!re.eof()) { re.read(reinterpret_cast ++j; } count_rear[i-1]=j; re.close(); break; case 2: { ifstream re2; re2.open("2.txt",ios_base::binary); while(!re2.eof()) { re2.read(reinterpret_cast } count_rear[i-1]=j; re2.close(); break;} case 3: { ifstream re3; re3.open("3.txt",ios_base::binary); while(!re3.eof()) { re3.read(reinterpret_cast ++j; } count_rear[i-1]=j; re3.close(); break;} case 4: { ifstream re4; re4.open("4.txt",ios_base::binary); while(!re4.eof()) { re4.read(reinterpret_cast ++j; } count_rear[i-1]=j; re4.close(); break;} } } void data::wait(int count[5]) { intave,sum; ave=sum=0; cout<<"假设每个客户办理业务的时间为 5 分钟,当前窗口排队人数为:"< for(inti=0;i<4;i++) cout< for(inti=0;i<4;i++) { for(int j=1;j ave=ave+j*5; } for(inti=0;i<4;i++) sum=sum+count[i]; ave=ave/sum; cout<<"客户在银行平均逗留时间为:"< ave=0; cout<<"是否返回上一层? 1 是"< cin>>ave; } //队列函数.cpp #include"iostream" #include"bank.h" using namespace std; link::link() { head=new node; head->next=NULL; rear=new node; rear->next=NULL; count=0; } void link::add(intnum) { if(head->next==NULL) { rear->num=num; head->next=rear; front=rear; } else { node *s=new node; s->num=num; s->next=NULL; rear->next=s; rear=s; } count++; } void link::dele() { if(head->next!=NULL) { head->next=front->next; front=front->next; count--; cout<<"该窗口一人办好业务,离队"< else cout<<"业务窗口空闲"< } void link::print() { inti; node *p=new node; p=head->next; cout<<"窗口排队具体编号为:"< while(p!=NULL) { cout< p=p->next; } cout< cout<<"1 办好业务,离队1人 2 返回上一层"< if(i==1) dele(); delete(p); } int link::r_count() { return count; } node* link::r_head() return head; } int link::r_rear() { if(rear!=NULL) return rear->num; else { cout<<"窗口空闲"< } } //main.cpp #include"iostream" #include"bank.h" using namespace std; int main() link a[4]; data b; int count[5],i,num=1; for(inti=1;i<5;i++) b.read(i); for(inti=0;i<4;i++) for(int j=0;j a[i].add(b.num[i][j]); loop: system("CLS"); cout<<" 欢迎进入银行业务活动模拟系统"< for(inti=0;i<4;i++) count[i]=a[i].r_count(); cout<<"1号窗口2号窗口3号窗口4号窗口"< cout<<" "< cout< cout<<"1 查看具体窗口排队情况 2 插入排队人员 3 平均逗留时间 4 退出"< cin>>i; if(i==1) { inti; cout<<"请选择:1号窗口2号窗口3号窗口4号窗口"< cin>>i; system("CLS"); switch(i) { case 1: a[0].print(); goto loop; break; case 2: a[1].print(); goto loop; break; case 3: a[2].print(); goto loop; break; case 4: a[3].print(); goto loop; break; } } else if(i==2) { inti; cout<<"请输入要排队办理业务的人数"< cin>>i; while(i!=0) { int no=0; count[4]=count[0]; for(int j=0;j<4;j++) if(count[4]>count[j]) { count[4]=count[j]; no=j; } a[no].add(num); num++; --i; } goto loop; } else if(i==4) { int j; for(inti=0;i<4;i++) { j=i+1; b.write(a[i].r_head(),j); } return 0; } else { b.wait(count); goto loop; } }