基于链队列的银行排队叫号系统c++要求包含取号进队、排队等候、叫号服务、当前不排队,余下依次等待、下班
时间: 2023-05-28 10:06:55 浏览: 490
以下是一个基于链队列的银行排队叫号系统的C代码:
```
#include <stdio.h>
#include <stdlib.h>
#define MAX_QUEUE_SIZE 100
// 定义链队列结点
typedef struct QueueNode {
int data;
struct QueueNode *next;
} QueueNode;
// 定义链队列
typedef struct Queue {
QueueNode *front;
QueueNode *rear;
int size;
} Queue;
// 初始化链队列
void initQueue(Queue *queue) {
queue->front = NULL;
queue->rear = NULL;
queue->size = 0;
}
// 判断队列是否为空
int isQueueEmpty(Queue *queue) {
return queue->size == 0;
}
// 判断队列是否已满
int isQueueFull(Queue *queue) {
return queue->size == MAX_QUEUE_SIZE;
}
// 入队
void enqueue(Queue *queue, int data) {
if (isQueueFull(queue)) {
printf("Queue is full.\n");
return;
}
QueueNode *newNode = (QueueNode*)malloc(sizeof(QueueNode));
newNode->data = data;
newNode->next = NULL;
if (isQueueEmpty(queue)) {
queue->front = newNode;
queue->rear = newNode;
} else {
queue->rear->next = newNode;
queue->rear = newNode;
}
queue->size++;
}
// 出队
int dequeue(Queue *queue) {
if (isQueueEmpty(queue)) {
printf("Queue is empty.\n");
return -1;
}
int data = queue->front->data;
QueueNode *temp = queue->front;
queue->front = queue->front->next;
free(temp);
queue->size--;
if (isQueueEmpty(queue)) {
queue->rear = NULL;
}
return data;
}
int main() {
Queue queue;
initQueue(&queue);
int num = 0;
int choice = 0;
while (1) {
printf("1. 取号进队\n2. 排队等候\n3. 叫号服务\n4. 当前不排队\n5. 余下依次等待\n6. 下班\n");
printf("请选择操作:");
scanf("%d", &choice);
switch (choice) {
case 1:
if (isQueueFull(&queue)) {
printf("队列已满,无法取号进队。\n");
} else {
num++;
enqueue(&queue, num);
printf("您已成功取号,您的号码为:%d\n", num);
}
break;
case 2:
if (isQueueEmpty(&queue)) {
printf("当前没有客户在排队等候。\n");
} else {
printf("当前排队客户号码为:%d\n", queue.front->data);
}
break;
case 3:
if (isQueueEmpty(&queue)) {
printf("当前没有客户在排队等候。\n");
} else {
int data = dequeue(&queue);
printf("请 %d 号客户前往 %d 号窗口办理业务。\n", data, choice);
}
break;
case 4:
printf("当前不排队,请您稍后再来。\n");
break;
case 5:
if (isQueueEmpty(&queue)) {
printf("当前没有客户在排队等候。\n");
} else {
while (!isQueueEmpty(&queue)) {
int data = dequeue(&queue);
printf("请 %d 号客户前往 %d 号窗口办理业务。\n", data, choice);
}
}
break;
case 6:
printf("银行已下班,欢迎下次光临。\n");
exit(0);
default:
printf("无效操作,请重新选择。\n");
break;
}
}
return 0;
}
```
该系统包含了取号进队、排队等候、叫号服务、当前不排队,余下依次等待、下班等功能。当客户取号进队时,系统会自动为其分配一个号码,并将其加入队列中。当客户需要查询当前排队客户号码时,系统会显示队列中的队头元素。当柜员需要叫号服务时,系统会将队头元素出队,并提示客户前往某个窗口办理业务。当银行不再排队时,系统会提示客户当前不排队。当银行还有未服务的客户时,系统会依次将队列中的所有客户出队,并提示客户前往某个窗口办理业务。当银行下班时,系统会退出程序。
阅读全文