09级软件学院数据结构实验报告模板@

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

河南师范大学综合性、设计性实验报告

学院名称(公章): 2010-2011学年第学期填表日期:年月日

学号姓名年级

实验课程名称数据结构

实验项目名称银行业务模拟系统的设计与实现

实验项目性质1、综合性√ 2、设计性主讲教师

开课年级开课专业实验地点

开课日期

开课时间

一、实验题目:银行业务模拟系统的设计与实现(该实验为综合性实验,共用6个学时)

二、实验要求:

1.问题描述:

假设某银行有四个窗口对外接待客户,从早晨银行开门起不断有客户进入银行。由于每个窗口在某个时刻只能接待一个客户,因此在客户人数众多时需在每个窗口前顺次排队,对于刚进入银行的客户,如果某个窗口的业务员正空闲,则可上前办理业务,反之,若四个窗口均有客户所占,他便会排在人数最少的队伍后面。现在需要编制程序以模拟银行的这种业务活动并计算一天中客户在银行逗留的平均时间。2.一个完整的系统应具有以下功能:

1)初始化(OpenForDay),模拟银行开门时各数据结构的状态。

2)事件驱动(EventDrived), 对客户到达和离开事件做相应处理。

3)下班处理(CloseForDay), 模拟银行关门时的动作,统计客户平均逗留时间。

[备注]:

假设银行开门的时刻(间)设为0 , 银行每天营业的时间在程序运行时输入(例如480分钟)。

每个客户办理业务的时间不超过30分钟,两个相邻客户到达银行的时间间隔不超过5分钟要求程序执行时,只要给出银行每天的营业时间即可输出客户平均逗留的时间。

三、总的设计思想、环境语言、工具等

总的设计思想:

为了计算这个平均的逗留时间,自然需要知道每个客户到达银行和离开银行这两个时刻,后者减去前者即为每个客户在银行的逗留时间。所有客户逗留时间的总和被一天内进入银行的客户数除便是所求的平均时间。称客户到达银行和离开银行这两个时间发生的事情为“事件”,则整个模拟程序将按事件的先后顺序进行处理。这样一种程序称做事件驱动模拟。下面是上述银行客户的离散事件驱动的模拟算法。 void Bank_Simulation( int CloseTime ){ //

OpenForDay ( ); //初始化,模拟银行开门时各数据结构的状态。

while(有要处理的事件时) //有事件可处理

{

EventDrived ; //事件驱动,从事件表中取出事件en;

//根据en的类型(客户到达事件或客户离开事件)做相应的处理

if(en表示客户到达)

CustomerArrived( );// 处理客户到达事件

else

CustomerDeparture( ) ;// 处理客户离开事件

}//while

CloseForDay( );//计算客户的平均逗留时间

}// Bank_Simulation

环境语言:Windows下的Microsoft VC++

四、数据结构与模块说明

下面是模拟程序中需要的数据结构及其操作。

1.模拟算法的主要处理对象是“事件”,事件的主要信息是事件的类型和事件的发生时刻。算法中处理的事件有两类:一类是客户到达事件;另一类是客户离开事件。前一类事件发生的时刻随客户的到来自然形成;后一类事件发生的时刻由客户办理业务所需时间和等待时间而定。由于程序驱动是按事件发生时刻的先后顺序进行的,所以事件表应是有序表,其主要操作是插入和删除事件,用一个单链表表示!!

2.模拟程序中需要的另一数据结构是表示客户排队的队列,由于假设银行有4个窗口,因此程序中需要4个队列,队列中有关客户的信息是客户到达的时刻和客户办理业务所需要的时间。每个队列中的队头客户即为正在窗口办理事务的客户,他办完业务离开队列的时刻就是即将发生的客户离开事件的时刻,这就是说,对每个队头客户都存在一个将要驱动的客户离开事件。因此在任何时刻即将发生的事伯只有5种可能:1)新的客户到达;2)1号窗口的客户离开;3)2号窗口的客户离开;4)3号窗口的客户离开;5)4号窗口的客户离开;

注:为了使编写的程序具有通用性,在编程序时将银行的营业时间、开的窗口数、客户办业业务的最长时间及两个客户到达的时间间隔都设置成程序运行时动态输入,这样可以对程序以及银开设的窗口的合理性进行分析,实现真正的模拟。

从以上分析可知,在模拟程序中只需要两种数据结构:有序链表和队列。

程序中用到的头文件、类型定义及主要的函数原型如下:

#include"stdio.h"

#include"malloc.h"

#include"math.h"

#include"stdlib.h"

int Cks=4; // 银行办理业务的窗口数,默认值为:4;最大值不超过20;

int Qu ; // 客户队列数Qu=Cks

int Khjg=5; // 两相邻到达客户的时间间隔最大值,默认值为:5

int Blsj=30; // 每个客户办理业务的时间最大值,默认值为:30

typedef struct // 定义事件的元素类型ElemType为结构体类型

{

int OccurTime; // 事件发生时刻

int NType; // 事件类型,Qu表示到达事件,0至Qu-1表示Qu个窗口的离开事件

}Event,ElemType; // 事件类型,有序链表LinkList的数据元素类型

typedef struct LNode //定义事件表的结点类型

{

ElemType data ;

struct LNode *next;

相关文档
最新文档