数据结构课程设计-银行业务模拟系统
数据结构银行业务活动的模拟

数据结构银行业务活动的模拟数据结构银行业务活动的模拟1.引言1.1 目的本文档旨在模拟银行业务活动,并运用数据结构来实现相关功能。
通过模拟不同的银行业务场景,使读者能够更好地理解数据结构在银行业务中的应用。
1.2 背景银行作为金融机构,每天都要处理大量的业务活动,包括客户开户、存款、取款、转账等。
为了提高业务处理的效率和准确性,银行业务系统需要利用适当的数据结构来组织和管理这些数据。
2.系统设计2.1 功能需求2.1.1 客户开户- 输入客户信息(姓名、联系号、联系方式等) - 唯一的客户账号- 将客户信息和账号存储到数据结构中 2.1.2 存款- 输入客户账号- 输入存款金额- 更新客户账户余额2.1.3 取款- 输入客户账号- 输入取款金额- 检查账户余额是否足够- 更新客户账户余额2.1.4 转账- 输入转出账号- 输入转入账号- 输入转账金额- 检查转出账号余额是否足够- 更新转出账号和转入账号的余额2.2 数据结构设计2.2.1 客户信息- 姓名- 联系号- 联系方式- 账号2.2.2 账户信息- 账号- 余额3.算法设计3.1 开户算法- 唯一的账号- 将账号和客户信息存储到数据结构中 3.2 存款算法- 在数据结构中找到指定的账号- 更新账号的余额3.3 取款算法- 在数据结构中找到指定的账号- 检查账户余额是否足够- 更新账号的余额3.4 转账算法- 在数据结构中找到转出账号和转入账号- 检查转出账号余额是否足够- 更新转出账号和转入账号的余额4.测试与验证4.1 测试用例1:客户开户输入:客户姓名、联系号、联系方式预期输出:唯一账号并存储客户信息到数据结构中4.2 测试用例2:存款输入:客户账号、存款金额预期输出:更新客户账户余额4.3 测试用例3:取款输入:客户账号、取款金额预期输出:检查账户余额是否足够,更新客户账户余额4.4 测试用例4:转账输入:转出账号、转入账号、转账金额预期输出:检查转出账号余额是否足够,更新转出账号和转入账号的余额5.附件本文档涉及的附件包括测试用例和源代码文件。
数据结构课程设计银行模拟系统

数据结构课程设计报告班级:软件092班姓名:余祖彬学号: 34号指导教师:董跃华成绩:信息工程学院 2011 年 6月 6日摘要(题目)课题题目是:客户业务分为两种。
第一种是申请从银行得到一笔资金,即取款或借款。
第二种是向银行投入一笔资金,即存款或还款。
银行有两个服务窗口,相应的有两个队列。
客户到达银行后先排第一个队。
处理每个客户业务时,如果属于第一种,且申请额超出银行现存资金总额而得不到满足,则立即排入第二队等候,直至满足时才离开银行,否则业务处理完后立即离开银行。
每接待完一个第二种业务的客户,则顺序检查和处理(如果可能)第二个队列的客户,对能满足的申请者予以满足,不能满足者重新排到第二个队列的队尾。
目录1.引言1.1引言1.2课题意义1.3背景和应用领域2.需求分析2.1 功能需求2.2数据需求3.概要设计3.1简要算法分析3.2算法流程图3.3客户服务系统4.详细设计4.1 调试4.2 测试5.测试结果6.调试分析7.设计体会8.结束语参考文献第一章引言1.1引言:随着社会的迅速发展,人们的生活水平越来越高,人们的经济越来越多,所以人们对自己的资产保护也越来越注重,这便产生了银行,而随着人口的迅速增长,存钱的人也越来越多,因此设计一个程序是存钱和取钱的时间缩短是非常重要的,设计一个好的程序,使之能更好的方便我们的生活。
在开发这个银行系统时,用到了c语言里的函数调用,结构体等,并用基本对话框的一些控件对之进行实现。
使之完成了一些功能。
报告将会对银行模拟系统程序的一些功能模块进行具体的分析,写出概要设计方案,详细设计,各个功能的流程图,以及调试分析等,从各个方面具体的对程序进行了分析。
1.2课题意义银行系统是非常之重要的,对于我们的生活将有巨大的作用,所以我们学习是更应该努力学,以对银行取款信息有充分的了解,并进行编程实现。
通过程序实践来巩固运用所学的专业知识,提高我们的计算机应用技能,提高编程能力,加深对相关内容的理解,拓宽知识面,培养我们的创新精神和实践能力。
数据结构课程设计报告---银行业务模拟

数据结构课程设计报告学院:XX专业:XX学生:XX学号:XX一.问题描述题目内容:银行业务模拟基本要求:设某银行有N个窗口,可同时为N位顾客办理业务。
当顾客进门时,若有窗口空闲,则可立刻办理业务,否则需要依次排队等候。
一旦有顾客业务办理完毕,派在队头的顾客便可开始办理业务。
若银行每天连续营业T小时,求一天内顾客在银行内的平均逗留时间,顾客排队等候办理业务的队列长度平均值,营业时间到点后仍需完成服务的收尾工作时间。
测试数据:服务窗口数目N及营业时间有拥护设定,第一个顾客进门的时刻为0,之后每个顾客的进门时刻在前一个顾客进门时设定。
即在进门事件发生时随即产生两个随机数(durtime,intertime),durtime为进门顾客办理业务所需的服务时间(简称办理时间);intertime为下一个顾客将到达的时间间隔(简称时间间隔)。
R为由随机数发生器产生的随机数,顾客办理时间和顾客之间的时间间隔不妨假设与R有关,可以由下式确定:durtime=15+R%50intertime=2+R%10确定的方法与实际越吻合,模拟的结果越接近现实的情况。
二.需求分析1.程序模拟银行排队现象。
当给定窗口数及营业时间后,由随机数确定顾客办理业务及进门间隔时间,可求出一天内顾客在银行平均逗留时间,平均对长及关门后收尾工作的时间。
2.本程序由用户读入的数据仅为窗口数及营业时间,营业的时间以分钟计,窗口数及关门时间均为整型,且均大于等于1。
3.运行本程序后,得到结果为顾客数、平均等候时间、平均队长和收尾工作的时间。
仿真程序运行后屏幕输出结果应包括如下各项的模拟结果数据:Number of customer: CustomerNumAverage time: Totaltime/CustomerNumAverage queuelength: Totallength/CustomerNumAddition time: t-CloseTime三.程序模块本程序包括4个模块:主程序模块;实现队抽象数据类型的队模块;实现链表抽象数据类型的链表模块;事项银行事件抽象数据类型的银行事件模块。
银行业务模拟系统

