写一份c语言银行排队管理系统的程序
时间: 2023-12-24 14:04:15 浏览: 157
好的,以下是一份C语言银行排队管理系统的程序代码。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_QUEUE_SIZE 100
// 客户信息结构体
typedef struct {
int id; // 客户编号
int window; // 窗口编号
int serviceType; // 业务类型
} Client;
// 队列节点结构体
typedef struct QueueNode {
Client data; // 客户信息
struct QueueNode *next; // 指向下一个节点的指针
} QueueNode;
// 队列结构体
typedef struct {
QueueNode *front; // 队头指针
QueueNode *rear; // 队尾指针
} Queue;
// 窗口结构体
typedef struct {
int id; // 窗口编号
int busy; // 是否忙碌,1表示忙碌,0表示空闲
Client client; // 正在服务的客户信息
} Window;
// 全局变量
Queue queue; // 排队队列
Window windows[3]; // 窗口数组,共3个窗口
// 初始化队列
void initQueue(Queue *queue) {
queue->front = queue->rear = NULL;
}
// 判断队列是否为空
int isQueueEmpty(Queue *queue) {
return queue->front == NULL;
}
// 入队
void enQueue(Queue *queue, Client client) {
QueueNode *newNode = (QueueNode *)malloc(sizeof(QueueNode)); // 创建新节点
newNode->data = client;
newNode->next = NULL;
if (isQueueEmpty(queue)) { // 队列为空,新节点既是队头也是队尾
queue->front = queue->rear = newNode;
} else { // 队列非空,新节点加入队尾
queue->rear->next = newNode;
queue->rear = newNode;
}
}
// 出队
Client deQueue(Queue *queue) {
if (isQueueEmpty(queue)) { // 队列为空,返回空客户信息
Client emptyClient = {0, 0, 0};
return emptyClient;
} else {
QueueNode *frontNode = queue->front;
Client client = frontNode->data;
queue->front = frontNode->next;
if (queue->front == NULL) { // 队列已空,队尾指针置为NULL
queue->rear = NULL;
}
free(frontNode); // 释放原队头节点
return client;
}
}
// 初始化窗口
void initWindows(Window windows[]) {
for (int i = 0; i < 3; i++) {
windows[i].id = i + 1; // 窗口编号从1开始
windows[i].busy = 0;
}
}
// 查找空闲窗口,返回窗口编号,若无空闲窗口返回0
int findFreeWindow(Window windows[]) {
for (int i = 0; i < 3; i++) {
if (windows[i].busy == 0) {
return windows[i].id;
}
}
return 0;
}
// 显示排队队列
void showQueue(Queue *queue) {
if (isQueueEmpty(queue)) {
printf("当前没有客户在排队。\n");
} else {
QueueNode *p = queue->front;
printf("排队队列:\n");
while (p != NULL) {
printf("客户编号:%d,业务类型:%d\n", p->data.id, p->data.serviceType);
p = p->next;
}
}
}
// 显示窗口状态
void showWindows(Window windows[]) {
printf("窗口状态:\n");
for (int i = 0; i < 3; i++) {
if (windows[i].busy == 0) {
printf("窗口%d:空闲\n", windows[i].id);
} else {
printf("窗口%d:客户编号:%d,业务类型:%d\n", windows[i].id, windows[i].client.id, windows[i].client.serviceType);
}
}
}
int main() {
int option; // 操作选项
int clientId = 1; // 客户编号计数器
initQueue(&queue); // 初始化排队队列
initWindows(windows); // 初始化窗口
while (1) {
printf("请选择操作:\n");
printf("1. 取号\n");
printf("2. 办理业务\n");
printf("3. 窗口服务\n");
printf("4. 系统状态查询\n");
printf("5. 退出系统\n");
scanf("%d", &option);
switch (option) {
case 1: // 取号
printf("请在窗口前排队等待,您的排队号码为:%d\n", clientId);
Client newClient = {clientId, 0, 0}; // 新客户信息,窗口编号和业务类型默认为0
enQueue(&queue, newClient); // 新客户入队
clientId++; // 客户编号计数器加1
break;
case 2: // 办理业务
if (isQueueEmpty(&queue)) {
printf("当前没有客户在排队。\n");
} else {
int serviceType;
printf("请选择业务类型(1:存款,2:取款,3:转账):\n");
scanf("%d", &serviceType);
int windowId = findFreeWindow(windows); // 查找空闲窗口
if (windowId == 0) {
printf("当前没有空闲窗口,请稍后再试。\n");
} else {
Client client = deQueue(&queue); // 取出队头客户
client.window = windowId; // 客户分配到的窗口编号
client.serviceType = serviceType; // 客户选择的业务类型
windows[windowId - 1].busy = 1; // 窗口标记为忙碌
windows[windowId - 1].client = client; // 窗口服务的客户信息
printf("请客户%d前往窗口%d办理业务。\n", client.id, windowId);
}
}
break;
case 3: // 窗口服务
if (findFreeWindow(windows) == 3) { // 没有窗口在服务
printf("当前没有客户在窗口服务。\n");
} else {
int windowId;
printf("请输入窗口编号:\n");
scanf("%d", &windowId);
if (windowId < 1 || windowId > 3) {
printf("输入的窗口编号有误,请重新输入。\n");
} else if (windows[windowId - 1].busy == 0) {
printf("窗口%d当前没有服务的客户,请检查窗口编号是否正确。\n", windowId);
} else {
Client client = windows[windowId - 1].client; // 窗口服务的客户信息
windows[windowId - 1].busy = 0; // 窗口标记为空闲
printf("窗口%d已为客户%d办理业务,业务类型:%d\n", windowId, client.id, client.serviceType);
}
}
break;
case 4: // 系统状态查询
showQueue(&queue); // 显示排队队列
showWindows(windows); // 显示窗口状态
break;
case 5: // 退出系统
printf("谢谢使用,再见!\n");
exit(0); // 退出程序
break;
default:
printf("输入的选项有误,请重新输入。\n");
break;
}
}
return 0;
}
```
注意:此程序代码仅供参考,实际使用中需要根据具体需求进行修改和完善。
阅读全文