【C++面向对象】C++餐厅点餐管理系统【独一无二】_基于c++的网上订餐系统-程序员宅基地

技术标签: c++  java  数据库  

请添加图片描述


博__主:米码收割机
技__能:C++/Python语言
公众号:测试开发自动化
荣__誉:阿里云博客专家博主、51CTO技术博主
专__注:专注主流机器人、人工智能等相关领域的开发、测试技术。


C++实现餐厅点餐管理系统(控制台程序)



1. 设计要求

使用c++编写一个餐厅点餐管理系统,主要功能如下:


1.1 主菜单

  1. 客户点餐功能
  2. 管理后台功能
  3. 退出系统功能

2.2 管理后台功能

  1. 添加菜品信息(名称、价格、数量)
  2. 删除菜品信息
  3. 查看菜品信息
  4. 修改菜品信息
  5. 客户订单信息
  6. 返回主菜单

2.3 客户点餐功能

  1. 显示菜品信息
  2. 提交菜品订单

2、运行结果


2.1 主菜单

源码关注【测试开发自动化】公众号,回复“餐厅点餐管理系统”获取。

在这里插入图片描述


2.2 添加菜品

在这里插入图片描述


2.3 查看菜品

源码关注【测试开发自动化】公众号,回复“餐厅点餐管理系统”获取。

在这里插入图片描述


2.4 删除菜品

在这里插入图片描述


2.5 修改菜品

在这里插入图片描述


2.6 返回主菜单

在这里插入图片描述


2.7 客户点餐

在这里插入图片描述


2.8 订单显示

源码关注【测试开发自动化】公众号,回复“餐厅点餐管理系统”获取。

在这里插入图片描述


3、代码设计

代码实现了一个简单的餐厅管理系统,包括客户点餐和管理后台两个模式。


3.1 添加菜品

addDish(): 用于向菜单中添加菜品。函数会提示用户输入菜品名称、价格和数量,并将菜品信息添加到menu(一个std::map对象)中。

void addDish() {
    
    std::string name;
    double price;
    int quantity;

    std::cout << "输入菜品名称: ";
    std::cin >> name;
    std::cout << "输入菜品价格: ";
    std::cin >> price;
    std::cout << "输入菜品数量: ";
    std::cin >> quantity;

    menu[name] = {
     name, price, quantity };
    std::cout << "菜品添加成功!" << std::endl;
}

3.2 删除菜品

deleteDish(): 用于从菜单中删除指定菜品。函数会提示用户输入要删除的菜品名称,然后在menu中查找并删除该菜品。

void deleteDish() {
    
    std::string name;
    std::cout << "输入要删除的菜品名称: ";
    std::cin >> name;

    menu.erase(name);
    std::cout << "菜品删除成功!" << std::endl;

}

3.3 显示菜品

viewDishes(): 显示当前菜单中的所有菜品及其价格和数量。遍历menu,输出每个菜品的信息。

void viewDishes() {
    
    for (auto& dish : menu) {
    
        std::cout << dish.second.name << " - ¥" << dish.second.price << " - 数量: " << dish.second.quantity << std::endl;
    }
}

3.4 主函数

main(): 程序的入口函数。根据用户选择的模式执行相应的操作。如果选择模式2(管理后台),则进入一个循环,允许用户选择添加菜品、删除菜品、查看菜品、修改菜品或查看订单等操作。如果选择模式1(客户点餐),则调用placeOrder()函数来进行点餐。如果选择模式3(退出),则程序结束。