数据结构课程设计报告(1)题目: 银行业务模拟系统姓名: 丘锋伟学号: 2003040140224班级: 计算机科学与技术03级(2)班指导老师: 吴伟民完成日期: 2005年6月26日一. 需求分析1.银行营业初拥有资本为:TotalAmount(元),营业时间为:CloseTime(分钟),这两个模拟参数由测试用户设定.2.客户业务分为两种: 第一种是申请从银行得到一笔资金,即取款或贷款;第二种是向银行投入一笔资金,即存款或还款.3.银行有两个服务窗口,相应地有两个队列.客户到达银行先排第一个队.处理每个客户业务时,如果属于第一种,且申请额超出银行现存资金总额而得不到满足时,则立刻排入第二个队等候,直至满足时才离开银行; 否则业务处理完后立刻离开银行.4.每接待完一个第一种业务的客户,则顺序检查和处理(如果可能)第二个队列中的客户,对能满足的申请者予以满足,不能满足者重新排到第二个队列的队尾.假设检查不需要时间,在此检查过程中,一旦银行资金总额少于或等于刚才第一个队列中最后一个客户(第二种业务)被接待前的数额,或者本次已将第二个队列检查或处理了一遍就停止检查,转而继续接待第一个队列的客户.5.任何时刻都只开一个窗口,营业时间结束时所有客户立即离开银行.二. 概要设计1.设定有序事件链表的抽象数据类型定义:ADT EventList {数据对象: D={ai|ai∈Event,i=1,2,···,n, n≥0}数据关系: R1={<ai-1,ai>|ai-1,ai∈Event ,ai-1<ai,i=2,3, ···,n }基本操作:InitEVList(&EV)操作结果:构造一个空的有序事件链表EV.EmptyEV(&EV)初始条件:有序事件链表EV已存在.操作结果:若EV为空,返回1;否则返回0.cmp(a, b)初始条件:事件a和b已存在.操作结果:若a先发生,返回1;若同时发生,返回0否则返回-1;OrderInsert(&EV, &en,cmp())初始条件:有序事件链表EV已存在,en为驱动事件.操作结果:驱动事件按时间有序插入事件链表中.DelFirstEV(&EV, &en)初始条件:有序事件链表EV已存在,en为驱动事件变量.操作结果:删除EV中的第一个结点并以en返回其值.} ADT EventList2.设定客户信息队列的抽象数据类型定义:ADT QueueList {数据对象: D={ai|ai∈QueueElem,i=1,2,···,n, n≥0}数据关系: R1={<ai-1,ai>|ai-1,ai∈QueueElem ,i=2,3, ···,n }基本操作:InitQuList(&Queue)操作结果:构造一个空队列.EmptyQueue(&Queue)初始条件:队列已存在.操作结果:若队列为空,返回1;否则返回0.GetHead(Queue, &customer)初始条件:队列已存在.操作结果:若队列不空,则以customer返回队头元素.EnQueue(&Queue, customer)初始条件:队列已存在.操作结果:新元素customer入队列.DelQueue(&Queue, &customer)初始条件:队列已存在.操作结果:队头元素出队列,并以customer返回其值.} ADT QueueList3.本程序包含三个模块①主程序模块:void main(){输出主界面;选择操作:进入业务模拟窗口/退出程序;进入业务模拟窗口:{输出业务模拟窗口;选择操作:银行业务模拟/返回主界面/退出程序;银行业务模拟:{输入模拟参数;输出业务模拟结果窗口;}返回主界面:退出程序:}退出程序:}②客户到达事件处理模块――实现客户信息队列的抽象数据类型.③客户离开事件处理模块――实现有序事件链表的抽象数据类型.三. 详细设计1. 有序事件链表类型struct Event //驱动事件{int Occurtime; //事件发生时间int NType; //事件类型Event *next;};typedef Event* EventList;void InitEVList(EventList &EV);//事件初始化函数int EmptyEV(EventList &EV);//判断有序链表是否为空int cmp(Event a,Event b);//事件发生时间比较函数Void OrderInsert( EventList &EV, Event &en, int(*cmp) (Event,Event));//驱动事件按时间有序插入事件链表函数void DelFirstEV(EventList &EV,Event &en);//取出并删除事件链表中的第一个结点2.客户信息队列类型struct QueueElem //客户信息{int Arrtime; //客户到达时间int Duration; //客户交易时间int Amount; //客户交易金额QueueElem *next;};struct QueueList //交易客户队列{QueueElem *front; //队头QueueElem *rear; //队尾int Count;};typedef QueueList* QuListArray;void InitQuList(QueueList &Queue);//初始化队列函数int EmptyQueue(QueueList &Queue);//判断队列是否为空int GetHead(QueueList Queue,QueueElem &customer);//获得队头元素函数void EnQueue(QueueList &Queue,QueueElem customer);//入队列函数void DelQueue(QueueList &Queue,QueueElem &customer);//出队列函数3.三个宏定义:#define Counter 3//队列数组的最大值,其中数组[0]置空#define Max 10000000000//设定一个用于比较的最大值#define null 04.定义全局变量:int CloseTime,TotalAmount0,TotalAmount;//银行的营业时间和营业总资本int TotalTime,CustomerNum0,CustomerNum;//客户们在银行花费的累计时间和客户总数int LargeAmount=0,int DealAmount=0,int UndealAmount1=0,int UndealAmount2=0;//交易额的最大规模,已处理的交易额规模和队列1,队列2未处理的交易额规模int DealCustomerNum=0, UndealCustomerNum1=0,int UndealCustomerNum2=0;//已处理的客户数目和队列1,队列2未处理的客户数目int Min=Max,Tag=0;//等候客户中要交易的最低金额和营业结束标志5.声明全部函数:void InitQuList(QueueList &Queue);//初始化队列函数int GetHead(QueueList Queue,QueueElem &customer);//获得队头元素函数void EnQueue(QueueList &Queue,QueueElem customer);//入队列函数void DelQueue(QueueList &Queue,QueueElem &customer);//出队列函数void InitEVList(EventList &EV);//事件初始化函数int cmp(Event a,Event b);//事件发生时间比较函数void OrderInsert(EventList &EV,Event &en,int(*cmp)(Event,Event));//驱动事件按时间有序插入事件链表函数void OpenForDay(EventList &EV,Event &en,QuListArray &q);//营业模拟初始化函数int EmptyQueue(QueueList &Queue);//判断队列是否为空void NextLeaver(EventList &EV,Event &en,QuListArray &q);//确定下一个驱动事件函数void CustomerArrived(EventList &EV,Event &en,QuListArray &q);//客户到达事件处理函数void Min_amount(QueueList Q);//获得等候队列中的客户的最低交易额int EmptyEV(EventList &EV);//判断有序链表是否为空void DelFirstEV(EventList &EV,Event &en);//取出并删除事件链表中的第一个结点void CustomerDeparture(EventList &EV,Event &en,QuListArray &q);//客户离开事件处理函数void Leave(QuListArray &q);//营业时间结束后全部客户出队列函数int PrintMainScreen();//输出主界面窗口void PrintMoodScreen();//输出业务模拟窗口int Output();//输出业务模拟结果窗口6.部分核心算法的实现:①营业模拟初始化:void OpenForDay(EventList &EV,Event &en,QuListArray &q) {Event *temp;temp=new Event;temp->NType=0;temp->Occurtime=0;temp->next=null;en=*temp;InitEVList(EV);OrderInsert(EV,en,cmp);for(int i=1;i<Counter;++i)InitQuList(q[i]);TotalTime=0;CustomerNum=0;}②确定下一个驱动事件void NextLeaver(EventList &EV,Event &en,QuListArray &q) {QueueElem customer;if(Min<=TotalAmount){GetHead(q[2],customer);while(customer.Amount+TotalAmount<0){DelQueue(q[2],customer);EnQueue(q[2],customer);GetHead(q[2],customer);}if(en.Occurtime+customer.Duration>=CloseTime){Tag++;Event temp={CloseTime,2,null};OrderInsert(EV,temp,cmp);}else{Eventtemp={en.Occurtime+customer.Duration,2,null};OrderInsert(EV,temp,cmp);}}else{if(GetHead(q[1],customer))//{while(!EmptyQueue(q[1])&&customer.Amount<0&&customer.Amount+TotalAmount<0) {DelQueue(q[1],customer);EnQueue(q[2],customer);Min=Min<-customer.Amount?Min:-customer.Amount;GetHead(q[1],customer);}if(!EmptyQueue(q[1])){if(en.Occurtime+customer.Duration>=CloseTime){Tag++;Event temp={CloseTime,1,null};OrderInsert(EV,temp,cmp);}else{Eventtemp={en.Occurtime+customer.Duration,1,null};OrderInsert(EV,temp,cmp);}}}}}③驱动事件按时间有序插入事件链表void OrderInsert(EventList &EV,Event &en,int(*cmp)(Event,Event)){Event *P,*Q;Event *Temp=new Event;*Temp=en;P=Q=EV;P=P->next;if(P!=null){while(P!=null){if(cmp(*P,en)==-1){P=P->next;Q=Q->next;}else if(cmp(*P,en)==1){Temp->next=P;Q->next=Temp;return;}else if(cmp(*P,en)==0){do{P=P->next;Q=Q->next;}while(P&&!(cmp(*Q,*P)==-1));Temp->next=P;Q->next=Temp; //return;}}Q->next=Temp;Temp->next=P;return;}else{Q->next=Temp;Temp->next=null;return;}}④客户到达事件处理:void CustomerArrived(EventList &EV,Event &en,QuListArray &q){int intertime,durtime,amount,t,a,b;srand(time(NULL));intertime=1+rand()%30; //下个客户到达的时间间隔,不大于30分钟dur:durtime=1+rand()%30;//客户办理业务所要时间,不大于30分钟if(intertime==durtime)goto dur;a=rand()%2;b=1+rand()%1000;amount=a*b+(a-1)*b; //客户的存取金额,不大于1000元t=en.Occurtime+intertime;Event Temp={t,0,null};if(t<CloseTime){CustomerNum++;OrderInsert(EV,Temp,cmp);}QueueElemcustomer={en.Occurtime,durtime,amount,null};EnQueue(q[1],customer);if(amount>0) //{LargeAmount+=amount;}else LargeAmount-=amount;if(q[1].Count==1)NextLeaver(EV,en,q);}⑤客户离开事件处理:void CustomerDeparture(EventList &EV,Event&en,QuListArray &q){int i=en.NType;QueueElem customer;DelQueue(q[i],customer);TotalTime+=en.Occurtime-customer.Arrtime;TotalAmount+=customer.Amount;if(customer.Amount>0){DealAmount+=customer.Amount;}else DealAmount-=customer.Amount;//DealCustomerNum++;if(Tag==0){if(i==2)Min_amount(q[i]);NextLeaver(EV,en,q);}}⑥营业时间结束后全部客户离开银行:void Leave(QuListArray &q){int i;QueueElem customer;for(i=1;i<Counter;i++){while(!EmptyQueue(q[i])){DelQueue(q[i],customer);TotalTime+=CloseTime-customer.Arrtime;if(i==1){UndealCustomerNum1++;if(customer.Amount>0){UndealAmount1+=customer.Amount;}else UndealAmount1-=customer.Amount;}if(i==2){UndealCustomerNum2++;if(customer.Amount>0){UndealAmount2+=customer.Amount;}else UndealAmount2-=customer.Amount;}}}}7.主函数的实现:void main(){loopa:if(PrintMainScreen()==1){loopb: PrintMoodScreen();int i;Event en;EventList EV;QueueList q[Counter];QuListArray QuPoint;QuPoint=q;LargeAmount=0,DealAmount=0,UndealAmount1=0,UndealAmount 2=0;DealCustomerNum=0,UndealCustomerNum1=0,UndealCustomerNu m2=0;Min=Max,Tag=0;OpenForDay(EV,en,QuPoint);while(!EmptyEV(EV)){DelFirstEV(EV,en);if(en.NType==0){CustomerArrived(EV,en,QuPoint);}else{CustomerDeparture(EV,en,QuPoint);}}Leave(QuPoint);i=Output();if(i==1)goto loopa;if(i==2)goto loopb;}}四. 调试分析1.调试过程中对部分模拟量作了如下规定:①客户的存取金额,不大于1000元②客户办理业务所要时间,不大于30分钟③下个客户到达的时间间隔,不大于30分钟当然,系统的模拟性能完全不受这些规定的限制,用户完全可以根据实际需要作简单的修改和调整.而且以上各模拟量均由随机函数给出,符合离散事件要求.2.算法的时空分析:①基于有序链表的时空分析:时间复杂度:由于对有序链表操作的主要时间在于插入操作的查找部分,而删除操作不需查找,只是删除第一个结点,故有:T1(n)=O(n*n).(其中n为进入银行的客户总数.) 空间复杂度:因为每个客户只能产生两个事件:到达事件和离开事件,所以有序链表的总长度不可能超过客户总数的两倍,故有:S1(n)=O(n). (其中n为进入银行的客户总数.)②基于用户信息队列的时空分析:时间复杂度:因为每个客户都要且只要进入第一个队列一次,而是否进入第二个队列或是离开则是随机的.作最坏情况打算,设n1为直接离开的客户数,n2为进入第二个队列的客户数,则当n1=n2=n/2,且每次从第一队中离开一个客户,第二个队列中的客户都要进出队列一次,则(n1*n2)|max=n*n/4 ,故有:T2(n)=O(n*n).空间复杂度:作最坏打算,假设每个客户都要分别进入第一和第第二个队列,则两个队列元素的最大个数为客户数量的两倍.故有:S2(n)=O(n).③总的时空分析:总的时间复杂度:T(n)=max(T1(n),T2(n))=O(n*n).总的空间复杂度: S(n)=S1(n)+S2(n).五. 用户手册1.本程序的运行环境为DOS操作系统,执行文件为aaa.exe. 2.进入演示程序后,即显示文本方式的主界面窗口:3.进入银行业务模拟系统后,显示如下界面窗口:4.输入模拟参数后,显示如下模拟结果输出界面:六. 测试结果测试的主要指标包括:1.银行对客户要求的交易资金的满足率.2.银行对要求交易的客户的满足率.3.银行服务对客户平均时间利用率的影响.下面是以连续模拟时间为480分钟(即8小时)的几个模拟结果:模拟结果1:(银行营业资本为1000元)模拟结果2:(银行营业资本为10000元)模拟结果3:(银行营业资本为100000元)七. 附录源程序包含的头文件清单:#include "iostream.h"#include "stdlib.h" #include "time.h"。
数据结构银行业务模拟实验报告

