排队就餐管理方案设计C++

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

题目:排队就餐管理方案设计

【问题描述】

顾客到饭店就餐通常遇到排队等待情况,如果店内有空座,可直接点餐,否则需要排队等待。要求根据顾客的排队情况,及时安排点餐。

【基本要求】

请用C++语言编写程序,模拟顾客排队等待情况。餐桌个数、就餐人数由学生自己设计,存储结构和实现算法由学生自己选定并实现,要求如下。
(1)饭店内餐桌个数为n个;
(2)顾客到达饭店如果有空座可立即坐下点餐,否则需要依次排队等候;
(3)一旦有顾客离去,排在队头的顾客便可开始进店点餐;
(4)如果有VIP顾客,可直接插入队头。
程序包含的基本功能说明如下:
(1)排队:输入排队顾客的编号,加入队列;
(2)就餐:排在队列头的顾客进店点餐,并将其从排队队列中删除;
(3)查看排队:从队头到队尾输出所有等待的顾客编号;
(4)VIP顾客:直接插入对头;
(5)下班:退出运行,提醒顾客营业结束。

【测试数据】

确定餐桌个数(至少8桌),输入排队顾客编号(不少于10人),以较为直观的方式显示出排队等待的顾客编号及就餐顾客编号。

【实现提示】

采用队列算法实现。

运行截图:

在这里插入图片描述
在这里插入图片描述

代码

#include<iostream>
#include <queue>

using namespace std;
# define MAX_TABLE 8 // 餐厅有多少桌子

//菜单
int Menu()
{
	int choice;
	do {
		cout << endl;
		cout << "********************排队就餐管理系统****************" << endl
			<< "*                      1.排队                      *" << endl
			<< "*                      2.就餐完毕                  *" << endl
			<< "*                      3.查看排队情况              *" << endl
			<< "*                      4.VIP客户                   *" << endl
			<< "*                      0.下班                      *" << endl
			<< "****************************************************" << endl;
		cout << "输入您的选择: " << endl;
		cin >> choice;
	} while (choice < 0 || choice > 4);
	system("cls");
	return choice;
}
int main()
{
	// 队列用法
	//front():返回 queue 中第一个元素的引用。如果 queue 是常量,就返回一个常引用;如果 queue 为空,返回值是未定义的。
	//back():返回 queue 中最后一个元素的引用。如果 queue 是常量,就返回一个常引用;如果 queue 为空,返回值是未定义的。
	//push(const T& obj):在 queue 的尾部添加一个元素的副本。这是通过调用底层容器的成员函数 push_back() 来完成的。
	//push(T&& obj):以移动的方式在 queue 的尾部添加元素。这是通过调用底层容器的具有右值引用参数的成员函数 push_back() 来完成的。
	//pop():删除 queue 中的第一个元素。
	//size():返回 queue 中元素的个数。
	//empty():如果 queue 中没有元素的话,返回 true。
	//emplace():用传给 emplace() 的参数调用 T 的构造函数,在 queue 的尾部生成对象。
	//swap(queue<T> &other_q):将当前 queue 中的元素和参数 queue 中的元素交换。它们需要包含相同类型的元素。也可以调用全局函数模板 swap() 来完成同样的操作。
	queue<int> waiting; // 等待队列
	queue<int> waiting1;
	queue<int> eating; // 用餐队列
	int number = 0;
	while (true)
	{
		switch (Menu())
		{
		case 0:
			cout << "营业结束" << endl;
			exit(0);
			break;
		case 1: // 1.排队
			number++; 
			waiting.push(number); // 入队
			cout << "您的用餐号码为: " << number << endl;
			if (eating.size() < MAX_TABLE)
			{
				cout << "当前有空桌, 请直接入座就餐" << endl;
				waiting.pop();
				eating.push(number);
			}
			else {
				cout << "当前无空桌, 请排队等待" << endl;
			}
			break;
		case 2: // 2.就餐完毕
			if (eating.size() != 0)
			{
				eating.pop();
				cout << "有顾客就餐完毕" << endl;
				if (waiting.size() != 0) // 等待队列不为空
				{
					int eat;
					eat = waiting.front();
					cout << "请" << eat << "号入座就餐" << endl;
					waiting.pop();
					eating.push(eat);

				}
				else {
					cout << "当前没有顾客排队" << endl;
				}
			}
			else {
				cout << "当前没有顾客就餐" << endl;
			}
			break;
		case 3: // 3.查看排队情况
			// 队列没有遍历功能, 访问元素的唯一方式是遍历容器内容,并移除访问过的每一个元素。
			
			int temp;
			while (!waiting1.empty())
			{
				waiting1.pop();
			}

			while (!waiting.empty())
			{
				temp = waiting.front();
				cout << temp << "号 "; 
				waiting.pop();  
				waiting1.push(temp);
			}
			waiting = waiting1;
			cout << endl;
			break;
		case 4: // 4.VIP客户
			number++;
			while (!waiting.empty())  // 当前队列置空
			{
				temp = waiting.front();
				waiting.pop();
				waiting1.push(temp);
			}
			waiting.push(number); // vip入队
			while (!waiting1.empty())
			{
				temp = waiting1.front();
				waiting1.pop();
				waiting.push(temp); // 普通用户入队
			}
			cout << "尊敬的VIP客户, 您的用餐号码为: " << number << endl;
			if (eating.size() < MAX_TABLE)
			{
				cout << "当前有空桌, 请直接入座就餐" << endl;
				waiting.pop();
				eating.push(number);
			}
			else {
				cout << "当前无空桌, 请排队等待" << endl;
			}
			break;
		}
	}

	return 0;
}


