银行家算法简要概述
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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