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

news/2025/1/11 10:13:59/

前情回顾:

  • 【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.ppmy.cn/news/498245.html

相关文章

jQuery带背景切换登录注册表单

jQuery带背景切换登录注册表单 原始HTMLCSSJS页面设计,这是一个不错的登录网页制作&#xff0c;画面精明&#xff0c;非常适合初学者学习使用。 作品介绍 1.网页作品简介方面 &#xff1a;jQuery带背景切换登录注册表单, 文章页支持手机PC响应式布局。 2.网页作品编辑方面&…

火影抽卡模拟器1.0.1

修复了以下BUG&#xff1a; 1.抽卡概率过高 2.抽卡意外中断 增添以下功能&#xff1a; 1.增添文字颜色 2.增添统计系统 话不多说&#xff0c;上代码&#xff01; #include<bits/stdc.h> #include<windows.h> #include<stdlib.h> using namespace std;…

我用Axure制作了一款火影小游戏 | PM老猫

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

火影 - 雏田

这个柔弱的小女生给我的心灵带来了太多的震撼。在此收录一些让我感动的片段 我觉得火影很成功&#xff0c;其中之一是情感&#xff0c;其中之二是音乐。 火影第47集&#xff0c;雏田与宁次交手&#xff0c;下面是描写她心理的一段话&#xff1a;“我一直在看着&#xff0c;多少…

GaussDB整体性能慢分析

目录 问题描述问题现象告警业务影响原因分析分析步骤分析定位方法步骤一步骤二步骤三步骤四CPU满I/O满或者I/O异常内存满网络异常 步骤五并发问题数据库配置问题异常等待事件长时间性能下降短时性能抖动不优SQL 问题描述 整体性能慢。不满足客户作业对时延要求或者不满足客户预…

火影

即使一招失败也坚信自己能赢 继而考虑下一招 自信的力量会成为改变命运的力量

CSS背景相关(background-)

目录&#xff1a; (1)背景图片及平铺 (2)背景位置(position) (3)背景附着 (4)背景简写 (5)背景透明(CSS3) (6)背景缩放(CSS3) (7)多背景(CSS3) (8)凹凸文字 (9)王者荣耀导航栏小案例 (1)背景图片及平铺 背景颜色&#xff1a;background-color背景图片&#xff1a;background-…

web前端开发教程:函数是什么

在火影的世界中存在忍术&#xff0c;忍术是把强大的能量集中在一起以各种各样不同的形式发射出来。怎样使用各种各样的忍术那?通过结印。 好&#xff0c;我们提取一些火影忍者中的关键信息。 1.火影忍者的故事背景有忍术存在&#xff0c;忍术什么样是由忍术先祖发明出来的。…