c语言模拟银行业务系统

差不多的H先生 2024-06-04 02:25:08
最佳回答
1首先打开vc++6.0 2选择文件,新建 3选择c++ source file 新建一个空白文档 4首先声明头文件#include<stdlib.h>#include<stdio.h>#include<malloc.h>#include<conio.h> 5建立4个结构体,分别是客户记录 节点 队列 事件typedef struct{ int arrivaltime; int duration;}qelemtype; struct linknode{ event data; struct linknode *next;}; typedef struct linknode lnode;typedef struct linknode *linkl**t;typedef struct linknode *evenl**t; typedef struct qnode{ qelemtype elem; struct qnode *next;}qnode,*queueptr; typedef struct linkqueue{ queueptr front; queueptr rear;}linkqueue; 6为结构体定义对象evenl**t ev;event en;linkqueue q[5];qelemtype customer;int totaltime,customernum,closetime; 6相关内容非法爬取自百度经验7链表的相关操作/*初始化有序链表*/int initl**t(evenl**t *l){ *l=(lnode *)malloc(sizeof(lnode)); if(!(*l)) exit(0); (*l)->next=**; return 1;}/*删除链头元素*/int dehead(evenl**t *l,event *e){ lnode *pc,*q; pc=*l; q=pc->next; pc->next=q->next; *e=q->data;return 1;}/*判断有序链表是否为空*/int l**tempty(lnode l){ lnode *p; int j=0; p=l.next; while(p) { j++;break; } if(j==0) return 1; else return 0;/*判断两个事件的发生时刻*/int cmptime(event a,event b){ if(a.occurtime>b.occurtime) return 1; else if(a.occurtime==b.occurtime) return 0; else return -1;} 8链表的操作int orderinsert(evenl**t *l,event e,int (* cmp)(event ,event )){ lnode *p,*pc;/*把事件插入链表*/ if((p=(lnode *)malloc(sizeof(lnode)))==**)/*分配空间*/ { printf("error\n"); return(0); } if(l**tempty(**l)) { p->data=e;p->next=(*l)->next;(*l)->next=p;} else { switch(cmp(((*l)->next)->data,e)) { case -1: pc=(*l)->next; while(pc->next!=**) { if((pc->next)->data.occurtime<=e.occurtime) pc=pc->next; else break; } p->data=e; p->next=pc->next;/*把它接在比它大的前*/ pc->next=p; break; case 0: pc=(*l)->next;/*相等时,接在相等的后面*/ p->data=e; p->next=pc->next; pc->next=p; break; case 1: p->data=e; p->next=(*l)->next; (*l)->next=p; break;/*小于时,接在最前面*/ } } return 1;} 9注销链表,节省空间 void destroyl**t(evenl**t *l)/*销毁表*/{ lnode *p; while(*l) { p=(*l)->next; free(*l); *l=p; }} 10队列的相关操作nt initqueue(linkqueue *q)/*初始化队列*/{ q->front=q->rear=(queueptr)malloc(sizeof(qnode)); if(!q->front) exit(0); (q->front)->next=**; return 1;}int destroyqueue(linkqueue *q)/*销毁队列*/{ while(q->front) { q->rear=q->front->next; free(q->front); q->front=q->rear; } return 1;}int enqueue(linkqueue *q,qelemtype e)/*插在队最后*/{ queueptr p; if((p=(queueptr)malloc(sizeof(qnode)))== **) exit(0); p->elem=e;p->next=**; (q->rear)->next=p; q->rear=p;/*重新设置队尾*/ return 1;}int queueempty(linkqueue q){ if(q.front==q.rear) return 1; else return 0;} int delqueue(linkqueue *q,qelemtype *e)/*删除队的第一个元素*/{ queueptr p; if(queueempty(*q)) return 0; p=(q->front)->next; *e=p->elem; (q->front)->next=p->next; if(q->rear==p) q->rear=q->front; free(p); return 1;}void gethead(linkqueue q,qelemtype *a){ qnode *p; if(q.front==q.rear) exit(0); p=(q.front)->next; *a=p->elem;}int queuelength(linkqueue q)/*队的长度*/{ int i=0; qnode *pc; if(q.front==q.rear) return 0; pc=q.front; while(pc->next) { i++;pc=pc->next; } return i;}int mininum(linkqueue *q)/*求长度最短的队*/{ int a[4],e,j,i; for(i=1;i<=4;i++) a[i-1]=queuelength(q[i]); e=a[0]; j=1; for(i=1;i<=3;i++) if(e>a[i]) { e=a[i]; j=i+1; } return j;}void openforday()/*初始化操作*/{ int i; totaltime=0; customernum=0;/*初始化累计时间和客户数*/ initl**t(&ev); en.occurtime=0; en.ntype=0;/*设定第一个客户到达事件*/ orderinsert(&ev,en,cmptime);/*把它插入事件表*/ for(i=1;i<=4;i++) initqueue(&q[i]);/*置空队列*/}void randomtime(int *a,int *b)/*生成随机数,a为每个客户办理时间在30分钟内, b 为两相隔客户到达的间隔时间不超过5分钟*/{ *a=0+rand()%30; *b=0+rand()%5;}void customerarrived()/*处理客户到达事件*/{ int durtime,intertime,t,i,b; ++customernum;/*记录客户数*/ randomtime(&durtime,&intertime); b=en.occurtime; t=en.occurtime+intertime;/*下一客户到达时刻*/ if(t<closetime) { en.occurtime=t; en.ntype=0; orderinsert(&ev,en,cmptime); } i=mininum(q);/*求队列最短*/ customer.arrivaltime=b;customer.duration=durtime;/*为要插入队的客户设置到达时间和办理所需时间*/ enqueue(&q[i],customer); if(queuelength(q[i])==1) { en.occurtime=b+durtime; en.ntype=i; orderinsert(&ev,en,cmptime);/*设定第i 个离开事件并插入事件表*/ }} 11处理事件的函数void customerdeparture()/*处理客户离开事件*/{ int i; i=en.ntype; delqueue(&q[i],&customer);/*删除第i队列的排头客户*/ totaltime+=en.occurtime-customer.arrivaltime;/*累计客户逗留时间*/ if(!queueempty(q[i]))/*设定第i队列的一个将要离开事件并插入事件表*/ { gethead(q[i],&customer);/*得到它的资料*/ en.occurtime+=customer.duration;en.ntype=i; orderinsert(&ev,en,cmptime); }}void bank_simulation(){ openforday();/*初始化*/ while(!l**tempty(*ev))/*非空时,删掉表里的第一个*/ { dehead(&ev,&en); if(en.ntype==0) customerarrived();/*是客户还没办理的,就处理到达事件*/ else customerdeparture();/*否则处理离开事件*/ } printf("the **erage time ** %.3f\n\n",(float)totaltime/customernum);} 12这就是面向对象的好处,主函数超短void main(){ puts("***************************************");puts("* th** ** a bank simulation program *");puts("***************************************");do{puts("please input the closetime of the bank:");scanf("%d",&closetime);/*输入关门时间*/ bank_simulation(); }while(closetime>=0); getch();}运行结果end 20210311
汇率兑换计算器

