C++自主点餐系统

news/2024/4/29 16:18:55

一、 题目

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

二、 业务流程图

在这里插入图片描述

三、 系统功能结构图

在这里插入图片描述

四、 类的设计

在这里插入图片描述

五、 程序代码与说明

头文件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 完整代码、程序报告

http://www.mrgr.cn/p/34752818

相关文章

把项目推送到gitee

好久不用git了,今天就用git上传自己菜鸟项目。上传了模型训练还有模型部署到web的项目。

【Java程序设计】【C00387】基于(JavaWeb)Springboot的校园食堂订餐系统(有论文)

基于&#xff08;JavaWeb&#xff09;Springboot的校园食堂订餐系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过…

文本数据读取

文本数据读取 在自然语言处理的第一步,要面对的是各种各样以不同形式表现的文本数据,比如,有的是纯 txt 文档,有的是存储在 Excel 中的表格数据,还有的是无法直接打开的 pkl 文件等。刚开始接触编程的同学在这里就犯难了,这可怎么把文本数据拿来进行代码层面的操作呢? 事…

yolov部署到app

今天把模型部署到app上

全球首位AI程序员Devin诞生,以此谈谈AI对程序员的影响

目录 一、简介 二、AI程序员Devin的特长 三、对程序员的影响 一、简介 全球首位 AI 程序员 Devin 是由初创公司 Cognition AI 创造的。这家公司成立仅四个月&#xff0c;却已经引起了广泛关注。 Devin作为人工智能的代表&#xff0c;将展示出人工智能在编程领域的潜力和能…

硬件组成-CPU-编码-浮点数

计算机的基本硬件系统由运算器、控制器、存储器、输入设备和输出设备5大部件组成。运算器、控制器等部件被集成在一起统称为中央处理单元(CPU)。CPU是硬件系统的核心,用于数据的加工处理,能完成各种算术、逻辑运算及控制功能。存储器是计算机系统中的记忆设备,分为内部存储…

OpenGL 实现“人像背景虚化“效果

手机上的人像模式,也被人们称作“背景虚化”或 ”双摄虚化“ 模式,也称为 Bokeh 模式,能够在保持画面中指定的人或物体清晰的同时,将其他的背景模糊掉。突出画面的主体部分,主观上美感更强烈。 人像模式的一般实现原理是,利用双摄系统获取景深信息,并通过深度传感器和图…

在window10或window11 上运行带有签名的.msix 文件。

1)、单击有签名的.msix 文件》属性》 ok,这样就可以成功安装了编程是个人爱好

SEO 的未来:GPT 和 AI 如何改变关键词研究

谷歌Gemini与百度文心一言&#xff1a;AI训练数据的较量 介绍 想象一下&#xff0c;有一个工具不仅可以理解错综复杂的关键字网络&#xff0c;还可以预测搜索引擎查询的变化趋势。 这就是生成式预训练 Transformer (GPT) 和其他人工智能技术发挥作用的地方&#xff0c;以我们从…

给软件数字签名

一、准备生成签名所需的材料 1)添加签名AppxManifest.xml文件。在项目右建》添加》xml文件》修改文件名为AppxManifest。 在打开AppxManifest.xml文件,输入以下内容:<Identity Name="Contoso.AssetTracker"Version="1.0.0.0"Publisher="CN=6BB5…

github加速神器!解决github巨慢的问题,并且能够加速下载!另外推荐GitKraken -- 超好用的 Git 可视化工具

FastGithub github加速神器&#xff0c;解决github打不开、用户头像无法加载、releases无法上传下载、git-clone、git-pull、git-push失败等问题。 下载地址&#xff1a; 清华云盘 2 部署方式 2.1 windows-x64桌面 双击运行FastGithub.UI.exe 2.2 windows-x64服务 fastgi…

云服务器ubuntu下nginx和php-fpm环境配置

云服务器ubuntu下nginx和php-fpm环境配置 1.首先更新源 apt-get update2.安装nginx服务 apt-get install -y nginx3.查看nginx状态,如果显示中有active(running),表示已经安装成功 service nginx status4.寻找可安装的php-fpm中间件 apt-cache search php-fpm5.安装可安装的p…

【小尘送书-第十五期】Excel函数与公式应用大全for Excel 365 Excel

大家好&#xff0c;我是小尘&#xff0c;欢迎你的关注&#xff01;大家可以一起交流学习&#xff01;欢迎大家在CSDN后台私信我&#xff01;一起讨论学习&#xff0c;讨论如何找到满意的工作&#xff01; &#x1f468;‍&#x1f4bb;博主主页&#xff1a;小尘要自信 &#x1…

MySQL数据库高级语句

文章目录 MySQL高级语句older by 排序区间判断查询或与且&#xff08;or 与and&#xff09;嵌套查询&#xff08;多条件&#xff09;查询不重复记录distinctcount 计数限制结果条目limit别名as常用通配符嵌套查询&#xff08;子查询&#xff09;同表不同表嵌套查询还能用于删除…

Android studio打开Device File Explore(文件管理器)的方法

方法View > Tool Windows > Android Profiler Android Studio对文件的读写操作,可以看这里的文件,data是我自己取的名字,你们对应打开的文件名字不一样是正常的 下课!!

LLMRec论文阅读笔记

LLMRec论文阅读笔记 Abstract ​ 长期以来,数据稀疏性的问题一直是推荐系统中的一个挑战,以前的研究都试图通过合并侧边信息来解决这个问题。然而,这种方法经常会引入副作用,如噪声、可用性问题和低数据质量,这反过来会阻碍用户偏好的准确建模,并对推荐性能产生不利影响。…

变量以及八大数据类型介绍

​ 变量以及八大数据类型介绍 1 变量 1.1 学习变量的目的 # 学习变量有助于我们在程序中存储和操作数据,提高代码质量,更方便我们操作和修改数据。1.2 学习基本数据类型的目的 #是在不同的场景下使用对应的数据类型来操作数据2 八大数据…

Xshell 连接linux 虚拟机

修改配置文件 [root@bogon ~]# ifconfig ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.183.133 netmask 255.255.255.0 broadcast 192.168.183.255inet6 fe80::20c:29ff:fe12:80d6 prefixlen 64 scopeid 0x20<link>ether 00:0c:…

蓝桥杯算法赛(二进制王国)

问题描述 二进制王国是一个非常特殊的国家&#xff0c;因为该国家的居民仅由 0 和 1 组成。 在这个国家中&#xff0c;每个家庭都可以用一个由 0 和 1 组成的字符串 S 来表示&#xff0c;例如 101、 000、 111 等。 现在&#xff0c;国王选了出 N 户家庭参加邻国的庆典…

02-基于STM32F407MAC与DP83848实现以太网通讯六(IPerf网络速度测试)

一、IPerf2网络测试工具 Iperf2是一个用于测试网络带宽的工具。它是Iperf的旧版本,专注于提供基本的带宽测量功能。通过在客户端和服务器之间发送测试数据流并测量其性能,用户可以评估网络连接的速度和稳定性。Iperf2提供了一种简单而有效的方式来评估网络性能。 IPerf3已经发…