银行业务活动的模拟
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构
指导老师:陈桂玲
罗开华 | 193132班 | 20131001842
2015年1月5日
题号:1 题目:银行业务活动的模拟
1.需求分析
1.客户的业务分为两种:第一种是申请从银行得到一笔资金,即取款或借款;
2.第二种是向银行中投入一笔资金,即存款或还款。银行有两个服务窗口,相应地有两个队列。客户到达银行后先排第一个队。
3.处理每个客户业务时,如果属于第一种,且申请额超出银行现存资金总额而得不到满足,
则立刻排入第二个队等候,直至满足时才离开银行;否则业务处理完后立刻离开银行。每接
待完一个第二种业务的客户,则顺序检查和处理(如果可能)第二个队列中的客户,对能满
足的申请者予以满足,不能满足者重新排到第二个队列的队尾。
4.注意,在此检查过程中,一旦银行资金总额少于或等于刚才第一个队列中最后一个客户
(第二种业务)被接待之前的数额,或者本次已将第二个队列检查或处理了一遍,就停止检
查(因为此时已不可能还有能满足者)转而继续接待第一个队列的客户。任何时刻都只开一
个窗口。假设检查不需要时间。营业时间结束时所有客户立刻离开银行。
5.要求:模拟银行业务活动,按时间顺序输出业务活动的事件,并求出客户在银行内逗留的
平均时间。
2.设计
2.1设计思想
(1)数据结构设计(采用的结构及原因)
本题我采用的是用队列来储存客户数据,用rand函数来提取随值。(2)算法设计(函数模块及功能,可画流程图)
2.2设计表示 (1)关系调用图
(2)函数接口规格说明
函数调用
1.主函数 main
2.进栈函数push
3.出栈函数pop
4.查找和处理函数service* searchAndDel
5.到达函数arrive
6.存款函数putMoney
7.群款函数getMoney
8.随机函数rand
2.3详细设计(伪码,注释)
ADT Queue{
数据对象:D={ai∈Elemset i=1,2,…,n,n≥0}
数据关系:R1={
约定其中a1端为队列头,an端为队列尾.
基本操作:
Init Queue(&Q)
操作结果:构造一个空队列Q
QueueEmpty(Q)
操作结果:若Q为空队列,则返回TRUE,否则FALSE GetHead(Q &q) EnQueue(&Q q)
操作结果:插入元素q为Q的新的队尾素
DeQueue(&Q &q);操作结果删除Q的队头元素,并用q返回其值。
3调试分析(时间空间复杂度)
银行业务模拟程序,在编译的时候,由于对话框之间的衔接不太懂,所以并没有实现应有的结果。但后来还是通过学生,上网查询等多种方法,终于弄清了对话框之间的衔接和一些基本算法。最终也运行出来了。
4.用户手册
本程序是在visual sdudio 2012上编译测试的。
5.测试数据及测试结果
测试数据:存款10000,时间480,最大时间间隔30,最大处理时间5
存款30000,时间360,最大时间间隔10,最大处理时间10
6.源程序清单
#include
#include
using namespace std;
int total;
int closeTime;
int arriveTime;
int dealTime;
int dealMoney = 5000;
int currentTime = 0;
int totalTime = 0;
int counter = 0;
int number = 1; +
struct service
{
int num;
string type;
int beginTime;
int endTime;
int money;
service* next;
};
struct queue
{
service* head;
service* rear;
};
void push(queue &q,int d)
{
service* temp = new service; temp->money = d;
temp->next = NULL;
if(NULL == q.head)
{
q. head = temp;
q. rear = temp;
}
else
{
q. rear->next = temp;
q. rear = q.rear->next;
}
}
void pop(queue &q)
{
service* temp;
temp = q. head;
if(NULL ==q. head->next)
q.head = q. rear =NULL;
else
q. head=q. head->next;
delete temp;
}
service* front(queue &q)
{
return q. head;
}
service* back(queue &q)
{
return q. rear;
}
service* searchAndDel(queue &q,int m)
{
service* sign = q. head;
service* temp;
while(NULL != q. head)
{
if((-(q. head->money)) { if(q. head==q.rear) { temp = q. head; q. head = q. rear = NULL; return temp; } else { temp = q. head;