C++自主点餐系统

news2024/12/22 18:29:12

一、 题目

设计一个自助点餐系统,方便顾客自己点餐,并提供对餐厅销售情况的统计和管理功能。

二、 业务流程图

在这里插入图片描述

三、 系统功能结构图

在这里插入图片描述

四、 类的设计

在这里插入图片描述

五、 程序代码与说明

头文件1.

SystemMap.h
#pragma once
#ifndef SYSTEMMAP
#define SYSTEMMAP
#include<bits/stdc++.h>
using namespace std;
class SystemMap
{
private:
	string frame;
public:
	SystemMap();
	void showOutsideSystemMap(); // 外卖就餐页面
	void showInsideSystemMap();  //  店内就餐页面
	int showSystemMap();  //顾客选择系统页面
	int showChoiceMap();  //系统的功能选择界面
	int showRegMap();
	int showClientChoiceMap();
	int showQueryMap();
	int showMenuChoice();
	int showChangeMenuMap();
	int showCilentOrderMessage();
	int adminSystemMap();
	int showOrderChangeMap();
	int showPastSales();
};
#endif // !SYSTEMMAP

SystemMap.cpp


#include "SystemMap.h"
SystemMap::SystemMap() {
	frame = "#";
}
int SystemMap::showSystemMap() {
	for (int i = 0; i < 60; i++)cout << frame;
	cout << endl;
	for (int i = 0; i < 60; i++) {
		if (i == 0 || i == 59)
			cout << frame;
		else
			cout << " ";
	}
	cout << endl;
	cout << "#\t\t\t欢迎光临本店";
	for (int i = 0; i < 23; i++)
		cout << " ";
	cout << "#\n";
	for (int i = 0; i < 60; i++) {
		if (i == 0 || i == 59)
			cout << frame;
		else
			cout << " ";
	}
	cout << endl;
	cout << "#\t\t  请问您需要什么服务\t\t";
	for (int i = 0; i < 11; i++)
		cout << " ";
	cout << "#\n";
	cout << "#\t\t  1:在店就餐";
	for (int i = 0; i < 31; i++)
		cout << " ";
	cout << "#\n";
	cout << "#\t\t  2:外卖就餐";
	for (int i = 0; i < 31; i++)
		cout << " ";
	cout << "#\n";
	for (int i = 0; i < 60; i++)cout << frame;
	cout << endl;
	cout << "\t\t  请问您选择的是:";
	int choice;
	cin >> choice;
	return choice;

}
void SystemMap::showInsideSystemMap() {
	cout << "欢迎您在本店就餐,以下是菜单\n\n";
}
void SystemMap::showOutsideSystemMap() {
	cout << "欢迎您点本店的外卖,以下是菜单\n\n";
}
int SystemMap::showChoiceMap() {
	for (int i = 0; i < 60; i++)cout << frame;
	cout << endl;
	for (int i = 0; i < 60; i++) {
		if (i == 0 || i == 59)
			cout << frame;
		else
			cout << " ";
	}
	cout << "\n#\t\t      欢迎来到榆榆餐厅";
	for (int i = 0; i < 21; i++)
		cout << " ";
	cout << "#\n";
	cout << "#\t\t\t店长:   陈榆";
	for (int i = 0; i < 23; i++)
		cout << " ";
	cout << "#\n";
	for (int i = 0; i < 60; i++) {
		if (i == 0 || i == 59)
			cout << frame;
		else
			cout << " ";
	}
	cout << endl;
	for (int i = 0; i < 60; i++)cout << frame;
	cout << endl;
	cout << "\t\t------------------------" << endl;
	cout << "\t\t|  1:顾客服务          |" << endl;
	cout << "\t\t|  2:管理员系统        |" << endl;
	cout << "\t\t|  3:退出系统          |" << endl;
	cout << "\t\t------------------------" << endl;
	cout << "\t\t您的选择是:";
	int choice;
	cin >> choice;
	return choice;
}
int SystemMap::adminSystemMap() {
	cout << "\t\t------------------------" << endl;
	cout << "\t\t|  1:食物管理          |" << endl;
	cout << "\t\t|  2:今日反馈          |" << endl;
	cout << "\t\t|  3:订单管理          |" << endl;
	cout << "\t\t|  4:历史销售情况      |" << endl;
	cout << "\t\t|  5:退出              |" << endl;
	cout << "\t\t------------------------" << endl;
	int choice;
	cin >> choice;
	return choice;
}
int SystemMap::showRegMap() {
	cout << "\t\t------------------------" << endl;
	cout << "\t\t|  1:新顾客点餐        |" << endl;
	cout << "\t\t|  2:查询订单          |" << endl;
	cout << "\t\t------------------------" << endl;
	int choice;
	cout << "\t\t您的选择是:";
	cin >> choice;
	return choice;
}
int SystemMap::showClientChoiceMap() {
	cout << "\t\t------------------------" << endl;
	cout << "\t\t|  1:点菜              |" << endl;
	cout << "\t\t|  2:修改订单          |" << endl;
	cout << "\t\t|  3:提交订单          |" << endl;
	cout << "\t\t------------------------" << endl;
	int choice;
	cout << "\t\t您的选择是:";
	cin >> choice;
	return choice;
}
int SystemMap::showQueryMap() {
	cout << "\t\t------------------------" << endl;
	cout << "\t\t|  1:查询订单          |" << endl;
	cout << "\t\t|  2:退出              |" << endl;
	cout << "\t\t------------------------" << endl;
	int choice;
	cout << "\t\t您的选择是:";
	cin >> choice;
	return choice;
}
int SystemMap::showChangeMenuMap() {
	cout << "\t\t------------------------" << endl;
	cout << "\t\t|  1:添加食物          |" << endl;
	cout << "\t\t|  2:修改食物价格      |" << endl;
	cout << "\t\t|  3:修改食物折扣      |" << endl;
	cout << "\t\t|  4:删除食物          |" << endl;
	cout << "\t\t|  5:退出食物管理系统  |" << endl;
	cout << "\t\t------------------------" << endl;
	cout << "\t\t您的选择是:";
	int choice;
	cin >> choice;
	return choice;
}
int SystemMap::showMenuChoice() {
	cout << "\t\t------------------------" << endl;
	cout << "\t\t|  1:原菜单            |" << endl;
	cout << "\t\t|  2:新菜单            |" << endl;
	cout << "\t\t------------------------" << endl;
	int choice;
	cout << "\t\t您的选择是:";
	cin >> choice;
	return choice;
}
int SystemMap::showCilentOrderMessage() {
	cout << "\t\t------------------------" << endl;
	cout << "\t\t|  1:修改数量            |" << endl;
	cout << "\t\t|  2:删除食物            |" << endl;
	cout << "\t\t|  3:退出修改            |" << endl;
	cout << "\t\t------------------------" << endl;
	int choice;
	cout << "\t\t您的选择是:";
	cin >> choice;
	return choice;
}
int SystemMap::showOrderChangeMap() {
	cout << "\t\t------------------------" << endl;
	cout << "\t\t|  1:查找订单            |" << endl;
	cout << "\t\t|  2:修改订单            |" << endl;
	cout << "\t\t|  3:删除订单            |" << endl;
	cout << "\t\t|  4:退出修改            |" << endl;
	cout << "\t\t------------------------" << endl;
	int choice;
	cout << "\t\t您的选择是:";
	cin >> choice;
	return choice;
}
int SystemMap::showPastSales() {
	cout << "\t\t------------------------" << endl;
	cout << "\t\t|  1:查找订单            |" << endl;
	cout << "\t\t|  2:修改订单            |" << endl;
	cout << "\t\t|  3:删除订单            |" << endl;
	cout << "\t\t|  4:退出修改            |" << endl;
	cout << "\t\t------------------------" << endl;
	int choice;
	cout << "\t\t您的选择是:";
	cin >> choice;
	return choice;
}