int main() {
    
    int mode;

    while (true) {
    
        std::cout << "***********************************************" << std::endl;
        std::cout << "              欢迎使用餐厅管理系统" << std::endl;
        std::cout << "***********************************************" << std::endl;
        std::cout << "选择模式: \n1. 客户点餐 \n2. 管理后台 \n3. 退出" << std::endl;
        std::cout << "***********************************************" << std::endl;
        std::cout << "请输入模式:";

        std::cin >> mode;
        if (mode == 2) {
    
            int choice;
            while (true) {
    
                std::cout << "-----------------------------------------------" << std::endl;
                std::cout << "1. 添加菜品\n2. 删除菜品\n3. 查看菜品\n4. 修改菜品\n5. 查看订单\n6. 返回主菜单" << std::endl;
                std::cout << "-----------------------------------------------" << std::endl;

                std::cin >> choice;

                switch (choice) {
    
                case 1:
                    addDish();
                    break;
                case 2:
                    deleteDish();
                    break;
                case 3:
                    viewDishes();
                    break;
                case 4:
                    modifyDish();
                    break;
                case 5:
                    viewOrders();
                    break;
                case 6:
                    goto mainMenu;
                default:
                    std::cout << "无效选择." << std::endl;
                    break;
                }
            }
        }
        else if (mode == 1) {
    
            static int orderNumber = 1;
            placeOrder(orderNumber);
            orderNumber++;
        }
        else if (mode == 3) {
    
            return 0;
        }
        else {
    
            std::cout << "无效模式." << std::endl;
        }

    mainMenu:;
    }

    return 0;
}


四、总结

这段代码实现了一个餐厅管理系统,具有客户点餐和管理后台两种模式。通过使用std::map容器存储菜单和订单信息,代码实现了添加菜品、删除菜品、查看菜品、修改菜品、查看订单和客户点餐等功能。
代码的设计思路主要采用了面向过程的编程范式,将不同的功能封装为独立的函数,实现了模块化的设计。通过主循环和条件判断,代码能够根据用户的选择执行相应的操作,并通过输入和输出处理用户的数据和系统的信息。
尽管代码实现了基本的功能,但它仍然可以进一步改进。例如,可以采用面向对象的设计思路,引入类来表示菜品和订单,并使用更复杂的数据结构和算法来提高系统的性能和灵活性。此外,代码还可以考虑引入持久化数据存储的机制,将菜单和订单信息保存到文件或数据库中。

源码关注【测试开发自动化】公众号,回复“餐厅点餐管理系统”获取。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44244190/article/details/131574159

智能推荐

如何利用Packet Capture技术免费进入付费直播间-程序员宅基地

文章浏览阅读4.8k次,点赞3次,收藏17次。首先,查看数据包中的登录请求,找到登录所需的用户名和密码。通过分析直播平台与主播之间的数据包交互,我们可以找到直播数据传输的关键信息,从而模拟登录过程,实现免费观看付费直播间的目的。Packet Capture(数据包捕获)是一种网络诊断工具,可以捕获在网络上传输的数据包,以便分析和调试网络问题。通过分析捕获到的数据包,我们可以了解网络协议的通信过程,从而找到免费进入付费直播间的方法。此时,你可以访问任何网络资源,例如一个付费直播间的网址,以便捕获与该直播间相关的数据包。选择一个合适的软件并下载安装。_packet capture

linux 中/proc 详解-程序员宅基地

文章浏览阅读97次。proc 文件系统在Linux中有额外的机制可以为内核和内核模块将信息发送给进程-- /proc 文件系统。最初设计的目的是允许更方便的对进程信息进行访问(因此得名),现在它被每一个有有趣的东西报告的内核使用,例如/proc/modules 有模块的列表/proc/meminfo 有内存使用的统计表。  使用proc 文件系统的方法和使用设备驱动程序非常相似--创建一个/proc 文件需要的所..._(5条消息) 【linux】proc详解_zclinux_的博客-csdn博客_linux proc

路漫漫其修远兮:js的成长经历(十七)—— vue基础(一)-程序员宅基地

文章浏览阅读241次。目录什么是Vue.js为什么要学习流行框架框架和库的区别Node(后端)中的 MVC 与 前端中的 MVVM 之间的区别Vue.js 基本代码 和 MVVM 之间的对应关系Vue之 - 基本的代码结构`Vue指令之`插值表达式`、`v-cloak``v-text`和`v-html`Vue指令之`v-bind`的三种用法Vue指令之`v-on`和`跑马灯效果`跑马灯效果Vue指令之`v-on的缩写...

node.js云学堂微信小程序学习系统的设计与实现毕业设计源码011735_基于微信平台的《javascript程序设计》学习系统的设计与实现-程序员宅基地