数据结构银行业务模拟实验报告1. 背景随着信息技术的快速发展,银行业务的处理和管理变得越来越复杂,需要高效的数据结构来支持。
在这个实验中,我们将使用数据结构来模拟银行业务的处理过程,以评估不同数据结构对于银行业务的影响。
2. 分析2.1 问题描述我们需要模拟一个银行的业务处理过程,包括客户排队、办理业务、等待时间等方面的模拟。
具体而言,我们需要解决以下问题:1.如何表示客户队列和银行窗口?2.如何模拟客户到达和离开的过程?3.如何计算客户等待时间和平均等待时间?4.如何评估不同数据结构对于银行业务处理效率的影响?2.2 设计思路为了解决上述问题,我们可以采用以下设计思路:1.使用队列来表示客户队列,每个元素表示一个客户。
2.使用数组或链表来表示银行窗口,每个元素表示一个窗口。
3.模拟客户到达和离开的过程时,将客户加入队列或从队列中移除。
4.计算客户等待时间时,可以记录客户进入队列的时间和离开队列的时间。
5.通过多次实验,统计客户的平均等待时间。
6.对比不同数据结构的处理效率,可以比较它们的平均等待时间和处理时间。
2.3 数据结构选择在这个实验中,我们需要选择适合模拟银行业务的数据结构。
根据问题描述和设计思路,我们可以选择以下数据结构:1.队列:用于表示客户队列。
队列具有先进先出(FIFO)的特性,非常适合模拟排队等待的场景。
2.数组或链表:用于表示银行窗口。
数组具有随机访问的特性,在某些情况下可能更高效;链表则更适合频繁插入和删除操作。
3. 实验结果3.1 实验设置为了评估不同数据结构对于银行业务处理效率的影响,我们进行了多次实验。
每次实验中,我们模拟了一定数量的客户到达银行,并记录了每个客户离开时的等待时间。
3.2 实验结果分析根据实验结果,我们计算了不同数据结构下客户的平均等待时间,并进行了比较。
以下是实验结果的总结:数据结构平均等待时间队列10分钟数组12分钟链表9分钟从上表可以看出,使用队列作为客户队列的数据结构具有最低的平均等待时间,而使用数组作为银行窗口的数据结构具有最高的平均等待时间。
银行业务模拟系统的设计与实现实验报告