餐桌(贪心算法 某餐馆有n张桌子,每张桌子有一个参数:a 可容纳的最大人数; 有m批客人,每批客人有两个参数:b人数,c预计消费金额。 在不允许拼桌的情况下,请实现一个算法选择其中一部分客人,使得总预计消费金额最大 输入描述: 输入包括m+2行。 第一行两个整数n(1 <= n <= 50000),m(1 <= m <= 50000) 第二行为n个参数a,即每个桌子可容纳的最大人数,以空格分隔,范围均在32位int范围内。 接下来m行,每行两个参数b,c。分别表示第i批客人的人数和预计消费金额,以空 阅读详情

相关推荐

C/C++排队打饭

C/C++排队打饭 题目描述 每天中午下课铃一打,同学们为了能尽早吃上饭,不要排那么长时间的队,都像狼一样冲向食堂,校领导看到这种情况很是担忧,因为学生们这样狂奔很危险,所以就要求必须等所有同学都来到食堂才能开始打饭,并且把排队打饭的顺序固定下来,这样谁都不用抢了。 学校里一共有N(1<=N<=100)个学生,每个学生打饭所需时间也是已知的,为了不让学生排队等得心烦,要求设计一个排队顺序使得所有学生的等待时间之和最小,等待时间为从开始排队到开始打饭所需的时间,所以第一个学生的等待时间为0。 为了

Tudou_Pika的博客 3073

食堂排队打饭 排队

课程设计 食堂排队打饭系统 有登录界面 查询 菜单 条目等 很齐全

C++模拟餐厅管理点菜系统--课程设计

你可以到一个餐馆去仔细研究一下餐馆的业务流程:餐 馆事先准备好自己的招牌菜及一些常规的菜式,有营业场所,服务人员等;顾客 来了以后,服务生先给客人找一张桌子坐下来,然后递上菜谱等待顾客点菜,顾 客可以点一个菜,也可以退菜,完了之后结账走人,这张桌子又可以用来招待下 一批顾客。

打饭队列 | c++ | 队列基础

隔壁队伍每次到达一名同学,他就会记录下这个同学的名字,同时队伍的第一个同学打饭完成后会离开队伍。

m0_70241024的博客 1471

基于C语言实现的顾客排位与桌位安排系统

此程序意在实现一种顾客排位与桌位安排系统,模拟实际生活过程中的排队软件。

毕业作品网站 1233

c语言小饭店等位就餐程序,小饭店预约登记管理系统,

小饭店预约登记管理系统,#include "stdio.h"#include "stdlib.h"#define MaxSize 20typedef struct guest_info{char name[8];int sum;char time[10];int number;struct guest_info *next;} GuestLink,*Pointer;void Insert(Poin...

weixin_36079835的博客 566

[源码和文档分享]基于C++的餐厅管理程序的设计与实现

摘 要 随着计算机应用技术的快速发展和日益普及,网络也遍及到我们生活的每个角落,为我们的学习和工作带来极大的方便。很多人都使用过传统的文字,纸张管理手段,与之不同的另外一种管理方式就是利用电脑程序管理餐厅。主要对追求工作高效、稳定、便捷的餐厅管理人员,电脑程序管理餐厅是一种很好的新型管理手段,它能提高工作效率和方便使用,餐厅管理程序就涉及到了文字、数字、项...

qq_38474647的博客 474

剑指---队列&栈篇(C++

文章目录队列&栈篇第一题: 用两个栈实现队列第二题: 包含min函数的栈 队列&栈篇 第一题: 用两个栈实现队列 题目解读: 假设输入12345,由于要以队列的规则弹出,那么弹出后的返回值也是12345。 如果是以栈的规则,插入的时候是12345,弹出的时候就是54321。 那么,我们可以以这样的方式来: 假设是stack1专门用来存放插入的数据12345的栈 将stack1中弹出的54321插入到stack2中,再将stack2中的数据弹出。这样得到的就是12345。 注意: 弹出

qq_40077565的博客 1396

C++实现队列(以餐厅订单队列为例)

C++实现队列(以餐厅订单队列为例)

qq_26183767的博客 450

排队打饭问题

一天中午,有 N 个学生来到食堂买饭,他们需要排成了一个一字队伍并按顺序打饭,现在已经知道了每个人买饭的时间, 现在食堂的管理员希望知道他们按照怎样的顺序买饭能够使得所有人等待时间的总和最小。(每个人等待的时间 = 排在他前面的人的打饭时间和 + 自己打饭的时间)第一行一个整数 N 表示人数,第二行 N 个整数表示每个人买饭所需要的时间,所有整数均不超过 100。输出一行,包括一个整数,表示所有人等待时间总和的最小值。

whycthe的博客 976

数据结构之队列:“排队打饭”//23.10.11

与堆栈类似,队列(Queue)是具有一定操作约束的线性表。插入和删除操作:只能在一端插入,而在另一端删除。//排队打饭;

m0_74200926的博客 457

C语言的学生餐厅进餐管理程序

自己写的一个程序,打发时间的,在vs2012上完美运行,C语言的学生餐厅进餐管理程序。

c++实现就餐排队系统(链式队列)

h文件 #pragma once //排队牌号 typedef struct Node { int data; Node *next; }Diner; //排队类 class Queue { private: int table_num; //餐桌张数 int diner_num; //就餐人数 Node *front, *rear; //头尾牌号 public: Queue(int t_n, int d_n); //构造函数(构造队列) ~Queue(); //析构函数 void

orange_monkey的博客 4076

队列实践-排队取餐

小可家里有一个大饭店,每天都生意兴隆以至于去这个饭店吃饭需要取号排队,现在小可想了解饭店内顾客排队的情况。

LCX0520的博客 745

3822 食堂排队(模拟)

1. 问题描述: 某班有 n 个学生,编号 1∼n。中午下课后,学生们陆续赶到食堂吃饭。食堂只有一个打饭窗口,所以学生们要排队打饭。第 i 个学生在第 li 分钟开始排队(当然是排在队尾)。如果同一分钟有多个学生同时开始排队,则编号较小的学生排在编号较大的学生之前。当一名学生排在队伍的最前端时,即轮到该名学生打饭。每个学生打饭需要花费一分钟时间。打到饭的学生,立即离开队伍,没打到饭的学生,在队伍里继续等待。每个学生的耐心都是有限的。对于第 i 个学生,如果在第 ri 分钟时,他仍在排队,且未轮到他打饭(仍

二哈 2120

餐馆问题(C++

题目:某餐馆有n张桌子,每张桌子能容纳的最大人数为a;有m批客人,每批客人有两个参数:b人数,c预计消费金额数。在不允许拼桌的情况下,请选择其中一部分客人,使得总预计的消费金额最大。 输入:总共输入m+2行             第一行输入n m,即桌子的个数和客人的批数(1             第二行是n个a,即每张桌子能容纳的客人数             接下来m行输入:b c

bitters_的博客 2558

【附源码】java毕业设计社区食堂就餐管理系统

此外,通过对就餐数据的分析,系统能够帮助食堂管理者更好地了解居民的饮食偏好和消费习惯,优化菜品结构和服务流程,提升社区食堂的整体服务水平。在社区居民的日常生活中,饮食是一项基础而重要的需求。因此,开发一个高效、智能的社区食堂就餐管理系统显得十分必要,该系统将采用HTML、CSS、JavaScript和Vue框架构建前端用户界面,利用Java语言和SpringBoot框架实现后端逻辑处理,以MySQL数据库作为数据存储与管理的载体,旨在打造一个集在线点餐、智能支付、订单管理等功能于一体的管理系统。

迟限程序设计 1060

多线程实现订餐取餐

import java.util.Queue; import java.util.concurrent.ArrayBlockingQueue;/** * Created by 风凌渡口 on 2017/6/21. */ public class TestThread {public static void main(String[] args) throws InterruptedExc

在水一方的博客 806

餐厅管理系统(C++实践)

#ifndef __DISPLAYMAIN_H_ #define __DISPLAYMAIN_H_ #include using namespace std; class DisplayMain{    public:   void displaystart();  //开始的页面   void displaymain();   //功能的主界面   void displa

cmbbill的专栏 1万+
上一篇: 拉格朗日插值验证龙格现象python
下一篇: 操作系统实验java
todcode
博客等级 码龄7年 359粉丝 108原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值