文章浏览阅读246次。用户:免费好课、直播公开课、课程信息推荐、云学堂资讯、精选好课管理员:首页、用户管理、课程信息管理、精选好课管理、直播公开管理、免费分类管理、云学堂资讯管理_基于微信平台的《javascript程序设计》学习系统的设计与实现

【解决Anaconda3安装问题】conda --version 不是内部命令、没有script文件_conda --version没反应-程序员宅基地

文章浏览阅读9.7k次,点赞11次,收藏9次。这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Ma..._conda --version没反应

flex绑定数据-程序员宅基地

文章浏览阅读664次。在使用Flex开发的过程中,数据绑定是一定会遇到的,这种技术简单,又有点好玩,重要的是它让开发变得简单了。 在Flex中,数据绑定的方式有这么三种:直接在“{}”中填写绑定变量 使用标签绑定 使用ActionScript中的BindingUtils类绑定 示例1中的绑定方式即是第一种绑定方式,在“{}”中直接填写inputUnit.text,表

随便推点

mysql如何进行分区_mysql如何进行分区_mysql分区有哪些方法-程序员宅基地

文章浏览阅读3.4k次。MySQL 可应用于多种语言,包括 PERL, C, C++, JAVA 和 PHP。 在这些语言中,MySQL 在 PHP 的 web 开发中是应用最广泛。大家知道mysql如何分区的吗?下面由学习啦小编为大家整理的mysql分区的方法,希望大家喜欢!mysql分区的方法一、概述当 MySQL的总记录数超过了100万后,会出现性能的大幅度下降吗?答案是肯定的,但是,性能下降>的比率不一而同..._mysql 分区方式

事件处理系统的概念模型-程序员宅基地

文章浏览阅读580次。简介很多领域中的企业过去总是以一种事件驱动的方式经营,且必须每天处理不断增加的业务事件和交易。事件处理(Event Processing,EP)是一个新兴的领域,主要受到企业对这种大量业务和 IT 事件进行快速响应的需求所推动。它通过更有效地处理具有企业意义的事件来满足支持决策制定周期的需求,在面向服务架构(Service Oriented Architectures,SO..._event processing network

Thinkjs——采用nodemailer发送邮件_thinkjs服务端发送邮件-程序员宅基地

文章浏览阅读863次。介绍 ThinkJS 是一款面向未来开发的 Node.js 框架,整合了大量的项目最佳实践,让企业级开发变得如此简单、高效。从 3.0 开始,框架底层基于 Koa 2.x 实现,兼容 Koa 的所有功能。 官方文档传送门点这里步骤: 1.创建一个thinkjs项目,执行 thinkjs new [project_name] 来创建项目,如: 2.安装如下包:..._thinkjs服务端发送邮件

操作系统 - 进程管理_实现生产者—消费者问题基于消息队列-程序员宅基地

文章浏览阅读385次。目录进程与线程1. 进程2. 线程3. 区别进程状态的切换进程调度算法1. 批处理系统1.1 先来先服务 first-come first-serverd(FCFS)1.2 短作业优先 shortest job first(SJF)1.3 最短剩余时间优先 shortest remaining time next(SRTN)1.4 最高相应比优先..._实现生产者—消费者问题基于消息队列

C语言实验4:指针-程序员宅基地

文章浏览阅读1.5k次,点赞39次,收藏18次。指针是一个变量,其值是另一个变量的地址。通过指针,可以直接访问存储在该地址上的数据。

SQL 数据库 学习 024 查询-07 order by 的用法 --- 以某个字段排序_sql使数据按字段排序-程序员宅基地

文章浏览阅读1.3w次。我的电脑系统:Windows 10 64位SQL Server 软件版本: SQL Server 2014 Express 本篇博客里面使用了 scott 库,如何你现在还没有添加这个库到你的服务器里面,请在查看本篇博客前,访问这篇博文来在你的服务器里面附加scott库。order by — 以某个字段排序例子:select * from emp order by sal; --默认_sql使数据按字段排序