ZBLOG

#include #include #include #define ERROR 0 #define OK 1 #define FALSE -1 #define TRUE 1 #define SIZE 6//柜台数量 typedef struct Node { int number; //序号 int counter; //柜台号 time_t t[3]; //记录排队,开始,结束时间 struct Node *ne...

由于这个程序比较复杂,涉及到很多功能的实现,需要花费一定的时间和精力才能完成。以下是对主要函数的补充说明。

  1. EnterQueue函数

这个函数用来模拟客户取号排队的过程。当一个新的客户进入排队时,要记录他进入队列的时间,并初始化办理业务的开始和结束时间为-1,因为还没有开始办理业务。具体实现如下:

int EnterQueue(LinkQueue *Q, int n) {

int flag = 1;
LinkQueueNode *p;
printf("欢迎使用银行叫号系统,正在取号中,请稍后。\n");
p = (LinkQueueNode *) malloc(sizeof(LinkQueueNode));
if (p != NULL) {
    p->number = n; // 记录客户序号
    p->t[0] = timeClock[time_index]; // 记录进入队列的时间
    p->t[1] = -1; // 初始化办理业务的开始时间
    p->t[2] = -1; // 初始化办理业务的结束时间
    p->next = NULL;
    Q->rear->next = p;
    Q->rear = p;
    return TRUE;
} else
    return FALSE;

}

  1. DeleteQueue函数

这个函数用来模拟叫号的过程。根据选择的柜台号,从队列中出队一个客户。如果队列为空,则输出“无等待客户”,否则输出“请耐心等待”并返回一个客户节点信息。在出队的过程中,要记录开始服务的时间,并把柜台号记录到LinkQueueNode结构体的counter成员中。

LinkQueueNode * DeleteQueue(LinkQueue *Q, int n, int flag[SIZE]) {

LinkQueueNode *p;
if (IsEmpty(Q)) {
    printf("无等待客户\n");
    return NULL;
} else {
    printf("请耐心等待\n");
    p = Q->front->next;
    Q->front->next = p->next;
    if (Q->rear == p)
        Q->rear = Q->front;
    p->t[1] = timeClock[time_index]; // 记录开始服务的时间
    p->counter = n; // 记录柜台号
    flag[n - 1] = 1; // 标记柜台为正在服务状态
    return p;
}

}

  1. ChoseCounter函数

这个函数用来根据选择的柜台号,选择相应的队列出队一个客户,并输出相关信息。如果队列为空,则输出“空闲”。

void ChoseCounter(LinkQueue *Q, LinkQueueNode * now[SIZE], int flag[SIZE], int n) {

LinkQueueNode *temp;
if (now[n - 1] != NULL && now[n - 1]->t[2] != -1) {
    PrintPriorTime(now[n - 1]); // 打印上一位客户序号和服务时间
    now[n - 1] = NULL;
    flag[n - 1] = 0; // 标记柜台为空闲状态
}
if (n >= 1 && n <= 4) { // 柜台1-4选择p队列出队
    temp = DeleteQueue(Q, n, flag);
} else if (n >= 5 && n <= 6) { // 柜台5,6选择队列为空则从p队列出队,不为空选择p1或p2队列出队
    if (!IsEmpty(Q)) {
        temp = DeleteQueue(Q, n, flag);
    } else {
        if (!IsEmpty(p1)) {
            temp = DeleteQueue(p1, n, flag);
        } else if (!IsEmpty(p2)) {
            temp = DeleteQueue(p2, n, flag);
        } else {
            printf("空闲\n");
            return;
        }
    }
}
if (temp != NULL) {
    now[n - 1] = temp;
    printf("柜台%d:    ", n);
    if (flag[n - 1] == 0)
        printf("空闲\n");
    else
        printf("正在服务\n");
    printf("当前处理的客户序号为%d\n", now[n - 1]->number);
}

}

完整程序如下:

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=744

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?