首页 > 软件开发 > C语言 >

C语言模拟银行业务系统

来源:互联网 2023-03-16 19:12:09 119

假设银行有4个窗口,人多时候需要排队叫号,需要找一个排队时间最短的窗口

JKe办公区 - 实用经验教程分享!

JKe办公区 - 实用经验教程分享!

方法/步骤

  • 1

    首先打开VC 6.0

    JKe办公区 - 实用经验教程分享!

    JKe办公区 - 实用经验教程分享!

    C语言模拟银行业务系统JKe办公区 - 实用经验教程分享!

  • 2

    选择文件,新建

    JKe办公区 - 实用经验教程分享!

    JKe办公区 - 实用经验教程分享!

    C语言模拟银行业务系统JKe办公区 - 实用经验教程分享!

  • 3

    选择C source file 新建一个空白文档

    JKe办公区 - 实用经验教程分享!

    JKe办公区 - 实用经验教程分享!

    C语言模拟银行业务系统JKe办公区 - 实用经验教程分享!

  • 4

    首先声明头文件JKe办公区 - 实用经验教程分享!

    #includestdlib.h>JKe办公区 - 实用经验教程分享!

    #includestdio.h>JKe办公区 - 实用经验教程分享!

    #includemalloc.h>JKe办公区 - 实用经验教程分享!

    #includeconio.h>JKe办公区 - 实用经验教程分享!

    JKe办公区 - 实用经验教程分享!

    JKe办公区 - 实用经验教程分享!

    C语言模拟银行业务系统JKe办公区 - 实用经验教程分享!

  • 5

    建立4个结构体,分别是客户记录 节点 队列 事件JKe办公区 - 实用经验教程分享!

    typedef structJKe办公区 - 实用经验教程分享!

    {JKe办公区 - 实用经验教程分享!

    int ArrivalTime;JKe办公区 - 实用经验教程分享!

    int Duration;JKe办公区 - 实用经验教程分享!

    }QElemType;JKe办公区 - 实用经验教程分享!

    JKe办公区 - 实用经验教程分享!

    JKe办公区 - 实用经验教程分享!

    struct LinkNodeJKe办公区 - 实用经验教程分享!

    {JKe办公区 - 实用经验教程分享!

    Event data;JKe办公区 - 实用经验教程分享!

    struct LinkNode *next;JKe办公区 - 实用经验教程分享!

    };JKe办公区 - 实用经验教程分享!

    JKe办公区 - 实用经验教程分享!

    JKe办公区 - 实用经验教程分享!

    typedef struct LinkNode LNode;JKe办公区 - 实用经验教程分享!

    typedef struct LinkNode *LinkList;JKe办公区 - 实用经验教程分享!

    typedef struct LinkNode *EvenList;JKe办公区 - 实用经验教程分享!

    JKe办公区 - 实用经验教程分享!

    JKe办公区 - 实用经验教程分享!

    typedef struct QNodeJKe办公区 - 实用经验教程分享!

    {JKe办公区 - 实用经验教程分享!

    QElemType elem;JKe办公区 - 实用经验教程分享!

    struct QNode *next;JKe办公区 - 实用经验教程分享!

    }QNode,*QueuePtr;JKe办公区 - 实用经验教程分享!

    JKe办公区 - 实用经验教程分享!

    JKe办公区 - 实用经验教程分享!

    typedef struct LinkQueueJKe办公区 - 实用经验教程分享!

    { JKe办公区 - 实用经验教程分享!

    QueuePtr front;JKe办公区 - 实用经验教程分享!

    QueuePtr rear;JKe办公区 - 实用经验教程分享!

    }LinkQueue;JKe办公区 - 实用经验教程分享!

    JKe办公区 - 实用经验教程分享!

    JKe办公区 - 实用经验教程分享!

    C语言模拟银行业务系统JKe办公区 - 实用经验教程分享!

  • 6

    为结构体定义对象JKe办公区 - 实用经验教程分享!

    EvenList ev;JKe办公区 - 实用经验教程分享!

    Event en;JKe办公区 - 实用经验教程分享!

    LinkQueue q[5];JKe办公区 - 实用经验教程分享!

    QElemType customer;JKe办公区 - 实用经验教程分享!

    int TotalTime,CustomerNum,CloseTime;JKe办公区 - 实用经验教程分享!

    JKe办公区 - 实用经验教程分享!

    JKe办公区 - 实用经验教程分享!

    C语言模拟银行业务系统JKe办公区 - 实用经验教程分享!

  • 6相关内容非法爬取自百度经验
  • 7

    链表的相关操作JKe办公区 - 实用经验教程分享!

    /*初始化有序链表*/JKe办公区 - 实用经验教程分享!

    int InitList(EvenList *L)JKe办公区 - 实用经验教程分享!

    {JKe办公区 - 实用经验教程分享!

    *L=(LNode *)malloc(sizeof(LNode));JKe办公区 - 实用经验教程分享!

    if(!(*L)) exit(0);JKe办公区 - 实用经验教程分享!

    (*L)->next=NULL;JKe办公区 - 实用经验教程分享!

    return 1;JKe办公区 - 实用经验教程分享!

    }JKe办公区 - 实用经验教程分享!

    /*删除链头元素*/JKe办公区 - 实用经验教程分享!

    int DeHead(EvenList *L,Event *e)JKe办公区 - 实用经验教程分享!

    { JKe办公区 - 实用经验教程分享!

    LNode *pc,*q;JKe办公区 - 实用经验教程分享!

    pc=*L;JKe办公区 - 实用经验教程分享!

    q=pc->next;JKe办公区 - 实用经验教程分享!

    pc->next=q->next;JKe办公区 - 实用经验教程分享!

    *e=q->data;return 1;JKe办公区 - 实用经验教程分享!

    }JKe办公区 - 实用经验教程分享!

    /*判断有序链表是否为空*/JKe办公区 - 实用经验教程分享!

    int ListEmpty(LNode L)JKe办公区 - 实用经验教程分享!

    {JKe办公区 - 实用经验教程分享!

    LNode *p;JKe办公区 - 实用经验教程分享!

    int j=0;JKe办公区 - 实用经验教程分享!

    p=L.next;JKe办公区 - 实用经验教程分享!

    while(p)JKe办公区 - 实用经验教程分享!

    {JKe办公区 - 实用经验教程分享!

    j ;break;JKe办公区 - 实用经验教程分享!

    }JKe办公区 - 实用经验教程分享!

    if(j==0) return 1;JKe办公区 - 实用经验教程分享!

    else return 0;JKe办公区 - 实用经验教程分享!

    /*判断两个事件的发生时刻*/JKe办公区 - 实用经验教程分享!

    int CmpTime(Event a,Event b)JKe办公区 - 实用经验教程分享!

    { JKe办公区 - 实用经验教程分享!

    if(a.OccurTime>b.OccurTime) return 1;JKe办公区 - 实用经验教程分享!

    else if(a.OccurTime==b.OccurTime) return 0;JKe办公区 - 实用经验教程分享!

    else return -1;JKe办公区 - 实用经验教程分享!

    }JKe办公区 - 实用经验教程分享!

    JKe办公区 - 实用经验教程分享!

    JKe办公区 - 实用经验教程分享!

    C语言模拟银行业务系统JKe办公区 - 实用经验教程分享!

  • 8

    链表的操作JKe办公区 - 实用经验教程分享!

    int OrderInsert(EvenList *L,Event e,int (* cmp)(Event ,Event ))JKe办公区 - 实用经验教程分享!

    { JKe办公区 - 实用经验教程分享!

    LNode *p,*pc;/*把事件插入链表*/JKe办公区 - 实用经验教程分享!

    if((p=(LNode *)malloc(sizeof(LNode)))==NULL)/*分配空间*/JKe办公区 - 实用经验教程分享!

    { JKe办公区 - 实用经验教程分享!

    printf("error\n"); JKe办公区 - 实用经验教程分享!

    return(0);JKe办公区 - 实用经验教程分享!

    }JKe办公区 - 实用经验教程分享!

    if(ListEmpty(**L)) JKe办公区 - 实用经验教程分享!

    { JKe办公区 - 实用经验教程分享!

    p->data=e;p->next=(*L)->next;(*L)->next=p;}JKe办公区 - 实用经验教程分享!

    else JKe办公区 - 实用经验教程分享!

    {JKe办公区 - 实用经验教程分享!

    switch(cmp(((*L)->next)->data,e))JKe办公区 - 实用经验教程分享!

    {JKe办公区 - 实用经验教程分享!

    case -1:JKe办公区 - 实用经验教程分享!

    pc=(*L)->next;JKe办公区 - 实用经验教程分享!

    while(pc->next!=NULL)JKe办公区 - 实用经验教程分享!

    {JKe办公区 - 实用经验教程分享!

    if((pc->next)->data.OccurTime=e.OccurTime)JKe办公区 - 实用经验教程分享!

    pc=pc->next;JKe办公区 - 实用经验教程分享!

    else break;JKe办公区 - 实用经验教程分享!

    }JKe办公区 - 实用经验教程分享!

    p->data=e;JKe办公区 - 实用经验教程分享!

    p->next=pc->next;/*把它接在比它大的前*/JKe办公区 - 实用经验教程分享!

    pc->next=p;JKe办公区 - 实用经验教程分享!

    break;JKe办公区 - 实用经验教程分享!

    case 0:JKe办公区 - 实用经验教程分享!

    pc=(*L)->next;/*相等时,接在相等的后面*/JKe办公区 - 实用经验教程分享!

    p->data=e;JKe办公区 - 实用经验教程分享!

    p->next=pc->next;JKe办公区 - 实用经验教程分享!

    pc->next=p;JKe办公区 - 实用经验教程分享!

    break;JKe办公区 - 实用经验教程分享!

    case 1:JKe办公区 - 实用经验教程分享!

    p->data=e;JKe办公区 - 实用经验教程分享!

    p->next=(*L)->next;JKe办公区 - 实用经验教程分享!

    (*L)->next=p;JKe办公区 - 实用经验教程分享!

    break;/*小于时,接在最前面*/JKe办公区 - 实用经验教程分享!

    }JKe办公区 - 实用经验教程分享!

    }JKe办公区 - 实用经验教程分享!

    return 1;JKe办公区 - 实用经验教程分享!

    }JKe办公区 - 实用经验教程分享!

    JKe办公区 - 实用经验教程分享!

    JKe办公区 - 实用经验教程分享!

    C语言模拟银行业务系统JKe办公区 - 实用经验教程分享!

  • 9

    注销链表,节省空间

    JKe办公区 - 实用经验教程分享!

    JKe办公区 - 实用经验教程分享!

    void DestroyList(EvenList *L)/*销毁表*/JKe办公区 - 实用经验教程分享!

    {JKe办公区 - 实用经验教程分享!

    LNode *p;JKe办公区 - 实用经验教程分享!

    while(*L)JKe办公区 - 实用经验教程分享!

    {JKe办公区 - 实用经验教程分享!

    p=(*L)->next;JKe办公区 - 实用经验教程分享!

    free(*L);JKe办公区 - 实用经验教程分享!

    *L=p;JKe办公区 - 实用经验教程分享!

    }JKe办公区 - 实用经验教程分享!

    }JKe办公区 - 实用经验教程分享!

    JKe办公区 - 实用经验教程分享!

    JKe办公区 - 实用经验教程分享!

    C语言模拟银行业务系统JKe办公区 - 实用经验教程分享!

  • 10

    队列的相关操作JKe办公区 - 实用经验教程分享!

    nt InitQueue(LinkQueue *Q)/*初始化队列*/JKe办公区 - 实用经验教程分享!

    { JKe办公区 - 实用经验教程分享!

    Q->front=Q->rear=(QueuePtr)malloc(sizeof(QNode));JKe办公区 - 实用经验教程分享!

    if(!Q->front) exit(0);JKe办公区 - 实用经验教程分享!

    (Q->front)->next=NULL;JKe办公区 - 实用经验教程分享!

    return 1;JKe办公区 - 实用经验教程分享!

    }JKe办公区 - 实用经验教程分享!

    int DestroyQueue(LinkQueue *Q)/*销毁队列*/JKe办公区 - 实用经验教程分享!

    { JKe办公区 - 实用经验教程分享!

    while(Q->front)JKe办公区 - 实用经验教程分享!

    { JKe办公区 - 实用经验教程分享!

    Q->rear=Q->front->next;JKe办公区 - 实用经验教程分享!

    free(Q->front);JKe办公区 - 实用经验教程分享!

    Q->front=Q->rear;JKe办公区 - 实用经验教程分享!

    }JKe办公区 - 实用经验教程分享!

    return 1;JKe办公区 - 实用经验教程分享!

    }JKe办公区 - 实用经验教程分享!

    int EnQueue(LinkQueue *Q,QElemType e)/*插在队最后*/JKe办公区 - 实用经验教程分享!

    {JKe办公区 - 实用经验教程分享!

    QueuePtr p;JKe办公区 - 实用经验教程分享!

    if((p=(QueuePtr)malloc(sizeof(QNode)))== NULL)JKe办公区 - 实用经验教程分享!

    exit(0);JKe办公区 - 实用经验教程分享!

    p->elem=e;p->next=NULL;JKe办公区 - 实用经验教程分享!

    (Q->rear)->next=p;JKe办公区 - 实用经验教程分享!

    Q->rear=p;/*重新设置队尾*/JKe办公区 - 实用经验教程分享!

    return 1;JKe办公区 - 实用经验教程分享!

    }JKe办公区 - 实用经验教程分享!

    int QueueEmpty(LinkQueue Q)JKe办公区 - 实用经验教程分享!

    { JKe办公区 - 实用经验教程分享!

    if(Q.front==Q.rear) return 1;JKe办公区 - 实用经验教程分享!

    else return 0;JKe办公区 - 实用经验教程分享!

    }JKe办公区 - 实用经验教程分享!

    JKe办公区 - 实用经验教程分享!

    JKe办公区 - 实用经验教程分享!

    int DelQueue(LinkQueue *Q,QElemType *e)/*删除队的第一个元素*/JKe办公区 - 实用经验教程分享!

    {JKe办公区 - 实用经验教程分享!

    QueuePtr p;JKe办公区 - 实用经验教程分享!

    if(QueueEmpty(*Q)) return 0;JKe办公区 - 实用经验教程分享!

    p=(Q->front)->next;JKe办公区 - 实用经验教程分享!

    *e=p->elem;JKe办公区 - 实用经验教程分享!

    (Q->front)->next=p->next;JKe办公区 - 实用经验教程分享!

    if(Q->rear==p) Q->rear=Q->front;JKe办公区 - 实用经验教程分享!

    free(p);JKe办公区 - 实用经验教程分享!

    return 1;JKe办公区 - 实用经验教程分享!

    }JKe办公区 - 实用经验教程分享!

    void GetHead(LinkQueue Q,QElemType *a)JKe办公区 - 实用经验教程分享!

    {JKe办公区 - 实用经验教程分享!

    QNode *p;JKe办公区 - 实用经验教程分享!

    if(Q.front==Q.rear) exit(0);JKe办公区 - 实用经验教程分享!

    p=(Q.front)->next;JKe办公区 - 实用经验教程分享!

    *a=p->elem;JKe办公区 - 实用经验教程分享!

    }JKe办公区 - 实用经验教程分享!

    int QueueLength(LinkQueue Q)/*队的长度*/JKe办公区 - 实用经验教程分享!

    { JKe办公区 - 实用经验教程分享!

    int i=0;JKe办公区 - 实用经验教程分享!

    QNode *pc;JKe办公区 - 实用经验教程分享!

    if(Q.front==Q.rear) return 0;JKe办公区 - 实用经验教程分享!

    pc=Q.front;JKe办公区 - 实用经验教程分享!

    while(pc->next)JKe办公区 - 实用经验教程分享!

    {JKe办公区 - 实用经验教程分享!

    i ;pc=pc->next;JKe办公区 - 实用经验教程分享!

    }JKe办公区 - 实用经验教程分享!

    return i;JKe办公区 - 实用经验教程分享!

    }JKe办公区 - 实用经验教程分享!

    int Mininum(LinkQueue *Q)/*求长度最短的队*/JKe办公区 - 实用经验教程分享!

    { JKe办公区 - 实用经验教程分享!

    int a[4],e,j,i;JKe办公区 - 实用经验教程分享!

    for(i=1;i=4;i )JKe办公区 - 实用经验教程分享!

    a[i-1]=QueueLength(Q[i]);JKe办公区 - 实用经验教程分享!

    e=a[0];JKe办公区 - 实用经验教程分享!

    j=1;JKe办公区 - 实用经验教程分享!

    for(i=1;i=3;i )JKe办公区 - 实用经验教程分享!

    if(e>a[i]) JKe办公区 - 实用经验教程分享!

    {JKe办公区 - 实用经验教程分享!

    e=a[i];JKe办公区 - 实用经验教程分享!

    j=i 1;JKe办公区 - 实用经验教程分享!

    }JKe办公区 - 实用经验教程分享!

    return j;JKe办公区 - 实用经验教程分享!

    }JKe办公区 - 实用经验教程分享!

    void OpenForDay()/*初始化操作*/JKe办公区 - 实用经验教程分享!

    { JKe办公区 - 实用经验教程分享!

    int i;JKe办公区 - 实用经验教程分享!

    TotalTime=0;JKe办公区 - 实用经验教程分享!

    CustomerNum=0;/*初始化累计时间和客户数*/JKe办公区 - 实用经验教程分享!

    InitList(&ev);JKe办公区 - 实用经验教程分享!

    en.OccurTime=0;JKe办公区 - 实用经验教程分享!

    en.NType=0;/*设定第一个客户到达事件*/JKe办公区 - 实用经验教程分享!

    OrderInsert(&ev,en,CmpTime);/*把它插入事件表*/JKe办公区 - 实用经验教程分享!

    for(i=1;i=4;i ) JKe办公区 - 实用经验教程分享!

    InitQueue(&q[i]);/*置空队列*/JKe办公区 - 实用经验教程分享!

    }JKe办公区 - 实用经验教程分享!

    void RandomTime(int *a,int *b)/*生成随机数,a为每个客户办理时间在30分钟内,JKe办公区 - 实用经验教程分享!

    b 为两相隔客户到达的间隔时间不超过5分钟*/JKe办公区 - 实用经验教程分享!

    { JKe办公区 - 实用经验教程分享!

    *a=0 rand()0;JKe办公区 - 实用经验教程分享!

    *b=0 rand()%5;JKe办公区 - 实用经验教程分享!

    }JKe办公区 - 实用经验教程分享!

    void CustomerArrived()/*处理客户到达事件*/JKe办公区 - 实用经验教程分享!

    {JKe办公区 - 实用经验教程分享!

    int durtime,intertime,t,i,b;JKe办公区 - 实用经验教程分享!

    CustomerNum;/*记录客户数*/JKe办公区 - 实用经验教程分享!

    RandomTime(&durtime,&intertime);JKe办公区 - 实用经验教程分享!

    b=en.OccurTime;JKe办公区 - 实用经验教程分享!

    t=en.OccurTime intertime;/*下一客户到达时刻*/JKe办公区 - 实用经验教程分享!

    if(tCloseTime)JKe办公区 - 实用经验教程分享!

    {JKe办公区 - 实用经验教程分享!

    en.OccurTime=t;JKe办公区 - 实用经验教程分享!

    en.NType=0; JKe办公区 - 实用经验教程分享!

    OrderInsert(&ev,en,CmpTime);JKe办公区 - 实用经验教程分享!

    }JKe办公区 - 实用经验教程分享!

    i=Mininum(q);/*求队列最短*/JKe办公区 - 实用经验教程分享!

    customer.ArrivalTime=b;customer.Duration=durtime;/*为要插入队的客户设置到达时间和办理所需时间*/JKe办公区 - 实用经验教程分享!

    EnQueue(&q[i],customer);JKe办公区 - 实用经验教程分享!

    if(QueueLength(q[i])==1)JKe办公区 - 实用经验教程分享!

    {JKe办公区 - 实用经验教程分享!

    en.OccurTime=b durtime;JKe办公区 - 实用经验教程分享!

    en.NType=i;JKe办公区 - 实用经验教程分享!

    OrderInsert(&ev,en,CmpTime);/*设定第i 个离开事件并插入事件表*/JKe办公区 - 实用经验教程分享!

    }JKe办公区 - 实用经验教程分享!

    }JKe办公区 - 实用经验教程分享!

    JKe办公区 - 实用经验教程分享!

    JKe办公区 - 实用经验教程分享!

    C语言模拟银行业务系统JKe办公区 - 实用经验教程分享!

  • 11

    处理事件的函数JKe办公区 - 实用经验教程分享!

    void CustomerDeparture()/*处理客户离开事件*/JKe办公区 - 实用经验教程分享!

    {JKe办公区 - 实用经验教程分享!

    int i;JKe办公区 - 实用经验教程分享!

    i=en.NType;JKe办公区 - 实用经验教程分享!

    DelQueue(&q[i],&customer);/*删除第i队列的排头客户*/JKe办公区 - 实用经验教程分享!

    TotalTime =en.OccurTime-customer.ArrivalTime;/*累计客户逗留时间*/JKe办公区 - 实用经验教程分享!

    if(!QueueEmpty(q[i]))/*设定第i队列的一个将要离开事件并插入事件表*/JKe办公区 - 实用经验教程分享!

    { JKe办公区 - 实用经验教程分享!

    GetHead(q[i],&customer);/*得到它的资料*/JKe办公区 - 实用经验教程分享!

    en.OccurTime =customer.Duration;en.NType=i;JKe办公区 - 实用经验教程分享!

    OrderInsert(&ev,en,CmpTime);JKe办公区 - 实用经验教程分享!

    }JKe办公区 - 实用经验教程分享!

    }JKe办公区 - 实用经验教程分享!

    void Bank_Simulation()JKe办公区 - 实用经验教程分享!

    {JKe办公区 - 实用经验教程分享!

    OpenForDay();/*初始化*/JKe办公区 - 实用经验教程分享!

    while(!ListEmpty(*ev))/*非空时,删掉表里的第一个*/JKe办公区 - 实用经验教程分享!

    { JKe办公区 - 实用经验教程分享!

    DeHead(&ev,&en);JKe办公区 - 实用经验教程分享!

    if(en.NType==0)JKe办公区 - 实用经验教程分享!

    CustomerArrived();/*是客户还没办理的,就处理到达事件*/JKe办公区 - 实用经验教程分享!

    else JKe办公区 - 实用经验教程分享!

    CustomerDeparture();/*否则处理离开事件*/JKe办公区 - 实用经验教程分享!

    }JKe办公区 - 实用经验教程分享!

    printf("The Average Time is %.3f\n\n",(float)TotalTime/CustomerNum);JKe办公区 - 实用经验教程分享!

    }JKe办公区 - 实用经验教程分享!

    JKe办公区 - 实用经验教程分享!

    JKe办公区 - 实用经验教程分享!

    C语言模拟银行业务系统JKe办公区 - 实用经验教程分享!

  • 12

    这就是面向对象的好处,主函数超短JKe办公区 - 实用经验教程分享!

    void main()JKe办公区 - 实用经验教程分享!

    {JKe办公区 - 实用经验教程分享!

    JKe办公区 - 实用经验教程分享!

    JKe办公区 - 实用经验教程分享!

    puts("***************************************");JKe办公区 - 实用经验教程分享!

    puts("* This is a bank simulation program *");JKe办公区 - 实用经验教程分享!

    puts("***************************************");JKe办公区 - 实用经验教程分享!

    doJKe办公区 - 实用经验教程分享!

    {JKe办公区 - 实用经验教程分享!

    puts("please input the closetime of the bank:");JKe办公区 - 实用经验教程分享!

    scanf("%d",&CloseTime);/*输入关门时间*/JKe办公区 - 实用经验教程分享!

    Bank_Simulation();JKe办公区 - 实用经验教程分享!

    }while(CloseTime>=0);JKe办公区 - 实用经验教程分享!

    getch();JKe办公区 - 实用经验教程分享!

    }JKe办公区 - 实用经验教程分享!

    运行结果JKe办公区 - 实用经验教程分享!

    C语言模拟银行业务系统JKe办公区 - 实用经验教程分享!

  • 以上方法由办公区教程网编辑摘抄自百度经验可供大家参考!JKe办公区 - 实用经验教程分享!


    标签: C语言

    办公区 Copyright © 2016-2023 www.bgqu.net. Some Rights Reserved. 备案号:湘ICP备2020019561号统计代码