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

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

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

相关文章

集体出走的Stability AI 发布全新代码大模型,3B以下性能最优,超越Code Llama和DeepSeek-Coder

Stability AI又有新动作&#xff01;程序员又有危机了&#xff1f; 3月26日&#xff0c;Stability AI推出了先进的代码语言模型Stable Code Instruct 3B&#xff0c;该模型是在Stable Code 3B的基础上进行指令调优的Code LM。 Stability AI 表示&#xff0c;Stable Code Instru…

3款免费甘特图制作工具的比较和选择指南

GanntProject GanttProject https://www.ganttproject.biz/ 是一款项目管理和调度应用&#xff0c;适用于 Windows、macOS 和 Linux。它易于使用&#xff0c;无需任何设置&#xff0c;适用于个人用户和小型团队。该应用提供任务层次结构和依存关系、里程碑、基准行、Gantt 图表…

WordPress Git主题 响应式CMS主题模板

分享的是新版本&#xff0c;旧版本少了很多功能&#xff0c;尤其在新版支持自动更新后&#xff0c;该主题可以用来搭建个人博客&#xff0c;素材下载网站&#xff0c;图片站等 主题特点 兼容 IE9、谷歌 Chrome 、火狐 Firefox 等主流浏览器 扁平化的设计加响应式布局&#x…

BioXcell InVivoPlus anti-mouse Ly6G及部分参考文献

BioXcell InVivoPlus anti-mouse Ly6G 1A8单克隆抗体与小鼠Ly6G反应。Ly6G分子量为21-25kDa&#xff0c;是GPI锚定的细胞表面蛋白Ly-6超家族的成员&#xff0c;在细胞信号传导和细胞粘附中发挥作用。Ly6G在发育过程中由骨髓谱系中的细胞&#xff08;包括单核细胞、巨噬细胞、粒…

android 集合总结

1 集合分类&#xff0c; collection和map两大类,Iterator接口是提供遍历任何Collection的接口&#xff0c;不是map 2 集合类的底层实现 hashset基于hashmap实现&#xff08;只不过HashSet里面的HashMap所有的value都是同一个Object而已&#xff09; treeset由红黑树实现 …

什么是根据人类反馈的强化学习Reinforcement Learning with Human Feedback(RLHF)?

基于人类反馈的强化学习&#xff08;Reinforcement learning with human feedback&#xff09;是近年来越来越受欢迎的一种前沿技术&#xff0c;用于提高大型语言模型的性能。这是种使用人类反馈训练这些模型的有效方法&#xff0c;而该方法的输入组件与搜索评估也有诸多相似之…

[Flutter]环境判断

方式一&#xff08;推荐&#xff09; 常量kReleaseMode&#xff0c;它会根据你的应用是以什么模式编译的来获取值。bool.fromEnvironment会从Dart编译时的环境变量中获取值。对于dart.vm.product这个特定的环境变量&#xff0c;它是由Dart VM设置的&#xff0c;用来标明当前是…

【Android 源码】Android源码下载指南

文章目录 前言安装Repo初始化Repo选择分支没有梯子替换为清华源 有梯子 下载源码下载开始参考 前言 这是关于Android源码下载的过程记录。 环境&#xff1a;Windows上通过VMware安装的Ubuntu系统 安装Repo 创建Repo文件目录 mkdir ~/bin PATH~/bin:$PATH下载Repo工具&#…

回文子串 每日温度 接雨水

647. 回文子串 力扣题目链接 如果s【i】和s【j】相同 dp【i1】【j-1】也是回文串的话 &#xff08;等于true&#xff09; 那么dp【i】【j】也是回文串 true 定义一个bool二维数组 遍历顺序是从下到上 从左到右 因为dp【i】【j】是通过dp【i1】【j-1】推出来的 i从最后一…

【漏洞复现】用友U8Cloud nc.bs.sm.login2.RegisterServlet SQL注入漏洞