头文件2.
Admin.h

#pragma once
#ifndef ADMIN
#define ADMIN
#include <bits/stdc++.h>
using namespace std;
class Admin
{
private:
	int num;
	string ID, password;
public:
	Admin();
	void setId(string I);
	void setPassword(string p);
	void setNum(int i);
	string getID();
	string getPassword();
	int getNum();
};
#endif // !ADMIN

Admin.cpp


#include "Admin.h"
Admin::Admin() {

}

void Admin::setId(string I) {
	ID = I;
}

void Admin::setNum(int n) {
	num = n;
}

void Admin::setPassword(string P) {
	password = P;
}

string Admin::getID() {
	return ID;
}

string Admin::getPassword() {
	return password;
}

int Admin::getNum() {
	return num;
}

头文件3.
AdminManager.h

#pragma once
#ifndef ADMINMANAGER
#define ADMINMANAGER
#include <bits/stdc++.h>
#include "Admin.h"
using namespace std;
class AdminManager
{
public:
	AdminManager();
	int adminNum;
	Admin admin[100];
	void addAdmin(string ,string );
	int getAdminNum();
	int checkPassword(string, string);
};
#endif // !ADMINMANAGER

AdminManager.cpp
#include "AdminManager.h"
AdminManager::AdminManager() {
	adminNum = 0;
}
void AdminManager::addAdmin(string ID,string p) {
	admin[adminNum].setId(ID);
	admin[adminNum].setPassword(p);
	admin[adminNum].setNum(adminNum + 1);
	adminNum++;
}
int AdminManager::checkPassword(string id,string p) {
	int i;
	for (i = 0; i < adminNum; i++) {
		if (admin[i].getID() == id) {
			if (admin[i].getPassword() == p) {
				cout << "密码正确\n\n";
				return 1;
			}
			else {
				cout << "密码错误\n\n";
				return 2;
			}
		}
	}
	if (i >= adminNum) {
		cout << "没有此账号的管理员,请先注册\n\n";
		return 3;
	}
}

