C++自主点餐系统
一、 题目
设计一个自助点餐系统,方便顾客自己点餐,并提供对餐厅销售情况的统计和管理功能。
二、 业务流程图
三、 系统功能结构图
四、 类的设计
五、 程序代码与说明
头文件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;elsecout << " ";}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;elsecout << " ";}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;elsecout << " ";}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;elsecout << " ";}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 // !ADMINMANAGERAdminManager.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;elsereturn 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 完整代码、程序报告
相关文章:

C++自主点餐系统
一、 题目 设计一个自助点餐系统,方便顾客自己点餐,并提供对餐厅销售情况的统计和管理功能。 二、 业务流程图 三、 系统功能结构图 四、 类的设计 五、 程序代码与说明 头文件1. SystemMap.h #pragma once #ifndef SYSTEMMAP #define SYSTEMMAP #in…...

jconsole jvisualvm
jconsole 打开方式 命令行输入 jconsole双击想要连接的应用 界面展示 jvisualvm 打开方式 命令行输入 jvisualvm双击想要连接的应用 可以安装插件,比如 Visual GC 直观看到 GC 过程...
python vtkUnstructuredGrid 转 vtkAlgorithmOutput_
在VTK (Vtk.py)中,vtkUnstructuredGrid对象可以通过多种方式转换为vtkAlgorithmOutput_对象。这种转换通常在管道中使用,以将一个算法的输出传递给另一个算法作为其输入。 以下是一个简单的例子,展示如何将vtkUnstructuredGrid对象转换为 v…...

IS-IS路由
概览: Intermediate System-to-Intermediate System,中间系统到中间系统协议 IS-IS--IGP--链路状态协议--AD值:115 IS--中间系统(路由器) ES--终端系统(PC) 在早期IS-IS的开发并不是为了IP…...

打造新质生产力,亚信科技2024年如何行稳致远?
引言:不冒进、不激进,稳扎稳打, 一个行业一个行业地深度拓展。 【全球云观察 | 科技热点关注】 基于以往“一巩固、三发展”的多年业务战略,亚信科技正在落实向非通信行业、标准产品、软硬一体产品和国际市场的“四…...

开源博客项目Blog .NET Core源码学习(12:App.Application项目结构分析)
开源博客项目Blog的App.Application项目主要定义网站页面使用的数据类,同时定义各类数据的增删改查操作接口和实现类。App.Application项目未安装Nuget包,主要引用App.Core项目的类型。 App.Application项目的顶层文件夹如下图所示,下面逐…...

AES加密解密算法
一,AES算法概述 AES属于分组加密,算法明文长度固定为128位(单位是比特bit,1bit就是1位,128位等于16字节) 而密钥长度可以是128、192、256位 当密钥为128位时,需要循环10轮完成加密࿰…...
计算机网络(05)
计算机网络(04) 网络负载均衡 由多台服务器以对称的方式组成一个服务器集合每台服务器都具有等价的地位 , 可以单独对外提供服务而无须其他服务器的辅助均衡负载能够平均分配客户请求到服务器列阵,借此提供快速获取重要数据,解决…...

6、ChatGLM3-6B 部署实践
一、ChatGLM3-6B介绍与快速入门 ChatGLM3 是智谱AI和清华大学 KEG 实验室在2023年10月27日联合发布的新一代对话预训练模型。ChatGLM3-6B 是 ChatGLM3 系列中的开源模型,免费下载,免费的商业化使用。 该模型在保留了前两代模型对话流畅、部署门槛低等众多…...
python面试题(1~10)
1、列表(list)和元组(tuple)有什么区别? ①列表是不可变的,创建后可以对其进行修改。元组是不可变的,元组一旦创建,就不能对其进行修改。 ②列表表示的顺序,它们是有序…...

分类预测 | Matlab实现CNN-LSTM-Mutilhead-Attention卷积神经网络-长短期记忆网络融合多头注意力机制多特征分类预测
分类预测 | Matlab实现CNN-LSTM-Mutilhead-Attention卷积神经网络-长短期记忆网络融合多头注意力机制多特征分类预测 目录 分类预测 | Matlab实现CNN-LSTM-Mutilhead-Attention卷积神经网络-长短期记忆网络融合多头注意力机制多特征分类预测分类效果基本介绍模型描述程序设计参…...

SQLServer CONCAT 函数的用法
CONCAT函数用于将多个字符串值连接在一起。以下是一个简单的示例,演示了如何使用CONCAT函数: -- 创建一个示例表 CREATE TABLE ExampleTable (FirstName NVARCHAR(50),LastName NVARCHAR(50) );-- 插入一些示例数据 INSERT INTO ExampleTable (FirstNam…...
python快速入门一
变量 定义一个变量并打印到控制台 message "Hello World!" print(message)控制台输出 Hello World!修改变量 message "Hello World!" print(message) message "Hello Python World!" print(message)控制台输出 Hello World! Hello Pytho…...
Elasticsearch 面试题及参考答案:深入解析与实战应用
在大数据时代,Elasticsearch 以其强大的搜索能力和高效的数据处理性能,成为了数据架构师和开发者必备的技能之一。本文将为您提供一系列精选的 Elasticsearch 面试题及参考答案,帮助您在面试中脱颖而出,同时也为您的大数据架构设计提供实战参考。 1. 为什么要使用 Elastic…...
【ARM 嵌入式 C 入门及渐进 18 -- 字符数字转整形函数 atoi 介绍】
请阅读【嵌入式开发学习必备专栏 】 文章目录 字符数字转整形函数 atoiatoi 简单实现 字符数字转整形函数 atoi 在 C 语言中,main 函数能够接收命令行参数。这些参数通过两个参数传递给 main 函数:int argc 和 char *argv[]。argc 是命令行参数的数量&a…...

全国超市数据可视化仪表板制作
全国超市消费数据展示 指定 Top几 客户销费数据展示 指定 Top几 省份销费数据展示 省份销售额数据分析 完整结果...
react native 总结
react app.js 相当与vue app.vue import React from react; import ./App.css; import ReactRoute from ./router import {HashRouter as Router,Link} from react-router-dom class App extends React.Component {constructor(props){super(props)}render(){return ( <…...
什么是自然语言处理(NLP)?自然语言处理(NLP)的概述
什么是自然语言处理? 自然语言处理(NLP)是人工智能(AI)和计算语言学领域的一个分支,它致力于使计算机能够理解、解释和生成人类语言。随着技术的发展,NLP已经从简单的模式匹配发展到了能够理解…...
共享旅游卡怎么使用?共享旅游卡的奥秘与魅力,解锁高效旅行的新方式
在共享经济的浪潮下,共享旅游卡逐渐崭露头角,成为众多旅行爱好者青睐的出行选择。如何有效利用这类卡片,使之成为节省成本、丰富旅行体验的利器呢? 本文将深入解析共享旅游卡的内涵、获取途径、使用要点,以及如何根据…...

使用yolov9来实现人体姿态识别估计(定位图像或视频中人体的关键部位)教程+代码
yolov9人体姿态识别: 相较于之前的YOLO版本,YOLOv9可能会进一步提升处理速度和精度,特别是在姿态估计场景中,通过改进网络结构、利用更高效的特征提取器以及优化损失函数等手段来提升对复杂人体姿态变化的捕捉能力。由于YOLOv9的…...

微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent
安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...