用c语言模拟简单的银行排队系统
2013-11-23 17:02
417 查看
此程序模拟了银行排队系统,用链表实现队列排队
List.h
List.c 的实现:
Bank.c
编译环境:redhat 6.3
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
相关文章推荐
- 简明python教程 --C++程序员的视角(九):函数式编程、特殊类方法、测试及其他
- C语言编写红色警戒外挂
- C++ 指针和引用
- 【转】字符串分割(C++)
- C++中数组作为参数传递时,是否能在传递过后求该数组的大小呢?
- Java中final 与C++中Const的区别
- C++类对应的内存结构
- C++ 求后缀表达式的值
- NDK利用cygwin环境配置
- C++ 对象创建方式
- C语言基础知识
- C语言:快速排序
- 在VC++6.0开发中实现全屏显示
- 快速排序算法的c++实现
- C++实现一个Vector3空间向量类
- C++设计模式-工厂方法
- C++设计模式(转载)
- C++多线程编程简单实例
- hdoj 1257 最少拦截系统
- C语言一些知识点回顾