int AdminManager::getAdminNum() {
	return adminNum;
}

头文件4.
Client.h

#pragma once
#ifndef CLIENT
#define CLIENT
#include<bits/stdc++.h>
#include "Menu.h"
using namespace std;
class Client
{
private:
	int id, type, desk, arriveTime;// id 指的是 顾客编号    type   指就餐类型
	double coust; // 花费
	string name, phone, address; //姓名  电话  地址
public:
	Client();
	Client(string n, string p,int d);
	Client(string n, string p,string a);
	int judge = 1;//判断是否输出订单
	int num[100];
	Menu Client_Menu;
	string getName();
	string getPhone();
	string getAddress();
	int getDesk();
	double getCoust();
	int getType();
	int getDeskCoust();
	void setCoust(double);
	void setId(int);
	void setDesk(int);
	void setAddress(string a);
	void setType(int n);
	void addCoust(double x);
	void showCientMessage();
	void changeNum();
	void delFood();
	void setArriveTime(int);

};
#endif // CLIENT

Client.cpp

#include "Client.h"
#include <iomanip>
Client::Client() {
	judge = 1;
}

Client::Client(string n, string p, int d) {
	name = n;
	phone = p;
	desk = d;
	coust = 0;
	for (int i = 0; i < 100; i++)
		num[i] = 0;
	cout << "顾客注册成功" << endl;
	judge = 1;
}

Client::Client(string n, string p, string a) {
	name = n;
	phone = p;
	address = a;
	coust = 0;
	for (int i = 0; i < 100; i++)
		num[i] = 0;
	cout << "顾客注册成功" << endl;
	judge = 1;
}

double Client::getCoust() {
	return coust;
}

string Client::getName() {
	return name;
}

string Client::getPhone() {
	return phone;
}

string Client::getAddress() {
	return address;
}

int Client::getType() {
	return type;
}

int Client::getDesk() {
	return desk;
}

int Client::getDeskCoust() {
	if (desk > 50)
		return 50;
	else
		return 0;
}

