银行家算法简要概述

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一.需求分析

⏹银行模拟系统要求模拟银行一天0~closetime的营业情况,业务总共分为两类。存

款与取款。开始银行拥有一定数量的总额total供运行。程序运行输出银行在处理

业务后的事件表。包括时间,存款数量,取款数量,银行余額,等待情况。

⏹程序输入的形式是按以下顺序输入到屏幕中,只需按照提示操作即可:

银行总余額–>银行运行时间->交易时间上、下界->事件时间上、下界->客户存取

金额

⏹程序输出的形式是按照时间顺序输出银行运行期间的事件表

⏹程序的功能是模拟显示银行在整个营业阶段的运行状况

二.概要设计

本程序中用到的抽象数据类型有伪随机数类random,队列类bankqueue,客户类

client

伪随机数类random的定义如下:

class random

{

public:

random();//空构造函数

random(unsigned short initialSeed);//带参构造

unsigned short randomInterger();//种子seed产生函数

double rabdomDouble();//双精度数产生函数

double between(double low ,double high);//范围随机数产生函数(double 型)

int between(int low,int high);//范围随机数产生函数(int型)private:

unsigned short seed;

};

客户类client的定义如下:

class Client

{

public:

int num;

int money;

Client *next;

int Dealingtime;

int Casetime;

};

客户队列bankqueue定义如下:

class bankqueue

{

public:

int n;

bankqueue();//构造

~bankqueue();//析构

void enqueue(Client * c);//进队列

Client* dequeue();//出队列

int isEmpty();//判断空否

void deleteALLValues();//删除所有元素

private:

Client *front,*tail;

};

本程序利用队列结果储存客户信息:

三. 详细设计

随机数类实现:

● 随机数类构造

{

种子=时钟;

}

● 返回短整数的函数

{

乘数=33339;

加数=759812;

种子=(乘数*种子+加数)%31637687;

返回种子;

}

● 在low 和high 之间产生整型随机数

{

调用返回短整数的函数+low;

}

银行节点和队列类实现:

●银行队列构造函数

{

前指针=0;

尾指针=0;

长度=0;

}

●析构函数{};

进队列函数(银行节点指针)

{

节点指针数据复制到新节点指针数据

如果队列空

{

前指针=0;

尾指针=0

}

尾指针=0;

长度+1;

}

出队列

{

新建指针P

头指针向前走

查看队列是否为空

返回指针P

}

●判断队列是否为空

{

返回头指针是否为0;

}

删除所有元素

{

长度,尾指针置0;

从队列里弹出节点并删除

}

四.调试分析

➢银行模拟系统

调试过程中遇到的问题:

由于要运用到文件输入输出流,无法访问Bank类的私有数据,故将大部分程序写入Main函数中

经验和体会等:

从写完代码到调试成功,最后不断的改进和完善,不仅巩固了类定义和实现,还极大的挑战了我们编程能力。

五.用户使用说明

➢银行模拟系统

在程序运行时会依次显示

----------------------欢迎使用银行模拟系统,请按提示输入-------------------------

请输入银行最初存款总额:

请输入银行营业时间:

输入客户交易时间的上、下界,并以逗号分隔开:

请输入事件之间时间间隔的上、下界,并以逗号分隔开:

请按顺序输入客户存取款的数额

(取款负在金额前增加“-”,存款直接输入金额即可,并以空格区分)

输入0模拟结束:

只需按照提示输入数据即可得到结果

六.测试数据

➢银行模拟系统:

●正确的测试数据:

输入数据:

0 600 100,1 20,1 100 200 -300 20 0 y

10000 60000 20,1 20,1 -10000 -1 10000 -50000 60000 -7000 -80000 -90000 1000000 0 n

输出:

----------------------欢迎使用银行模拟系统,请按提示输入-------------------------

请输入银行最初存款总额:

请输入银行营业时间:

输入客户交易时间的上、下界,并以逗号分隔开:

请输入事件之间时间间隔的上、下界,并以逗号分隔开:

请按顺序输入客户存取款的数额

(取款负在金额前增加“-”,存款直接输入金额即可,并以空格区分)

输入0模拟结束:

第1个客户,从营业开始的第0分钟,来到银行,想要存取款100

当前银行余額为¥0

第1个客户,从营业开始的第0分钟,向银行存款$100

当前银行余額为¥100

第1个客户,从营业开始的第53分钟,离开银行

当前银行余額为¥100

相关文档
最新文档