数据结构实验报告——银行业务模拟系统的设计与实现学院:软件学院专业:计算机科学与技术班级:12级java班学号:1228524087姓名:吴静指导老师:张磊数据结构实验报告银行业务模拟系统的设计与实现(该实验为综合性实验,共用6个学时)二、实验要求:1.实验目的:1)通过实验掌握对离散事件模拟的认识;2)进一步理解队列的实现与应用;3)对链表的操作有更深层次的理解;该实验涉及到线性表的建立、插入、删除等操作,涉及到了队列的建立、插入、删除,涉及到了离散事件的应用思想,还涉及到了排序的概念。
完成这个实验对线性表、队列及C语言编程等多方面的知识将是一个很好的利用,对离散事件也将有一个初步的认识。
2.问题描述:假设某银行有四个窗口对外接待客户,从早晨银行开门起不断有客户进入银行。
由于每个窗口在某个时刻只能接待一个客户,因此在客户人数众多时需在每个窗口前顺次排队,对于刚进入银行的客户,如果某个窗口的业务员正空闲,则可上前办理业务,反之,若四个窗口均有客户所占,他便会排在人数最少的队伍后面。
现在需要编制程序以模拟银行的这种业务活动并计算一天中客户在银行逗留的平均时间。
3.一个完整的系统应具有以下功能:1)初始化(OpenForDay),模拟银行开门时各数据结构的状态。
2)事件驱动(EventDrived), 对客户到达和离开事件做相应处理。
3)下班处理(CloseForDay), 模拟银行关门时的动作,统计客户平均逗留时间。
[备注]:假设银行开门的时刻(间)设为0 , 银行每天营业的时间在程序运行时输入(例如480分钟)。
每个客户办理业务的时间不超过30分钟,两个相邻客户到达银行的时间间隔不超过5分钟要求程序执行时,只要给出银行每天的营业时间即可输出客户平均逗留的时间。
三、总的设计思想、环境语言、工具等总的设计思想:为了计算这个平均的逗留时间,自然需要知道每个客户到达银行和离开银行这两个时刻,后者减去前者即为每个客户在银行的逗留时间。
数据结构课程设计 银行系统