void Client::setAddress(string a) {
	address = a;
}


void Client::setDesk(int a) {
	desk = a;
	if (a >= 1 && a <= 50)
		cout << "\n您选择了" << a << "号餐桌" << endl;
	else {
		cout << "\n您选择了" << a << "号包厢" << endl;
		coust += 50;
	}
}


void Client::setType(int n) {
	type = n;
}

void Client::addCoust(double n) {
	coust += n;
}

void Client::setCoust(double a) {
	coust = 0;
}

void Client::showCientMessage() {

	if (judge == 1) {
		string a;
		if (type == 1)
		{
			a = "在店就餐";
			cout << "姓名:" << name << "\t\t" << a << endl;
			cout << "电话号码:" << phone << endl;
			cout << "餐桌号为:" << desk << endl << endl;
			cout << setw(10) << setiosflags(ios::left) << "食物序列" << setw(10) << "菜名" << "\t数量\t价格\t折扣" << endl;
			for (int i = 0; i < Client_Menu.getNum(); i++)
				cout << setw(10) << setiosflags(ios::left) << setw(10) << i + 1 << Client_Menu.food[i].getName() << "\t" << num[i] << "\t" << num[i] * Client_Menu.food[i].getRightPrice() << "\t" << Client_Menu.food[i].getDiscount() << endl;
			cout << "总价:\t" << coust + getDeskCoust() << "元\t\t含包厢费" << getDeskCoust() << "元" << endl << endl;
			cout << "--------------------------------------" << endl;
		}
		else {
			a = "外卖";
			cout << "姓名:" << name << "\t\t" << a << endl;
			cout << "电话号码:" << phone << endl;
			cout << "外卖送达地址:" << address << endl << endl;
			cout << setw(10) << setiosflags(ios::left) << "食物序列" << setw(10) << "菜名" << "\t数量\t价格\t折扣" << endl;
			for (int i = 0; i < Client_Menu.getNum(); i++)
				cout << setw(10) << setiosflags(ios::left) << setw(10) << i + 1 << Client_Menu.food[i].getName() << "\t" << num[i] << "\t" << num[i] * Client_Menu.food[i].getRightPrice() << "\t" << Client_Menu.food[i].getDiscount() << endl;
			int t = 5;
			//cout << "\n\n\n" << coust << "\n\n\n";
			cout << "总价:\t\t" << coust + 5 << "元\t" << "含外卖费" << 5 << "元" << endl << endl;
			cout << "预计到达时间:\t" << arriveTime << "分钟后\n";
			cout << "--------------------------------------" << endl;
		}
	}
	else {
		name = "";
		phone = "";
		address = "";
		desk = 0;
		coust = 0;
		arriveTime = 0;

		cout << "该订单已删除\n\n";
	}
	
}

void Client::setId(int i) {
	id = i;
}

void Client::changeNum() {
	int n,numss;
	cout << "请输入食物序列:";
	cin >> n;
	cout << "您选择了食物为:\t" << Client_Menu.food[n - 1].getName() << endl;
	cout << "请输入要改变该食物的数量:";
	cin >> numss;
	coust += (numss - num[n - 1]) * Client_Menu.getPriceByName(Client_Menu.getNameById(n - 1));
	num[n - 1] = numss;
}

void Client::delFood() {
	int n;
	cout << "请输入您的序列号:";
	cin >> n;
	cout << "您选择了食物:" << Client_Menu.food[n - 1].getName() << endl;
	coust -= num[n - 1] * Client_Menu.food[n - 1].getPrice();
	for (int i = n - 1; i < Client_Menu.getNum(); i++) {
		Client_Menu.food[i] = Client_Menu.food[i + 1];
		num[i] = num[i + 1];
	}
	Client_Menu.setNum(Client_Menu.getNum() - 1);
}

void Client::setArriveTime(int t) {
	
	arriveTime = t;
}

六、 运行结果与分析

一种是餐厅管理员,一种是顾客。餐厅管理员根据账号、密码登录系统。顾客无需登录即可使用系统。

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

