银行业务模拟系统实验报告

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

数据结构课程设计报告题目:银行业务活动的模拟

学生姓名:赖锡宏

学号:1021112513

班级:10211125

指导教师:高永平

2012年6月15日

计算机与信息技术学院综合性、设计性实验报告

一、实验目的

1)通过实验掌握对离散事件模拟的认识;

2)进一步理解队列的实现与应用;

3)对链表的操作有更深层次的理解;

该实验涉及到线性表的建立、插入、删除等操作,涉及到了队列的建立、插入、删除,涉及到了离散事件的应用思想,还涉及到了排序的概念。完成这个实验对线性表、队列及C语言编程等多方面的知识将是一个很好的利用,对离散事件也将有一个初步的认识。

二、实验仪器或设备

1台/学生微型计算机。

三、总体设计(设计原理、设计方案及流程等)

1.设计原理:

为了计算平均时间,就要掌握每个客户到达银行和离开银行这两个时刻,后者减去前者即为每个客户在银行逗留的时间。所有客户逗留时间的

总和被一天内进入银行的客户数除便是所求的平均时间。

事件的主要信息是事件类型和事件发生的时刻,算法中要处理的事件有两类:一类是客户到达的时间,另一类是客户离开的时间。前一类事件

发生的时刻随客户到来自然形成,后一类事件发生时刻则由客户事务所需

时间和等待所耗时间而定。由于驱动程序是按时间发生时刻的先后顺序

进行,则事件表应该是有序表,其主要操作是插入和删除事件。

2.设计方案及流程

由于在实际的银行中,客户到达的时刻及其办理事务所需时间都是随机的,在模拟程序中可用随机数代替,不失一般性。假设第一个客户进门

的时刻为0,即是模拟程序处理的第一个事件,之后每个客户到达的时刻

在前一个客户到达时设定。因此在客户到达事件发生时需先产生两个随机

数:其一为此时刻到达的客户办理事务所需时间durtime;其二为下一个

客户将到达的时间间隔intertime,假设当前事件发生的时刻为

occurtime,则下一个客户到达事件发生的时刻为occurtime+intertime。

由此应产生一个新的客户到达时间插入表;刚到达的客户则应插入到当前

所含元素最少的队列中;若该队列在插入前为空,则还应产生一个客户离

开事件插入事件表。

客户离开时间的处理比较简单。首先计算该客户在银行逗留的时间,

然后从队列中删除该客户后查看队列是否为空,若不空则设定一个新的队

头客户离开事件。

四、实验步骤(包括主要步骤、代码分析等)

第1次:完成程序的主框架设计,进行调试,验证其正确性;

第2次:详细设计,进行调试,验证其正确性;

第3次:进行整体调试,运行程序,对运行结果进行分析,完成实验报告。

程序代码如下:

#include

#include // malloc()等

#include

#include

#include

#define TRUE 1

#define FALSE 0

#define OK 1

#define ERROR 0

typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等

#define Qu 4 // 客户队列数

typedef struct

{

int OccurTime; // 事件发生时刻

int NType;

}Event,ElemType;

typedef struct LNode

{

ElemType data;

LNode *next;

}*Link,*Position;

struct LinkList // 链表类型

{

Link head,tail;

int len;

};

typedef struct

{

int ArrivalTime; // 到达时刻

int Duration; // 办理事务所需时间

}QElemType; // 定义QElemType(队列的数据元素类型)为结构体类型;

typedef struct QNode

{

QElemType data;

QNode *next;

}*QueuePtr;

struct LinkQueue

{

QueuePtr front,rear; // 队头、队尾指针

};

typedef LinkList EventList; // 事件链表类型,定义为有序链表

EventList ev; // 事件表

Event en; // 事件

Event et; // 临时变量

LinkQueue q[Qu]; // Qu个客户队列

QElemType customer; // 客户记录

int TotalTime=0,CustomerNum=0; // 累计客户逗留时间,客户数(初值为0)

int CloseTime; // 银行营业时间(单位是分)

//对链表的操作:

Status InitList(LinkList &L)

{ // 构造一个空的线性链表

Link p;

p=(Link)malloc(sizeof(LNode)); // 生成头结点

if(p)

{

p->next=NULL;

L.head=L.tail=p;

L.len=0;

return OK;

}

else

return ERROR;

}

Status DelFirst(LinkList &L,Link h,Link &q)

{

q=h->next;

if(q) // 链表非空

相关文档
最新文档