0x01 产品简介 用友U8 Cloud是用友推出的新一代云ERP,主要聚焦成长型、创新型企业,提供企业级云ERP整体解决方案 0x02 漏洞概述 用友U8Cloud nc.bs.sm.login2.RegisterServlet接口处存在SQL注入漏洞,未授权的攻击者可通过此漏洞获取数据库权限,从而盗取用户数据,造成用…

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

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

WorkPlus智能AI助理:定制化部署,拓展企业协作新境界

近年来&#xff0c;随着人工智能技术不断发展&#xff0c;智能助理在企业管理中发挥着日益重要的作用。其中&#xff0c;WorkPlus智能AI助理作为一款支持私有化部署的新一代智能助理软件&#xff0c;为企业内部协作场景带来了全新的可能性。通过结合企业自身的行业知识和应用场…

英伟达推出“地表最强AI芯片”

B站&#xff1a;啥都会一点的研究生公众号&#xff1a;啥都会一点的研究生 近期AI相关资讯&#xff0c;一起看看吧~ Neuralink首位脑芯片患者用意念下棋 埃隆-马斯克&#xff08;Elon Musk&#xff09;的脑芯片初创公司 Neuralink 展示了其首位脑芯片患者仅用意念下棋的情景…

VMware vSAN OSA存储策略 - 基于虚拟机的分布式对象存储

简介 博客&#xff1a;https://songxwn.com/ 存储策略 (Storage Policy) 是管理员定义的一组规则&#xff0c;这组规则定义了数据对象在 vSAN 存储上是如何保存的&#xff0c;存储策略定义了数据存储的可靠性、访问性能等特性。vSAN 提供了基于存储策略的存储管理 SPBM (Stor…

基于java实现的高校二手交易平台

开发语言&#xff1a;Java 框架&#xff1a;ssm 技术&#xff1a;JSP JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclip…

无服务数据库是未来的趋势吗?

无服务数据库是未来的趋势吗&#xff1f; 无服务器数据库是未来的趋势吗&#xff1f;无服务器数据库与传统云数据库有何不同&#xff1f; Amazon Aurora Serverless&#xff08;如下图所示&#xff09;是 Amazon Aurora 的一种配置方式&#xff0c;可以按需自动扩展。 Aurora…

针对ETC系统的OBE-SAM模块设计方案

ETC系统组成及工作原理 ETC系统由前端系统和后台数据库系统组成&#xff0c;总体的架构如下图所示&#xff1a; 前端系统包含安装在汽车挡风玻璃上的车载单元&#xff08;On Board Unit&#xff0c;简称OBU&#xff09;、路侧单元&#xff08;Roadside Unit&#xff0c;简称RS…

深入解析Spring MVC: 原理、流程【面试版】

什么是SpringMV? 1.是一个基于MVC的web框架&#xff1b; 2.是spring的一个模块&#xff0c;是spring的子容器&#xff0c;子容器可以拿父容器的东西&#xff0c;但是反过来不可&#xff1b; 2.SpringMVC的前端控制器是DispatcherServlet&#xff0c;用于分发请求。使开发变…

python--切片

1.切片&#xff1a; 切片是编程语言为有序序列&#xff08;sequence&#xff09;准备的&#xff0c;用来切割或者截取某个片段 一个完整的切片是包含三个参数和两个冒号" : " ,用于分隔三个参数(start_index、end_index、step)。当只有一个“:”时&#xff0c;默认第…

深度学习(三)vscode加jupyter notebook插件使用

0.前言 哎呀&#xff0c;我本次的实验是在新电脑上使用的&#xff0c;之前的笔记本上的环境什么的我都是很久以前弄好了的&#xff0c;结果到了新电脑上我直接忘了是该怎么配的了&#xff0c;不过万幸&#xff0c;花了点时间&#xff0c;查查补补&#xff0c;现在总算是可以了。…