七、联系与交流

q:969060742 完整代码、程序报告

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1551632.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

kubernetes(K8S)学习(一):K8S集群搭建(1 master 2 worker)

K8S集群搭建&#xff08;1 master 2 worker&#xff09; 一、环境资源准备1.1、版本统一1.2、k8s环境系统要求1.3、准备三台Centos7虚拟机 二、集群搭建2.1、更新yum&#xff0c;并安装依赖包2.2、安装Docker2.3、设置hostname&#xff0c;修改hosts文件2.4、设置k8s的系统要求…

常见的三种办公室租赁方式各自优缺点

商业办公的租赁市场。找商业办公地点&#xff0c;跟找住宅租房有点像&#xff0c;但目的和要求不同。主要也是三种方式&#xff1a;直接找房东租、接手别人的转租&#xff0c;或者找中介帮忙。每种方式都有它的小窍门和注意事项。 直租 直租商业办公&#xff0c;就是直接和办公…

YoloV5改进策略:Neck和Head改进|ECA-Net:用于深度卷积神经网络的高效通道注意力|多种改进方法|附结构图

摘要 本文使用ECA-Net注意力机制加入到YoloV5Neck和Head中。我尝试了多种改进方法&#xff0c;并附上改进结果&#xff0c;方便大家了解改进后的效果&#xff0c;为论文改进提供思路。&#xff08;改进中。。。。&#xff09; 论文&#xff1a;《ECA-Net&#xff1a;用于深度…

Python实现一个简单的银行管理系统GUI应用

介绍 在本教程中&#xff0c;我们将创建一个基本的银行管理系统GUI应用&#xff0c;用户可以通过图形界面执行各种银行操作。我们将使用Python编程语言和Tkinter库来实现此应用。 使用说明 需要安装Python解释器&#xff0c;以及PythonCharm &#x1f449; 点我去下载 效果图…

Mysql的连接与存储

目录 一、mysql的连接查询 1、连接的分类&#xff1a; 1.1 内连接 1.2左连接 1.3 右连接 二、存储过程 1、简介 2、优点 3、语法 4、参数分类 5、带参数的存储过程 6、修改存储过程 7、删除存储过程 三、总结 一、mysql的连接查询 mysql的连接查询&#xff0c;通…

tomcat和Servlet开发小案例

在上篇文章中,我已经正确安装了tomcat和利用servlet写了个基础的hello world程序,明白了这两个东西到底是啥玩意. 接下来,需要写个登录的小案例来进一步熟悉下基于servlet开发的流程. 一,新建项目 我们新建的maven项目其实里面是空的。所以我们需要给他变成一个servlet项目。 …

vue3全局引入element-plus使用Message教程

文章目录 安装引入 Element Plus和组件样式示例注意安装与引入&#xff1a;按需引入&#xff1a;API 使用&#xff1a;样式问题&#xff1a;组件上下文&#xff1a;版本兼容性&#xff1a;错误处理&#xff1a; 这是 Element UI 的 Vue 3 版本。ElMessage 是 Element Plus 中的…

编程语言|C语言——C语言变量的存储方式

前言 变量是程序中数据的存储空间的抽象。变量的存储方式可分为静态存储和动态存储两种。 静态存储变量通常是在程序编译时就分配一定的存储空间并一直保持不变&#xff0c;直至整个程序结束。在上一部分中介绍的全局变量的存储方式即属于此类存储方式。 动态存储变量是在程序执…

黑马鸿蒙笔记1

这里与前端类似。

跨境智星教你如何批量注册阿里国际站买家账号?

随着全球化的加速和跨境电商的兴起&#xff0c;越来越多的海外消费者开始关注并尝试在阿里国际站进行购物。然而&#xff0c;对于初次接触阿里国际站的买家来说&#xff0c;如何注册一个有效的买家账号却是一个不小的难题。 首先&#xff0c;要注册阿里国际站买家账号&#xff…

蓝桥杯(3):python搜索DFS