一、具体任务1、编写链式队列的基本操作:初始化链式队列、入队、判队空、出队等函数。
2、客户排队登记子程序:客户进入银行后,首先首先要根据自己所办的业务登记排队,如果是办理团体业务的客户则进qa队,如果是办理证券业务的客户则进qb队,如果是办理个人业务的客户则进qc队。
3、窗口柜员叫号子程序:排在与本窗口中业务类相同的客户到窗口柜员处办理业务。
4、汇总每个窗口所办理业务的情况。
二、软件环境VC++ 6.0 WIN-TC三、设计思想(1)基本思想:银行业务模拟:设银行窗口办理的业务类型有团体业务、证券业务和个人业务。
假设银行对每种业务设置两个窗口,每个来到的顾客发一个号码,如果哪个柜台空闲了,就由柜员叫号码,然后为最靠前的顾客办理业务。
最后要对每个窗口进行业务量的简单汇总。
设团体业务用a表示、证券业务用b表示,个人业务用c表示。
由于三种业务类型(团体业务、证券业务和个人业务),每位顾客进入银行后根据办理的业务类型领取不同类别的号码,相当于排进了三支不同的队列。
设银行对每种业务设置两个窗口,如果哪个柜员空闲了,就叫持有相应类型号码并且排在队列最前面的顾客办理业务。
当工作结束后,要对每个窗口办理的业务量进行简单汇总。
根据上述分析,每位顾客的信息包括顾客号码、业务类型、队列前面的人数等,顾客信息描述如下:typedef struct elm{ int No;char classify;int pre;}ElemType;用qa、qb、qc分别代表团体业务、证券业务和个人业务队列,顾客进入银行时进行登记,领取相应号码,进入相应业务队列。
为了在工作结束后对每个窗口办理的业务量进行简单汇总,在办理业务时,将办理的情况在记录,不妨也用队列实现,6个窗口分别用qa1、qa2、qb1、qb2、qc1、qc2表示。
链队列结点描述如下:typedef struct node{ ElemType data;struct node *next;}QNode;(2)具体算法:void ManEnbar(){do{printf("请输入柜员号0-6:\n");scanf("%d",&y);if(y<0||y>6)printf("柜员号错误,请重新输入!\n");else{ switch(y){case 1:if(OutQueue(qa,&e)==OK){pre1--;EnQueue(qa1,e);Printele(e);i1--;}elseprintf("没有任何等待办理业务的顾客了!\n"); break;case 2:if(OutQueue(qa,&e)==OK){pre1--;EnQueue(qa2,e);Printele(e);i1--;}elseprintf("没有任何等待办理业务的顾客了!\n"); break;case 3:if(OutQueue(qa,&e)==OK){pre1--;EnQueue(qb1,e);Printele(e);i1--;}elseprintf("没有任何等待办理业务的顾客了!\n"); break;case 4:if(OutQueue(qa,&e)==OK){pre1--;EnQueue(qb2,e);Printele(e);i1--;}elseprintf("没有任何等待办理业务的顾客了!\n"); break;if(OutQueue(qa,&e)==OK){pre1--;EnQueue(qc1,e);Printele(e);i1--;}elseprintf("没有任何等待办理业务的顾客了!\n"); break;case 6:if(OutQueue(qa,&e)==OK){pre1--;EnQueue(qc2,e);Printele(e);i1--;}elseprintf("没有任何等待办理业务的顾客了!\n"); break;default:break;}}}while(y!=0);}int Printele(ElemType e){printf("\n *****Bank(银行)\n");printf("Business number is:(业务的类型:)%d\n",e.No);printf("Business type is:(业务的类型:)%c\n",e.classifi);printf("还有%d个顾客在前面等待\n",e.pre);return OK;}Status Printz(LQueue *Lq){int iii=0;QNode *p;p=Lq->front;while(p!=NULL){ iii++;printf("%d,Number=%d,Leixing=%c\n",iii,p->data.No,p->data.classifi); p=p->next;}return OK;}算法分析:窗口柜员叫号子程序:排在与本窗口中业务类相同的客户到窗口柜员处办理业务。
新华东交通大学数据结构课程设计(银行模拟系统)(副本)-

