JAVA实现饭店点菜系统

在这个暑假,我会将一些 网络上比较经典的 java 编程练习题。 做一做,发布到 博客来。是对我自己学习的监督,也是为了方便 大家 借鉴学习交流。大家一起共同进步。

这个点菜系统,和我之前Java课程设计中的 小学生数学练习 有点像。不过少了文件操作,相对比较简单。

我实现的效果 如图

最重要的 还是面向对象的思想,我们要理解并使用。

  1. 在点菜系统中,我们为了方便 饭店添加菜谱 ,我们要使用一个list 集合 ,可以改变长度大小。
  2. 每一个 菜品 都是一个对象 我们要封装起来,包括 三个属性 : 编号,菜名 ,价格
  3. 对点菜的具体需求 ,我们要 写 每一个 静态方法。在main 方法中, 按照客户点菜的过程来设计流程。

看到了效果图 。我们直接贴代码, 在代码中解释 。

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/*** 太原理工大学---软件学院---李同学* java实现 点菜系统* 欢迎大家一起交流。评论或者私信。*/public class menu {//声明两个集合,第一个用来保存 饭店菜单,第二个用来保存 客户所点菜单static List<menu> dishList = new ArrayList<>();static List<menu> personList = new ArrayList<>();int id;String name;double price;//构造方法,每一个菜 都是一个对象public menu(int id, String name, double price) {this.id = id;this.name = name;this.price = price;}public static void main(String[] args) {//声明对象  本饭店只会五个菜。O(∩_∩)O哈哈~//第一种声明方法,并添加到饭店菜单中。menu dish1 = new menu(1, "鱼香肉丝", 28.0);dishList.add(dish1);menu dish2 = new menu(2, "炖王八", 58.0);dishList.add(dish2);menu dish3 = new menu(3, "家常凉菜", 18.0);dishList.add(dish3);//第二种声明方法   这两种方法 大家都要学会dishList.add(new menu(4,"山西过油肉",38.0));dishList.add(new menu(5,"西湖牛肉羹",36.0));Scanner sc = new Scanner(System.in);/*** 接下来就是 点菜系统的核心代码了。有点复杂,大家慢慢理解。* 我尽量注释写全* 我们要了解 点菜需求 : 1. 饭店有哪些菜  2. 客户点菜 点菜完毕*  重新展示饭店服务 供客户再次选择 3.客户点了哪些菜 4.客户退菜 5. 结账* 首先是一个 while(true) 的 “死循环”  吗,每执行一次 就输出一次 饭店服务 number 方法* 第二 客户选择 服务  sc.nextInt(); 客户输入的数字使用switch 进行区分* 进入 switch 后, 根据客户的要求,执行不同的 case * 在执行 case 1  时 也就进入了点菜环节 * 再次出现一个 while(true) 先将饭店的五个菜 展示给客户。等待客户点菜 于是 sc.nextInt();* 不同编号,对应不同的菜品,对应集合。 将客户选择的菜品,保存在personList 集合中* 注意到:在showDish方法中,有一个 “按 0 返回上一级 ” 实现代码* 就是 case 1 中的 if 条件语句  :客户选择 0 即为结束点菜 重新返回饭店服务* 剩余的 case 2  3   4  应该比较好理解。 不懂可以私信我哦!* 还有一个小技巧就是 case 3  中 没有使用break 而是使用了 return 原因是 : break 只是会天厨switch 循环,* 而在结账以后,我们需要结束这个点菜系统 使用 return 就会直接 这个程序 。*/while (true) {number();int num = sc.nextInt();switch (num) {case 1:while (true) {showDish();int id = sc.nextInt();if (id == 0) {break;} else {menu dish = dishList.get(id - 1);System.out.println("亲,您点了:" + dish.name + " 菜");personList.add(dish);}}case 2:showOrder();break;case 3:paying();return;case 4 :System.out.println("输入您要退掉菜品的编号");int id = sc.nextInt();exitDish(id);break;}}}// 展示主菜单方法。public static void number() {System.out.println("欢迎光临小帅菜馆!");System.out.println("----主菜单----");System.out.println("菜单 ---> 1");System.out.println("点菜 ---> 2");System.out.println("结账 ---> 3");System.out.println("退菜 ---> 4");System.out.println("---根据编号选择服务---");}//展示饭店菜单方法public static void showDish() {System.out.println("----请您点菜----");//遍历集合,将之前声明的对象集合 全部展示到控制台for (int i = 0; i < dishList.size(); i++) {menu dish = dishList.get(i);System.out.println(dish.id + "  " + dish.name + "   " + dish.price + "元");}System.out.println("---根据序号点菜,按 0 返回上一级---");}//展示客户已点菜单public static void showOrder() {System.out.println("----您已点菜品----");//注释掉的这个方法,不适合使用退菜操作。因为 每一个菜品前面的id 值不是真正的集合次序/*for (menu dish : personList) {System.out.println(dish.id + "  " + dish.name + "   " + dish.price + "元");}*///为了方便客户能够正确的选择菜品编号,我们采用 1  2 3 4 的顺序输出已点菜品  for(int i = 0; i < personList.size();i++){ System.out.println( (i+1) + "    " + personList.get(i).name + "   "  + personList.get(i).price + "元");}}// 结账 遍历 personList 集合的 price 累加即可public static void paying() {double total = 0f;System.out.println("----正在结账,请稍等!----");// 另一种遍历集合的方法。大家学习哦for (menu dish : personList) {total += dish.price;}System.out.println("您共消费:" + total + "元");}//退菜操作  使用集合的 remove 方法。 采用有参数的方法。先告诉客户要退掉的菜品,再执行remove操作,这两句代码不能颠倒public static void exitDish(int i){System.out.println("您已退掉:" + personList.get(i-1).name + "  " + personList.get(i-1).price + "元");personList.remove(i-1);}
}

