定义了一个Window结构体来存储窗口的属性,包括编号、业务类型、排队队列、作人员编号和状态等。使用一个数组来存储所有窗口,并提供了一些基本操作,如增加、删除、暂停和恢复窗口等。在程序启动时,通过读取配置文件来初始化窗口,实现了窗口配置数据的持久化存储。
时间: 2024-02-22 22:56:12 浏览: 19
这是一个比较完整的银行排队管理系统,相比之前的链队列实现,这个系统更加复杂,包括了窗口管理、业务处理等功能。下面是一个简单的 Window 结构体定义和基本操作示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义业务类型枚举
typedef enum {
Deposit, // 存款
Withdraw, // 取款
Transfer, // 转账
Inquiry // 查询
} ServiceType;
// 定义窗口状态枚举
typedef enum {
Idle, // 空闲
Busy, // 忙碌
Suspended // 暂停
} WindowStatus;
// 定义窗口结构体
typedef struct {
int id; // 窗口编号
ServiceType service; // 业务类型
Queue queue; // 排队队列
int clerk; // 作人员编号
WindowStatus status; // 状态
} Window;
// 定义窗口数组
Window windows[MAX_WINDOWS];
// 获取空闲窗口
int getFreeWindow() {
for (int i = 0; i < MAX_WINDOWS; i++) {
if (windows[i].status == Idle) {
return i;
}
}
return -1;
}
// 添加窗口
void addWindow(int id, ServiceType service, int clerk) {
int index = getFreeWindow();
if (index == -1) {
printf("无法添加窗口,窗口已满!\n");
return;
}
Window window = {id, service, NULL, clerk, Idle};
windows[index] = window;
printf("成功添加窗口:窗口编号=%d,业务类型=%d,作人员编号=%d\n", id, service, clerk);
}
// 删除窗口
void removeWindow(int id) {
for (int i = 0; i < MAX_WINDOWS; i++) {
if (windows[i].id == id) {
if (!isEmpty(&windows[i].queue)) {
printf("窗口内还有客户,不能删除窗口!\n");
return;
}
windows[i].status = Suspended;
printf("成功删除窗口:窗口编号=%d\n", id);
return;
}
}
printf("未找到编号为%d的窗口,无法删除!\n", id);
}
// 暂停窗口
void suspendWindow(int id) {
for (int i = 0; i < MAX_WINDOWS; i++) {
if (windows[i].id == id) {
if (!isEmpty(&windows[i].queue)) {
printf("窗口内还有客户,不能暂停窗口!\n");
return;
}
windows[i].status = Suspended;
printf("成功暂停窗口:窗口编号=%d\n", id);
return;
}
}
printf("未找到编号为%d的窗口,无法暂停!\n", id);
}
// 恢复窗口
void resumeWindow(int id) {
for (int i = 0; i < MAX_WINDOWS; i++) {
if (windows[i].id == id) {
windows[i].status = Idle;
printf("成功恢复窗口:窗口编号=%d\n", id);
return;
}
}
printf("未找到编号为%d的窗口,无法恢复!\n", id);
}
int main() {
// 读取配置文件初始化窗口
// ...
// 添加窗口
addWindow(1, Deposit, 1);
addWindow(2, Withdraw, 2);
// 删除窗口
removeWindow(1);
// 暂停窗口
suspendWindow(2);
// 恢复窗口
resumeWindow(2);
return 0;
}
```
在上面的示例中,我们定义了一个 Window 结构体,用来存储窗口的属性,包括编号、业务类型、排队队列、作人员编号和状态等。使用一个数组来存储所有窗口,并提供了一些基本操作,如增加、删除、暂停和恢复窗口等。在主函数中,我们进行了窗口的增加、删除、暂停和恢复操作。注意,在实际使用中,需要根据具体情况进行修改和完善。