【NJUPT】 数据结构与算法分析_银行排队系统

银行排队系统
【问题描述】
试设计一个银行排队系统,模拟一般银行的日常对外营业服务,包括顾客到达、等待、办理业务及离开等事件。要求体现“先来先服务”的原则,将传统物理的多个顾客排队队列变为一个逻辑队列处理,顾客只需取票(即刻进队,排队),等待叫号即可。
【基本要求】
设计程序,要求能够实现以下功能:
(1)顾客到达银行时能拿到排队号码,并能知道需要等待的人数。如果是VIP顾客,那么能直接进入VIP窗口办理,无需加入普通顾客的等待;
(2)可以查看每个银行窗口正在给第几号顾客办理业务;
(3)顾客离开银行时,可以对银行窗口职员的服务进行评价。

感谢以下两位大佬,salute!

@小白白^

@电脑迷2013

VS2022版:

#include<stdio.h>
#include<stdlib.h>
#include <time.h>
#include<conio.h>
static int i = 1;
void date();
void CustomerReview();

typedef struct QNode
{
	int bianhao;//队内成员取到的号码
	struct QNode* next;
}QNode, * QueuePtr;

typedef struct
{
	QueuePtr front;//队头指针
	QueuePtr rear;//队尾指针
}Queue;//创建链式队列

void initQueue(Queue* q)//队列的初始化
{
	q->front = q->rear = (QNode*)malloc(sizeof(QNode));
	if (!q->front)//初始化失败退出
	{
		return;
	}
	q->front->next = NULL;
}

Queue s1, s2, s3;//创建三个队列窗口

int shows1()//显示1窗口人员
{
	QNode* p = (QNode*)malloc(sizeof(QNode));
	if (s1.front == s1.rear)
	{//队列为空队列
		printf("当前无排队人员 *\n");
		return 0;
	}
	p = s1.front->next;
	while (p)
	{
		printf("%d ", p->bianhao);
		p = p->next;
	}
	printf("\n");
}

int shows2()//显示2窗口人员
{
	QNode* p = (QNode*)malloc(sizeof(QNode));
	if (s2.front == s2.rear)
	{//队列为空队列
		printf("当前无排队人员 *\n");
		return 0;
	}
	p = s2.front->next;
	while (p)
	{
		printf("%d ", p->bianhao);
		p = p->next;
	}
	printf("\n");
}

int shows3()//显示3窗口人员
{
	QNode* p = (QNode*)malloc(sizeof(QNode));
	if (s3.front == s3.rear)
	{//队列为空队列
		printf("当前无排队人员 *\n");
		return 0;
	}
	p = s3.front->next;
	while (p)
	{
		printf("%d ", p->bianhao);
		p = p->next;
	}
	printf("\n");
}

void show()//总显示窗口
{
	printf("\n\t\t\t\t\t*1号窗口排队人员:");
	shows1();
	printf("\n\t\t\t\t\t*2号窗口排队人员:");
	shows2();
	printf("\n\t\t\t\t\t*3号窗口排队人员:");
	shows3();
	printf("\t\t\t\t\t");
	system("pause");
}


void EnQueue1(Queue* q, int i)//队列插入
{
	QNode* p = (QNode*)malloc(sizeof(QNode));
	p->bianhao = i;
	p->next = NULL;
	q->rear->next = p;
	q->rear = p;
}

int  DeQueue(Queue* q, int e)//队列删除
{
	if (q->front == q->rear)
	{//队列为空队列
		return 1;
	}
	QNode* p = (QNode*)malloc(sizeof(QNode));
	p = q->front->next;
	e = p->bianhao;
	q->front->next = p->next;
	if (q->rear == p)
	{
		q->rear = q->front;
	}
	free(p);
}

void EnQueue()//选择窗口插入
{
	show();
	printf("\t\t\t\t\t*********************************\n");
	printf("\t\t\t\t\t*请选择窗口服务:\t\t*\n");
	printf("\t\t\t\t\t*\t     1.1号窗口          *\n");
	printf("\t\t\t\t\t*\t     2.2号窗口          *\n");
	printf("\t\t\t\t\t*\t     3.3号窗口          *\n");
	printf("\t\t\t\t\t*********************************\n");
	int a;
	printf("\t\t\t\t\t");
	scanf_s("%d", &a);
	switch (a)
	{
	case 1:
	{
		EnQueue1(&s1, i);
		printf("\t\t\t\t\t*取号成功,你是1号窗口%d号,请等待办理*\n\t\t\t\t\t", i);
		i++;
		break;
	}
	case 2:
	{
		EnQueue1(&s2, i);
		printf("\t\t\t\t\t*取号成功,你是2号窗口%d号,请等待办理*\n\t\t\t\t\t", i);
		i++;
		break;
	}
	case 3:
	{
		EnQueue1(&s3, i);
		printf("\t\t\t\t\t*取号成功,你是3号窗口%d号,请等待办理*\n\t\t\t\t\t", i);
		i++;
		break;
	}
	default:
	{
		printf("\t\t\t\t\t*            无效窗口          
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值