类似问答
  • c语言,循环函数
    • 2024-06-04 19:41:42
    • 提问者: 未知
    c标准库中并没有循环函数的说法,只有三种循环语句:for语句和while语句,和do-while循环结构。for循环的一般语法格式为:for(表达式1;表达式2;表达式3){循环体}其中,...
  • c语言问题
    • 2024-06-04 06:11:03
    • 提问者: 未知
    回复:#include"stdio.h"#include"math.h"main(){int a=1,b=2,c=2;int t;while(a<b<c){t=a;a=b;b=t;c-;};printf("%d%d%d",a,b,c);printf("\n");} 对于该程序,主要考察了对...
  • 哪位高手可以用c语言设计实现一程序模拟银行atm工作的业务流程 望高手帮忙` 基本要求在问题补充中
    • 2024-06-04 15:41:12
    • 提问者: 未知
    定义一个卡的结构体
  • 杭电1002 c语言
    • 2024-06-04 08:33:38
    • 提问者: 未知
    #include <stdio.h>#include <string.h>main(){char str1[1001],str2[1001];int t,i,len_str1,len_str2,len_max,num=1,k;scanf("%d",&t);getchar();while(t--){int a[1001]={0},b[1001]={0},c...
  • 用c语言编写最小二乘法线性拟合
    • 2024-06-04 13:56:54
    • 提问者: 未知
    首先你要知道最小二乘法的公式,然后使用数组实现。比如定义数组double x[10]代表十个横坐标,double y[10]代表纵坐标,然后套公式用循环计算
  • 如何系统全面地自学j**a语言?
    • 2024-06-04 18:11:12
    • 提问者: 未知
    5.如何阅读spring源码 6.j**a学习的一些补充建议 7.非科班程序员如何补充基础知识 后话 在实际工作中,因为具体工作,需要我不断的在不同的语言间切换。例如过去的半年我...
  • c语言灯塔问题
    • 2024-06-04 04:41:10
    • 提问者: 未知
    展开全部#include main() {int a1,q=2;for(a1=1;a1+) if(a1*(1-pow(q,8))/(1-q)=765)/*等比数列求前n项和公式,这里n=8,q为公比*/ printf("%d",a1);}(5)等比求和: ①当q≠1时, 或 ②当q=1时, 引用自网页链接(高中数学)
  • c**co pt网络模拟系统构建
    • 2024-06-04 19:12:45
    • 提问者: 未知
    这个给500分都没人做,太麻烦
  • c语言求n!
    • 2024-06-04 01:33:38
    • 提问者: 未知
    方法利用循环解决问题,设循环变量为 i,初值为 1,i 从 1 变化到 n;依次让 i 与 sum 相乘,并将乘积赋给 sum。① 定义变量 sum,并赋初值 1。② i 自增 1。③ 直到 i 超过 n。程序代码如下 include int main() { int i,n;double sum=1;scanf("%d",&n);for(i=1;i;i+) sum=sum*i;printf("%...
  • 用c语言编写家庭财务管理系统
    • 2024-06-04 06:27:46
    • 提问者: 未知
    wakao,复合型人才!
汇率兑换计算器

热门推荐
热门问答
最新问答
推荐问答
新手帮助
常见问题
房贷计算器-九子财经 | 备案号: 桂ICP备19010581号-1 商务联系 企鹅:2790-680461

特别声明:本网为公益网站,人人都可发布,所有内容为会员自行上传发布",本站不承担任何法律责任,如内容有该作者著作权或违规内容,请联系我们清空删除。