数据结构课程设计报告-银行业务模拟
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
摘要 (2)
一、需求分析 (2)
二、概要设计 (3)
三、详细设计 (3)
1、预定义和定义结构体 (3)
2、基本操作的算法描述 (6)
3、测试界面操作提示 (8)
4、不断进入队列,出队列,时间的更新,总金额的更新 (9)
5、营业结束时判断是否为所有客户服务,并输出最后的银行总金额 (9)
四、设计和调试分析 (10)
五、用户手册 (11)
六、测试结果 (11)
七、设计心得 (14)
八、参考文献 (14)
九、附录 (14)
摘要
在日常生活中,我们经常会遇到许多为了维护社会正常秩序而需要排队的情况,这样一类活动的模拟程序通常需要用到队列和线性表之类的数据结构,因此是队列的典型应用例子之一,而这次实验的题目银行业务的模拟程序就正是这样一个典型的例子。队列是一种先进先出的线性表,它只允许在表的一端插入,而在另一端删除元素。在队列中允许插入的一端叫做队尾,允许删除的一端则称为队头。我们需要编写一个程序已模拟银行的这种各种业务活动,并计算一天中客户在银行逗留的平均时间。这是一个离散事件驱动模拟程序。这也是一个的操作系统中的排队问题。假设某银行有3个窗口对外接待客户,从早晨银行开门(开门9:00am,关门5:00pm)起不断有客户进入银行。由于每个窗口在某个时刻只能接待一个客户,因此在客户人数众多时需要在每个窗口前顺次排队,对于刚进入银行的客户(客户进入时间使用随机函数产生),如果某个窗口的业务员正空闲,则可上前办理业务。
关键词:排队、队列、先进先出、离散事件驱动模拟程序、
一、需求分析
程序中处理的对象主要是“事件”,事件的主要信息是事件类型和事件发生的时刻。算法中处理的事件有两类:一类是客户到达事件,另一类是客户离开事件。前一类事件发生的时间随客户到来自然形成,后一类事件发生时刻则由客户事物所需时间和等待所耗时间而定。由于程序驱动是按事件发生时刻的先后顺序进行,则时间应是有序表,其主要操作是插入和删除事件。
由于在实际的银行中,客户到达的时刻及其办理事物所需时间都是随机的,在模拟中可用随机数代替。客户到达时间时需产生两个随机数,其一为此时刻到达的客户办理事务所需时间solvetime;其二为下一客户将到达的时间间隔waitTime,假设当前事件发生的时刻为occurtime,则下一个客户到达事件发生的时刻为occurtime+waitTime。由此应产生一个新的客户到达事件插入事件表。将客户到达事件插入事件表,刚到达的客户则插入到当前所含元素最少的队列中。
客户离开事件的处理比较简单。首先计算该客户在银行逗留时间,然后从队
列中删除该客户后查看队列是否空,若不空则设定一个新的队头客户离开此事件。
当然其中涉及到存取款功能,测试窗口会出现很多提示信息。测试出来的结果相应的也会很全面。
界面要求使用VC++6.0的运行环境。
二、概要设计
1、队列抽象数据类型的定义如下:
ADT Queue{
数据对象:D={ai|ai∈ElemSet, i=1,2, …,n, n≥0}
数据关系:R1={
约定a1为队列头,an为队列尾。
基本操作:
InitQueue( &Q )
操作结果:构造一个空队列Q。
DestroyQueue ( &Q )
初始条件:队列Q已存在。
操作结果:销毁队列Q。
ClearQueue ( &Q )
初始条件:队列Q已存在。
操作结果:将Q清为空队列。
QueueEmpty( Q )
初始条件:队列Q已存在。
操作结果:若Q为空队列,则返回TRUE,否则返回FALSE。
QueueLength( Q )
初始条件:队列Q已存在。
操作结果:返回Q的数据元素个数,即队列的长度。
GetHead( Q, &e )
初始条件:队列Q已存在且非空。
操作结果:用e返回Q的队头元素。
EnQueue( &Q, e )
初始条件:队列Q已存在。
操作结果:插入元素e为Q的新的队尾元素。
DeQueue( &Q, &e )
初始条件:队列Q已存在且非空。
操作结果:删除Q的队头元素,并用e返回其值。
QueueTraverse( Q, visit() )
初始条件:队列Q已存在且非空。
操作结果:从队头到队尾依次对Q的每个数据元素调用函数visit()。一旦visit()失败,则操作失败。
}ADT Queue
2、本程序调用的函数如下:
void Enterqueue1(Event m);将事件m插入队尾
void solvequeue1();办理银行存款业务
void solvequeue2(); 办理银行取款业务
printf("***************** 早上九点开业,欢迎光临*****************\n");//打印输出srand((unsigned)time( NULL ));//随机产生时间
3、主函数
void main()
{
cout<<"请输入银行总资金(元)和营业总时间(分钟):"< cin>>total_money>>closetime; cout<<"请输入存钱的最大值(元)和取钱的最大值(元)"< cin>>max_cunqian>>max_qvqian; cout<<"请输入事件的解决时间最大值(分钟)和客户的间隔时间的最大值(分钟)"< cin>>max_solve_time>>max_intertime_time; system("cls"); printf("***************** 早上九点开业,欢迎光临*****************\n"); cout<<" ============================================="< cout<<" 欢迎使用银行业务模拟系统\n"; cout<<" ---------------------------------------------"< cout<<" 姓名:石站锋"< cout<<" 学号:1107020404"< cout<<" 班级:信计四班"< cout<<" ============================================"< cout<<"银行每天开业总资金为"< Event temp; int intertime=0,n=1,i; intdurtime; int money; int waitTime=0; srand((unsigned)time( NULL ));//随机产生时间 intertime = rand() % max_intertime_time; temp.intertime = intertime; close_time = temp.intertime+close_time;