新华东交通大学数据结构课程设计(银行模拟系统)(副本)- 课程设计(论文)任务书软件学院XXXX专业12月XX日至12月XX日课程设计(论文)定位:XXXX培训中心4、课程设计(论文)内容要求:1。
本课程设计(1)的目的是让学生掌握抽象数据类型的组织和定义;(2)使学生掌握数据类型的定义和实现;(3)培养学生组织和分析数据的能力;(4)培养学生分析和应用基于不同数据结构的算法的能力;(5)提高学生科技论文的写作能力2.基本要求:每个学生可以选择下列题目之一(打勾)并独立完成课程设计:□稀疏矩阵运算:实现稀疏矩阵的输入、输出、加法、减法和乘法运算□关键路径:找出至少需要多长时间来完成整个项目以及整个项目中的关键活动(1)能够输入和存储描述项目的AOE网络;(1)对于输入的AOE网络,应判断其是否能够顺利进行;(2)如果项目能够顺利进行,输出完成整个项目至少需要多长时间,以及每个关键活动所附加的两个顶点,最早发生时间和最晚发生时间。
□银行业务模拟:参见数据结构P683.课程设计论文的写作要求为(1)按照稿件的规格打印并抄录课程设计报告;(2)报告分为四个部分:封面、任务书(本文件)、正文、课程设计经验和参考文献。
学生签名:日期课程设计(论文)复习意见(1)话题分析(XXXX日期文本1,数据结构定义1。
抽象数据类型本设计中使用的数据结构ADT定义如下:ADT队列{数据对象:d = {ai | ai ∈elemset,i = 1,2,...,n,n ≥ 0}数据关系:r1 = {| ai-1,ai ∈d,i = 2,...,n}基本操作:void init_Q(队列操作结果:构造空队列Q int Q_empty(队列Q);初始条件:队列Q中存在操作结果:如果Q为空,返回真,否则返回假整数Q_length(队列Q);初始条件:队列Q有个操作结果:返回到队列Q的元素数,即队列长度int gethead_Q(队列Q);初始条件:队列q有个操作结果:队列头元素void _ q返回到队列q(队列初始条件:队列q 有个操作结果:插入带有元素e q的新队列结束元素队列初始条件:队列Q有个操作结果:删除队列Q的队列头元素} ADT queue32。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
山东理工大学计算机学院课程设计(数据结构)班级计升1001班姓名学号1022051029指导教师二○一一年一月二十日课程设计任务书及成绩评定课题名称银行业务模拟系统Ⅰ、题目的目的和要求:1、设计目的巩固和加深对数据结构的理解,通过上机实验、调试程序,加深对课本知识的理解,最终使学生能够熟练应用数据结构的知识写程序。
(1)通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。
(2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。
2、设计题目要求:1. 客户业务分为两种:第一种是申请从银行得到一笔资金,即取款或借款;第二种是向银行投入一笔资金,即存款或还款。
2. 银行有两个服务窗口,相应地有两个队列。
客户到达银行后先排第一个队。
处理每个客户业务时,如果属于第一种,且申请额超出银行现存资金总额而得不到满足时,则立即排入第二个队等候,直至满足时才离开银行,否则业务处理完后立即离开银行。
3. 每接待完一个第二种业务的客户,则顺序检查和处理第二个队列中的客户,对能满足的申请者予以满足,不能满足者重新排到第二个队列的队尾。
4.假设检查不需要时间,在此检查过程中,一旦银行资金总额少于或等于刚才第一个队列中最后一个客户(第二种业务)被接待之前的数额,或者本次已将第二个队列检查或处理了一遍,就停止检查(因为此时已不可能还有满足者),转而继续接待第一个队列的客户。
5. 任何时刻都只开一个窗口,营业时间结束时所有客户立即离开银行。
通过模拟方法求出客户在银行内逗留的平均时间。
Ⅱ、设计进度及完成情况Ⅲ、主要参考文献及资料[1] 严蔚敏数据结构(C语言版)清华大学出版社 1999[2] 严蔚敏数据结构题集(C语言版)清华大学出版社 1999[3] 谭浩强 C语言程序设计清华大学出版社[4] 与所用编程环境相配套的C语言或C++相关的资料Ⅳ、成绩评定:设计成绩:(教师填写)指导老师:(签字)二○一一年一月二十一日目录第一章概述 (1)第二章系统分析 (2)第三章概要设计………………………………………………………第四章详细设计………………………………………………………第五章运行与测试……………………………………………………第六章总结与心得……………………………………………………参考文献………………………………………………………………第一章概述课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。
课程设计是让同学们对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。
《数据结构》是一门重要的专业基础课,是计算机理论和应用的核心基础课程。
数据结构课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。
同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。
在这次的课程设计中我选择的题目是银行业务模拟系统。
一般某个银行在某个地区营业前,都要进行市场调查与分析。
通过调查,分析开多少个窗口使效率最高,而且不会产生较大的冗余。
做此项调查通常要花费大量的人力物力,因此我借助计算机系统产生的随机数(时间间隔,每个客户办理的款数以及处理时间)对银行客户的离散事件进行预测,通过银行业务模拟系统计算出客户在银行逗留的总时间并计算出客户在银行的平均逗留时间。
通过计算机模拟的方法减少实际调查的劳动量,资金及时间耗费,轻松的得到高效的方法。
第二章系统分析1.银行业务模拟程序的主要处理对象是“事件”,事件的主要信息是事件的类型和事件的发生时刻。
算法中处理的事件有两类:一类是客户到达事件;另一类是客户离开事件。
前一类事件发生的时刻随客户的到来自然形成;后一类事件发生的时刻由客户办理业务所需时间和等待时间而定。
由于程序驱动是按事件发生时刻的先后顺序进行的,所以事件表应是有序表,其主要操作是插入和删除事件,用一个单链表表示。
2.银行业务模拟程序中需要的另一数据结构是表示客户排队的队列,由于假设银行有2个窗口,因此程序中需要2个队列,队列中有关客户的信息是客户到达的时间和客户办理业务所需要的时间。
队列中的队头客户即为正在窗口办理事务的客户,他办完业务离开队列的时刻影响着即将发生的客户离开事件的时刻,这就是说,对每个队头客户都存在一个将要驱动的客户离开事件。
因此在任何时刻即将发生的事伯只有4种可能:1)新的客户到达;2)队列1队头客户办完业务离开;3)队列1取款客户由于得不到满足而转至队列2;4)队列2队头客户办完业务离开;3. 为了使编写的程序具有通用性,在编程序时将银行的营业时间、初始存款客户办理业务的最长时间及两个客户到达的最大时间间隔都设置成程序运行时动态输入,但是客户办理业务的时间和两个客户到达的时间间隔用随机函数产生的随机数表示。
这样可以对程序进行理性的分析,从而实现真正的模拟。
4. 测试数据。
第三章概要设计1、银行业务模拟程序流程图2、本程序包含三个模块①主程序模块:void main(){输出主界面;选择操作:进入银行业务模拟系统/退出程序;While(进入银行业务模拟窗口){OpenForDay();进行初始化操作;输出格式控制;{ 银行业务模拟:while(有要处理的事件时) //有事件可处理{DeQueue1(); //队列1出队列,并用en返回值 if(客户到达)CustomerArrived(); //处理客户到达事件elseCustomerDeparture(); //处理客户离开事件 }计算出客户的平均逗留时间并输出}返回主界面:选择操作:继续进行业务模拟/退出程序;If(选择的是退出)退出程序;}}②客户到达事件处理模块――实现客户信息队列的抽象数据类型.③客户离开事件处理模块――实现有序事件链表的抽象数据类型3、函数调用关系如图所示:4、设定客户信息队列的抽象数据类型定义:ADT LinkQueue {数据对象: D={ai|ai∈QueueElem,i=1,2,•••,n, n≥0}数据关系: R1={<ai-1,ai>|ai-1,ai∈QueueElem ,i=2,3, •••,n } 基本操作:InitQueue(&Q)操作结果:构造一个空队列。
destroyqueue(&Q)初始条件:队列已存在。
操作结果:销毁队列,此队列不再存在。
EnQueue(&Q,en )初始条件:队列已存在。
操作结果:新元素en入队列。
DeQueue(&Q,&en)初始条件:队列已存在。
操作结果:队头元素出队列,并以en返回其值。
QueueLength(Q)初始条件:队列已存在。
操作结果:返回队列中元素的个数,即队列长度。
} ADT LinkQueue第四章详细设计#include<stdio.h>#include<stdlib.h>#include <time.h>#include<iostream.h>#define MONEY 5000 //个人业务值,交易额上限#define OK 1#define ERROR 0#define OVERFLOW -2typedef int status;typedef struct{int arrivetime; //到达时间int OccurTime; //事件发生时间int NType; //事件类型,0表示到达事件,1表示离开事件。
同时用1表示存款,2表示取款。
int duration; //办理业务时间long int money;//交易金额}Event,ElemType1;typedef struct{ //等待队列元素 int arrivetime; //到达时间int duration; //办理业务时间 long int money; //交易金额}wait,ElemType2;typedef struct QNode1{ElemType1 data;struct QNode1 *next;}QNode1,*Queue1;typedef struct QNode2{ElemType2 data;struct QNode2 *next;}QNode2,*Queue2;typedef struct{Queue1 front;Queue1 rear;}LinkQueue1;typedef struct{Queue2 front;Queue2 rear;}LinkQueue2;//全局变量long int total_money; //银行现存资金总额int total_time; //客户逗留总时间int use_time;//每个顾客所用时间int money;//每个顾客办理的款数int closetime;//银行营业时间int INTERTIME; //下一用户到达的时间间隔int DURATION; //办理业务所需时间int number; //办理业务的次序int time1; //系统现在时间LinkQueue1 Q1;LinkQueue2 Q2;Event en; //事件wait en1; //列表2元素//初始化队列1status InitQueue1(){Q1.front=Q1.rear=(Queue1)malloc(sizeof(QNode1)); if(!Q1.front)exit(OVERFLOW);Q1.front->next=NULL;return OK;}//初始化队列2status InitQueue2(){Q2.front=Q2.rear=(Queue2)malloc(sizeof(QNode2)); if(!Q2.front)exit(OVERFLOW);Q2.front->next=NULL;return OK;}//销毁队列1status destroyqueue1(){while(Q1.front){Q1.rear=Q1.front->next;free(Q1.front);Q1.front=Q1.rear;}return OK;}//销毁队列2status destroyqueue2(){while(Q2.front){Q2.rear=Q2.front->next;free(Q2.front);Q2.front=Q2.rear;}return OK;}//队列1入队列status EnQueue1(){ Queue1 p,r,r1;p=(Queue1)malloc(sizeof(QNode1));if(!p)exit(OVERFLOW);p->data.arrivetime=en.arrivetime;p->data.OccurTime=en.OccurTime;p->data.NType=en.NType;p->data.duration=en.duration;p->data.money=en.money;r=Q1.front->next;while(r){if(p->data.arrivetime < r->data.arrivetime) { if(r==Q1.front->next){p->next=r;Q1.front->next=p;}else{r1->next=p;p->next=r;}}r1=r;r=r->next;}if(!r){ if(Q1.front->next==NULL) {Q1.front->next=p;Q1.rear=p;Q1.rear->next=NULL;}else{p->next=NULL;Q1.rear->next=p;Q1.rear=p;}}return OK;}//队列2入队列status EnQueue2(){Queue2 p;p=(Queue2)malloc(sizeof(QNode2));if(!p)exit(OVERFLOW);p->data.arrivetime=en1.arrivetime;p->data.duration=en1.duration;p->data.money=en1.money;p->next=NULL;Q2.rear->next=p;Q2.rear=p;return OK;}//若队列1不空,则删除Q1的队头元素,并用en返回其值status DeQueue1(){ Queue1 p;if(Q1.front==Q1.rear) return ERROR;p=Q1.front->next;en.arrivetime=p->data.arrivetime;en.OccurTime=p->data.OccurTime;en.NType=p->data.NType;en.duration=p->data.duration;en.money=p->data.money;Q1.front->next=p->next;if(Q1.rear==p) Q1.rear=Q1.front; //只有一个人时 free(p);return OK;}//若队列2不空,则删除Q2的队头元素,并用en1返回其值status DeQueue2(){ Queue2 p;if(Q2.front==Q2.rear)return ERROR;p=Q2.front->next;en1.arrivetime=p->data.arrivetime;en1.duration=p->data.duration;en1.money=p->data.money;Q2.front->next=p->next;if(Q2.rear==p) Q2.rear=Q2.front; //只有一个人时free(p);return OK;}//营业时间结束,全部客户离开银行void free_system(){destroyqueue1();destroyqueue2();}//产生随机数status rand_ar(int *intertime,long int *money, int *duration,int*NType){*intertime=rand()%INTERTIME+1; //下个客户到达的时间间隔,不大于INTERTIME*money=rand()%MONEY+1; //每个顾客办理的款数,不大于MONEY *duration=rand()%DURATION+1; //客户办理业务所要时间,不大于DURATION*NType=rand()%2; //事件类型分为0和1两种return OK;}void OpenForDay(){ //初始化操作printf(" 请输入银行的初始存款:");scanf("%d",&total_money);printf(" 请输入银行的营业时间(分钟):");scanf("%d",&closetime);printf(" 请输入最大到达时间间隔(分钟):");scanf("%d",&INTERTIME);printf(" 请输入最大的处理时间(分钟):");scanf("%d",&DURATION);total_time=0; //客户逗留总时间(初始值)number=0; //办理业务的次序(初始值)InitQueue1(); //初始化队列1InitQueue2(); //初始化队列2en.arrivetime=0; //到达时间en.OccurTime=0; //事件发生时间en.NType=0; //事件类型,暂时值en.money=0; //交易金额,暂时值en.duration=0; //办理业务时间,暂时值EnQueue1(); //事件进队列}//查找上一离开事件的发生时间int find_leave(){ Queue1 p;int i=0;p=Q1.front->next;while(p!=NULL){if(p->data.NType!=0)i=p->data.OccurTime;p=p->next;}return i;}void CustomerArrived(){int intertime;int i;time1=en.OccurTime;rand_ar(&intertime,&(en.money), &(en.duration),&(en.NType));//设置一离开事件插入事件表en.NType++; //0变1,1变2i=find_leave(); //查找上一离开事件的发生时间if(i==0) //第一位顾客en.OccurTime=en.arrivetime+en.duration;elseif(i>=en.arrivetime)//本事件到达时上一事件还未离开en.OccurTime=i+en.duration; //则此事件的离开时间=上一事件的离开时间+本事件处理时间else //上一事件离开之后,本事件才到达en.OccurTime=en.arrivetime+en.duration;//则此事件的离开时间=本事件到达时间+本事件处理时间EnQueue1();//设置下一用户到达事件插入队列1en.arrivetime=en.arrivetime+intertime; //下一客户到达时间 en.OccurTime=en.arrivetime;en.NType=0; //暂时值en.money=0; //暂时值en.duration=0; //暂时值EnQueue1();}//返回队列2的长度int getlong_q2(){int i=0;Queue2 p;p=Q2.front->next;while(p){i++;p=p->next;}return i;}//顺序检查队列2是否有满足条件者status check_q2(){int i,j,z=0;i=getlong_q2(); //用i返回队列2长度for(j=1;j<=i;j++){DeQueue2(); //队列2出队,用en1返回其值if(en1.money<=total_money) //若队列2出队元素的要交易的金额<=银行现存金额,则可以办理{ if(time1>closetime){printf("--\t\t%d\t\t%d\t\t%d\t\t%d\t%d\n",z,use_time,number,z,( en1.arrivetime),en1.money);}else{time1=time1+en1.duration; //更新系统当前时间 use_time=time1-en1.arrivetime;total_time+=use_time; //更新逗留时间total_money-=en1.money; //更新资金总额number++; //更新实现交易的客户数printf("%ld\t\t%d\t\t%d\t\t%d\t\t%d\t-%d\n",total_money,use_time ,number,time1,(en1.arrivetime),(en1.money));}}else { //若队列2出队元素的要交易的金额>银行现存金额,不能办理if(time1>closetime){printf("--\t\t%d\t\t%d\t\t%d\t\t%d\t%d\n",z,use_time,number,z,( en1.arrivetime),en1.money);}else{EnQueue2(); //继续插入队列2的队尾,继续等待}}}return OK;//队列1离开事件减duration(办理业务时间)int cut_duration(int e) //e即形参办理业务的时间{Queue1 p,q,r;ElemType1 en;p=Q1.front->next;r=Q1.front;if(p){if(p->data.NType!=0){q=p->next;r->next=q; //删除结点en.arrivetime=p->data.arrivetime; //到达时间en.OccurTime=p->data.OccurTime-e; //事件发生时间 en.NType=p->data.NType; //事件类型en.duration=p->data.duration; //办理业务时间en.money=p->data.money; //数额free(p);EnQueue1();}}return OK;void CustomerDeparture(){ int i;i=en.NType; //业务类型,1表示存款,2表示取款time1=en.OccurTime-en.duration;if(i==OK) //是否是办理存款{ if(en.OccurTime>closetime) //营业结束,全部客户离开银行 free_system();else //营业时间没有结束,继续办理{use_time=en.OccurTime-en.arrivetime;total_time+=use_time; //更新逗留的总时间total_money=total_money+en.money; //更新资金总额 number++; //更新服务的客户数time1=en.OccurTime; //更新系统当前时间printf("%ld\t\t%d\t\t%d\t\t%d\t\t%d\t%d\n",total_money,use_time, number,en.OccurTime,en.arrivetime,en.money);check_q2(); //检查队列2是否有满足条件者}}else //办理取款{if(en.money>total_money) //办理取款,当申请金额不能满足时,离开队列1进入队列2等待{ cut_duration(en.duration);//从队列1中删除该结点 en1.arrivetime=en.arrivetime;en1.duration=en.duration;en1.money=en.money;EnQueue2(); //进入队列2继续等待}else //办理取款,当能满足所申请金额时进行队列1{if(en.OccurTime>closetime)//营业结束,全部客户离开银行free_system();else{use_time=en.OccurTime-en.arrivetime;//顾客所用时间=事件发生时间-事件到达时间total_time+=use_time;//更新逗留的总时间 total_money-=en.money; //更新资金总额 time1=en.OccurTime; //更新系统当前时间 number++; //更新客户总数printf("%ld\t\t%d\t\t%d\t\t%d\t\t%d\t-%d\n",total_money,use_time ,number,en.OccurTime,en.arrivetime,en.money);}}}}void main(){cout<<"============================================="<<endl;cout<<" 欢迎使用银行业务模拟系统 \n";cout<<"---------------------------------------------"<<endl;cout<<" 姓名:王宁 "<<endl;cout<<" 学号: 1022051029 "<<endl;cout<<" 班级:计升1班 "<<endl;cout<<"============================================"<<endl;cout<<"请选择开始或退出:"<<endl;cout<<"1.进入银行业务模拟系统"<<endl;cout<<"0.退出程序"<<endl;int n;cin>>n;while(n==1){OpenForDay(); //初始化操作cout<<"---------------------------------------------"<<endl;cout<<"Total_money\tuse_time\tnumber\ten.OccurTime\ten.arrivetime\tmoney"<<endl;{while(Q1.front){DeQueue1(); //队列1出队列,并用en返回值 if(en.NType==0)//en.NType等于0表示客户到达,1表示客户离开CustomerArrived(); //处理客户到达事件elseCustomerDeparture(); //处理客户离开事件,业务类型en.NType等于1表示存款,2表示取款}printf("1.营业结束后银行现存资金总额(元): %ld\n",total_money) ; printf("2.营业时间内实现交易的客户数(人): %d\n",number);printf("3.客户在银行逗留的总时间(分钟): %d\n",total_time); printf("4.客户在银行的平均逗留时间(分钟):%f\n",(float)total_time/(float)number);cout<<"--------------------------------------"<<endl<<endl;}cout<<"以上为模拟结果!请继续选择继续或退出:"<<endl;cout<<"1.继续模拟"<<endl;cout<<"0.退出程序"<<endl;int n;cin>>n;if(n==0){ cout<<" 谢谢使用本系统,再见!"<<endl; break; } }}第五章运行与测试1、在调试程序的过程中遇到什么问题,是如何解决的?2、设计了那些测试数据?测试结果是什么?1.调试程序过程遇到的问题及解决的方法首先是对指针初始化的问题,一些指针如果不先申请一个新变量就会报错,即使是直接把这个指针赋值为空也要现为其申请一个新的空间。