JAVA实现饭店点菜系统详解相关推荐

  1. java实现标准化考试系统详解(四)-----初始化操作实现

    (一)初始化操作实现 如上图所示当管理员需要更改适用工程.试题数量.考试时间时直接在文本中更改就好我们只需要每次在用户打开程序时初始化这些参数就可以 1.初始化试题模型,这里需要实现随机抽题,方法是用 ...

  2. java中的io系统详解

    相关读书笔记.心得文章列表 Java 流在处理上分为字符流和字节流.字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符.字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字 ...

  3. java中的io系统详解(转)

    Java 流在处理上分为字符流和字节流.字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符.字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组. Java 内用 U ...

  4. java 第三方库common系统详解

    IT技术员最讨厌的一件事应该是重复造轮子,我就直接引用大神的文章了,转载也为了以后好找: http://zhoualine.iteye.com/blog/1770014 如何稍微注意平常的库,会发现很 ...

  5. JAVA课设作业-实现饭店点菜系统源码

    JAVA实现饭店点菜系统详解-增强健壮性 原文: JAVA实现饭店点菜系统详解. 本文在上文的基础上增强了代码的健壮性和其他一些修改.如有bug还请各位积极指正,共同成长! 话不多说,码来: pack ...

  6. java IO流进阶 模拟上传头像系统详解

    目录 一.前言: 二.思路: PS:直接看代码中的注释也可以. ①分析: ②总结: 三.代码: ①准备工作: ②代码演示: ③运行效果: 四.撒❀: 一.前言: 这篇文章是对之前java IO流基础 ...

  7. 《Java和Android开发实战详解》——1.2节Java基础知识

    本节书摘来自异步社区<Java和Android开发实战详解>一书中的第1章,第1.2节Java基础知识,作者 陈会安,更多章节内容可以访问云栖社区"异步社区"公众号查看 ...

  8. Java多线程之线程池详解

    Java多线程之线程池详解 目录: 线程池使用及优势 线程池3个常用方式 线程池7大参数深入介绍 线程池底层工作原理 1. 线程池使用及优势 线程池做的工作主要是控制运行的线程的数量,处理过程中将任务 ...

  9. 使用Java操作文本文件的方法详解

    使用Java操作文本文件的方法详解 摘要: 最初java是不支持对文本文件的处理的,为了弥补这个缺憾而引入了Reader和Writer两个类 最初java是不支持对文本文件的处理的,为了弥补这个缺憾而 ...

  10. [java] 虚拟机(JVM)底层结构详解[转]

    [java] 虚拟机(JVM)底层结构详解[转] 本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 在以前的博客里面,我们介绍了在java领 ...

最新文章

  1. 给大家推荐8个SpringBoot精选项目
  2. HNUSTOJ 1601:名字缩写
  3. centos6.4修改网卡名
  4. Android关机流程解析
  5. 全国python工程师有多少_2019年Python工程师的平均薪资是多少?
  6. Windows 7 镜像下载汇总
  7. 汇编语言ADDC可以把C清零吗,常用汇编语言指令及解释
  8. 动作捕捉协助中国电力科学研究院建立边云协同电力自主巡检系统
  9. ADS EM MODEL 问题
  10. python中import math用法_import的使用
  11. torch.optim.lr_scheduler源码和cosine学习率策略学习
  12. 自动机器学习-auto-sklearn
  13. android gms认证之run host test,Android GMS认证项总结
  14. 如何给一小段视频添加音乐
  15. Presto常用语句整理
  16. nginx光速入门到进阶
  17. C#学习笔记(五)CSharp操作符-基本操作符(一)
  18. 【每日一练】day(7)
  19. [LOJ3086] [GXOI2019] 逼死强迫症
  20. SLA--如何学习英语理论篇

热门文章

  1. 一招解决微博视频不能下载的问题
  2. C++游戏编程-走迷宫详解
  3. EasyBCD安装双硬盘的windows+Ubuntu16.04双系统,那些年我们一起踩过的那些坑
  4. 留给19371213看的
  5. 恭喜腾佑当选“河南省企业上云推进联盟”理事单位!
  6. JAVA设计模式--代理模式(动态)(一)
  7. 【Android】Instant Run原理解析
  8. 笔记本辐射与日常电器辐射对比
  9. 【金融项目】尚融宝项目(二)
  10. 基于Python实现的死链接自动化检测工具