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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

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

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

在Linux上使用nginx反向代理部署Docker网站

在政务云上部署Web环境&#xff0c;为了保证服务器安全&#xff0c;甲方只开放一个端口且只允许使用https协议进行访问&#xff0c;经过思考&#xff0c;决定使用docker部署网站&#xff0c;使用nginx反向代理&#xff0c;通过不同的二级域名访问不同的端口。 1 使用docker部署…

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

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

超越极限!《无名之辈》高阶武学与战术应对策略一览!

欢迎来到《无名之辈》世界&#xff01;在这里&#xff0c;决战不仅需要勇气&#xff0c;更需要智慧和策略。为了让你在游戏中游刃有余&#xff0c;以下是一份全面的游戏攻略&#xff0c;助你成为战场上的无敌之王&#xff01; 一、主角战斗技巧&#xff1a; 反击属性至关重要&a…

Vue3状态管理库--Pinia

Pinia快速入门 一、什么是Pinia &#xff1f; Pinia 是 Vue 的专属的最新状态管理库 &#xff0c;是 Vuex 状态管理工具的替代品。 Pinia官网链接 提供更加简单的API &#xff08;去掉了 mutation &#xff09;提供符合组合式风格的API &#xff08;和 Vue3 新语法统一&…

2024年【低压电工】实操考试视频及低压电工考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 低压电工实操考试视频是安全生产模拟考试一点通生成的&#xff0c;低压电工证模拟考试题库是根据低压电工最新版教材汇编出低压电工仿真模拟考试。2024年【低压电工】实操考试视频及低压电工考试试题 1、【单选题】()…

【C++实验1】学生成绩信息管理系统题解

【问题描述】编写一个基于结构体得学生成绩信息管理系统。 主要功能如下&#xff1a; 1. 用结构体存放所有数据。 2. 每个功能都用函数实现。 3. 输入10个学生的学号和三门课程的成绩。 4. 计算每个学生的总分。 5. 按总分从高到低排序。 6. 加上名次一列。 7. 输出最后…

ssm婚纱摄影管理系统的设计+1.2w字论文+免费调试

项目演示视频&#xff1a; ssm婚纱摄影管理系统的设计 项目介绍: 随着现在网络的快速发展&#xff0c;网上管理系统也逐渐快速发展起来&#xff0c;网上管理模式很快融入到了许多商家的之中&#xff0c;随之就产生了“婚纱摄影网的设计”&#xff0c;这样就让婚纱摄影网的设计更…

【微服务】Nacos(注册中心)

文章目录 1.基本介绍1.概述2.Nacos下载和运行&#xff08;java8/maven3.2.x&#xff09;1.解压到没有中文路径的2.双击startup3.浏览器输入http://192.168.242.124:8848/nacos4.用户名和密码为nacos5.cmd输入netstat -anb | more查看监听端口 2.创建Nacos服务提供者 100041.项目…

springboot实战---4.常用内容小结

&#x1f388;个人主页&#xff1a;靓仔很忙i &#x1f4bb;B 站主页&#xff1a;&#x1f449;B站&#x1f448; &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;SptringBoot &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处…

【项目技术介绍篇】若依管理系统功能介绍

作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过大学刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0…

【scala】使用gradle和scala构建springboot程序

零、版本说明: springboot: 2.7.18 使用log4j2&#xff0c;不使用springboot自带的logback scala版本&#xff1a;2.11 jackson版本&#xff1a;2.16.0 一、依赖&#xff1a; buildscript {dependencies {// using spring-boot-maven-plugin as package toolclasspath("…

Scala第十三章节(作为值的函数及匿名函数、柯里化、闭包及控制抽象以及计算器案例)

章节目标 掌握作为值的函数及匿名函数的用法了解柯里化的用法掌握闭包及控制抽象的用法掌握计算器案例 1.高阶函数介绍 Scala 混合了面向对象和函数式的特性&#xff0c;在函数式编程语言中&#xff0c;函数是“头等公民”&#xff0c;它和Int、String、Class等其他 类型处于…

【华大 HC32L110】调用`printf`和串口接收中断的冲突问题解决

华大单片机 HC32L110调用printf和串口接收中断的冲突问题解决,经过查找是官方库 去使能了 串口的接收功能,记录解决问题的过程 目录 1.硬件MCU资料2. printf和串口接收中断的冲突解决3.重新封装 fputc 函数4.查找问题,发现是官方库配置有误5. 查找寄存器手册,修改寄存器配置…

智慧光伏:企业无纸化办公

随着科技的快速发展&#xff0c;光伏技术不仅成为推动绿色能源革命的重要力量&#xff0c;更在企业办公环境中扮演起引领无纸化办公的重要角色。智慧光伏不仅为企业提供了清洁、可持续的能源&#xff0c;更通过智能化的管理方式&#xff0c;推动企业向无纸化办公转型&#xff0…

MySQL三种开窗函数详细用法,图文详解

开窗函数的详细用法 第一章、开窗函数的语法1.1&#xff09;从聚合开窗函数讲起1.2&#xff09;开窗函数之取值1.3&#xff09;排名开窗函数 第一章、开窗函数的语法 开窗函数的语法为&#xff1a;over(partition by 列名1 order by 列名2 )&#xff0c;括号中的两个关键词par…

谈到视频编码标准时,实际指什么?

当在谈论一个视频编码标准时&#xff0c;实际指是什么&#xff1f;相关论文&#xff0c;还是编解码器代码&#xff0c;或者其他东西&#xff1f; 比如H.264视频编码标准&#xff0c;当论文或书上看到它时&#xff0c;通常是H.264/AVC的形式&#xff0c;如下&#xff1a; It was…

Linux:详解TCP协议(一)

文章目录 认识TCPTCP协议段格式 本篇主要总结的是TCP协议的一些字段 认识TCP TCP协议全称是传输控制协议&#xff0c;也就是说是要对于数据的传输进行一个控制 以上所示的是对于TCP协议进行数据传输的一个理解过程 全双工 至此就可以对于TCP协议是全双工的来进行理解了&…

蓝桥OJ3510 冶炼金属(暴力+二分)

冶炼金属 学习了b站Turing_Sheep的思路 一、暴力模拟 思路&#xff1a; b[i] a[i] / v b[1] a[1] / v b[2] a[2] / v .... b[n] a[n] / v 以上列举中v要满足所有的记录&#xff0c;但凡一个记录不满足&#xff0c;v就不满足题意。 从小到大列举v,设置v最大为1e6 设置一个标…

鸿蒙开发之ArkUI组件常用组件-CustomDialog/Video

CustomDialog 自定义弹窗&#xff08;CustomDialog&#xff09;可用于广告、中奖、警告、软件更新等与用户交互响应操作。我们可以通过CustomDialogController类显示自定义弹窗。 创建自定义弹窗 使用CustomDialog装饰器装饰自定义弹窗CustomDialog装饰器用于装饰自定义弹窗&a…