您的位置:首页 > 编程语言 > C语言/C++

用c语言模拟简单的银行排队系统

2013-11-23 17:02 417 查看
此程序模拟了银行排队系统,用链表实现队列排队

List.h

#ifndef  LIST_H
#define LIST_H
#include<stdio.h>
#include<stdlib.h>

#define OK      0
#define ERROR   -1
//define the structure node
typedef struct queue
{
int value;
struct queue *next;
}Queue;

// front point to head node
typedef struct linkqueue
{
Queue *front;
Queue *tail;
}LinkQueue;

#define QUEUE_LEN  sizeof(Queue)
//init a queue

int initQueue(LinkQueue *);

//whether the queue is empty or not
int isEmptyQueue(LinkQueue *);

//enter a value  into queue
int enterQueue(LinkQueue *,int value);

//pop a vaue from the queue
int deQueue(LinkQueue *);

//printf the Queue
int printQueue(LinkQueue *);

int Query(LinkQueue *,int);

#endif


List.c 的实现:

#include<stdio.h>
#include<stdlib.h>
#include"List.h"

int initQueue(LinkQueue *Q)
{
printf("Init a queue ......\n");
if(!(Q->front = Q->tail = (Queue *)malloc(QUEUE_LEN)))
{
printf("ERROR:Malloc Error !\n");
return ERROR;
}
Q->front->next = NULL;
return OK;
}

int enterQueue(LinkQueue *Q,int enterValue)
{
Queue *tmpNode = NULL;
if(!(tmpNode = (Queue*)malloc(QUEUE_LEN)))
{
printf("ERROR:Malloc Error !\n");
return ERROR;
}

tmpNode->value = enterValue;
tmpNode->next = NULL;
Q->tail->next = tmpNode;
Q->tail = tmpNode;

}

int isEmptyQueue(LinkQueue *Q)
{
return  (Q->front->next == NULL);
}

int printQueue(LinkQueue *Q)
{
Queue *tmpNode = NULL;
tmpNode = Q->front->next;
if(NULL == tmpNode)
{
printf("ERROR:Queue is NULL\n");
return ERROR;

}

while(tmpNode != Q->tail)
{
printf("%d  ",tmpNode->value);
tmpNode = tmpNode->next;
}
printf("%d\n",Q->tail->value);

}

int deQueue(LinkQueue *Q)
{
if(isEmptyQueue(Q))
{
printf("ERROR:The Queue is empty !\n");
return ERROR;
}
int value;
value = Q->front->next->value;
Q->front->next = Q->front->next->next;
return value;
}

int Query(LinkQueue *Q,int myNum)
{
int numOfMan = 0;
if(isEmptyQueue(Q))
{
printf("The Queue is empty \n");
return ERROR;
}
if( myNum>Q->tail->value || myNum < Q->front->next->value)
{
printf("SORRY you have put into a wrong waiting number\n");
return ERROR;
}

numOfMan = myNum-Q->front->next->value;
return  numOfMan;
}


Bank.c

*Author :zxJay
*
*
*/

#include<stdio.h>
#include<string.h>
#include"List.h"

static bankNumber = 0;

static totalNumber = 0;

int stopBank();
int startBank();
int flag = 1;

int main()
{
int choice = 0;
int num = 0;
LinkQueue Q;
initQueue(&Q);
while(1)
{
printf("################Bank Bank queuing system #############\n");
printf("###           1:Applying A number           \n");
printf("###           2:Query                       \n");
printf("###           3:Stop Applying A NUmber      \n");
printf("###           4:Start Applying A Number     \n");
printf("###           5:Leaving Bank     \n");
printf("###           6:Print list     \n");
printf("###           7:EXIT                        \n\n\n");
printf("   Please put into you chioce[1-5]:   ");
scanf("%d",&choice);
switch(choice)
{
case 1 :
if(flag)
{
system("clear");
bankNumber++;
enterQueue(&Q,bankNumber);
totalNumber++;
printf("your waiting number id %d\n",bankNumber);
printf("%d person(s) befor you,please wait for a while\n",Query(&Q,bankNumber));
sleep(2);
system("clear");
break;
}
else
{
system("clear");
printf("         stop Applying A Bank number\n");
break;
}
case 2 :
system("clear");
printf("Please put into your number:\n");
scanf("%d",&num);
printf("%d person(s) before,please wait for a while\n",Query(&Q,num));
sleep(2);
system("clear");
break;
case 3 :
stopBank();
system("clear");
printf("         stop Applying A Bank number\n");
break;
case 4 :
startBank();
system("clear");
break;
case 5 :
system("clear");
printf("you (%d) are leaving bank ....\n",Q.front->next->value);
deQueue(&Q);
totalNumber--;
sleep(2);
system("clear");
break;
case 6 :
system("clear");
printf("Waiting List :");
printQueue(&Q);
sleep(3);
system("clear");
break;
case 7 :
exit(0);
break;
default :
break;

}

}

return OK;
}

int stopBank()
{
flag = 0;

}

int startBank()

{
flag = 1;

}


编译环境:redhat 6.3
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: