【2023,学点儿新Java-15】案例分享:基于Java实现餐厅点餐系统(附完整源代码)

news2024/11/18 19:47:33

前情回顾:

  • 【2023,学点儿新Java-14】携程面试题:如何看待Java是一门半编译半解释型的语言?| 咨询互联网行业 资深前辈的一些问题 | 附:为什么说ChatGPT的核心算法是…?| GPT-3.5
  • 【2023,学点儿新Java-13】阶段练习之Java面试企业真题(阿里巴巴&拼多多 等) | 常用的Java命令行操作都有哪些 | 如何解决Java的内存泄漏和内存溢出问题?
  • 【2023,学点儿新Java-12】小结:阶段性复习 | Java学习书籍推荐(小白该读哪类Java书籍?有一定基础后,再去读哪类书籍?)
  • 更多Java系列文章,可参阅博主主页哦!

 
所有的弯路都是直的,不要纠结选择的路是否对,去做才知道。

 

🎯作者主页: 追光者♂🔥

        

🌸个人简介:
 
💖[1] 计算机专业硕士研究生💖
 
🌟[2] 2022年度博客之星人工智能领域TOP4🌟
 
🏅[3] 阿里云社区特邀专家博主🏅
 
🏆[4] CSDN-人工智能领域优质创作者🏆
 
📝[5] 预期2023年10月份 · 准CSDN博客专家📝  
 

  • 无限进步,一起追光!!!

        

🍎感谢大家 点赞👍  收藏⭐   留言📝!!!

        

🌿本篇,分享一个Java基础案例——餐厅点餐系统。针对实现的每个功能给出描述并附上具体实现的源代码以及所实现的效果和测试/验证。这是一个比较适合学习完Java基础的朋友练手的小案例(更多Java知识,敬请期待!)

🕝目录

  • 🍄一、功能描述
  • 🍄二、具体实现
    • 🍑2.1 餐厅菜单初始化
    • 🍑2.2 菜单显示
    • 🍑2.3 获取用户输入
    • 🍑2.4 实现点菜功能
    • 🍑2.5 结算账单
    • 🍑2.6 查看账单
    • 🍑2.7 主程序
    • 🍑2.8 完整源代码
  • 🍄三、所实现的效果
    • 🍑3.1 初始化
    • 🍑3.2 测试
      • 💧3.2.1 无账单时:
      • 💧3.2.2 点菜
      • 💧3.2.3 Bug验证

🍄一、功能描述

本案例是一个适合Java中级学习者的小程序,涵盖了Java编程中 常用概念,同时也需要一定的面向对象设计思想。       (不适合Java初学者哈~ 需要具备一定的Java学习经历哦~)

具体而言,整个案例实现了如下功能:

  1. 餐厅菜单初始化:使用initializeMenu()方法 初始化菜单和价格列表。
  2. 菜单显示:使用displayMenu()方法显示菜单,让用户选择点餐选项。
  3. 输入获取:使用getUserInput()方法 获取用户的选择选项。
  4. 点菜功能:使用orderDish()方法进行点菜,包括输入桌号、选择菜品和将菜品加入已点菜单中。
  5. 结算账单:使用calculateBill()方法 显示已点菜品列表和总金额,将订单标记为已付款。
  6. 查看账单:使用displayBill()方法 显示已点菜品列表。
  7. 主程序:包含程序入口和循环逻辑。

🍄二、具体实现

🍑2.1 餐厅菜单初始化

// 初始化菜单
    private static void initializeMenu() {
        menu.add("鱼香肉丝");
        price.add(28.0);
        menu.add("宫保鸡丁");
        price.add(32.0);
        menu.add("酸菜鱼");
        price.add(38.0);
        menu.add("干锅牛肉");
        price.add(48.0);
        menu.add("清蒸大闸蟹");
        price.add(68.0);
    }

🍑2.2 菜单显示

  // 显示菜单
    private static void displayMenu() {
        System.out.println("欢迎光临餐厅,请您点餐:");
        for (int i = 0; i < menu.size(); i++) {
            System.out.println(i + ": " + menu.get(i) + " " + price.get(i) + "元");
        }
        System.out.println("0: 查看账单");
        System.out.println("1: 点菜");
        System.out.println("2: 结算账单");
    }

🍑2.3 获取用户输入

// 获取用户输入
    private static String getUserInput() {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入选项:");
        return scanner.nextLine();
    }

🍑2.4 实现点菜功能

// 点菜
    private static void orderDish() {
        System.out.print("请输入桌号:");
        Scanner scanner = new Scanner(System.in);
        tableNumber = scanner.nextInt();
        System.out.println("已选菜品:");
        int dishIndex;
        do {
            System.out.print("输入菜品编号(输入-1结束点菜):");
            dishIndex = scanner.nextInt();
            if (dishIndex != -1) {
                System.out.println("已点:" + menu.get(dishIndex));
                orderedList.add(dishIndex);
            }
        } while (dishIndex != -1);
    }

🍑2.5 结算账单

// 结算账单
    private static void calculateBill() {
        double total = 0.0;
        System.out.println("桌号:" + tableNumber + ",已点菜品:");
        for (int i = 0; i < orderedList.size(); i++) {
            System.out.println(menu.get(orderedList.get(i)) + " " + price.get(orderedList.get(i)) + "元");
            total += price.get(orderedList.get(i));
        }
        System.out.println("总计:" + total + "元");
        System.out.println("感谢您的光临,祝您用餐愉快!");
        isPaid = true;
    }

🍑2.6 查看账单

 // 显示账单
    private static void displayBill() {
        if (orderedList.isEmpty()) {
            System.out.println("还没有点菜!");
            return;
        }
        System.out.println("桌号:" + tableNumber + ",已点菜品:");
        for (int i = 0; i < orderedList.size(); i++) {
            System.out.println(menu.get(orderedList.get(i)) + " " + price.get(orderedList.get(i)) + "元");
        }
    }

🍑2.7 主程序

public class Restaurant {
    private static List<String> menu = new ArrayList<>(); // 菜单列表
    private static List<Double> price = new ArrayList<>(); // 菜品对应的价格列表
    private static List<Integer> orderedList = new ArrayList<>(); // 已点菜品列表
    private static int tableNumber; // 餐桌号
    private static boolean isPaid = false; // 是否已付款

    public static void main(String[] args) {
        initializeMenu(); // 初始化菜单
        while (!isPaid) {
            displayMenu(); // 显示菜单
            String input = getUserInput(); // 获取输入
            switch (input) {
                case "0":
                    displayBill(); // 显示账单
                    break;
                case "1":
                    orderDish(); // 点菜
                    break;
                case "2":
                    calculateBill(); // 结算账单
                    break;
                default:
                    System.out.println("无效输入!");
                    break;
            }
        }
    }

🍑2.8 完整源代码

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Restaurant {
    private static List<String> menu = new ArrayList<>(); // 菜单列表
    private static List<Double> price = new ArrayList<>(); // 菜品对应的价格列表
    private static List<Integer> orderedList = new ArrayList<>(); // 已点菜品列表
    private static int tableNumber; // 餐桌号
    private static boolean isPaid = false; // 是否已付款

    public static void main(String[] args) {
        initializeMenu(); // 初始化菜单
        while (!isPaid) {
            displayMenu(); // 显示菜单
            String input = getUserInput(); // 获取输入
            switch (input) {
                case "0":
                    displayBill(); // 显示账单
                    break;
                case "1":
                    orderDish(); // 点菜
                    break;
                case "2":
                    calculateBill(); // 结算账单
                    break;
                default:
                    System.out.println("无效输入!");
                    break;
            }
        }
    }

    // 初始化菜单
    private static void initializeMenu() {
        menu.add("鱼香肉丝");
        price.add(28.0);
        menu.add("宫保鸡丁");
        price.add(32.0);
        menu.add("酸菜鱼");
        price.add(38.0);
        menu.add("干锅牛肉");
        price.add(48.0);
        menu.add("清蒸大闸蟹");
        price.add(68.0);
    }

    // 显示菜单
    private static void displayMenu() {
        System.out.println("欢迎光临餐厅,请您点餐:");
        for (int i = 0; i < menu.size(); i++) {
            System.out.println(i + ": " + menu.get(i) + " " + price.get(i) + "元");
        }
        System.out.println("0: 查看账单");
        System.out.println("1: 点菜");
        System.out.println("2: 结算账单");
    }

    // 获取用户输入
    private static String getUserInput() {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入选项:");
        return scanner.nextLine();
    }

    // 点菜
    private static void orderDish() {
        System.out.print("请输入桌号:");
        Scanner scanner = new Scanner(System.in);
        tableNumber = scanner.nextInt();
        System.out.println("已选菜品:");
        int dishIndex;
        do {
            System.out.print("输入菜品编号(输入-1结束点菜):");
            dishIndex = scanner.nextInt();
            if (dishIndex != -1) {
                System.out.println("已点:" + menu.get(dishIndex));
                orderedList.add(dishIndex);
            }
        } while (dishIndex != -1);
    }

    // 结算账单
    private static void calculateBill() {
        double total = 0.0;
        System.out.println("桌号:" + tableNumber + ",已点菜品:");
        for (int i = 0; i < orderedList.size(); i++) {
            System.out.println(menu.get(orderedList.get(i)) + " " + price.get(orderedList.get(i)) + "元");
            total += price.get(orderedList.get(i));
        }
        System.out.println("总计:" + total + "元");
        System.out.println("感谢您的光临,祝您用餐愉快!");
        isPaid = true;
    }

    // 显示账单
    private static void displayBill() {
        if (orderedList.isEmpty()) {
            System.out.println("还没有点菜!");
            return;
        }
        System.out.println("桌号:" + tableNumber + ",已点菜品:");
        for (int i = 0; i < orderedList.size(); i++) {
            System.out.println(menu.get(orderedList.get(i)) + " " + price.get(orderedList.get(i)) + "元");
        }
    }
}

 

🍄三、所实现的效果

🍑3.1 初始化

可以看到如下选项:

在这里插入图片描述

🍑3.2 测试

我们可以根据提示 来输入选项进行点餐等一系列操作:

💧3.2.1 无账单时:

当我们尚未点餐,就查看账单时:即输入0,可以看到“还没有点菜!”的提示,如下图所示:

在这里插入图片描述

💧3.2.2 点菜

同样地,根据提示 正常操作即可点菜:

在这里插入图片描述

💧3.2.3 Bug验证

当然,还是存在不少的小bug,有待于进一步优化。例如:

在这里插入图片描述

 

至于优化,敬请期待咯~

大家也可以自己练习一下,总之是一个很简单的小项目!

 


 

🍒 热门专栏推荐

  • 🥇Python&AI专栏:【Python从入门到人工智能】
  • 🥈前端专栏:【前端之梦~代码之美(H5+CSS3+JS.】
  • 🥉文献精读&项目专栏:【小小的项目 (实战+案例)】
  • 🍎C语言/C++专栏:【C语言、C++ 百宝书】(实例+解析)
  • 🍏Java系列(Java基础/进阶/Spring系列/Java软件设计模式等)
  • 🌞问题解决专栏:【工具、技巧、解决办法】
  • 📝 加入Community 一起追光:追光者♂社区

 

持续创作优质好文ing…✍✍✍

 

记得一键三连哦!!!

 

求关注!求点赞!求个收藏啦!

在这里插入图片描述

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

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

相关文章

通用密钥,无需密码,在无密码元年实现Passkeys通用密钥登录(基于Django4.2/Python3.10)

毋庸讳言&#xff0c;密码是极其伟大的发明&#xff0c;但拜病毒和黑客所赐&#xff0c;一旦密码泄露&#xff0c;我们就得绞尽脑汁再想另外一个密码&#xff0c;但记忆力并不是一个靠谱的东西&#xff0c;一旦遗忘密码&#xff0c;也会造成严重的后果&#xff0c;2023年业界巨…

算法程序设计 之 模糊数字、真假银币(1/8)

内容 模糊数字、真假银币 一、目的&#xff1a; 理解并掌握枚举算法的基本思想和设计步骤。 二、内容 1模糊数字 问题描述&#xff1a;一张单据上有一个5位数的编码&#xff0c;因为保管不善&#xff0c;其百位数已经变得模糊不清。但是知道这个5位数是57和67的倍数。现…

c++Qt Creator调用 python 完整版 + 解决bug过程

文章目录 创建项目配置python环境导入Python库其他坑点Python.h 头文件报错ModuleNotFoundError: No module named encodings’ 完美解决找不到python文件 成功&#xff01; 文章首发于我的个人博客&#xff1a;欢迎大佬们来逛逛 创建项目 选择创建 qmake 项目&#xff1a; …

SciencePub学术 | 计算机类重点SCIEEI征稿中

SciencePub学术 刊源推荐: 计算机类重点SCIE&EI征稿中&#xff01;影响因子高&#xff0c;对国人友好&#xff01;信息如下&#xff0c;录满为止&#xff1a; 一、期刊概况&#xff1a; 计算机类重点SCIE&EI 【期刊简介】IF&#xff1a;8.0-8.5&#xff0c;JCR1区&am…

【新星计划回顾】第七篇学习-正则表达式-邮箱解释

&#x1f3c6;&#x1f3c6;时间过的真快&#xff0c;这是导师回顾新星计划学习的第七篇文章&#xff01; 在学习过程中&#xff0c;学员们也咨询了很多问题&#xff0c;我把一些问题整理以文章形式总结分享下。 最近这段时间非常忙&#xff0c;虽然导师首次参与新星计划活动已…

(八)矢量数据的空间分析——叠置分析②

矢量数据的空间分析——叠置分析② 目录 矢量数据的空间分析——叠置分析② 1.交集取反1.1图解1.2用法1.3操作步骤 2.图层联合2.1图解2.2用法2.3操作步骤 3.修正更新3.1图解3.2用法3.3操作步骤 1.交集取反 输入要素和更新要素中不叠置的要素或要素的各部分将被写入到输出要素类…

Android——基本控件(下)(十四)

1. 滚动视图&#xff1a;ScrollView 1.1 知识点 &#xff08;1&#xff09;掌握滚动视图的主要作用&#xff1b; &#xff08;2&#xff09;可以使用滚视图进行布局&#xff1b; 1.2 具体内容 范例&#xff1a; <ScrollView xmlns:android"http://schemas.android…

执行Windows数据恢复的有效指南!

​被删除的文件真的没有了吗&#xff1f; 在Windows上&#xff0c;删除的文件会被放在哪里&#xff1f;发生的事情告诉我们&#xff0c;这些最近和永久删除的文件可能在数据覆盖之前仍存在于你的Windows电脑上。 在删除之后&#xff0c;回收站会自动保留这些最近删…

【Mysql索引数据结构与算法】

脑图链接 一、索引 什么是索引 索引指的是数据库管理系统中一个排序的数据结构&#xff0c;以协助快速查询、更新数据库表中的数据。类似于书籍的目录&#xff0c;用于快速定位到所需内容、数据的页码位置。 优点&#xff1a;提高数据检索的效率&#xff0c;降低数据库的IO成…

TC8:UDP_FIELDS_06-10

UDP_FIELDS_06: Fields - Total Length 目的 验证DUT发送的UDP报文的Total Length字段的正确性 测试步骤 Tester:让DUT发送UDP消息,数据大小为udpUserDataSizeTester:监听在DIface-0上DUT:发送消息Tester:验证接收到的UDP消息的Total Length字段的值为udpUserDataSize+8期…

Ansys Zemax | 内窥镜物镜系统初始结构的优化提升(上)

概述 本文分为内窥镜系统简介、主要结构、系统分析、性能提升和总结五个部分&#xff0c;介绍了内窥镜系统的主要结构&#xff0c;并讨论了如何在 OpticStudio 中根据内窥镜物镜系统的初始结构进行像差分析&#xff0c;以及如何对其进行后续的优化提升。(联系我们获取文章附件…

【设计模式】SpringBoot优雅使用策略模式

文章目录 1.概述1.1.简述策略模式 2.实现方法2.1.实现思路2.2.实现代码2.3.策略拓展2.4.执行调用 3.总结 1.概述 本篇文章主要会描述SpringBoot与策略模式的结合使用&#xff0c;因为不涉及到理论部分&#xff0c;所以在阅读本篇之前&#xff0c;需要对策略模式的理论已经有了…

<C++> C++11 新的类功能

C11 新的类功能 1.默认成员函数 原来C类中&#xff0c;有6个默认成员函数&#xff1a; 构造函数析构函数拷贝构造函数拷贝赋值重载取地址重载const取地址重载 最后重要的是前4个&#xff0c;后两个用处不大。默认成员函数就是我们不写编译器会生成一个默认的。 C11 新增了两…

大家知道什么是CDN吗?对网站有什么帮助?

&#x1f482; 个人网站:【海拥】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 目录 前言什么是CDN&#xf…

【Python 随练】自由落体运动

题目&#xff1a; 一球从 100 米高度自由落下&#xff0c;每次落地后反跳回原高度的一半&#xff1b;再落下&#xff0c;求它在第 10 次落地时&#xff0c;共经过多少米&#xff1f;第 10 次反弹多高&#xff1f; 简介&#xff1a; 在本篇博客中&#xff0c;我们将解决一个物…

华为OD机试之阿里巴巴找黄金宝箱(IV)(Java源码)

阿里巴巴找黄金宝箱(IV) 题目描述 一贫如洗的樵夫阿里巴巴在去砍柴的路上&#xff0c;无意中发现了强盗集团的藏宝地&#xff0c;藏宝地有编号从0-N的箱子&#xff0c;每个箱子上面有一个数字&#xff0c;箱子排列成一个环&#xff0c;编号最大的箱子的下一个是编号为0的箱子。…

[进阶]网络通信:概述、IP地址、InetAddress

什么是网络编程&#xff1f; 可以让设备中的程序与网络上其他设备中的程序进行数据交互&#xff08;实现网络通信的&#xff09;。 Java提供的网络编程解决方案就是在java.net.*包下进行网络编程。 基本的通信架构 基本的通信架构有2种形式&#xff1a;CS架构&#xff08;Cl…

C++IO流和类型处理(11)

IO流 IO流包括 标准IO流&#xff0c;字符串流&#xff0c;文件流 标准IO流 基础使用 #include <iostream> //包括istream和ostream cin >> ----- 标准输入 cout<< ----- 标准输出 clog<< ----- 带缓冲区的标准错误 cerr<< ----- 不带缓冲…

lazada、速卖通、煤炉、eBay 、亚马逊测评环境系统:如何掌握核心养号技巧?

作为一个准备跨足测评行业的业者&#xff0c;或是一个正在考虑将电商业务转向测评服务的卖家&#xff0c;一份详尽的养号指南绝对是你不可错过的知识宝库。 跨境电商平台无疑是巨大的数据中心&#xff0c;它们不仅检测你的设备参数和IP&#xff0c;还分析你的购物习惯&#xf…

mapbox-gl 点位编辑功能

文章目录 前言方式一&#xff1a;借助 Marker添加自定义icon添加POI图层&#xff0c;绑定对应事件基于Marker交互创建自定义Marker编辑 / 创建POI 方式二&#xff1a;采用 mapbox-gl-draw 插件总结 前言 矢量在线编辑是gis常用的编辑功能&#xff0c;兴趣点&#xff08;POI&am…