银行业务活动的模拟

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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={ ai-1 ai∈D,i=2, …,n}

约定其中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;

相关文档
最新文档