目录 1 DFS简介 1.1 DFS与n重循环 1.2 代码实现 1.3 例题 1.3.1 分糖果 1.3.2 买瓜 2 回溯 2.1 定义 2.2 代码实例 2.1.1 排列数 2.1.2 找子集 2.3 例题 2.3.1 N皇后 2.3.2 小朋友崇拜圈 2.3.3 全球变暖 3 剪枝 3.1 定义 3.2 分类 3.3 例子 3.3.1 数字王国之…

TouchGFX之Button

TouchGFX中的按钮是一种感应触控事件的控件&#xff0c;能够在按钮被按下/释放时发送回调 代码 #ifndef TOUCHGFX_ABSTRACTBUTTON_HPP #define TOUCHGFX_ABSTRACTBUTTON_HPP #include <touchgfx/Callback.hpp> #include <touchgfx/events/ClickEvent.hpp> #includ…

Leetcoder Day43| 单调栈2

503.下一个更大元素II 给定一个循环数组&#xff08;最后一个元素的下一个元素是数组的第一个元素&#xff09;&#xff0c;输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序&#xff0c;这个数字之后的第一个比它更大的数&#xff0c;这意味着你应该…

【案例·查】数据类型强制转换,方便查询匹配

问题描述&#xff1a; MySQL执行中需要将某种数据类型的表达式显式转换为另一种数据类型&#xff0c;可以使用 SQL 中的cast()来处理 案例&#xff1a; SELECT CAST(9.0 AS decimal) #String化为小数类型SELECT * FROM table_1 WHERE 1888-03-07 CAST(theDate AS DATE) …

项目实战:电影评论情感分析系统

目录 1.引言 2.数据获取与预处理 3.构建文本分类模型&#xff08;使用LSTM&#xff09; 4.结果评估与模型优化 4.2.结果评估 4.2.模型优化 5.总结 1.引言 在本篇文章中&#xff0c;将通过一个完整的项目实战来演示如何使用Python构建一个电影评论情感分析系统。涵盖从数…

激光焊接机性价比高的品牌推荐

激光焊接机性价比高的品牌推荐&#xff0c;博特激光作为一个激光焊接机品牌&#xff0c;在市场上也享有一定的声誉。其激光焊接机产品在性价比方面表现不错&#xff0c;受到了部分用户的认可。以下是关于博特激光焊接机的一些优势特点&#xff1a; 1. **性能稳定**&#xff1a;…

Mybatis细节详解

上一篇分享了一个Mybatis的快速入门案例&#xff0c;本贴再详细说明几个细节点~ 一.Mapper代理开发 1.定义接口 定义一个接口&#xff0c;并在resources中定义mapper文件夹&#xff0c;文件夹中存放同名的xml配置文件。 2.设置namespace属性 <?xml version"1.0&qu…

ChatGLM2本地部署方法

chatglm2部署在本地时&#xff0c;需要从huggingface上下载模型的权重文件&#xff08;需要科学上网&#xff09;。下载后权重文件会自动保存在本地用户的文件夹上。但这样不利于分享&#xff0c;下面介绍如何将chatglm2模型打包部署。 一、克隆chatglm2部署 这个项目是chatgl…

Go singleflight 第三方库在防止缓存击穿中的重要作用

参考&#xff1a; Go并发——singleflight - 知乎十一. Go并发编程–singleflight - failymao - 博客园 一、背景 介绍&#xff1a;Go的singleflight库提供了一个重复的函数调用抑制机制。 场景&#xff1a;适用于并发读请求量较大的后台服务&#xff0c;以降低存储层的压力…

I.MX6ULL_Linux_驱动篇(55)linux 网络驱动

网络驱动是 linux 里面驱动三巨头之一&#xff0c; linux 下的网络功能非常强大&#xff0c;嵌入式 linux 中也常常用到网络功能。前面我们已经讲过了字符设备驱动和块设备驱动&#xff0c;本章我们就来学习一下linux 里面的网络设备驱动。 嵌入式网络简介 网络硬件接口 首先…