银行业务模拟系统:离散事件仿真与平均逗留时间计算

需积分: 9 9 下载量 144 浏览量 更新于2024-09-09 4 收藏 133KB DOC 举报
本篇报告是关于软件学院12级java班学生吴静在计算机科学与技术专业进行的数据结构实验,实验题目为"银行业务模拟系统的设计与实现"。实验目标旨在通过离散事件模拟来深化理解和运用数据结构,如队列和链表,以及C语言编程技巧。主要任务是设计并实现一个模拟银行业务的程序,模拟客户排队等待服务的过程,计算客户在银行的平均逗留时间。 实验的核心是通过队列数据结构来模拟银行窗口的服务流程。每个窗口代表队列的一端,客户按照到达顺序依次加入队列。当一个窗口的工作人员空闲时,队列头部的客户将被服务,然后离开。如果所有窗口都有客户,新来的客户会加入最短队伍的末尾。此外,实验还考虑了业务连续性,即两个客户之间的到达时间间隔不能超过5分钟。 设计中,系统分为三个关键部分:初始化函数OpenForDay负责设定银行开门时的数据结构状态;事件驱动EventDriven模块处理客户到达和离开事件,动态调整队列状态;而CloseForDay函数则用于模拟银行关门,统计并计算客户平均逗留时间。银行的营业时间作为输入参数,每个客户的业务处理时间不超过30分钟。 为了准确计算平均逗留时间,实验要求程序能跟踪每个客户从进入银行到离开的过程,并在银行关门后进行总结。整个设计过程体现了对数据结构(如队列)在实际场景中的应用,以及如何通过编程实现离散事件模拟。 该实验不仅锻炼了学生的编程技能,也让他们在实践中加深了对线性表、队列操作和离散事件理论的理解,是理论知识与实践操作相结合的良好案例。
2018-12-27 上传
假设某银行有n个窗口对外接待客户,从早晨银行9点开门起到5点关门,不断有客户进入银行,由于每个窗口在某个时刻只能接待一个客户。因此在客户人数众多时需要在每个窗口前顺次排队,对于刚进银行的客户。如果某个窗口的业务员正空闲,则可上前输业务。反之,若个窗口均有客户所占,他便会排在为数最少的队伍后面。编制一个程序模拟银行的这种业务活动并计算一天中客户在银行的平均逗留时间。 首先从题目分析:N个窗口排队,首先就要建立N个队列来存储排队的用户信息 ,然后算出那个队列最短就用户就到那个队伍排队,同时通过随机生成他办理业务的时间和到来的时间,通过计算用户的到来时间和离开时间就可以计算出某个用户在银行的逗留时间 ;话不多说直接上代码。 下面是主函数,由用户输入银行上下班时间,计算营业多长时间Total_time,如何当前时间小于关门的时间,就一直进入customer_into();函数,用户不断的进来 #define FALSE 0 #define TRUE 1 #define QUEUE_SUM 4 //窗口的数量 int rand_business_time=0, rand_wait_time=0;//定义办理时间,等待时间变量 int Total_time=0,now_tim=0;//总时间,当前时间 int go_time[4] = {0,0,0,0};//定义数组存储每个窗口最后一位办理完业务的时间 int sum_nan[4] = {0,0,0,0};//定义数组存储每个窗口排队的人数 int Sign=TRUE; //是否关门标志位 float Sum_Wait_Time=0.0; //等待的总时间 float Sun_Nan=0.0; //总人数 int open_time;//开门时间 int off_time; //关门时间 int main() { Prompted(); printf("输入银行的24小时制营业时间:如营业时间为9:00--17:00,则应输入:9,17\n"); scanf("%d,%d", &open;_time,&off;_time); Total_time = (off_time - open_time) * 60;//计算银行总营业多少分钟 for (int i = 0; i now_time) { customer_into(); //客户进入函数 } printf("银行关门时间到不再接收客人\n\n"); for (int i = 0; i < QUEUE_SUM; i++) { DisposeQueue(&queue;[i],i);//输入在银行关门前还没有办理完业务的客户信息 } printf("平均时间为%.2f分钟",Sum_Wait_Time/Sun_Nan); /*通过各个客户的总等待时间总和/总人数算出逗留平均时间*/ _getch(); return 0; }