ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:20.40KB ,
资源ID:24268693      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/24268693.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(完整word版银行业务模拟数据结构课设C语言版.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

完整word版银行业务模拟数据结构课设C语言版.docx

1、完整word版银行业务模拟数据结构课设C语言版题目: 银行业务模拟(难度系数:1.3)运行环境VS问题描述客户业务分为两种。第一种是申请从银行得到一笔资金,即取款或借款。第二种是向银行投入一笔资金,即存款或还款。银行有两个服务窗口,相应地有两个队列。客户到达银行后先排第一个队。处理每个客户业务时,如果属于第一种,且申请额超出银行现存资金总额而得不到满足,则立刻排入第二个队等候,直至满足时才离开银行;否则业务处理完后立刻离开银行。每接待完一个第二种业务的客户,则顺序检查和处理(如果可能)第二个队列中的客户,对能满足的申请者予以满足,不能满足者重新排到第二个队列的队尾。注意,在此检查过程中,一旦银

2、行资金总额少于或等于刚才第一个队列中最后一个客户(第二种业务)被接待之前的数额,或者本次已将第二个队列检查或处理了一遍,就停止检查(因为此时已不可能还有能满足者)转而继续接待第一个队列的客户。任何时刻都只开一个窗口。假设检查不需要时间。营业时间结束时所有客户立即离开银行。 写一个上述银行业务的事件驱动模拟系统,通过模拟方法求出客户在银行内逗留的平均时间。基本要求利用动态存储结构实现模拟,即利用C语言的动态分配函数malloc和free。选做内容 自己实现动态数据类型。(已作) 1. 需求分析 计算来银行办理业务的用户平均逗留时间: 在运行终端控制台进行信息输入:输入信息包括(信息都为整数):1

3、.银行拥有的款额 取值范围:0, 正无穷 2.银行营业时间 取值范围:0, 1440 3.用户最大交易金额 取值范围:(0, 银行拥有款额 4.俩个用户到达时间的最大值 取值范围:(0, 银行营业时间 5.用户最大交易时间 取值范围:(0, 银行营业时间 在运行终端控制台进行信息输出:1.每个到达用户的到达时间,编号,要处理的金额,处理时间2.事件表3.总用户数4.总逗留时间5.平均逗留时间 程序所能达到的功能;1.输出每个用户的到达时间,编号,要处理的金额,处理时间2.银行运营过程的全部事件(包括到达事件和离开事件)3.计算银行运营过程的用户数,总逗留时间,平均逗留时间 三组测试数据:1.正

4、常情况:1.银行拥有的款额:100002.银行营业时间: 6003.用户最大交易金额:20004.俩个用户到达时间的最大值:205.用户最大交易时间:15应输出:25.482.极端的情况:两个到达事件之间的间隔时间很短,而客户的交易时间很长1.银行拥有的款额:100002.银行营业时间: 6003.用户最大交易金额:20004.俩个用户到达时间的最大值:55.用户最大交易时间:100应输出:20.03.极端的情况:两个到达事件之间的间隔时间很长,而客户的交易时间很短1.银行拥有的款额:100002.银行营业时间: 6003.用户最大交易金额:20004.俩个用户到达时间的最大值:1005.用户

5、最大交易时间:5应输出:88.38源代码如下:#include #include #include #includetypedef int Status;#define OK 1#define ERROR -1/*#define MAXTIME 600 /定义银行运作时间(单位:分钟 假设一分钟等于一秒)#define MAX_TIMEJIANGE 5 /定义最大时间间隔#define MAX_TIMEJIAOYI 100 /定义最大操作时间 */typedef struct kehu_event / 定义客户信息 int handel_time; / 事件处理时间 int money; /需

6、要处理的钱数目(负数表示取钱,正数表示存钱) int No; /客户的序号ElemType;typedef struct event /*定义事件类型*/ int index; /*标志变量,1代表到达事件,其余代表离开事件*/ int time; /*事件发生时间*/ int No; /*触发该事件的客户序号*/event;typedef struct /*定义链表节点*/ event data; struct LNode *next;LNode, *Link;typedef struct /*定义链表*/ Link head, tail; int len;*LinkList;LinkLis

7、t InitLink() /*初始化链表操作*/ LinkList L = (LinkList*)malloc(sizeof(LNode); if (L = NULL) return NULL; L-head = NULL; L-tail = NULL; L-len = 0; printf(链表初始化成功!); return L;Status ClearLink(LinkList L) /*链表的清空操作*/ if (L = NULL) return ERROR; Link p = L-head; Link k = L-head-next; while (p != L-tail) free(p

8、); p = k; if(k!=L-tail) k = k-next; free(p); L-head = NULL; L-tail = NULL; L-len = 0; printf(链表已经清空!); return OK;Status DestoryLink(LinkList L) /*链表的销毁操作*/ if (L = NULL) return ERROR; ClearLink(L); free(L); printf(链表销毁完毕!); return OK;Status InsertLink(LinkList L, event e) /*链表的尾部插入操作*/ if (L = NULL)

9、 return ERROR; Link p = (Link)malloc(sizeof(LNode); if (p = NULL) return ERROR; p-data = e; p-next = NULL; if (L-head = NULL) L-head = p; L-tail = p; L-len = 1; else L-tail-next = p; L-tail = p; L-len+; /printf(节点插入成功!); return OK;Status LinkTraverse(LinkList L) /*链表的遍历操作*/ if (L = NULL) return ERRO

10、R; Link p = L-head; printf(n遍历结果 :n); printf( 客户序号: 事件触发时间: 事件类型: ); printf(n-); while (p != NULL) printf(n %d %d, p-data.No, p-data.time); if (p-data.index = 1) printf( 到达); printf(n-); else printf( 离开); printf(n-); p = p-next; return OK;typedef struct LQNode /*定义队列的节点*/ ElemType data; struct LQNod

11、e *next;LQNode, *QueuePtr;typedef struct /*定义队列*/ QueuePtr front; QueuePtr rear; int len;LQueue;LQueue* InitQueue() /*构造一个空队列*/ LQueue *Q = (LQueue *)malloc(sizeof(LQueue); if (Q = NULL) return ERROR; Q-front = NULL; Q-rear = NULL; Q-len = 0; return Q;Status EnQueue(LQueue *Q, ElemType e) /在队列的队尾插入e

12、 LQNode *p; p = (LQNode*)malloc(sizeof(LQNode); if (p = NULL) return ERROR; p-data = e; p-next = NULL; if ( NULL = Q-front) Q-front = p; Q-rear = p; Q-len = 1; else Q-rear-next = p; Q-rear = p; Q-len+; return OK;Status DeQueue(LQueue *Q, ElemType *e) /是队列Q的队头出队并且返回到e LQNode *p; if (NULL = Q-front) r

13、eturn ERROR; p = Q-front; *e = p-data; Q-front = p-next; if (Q-rear = p) Q-rear = NULL; free(p); Q-len-; return OK;Status DestoryQueue(LQueue *Q) /*队列的销毁操作*/ if (Q = NULL) return ERROR; QueuePtr p=NULL, q=NULL; p = Q-front; while (p != Q-rear) q = p-next; myfree(p); p = q; free(Q-rear); return OK;St

14、atus InsertQueue(LQueue *Q, LQueue *E) /*将E队列插入到Q队列的前面,并将Q队列作为新的队列释放E*/ if ( E = NULL | E-front = NULL) return ERROR; if (Q = NULL | Q-front = NULL | Q-rear = NULL) Q-front = E-front; Q-rear = E-rear; else E-rear-next = Q-front; Q-front = E-front; return OK;/*-定义需要使用的全局变量-*/int total ; /*一天营业开始时银行拥有

15、的款额为10000(元),并且默认取钱只能*/int total_time = 600; /*营业时间为600(分钟)*/int max_money;LQueue *handel_queue = NULL; /*定义第一个队列用于处理业务*/LQueue *wait_queue = NULL; /* 定义第二个队列用于存储等候的客户*/LinkList event_link = NULL; /*定义一个事件表*/int nextTime = 0; /*定义一个变量作为下一个客户的随机到达时间*/int nexthandelTime = 0; /*定义一个变量作为正在排队的下一个客户处理时间*/

16、int kehu_NO = 1; /*客户的服务序号*/ElemType *leave_kehu = NULL; /*定义一个办理完业务要离开的客户变量,用于记录*/ElemType *search_kehu = NULL; /*定义一个用来存储待处理业务的客户变量*/*-*/ElemType* mymalloc( int max_timejiaoyi) /*动态申请客户节点*/ ElemType *e; e = (ElemType*)malloc(sizeof(ElemType); if (e = NULL) return ; e-handel_time = (rand() % max_ti

17、mejiaoyi) + 1; e-money = (rand() % (2 * max_money) - max_money; e-No = kehu_NO; kehu_NO+; return e;Status myfree(ElemType *e) /*动态释放客户节点*/ if (e = NULL) return ERROR; free(e); return OK;/*Status suiji_kehu(ElemType *e,int max_timejiaoyi) /*随机生成客户信息mymalloc(e, max_timejiaoyi);return OK;*/ElemType* Ar

18、rial_event(int i, int max_timejiange, int max_timejiaoyi) /*用来处理新客户到达事件*/ if (nextTime = i) printf(当前时间是:%dn, i); nextTime = nextTime + (rand() % max_timejiange) + 1; /随机生成下一名客户到达时间,这里可以设置客户到达时间间隔的大小 ElemType *p=NULL; p = mymalloc(max_timejiaoyi); /到达前面设置的到达时间时,随机生成刚到达用户的信息,包括客户编号,业务处理时间,业务操作钱的数目 ev

19、ent *e = (event*)malloc(sizeof(event); /生成该到达事件的信息节点 e-index = 1; e-No = p-No; e-time = i; InsertLink(event_link, *e); /将该到达事件的信息节点加入事件链表 if (nexthandelTime money) handel_time + i; total = total + p-money; EnQueue(handel_queue, *p); else EnQueue(wait_queue, *p); else if (nexthandelTime = 0) /第一个进入操作

20、的用户情况 if (-(p-money) handel_time + i; total = total + p-money; EnQueue(handel_queue, *p); else EnQueue(wait_queue, *p); else EnQueue(handel_queue, *p); if (nexthandelTime = 0 ) /第一个进入操作的用户情况 if (-(p-money) handel_time + i; total = total + p-money; EnQueue(handel_queue, *p); else EnQueue(wait_queue,

21、*p); printf(n 客户编号:%d 客户操作需要时间:%d 客户需要处理的钱:%d 银行余额:%dnnn, p-No, p-handel_time, p-money, total); return p; Status handel_event(int i) /*处理队列事件*/ if (nexthandelTime = i) /*到达下一个客户操作时间时*/ DeQueue(handel_queue, leave_kehu); /将处理完的客户出队,并将客户信息存储在leave_kehu变量中 int last_money = total - leave_kehu-money; /获取

22、刚离开的客户操作前银行的钱数目 Leave_event(leave_kehu, i); /将离开事件的用户信息存入事件列表中 if (leave_kehu-money) 0) & wait_queue-front != NULL) /*如果刚刚离开的用户是存钱或者还钱,并且 等待队列 不为空*/ int index = 0; /设置标记变量,用以标记等待队列已经查看的客户数目 LQueue *e = InitQueue(); /创造出一个可以被满足需求的等待用户组成的队列 int linshi_total = total; /设置一个临时金额存储空间 while (linshi_total l

23、ast_money & wait_queue-front != NULL) /如果当前银行拥有的款额比之前多,进入循环 DeQueue(wait_queue, search_kehu); /将等待队列的队头用户出队 if (-(search_kehu-money) money; else EnQueue(wait_queue, *search_kehu); index+; if (index = wait_queue-len) break; InsertQueue(handel_queue, e); /将可以满足要求的等待队列并入前面 /nexthandelTime = nexthandelT

24、ime + handel_queue-front-data.handel_time; /下一个处理用户时间更新 if (handel_queue-front != NULL) /*如果操作队列不为空*/ while(handel_queue-front != NULL & -(handel_queue-front-data.money) total) /*如果无法满足要求*/ DeQueue(handel_queue, leave_kehu); EnQueue(wait_queue, *leave_kehu); if (handel_queue-front != NULL) nexthande

25、lTime = handel_queue-front-data.handel_time + nexthandelTime; /下一位操作客户时间更新 total = total + handel_queue-front-data.money; /银行金钱总额更新 else /*刚刚离开的用户是取钱或者借钱,或者 等待队列 为空*/ if (handel_queue-front != NULL) while (handel_queue-front != NULL & -(handel_queue-front-data.money) total ) /*无法满足的用户进入等待队列*/ DeQueue(handel_queue, leave_kehu); EnQueue(wait_queue, *leave_kehu); if (handel_queue-front != NULL) /*处理队列不为空*/ nexthandelTime = handel_queue-front-data.handel_time + nexthandelTime; total = total + handel_queue-front-data.money;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1