java实现饭店点菜系统

本文实例为大家分享了java实现饭店点菜系统的具体代码,供大家参考,具体内容如下

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);
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java基础巩固小项目点菜系统的实现

    目录 项目简绍 所需技术 思路讲解 完整代码演示 优化 结语 项目简绍 点菜小系统,可以实现点菜,查看已经点的菜,买单查看总金额 所需技术 面向对象,集合(ArrayList) 因为项目真的很小,所需要技术很有限,真的比较简单 思路讲解 创建菜品类.属性 创建菜品列表并进行初始化 主菜单循环 对选项补充,创建所需方法 完善代码并测试 优化代码 完整代码演示 import java.util.ArrayList; import java.util.List; import java.util.Sc

  • java实现简易点菜器

    本文实例为大家分享了java实现点菜器的具体代码,供大家参考,具体内容如下 使用swing工具集 完成,花费两天的时间,没有难点使用的都是基本知识 输入桌号后,如果该桌没有人即可进行点菜 以下就总结下完成过程中遇到的问题 空指针异常  刚开始输入桌号点击确认好,一直出现空指针异常的信息,最初以为是没有进行初始化的原因,异常的原因也是指向这个,但是弄了半天发现一直弄不好,就很奇怪了,最后才发现原来错误出在if 和 else if的使用上. 最开始的代码是这样多个if 加上else,因为else 是

  • java实现饭店点菜系统

    本文实例为大家分享了java实现饭店点菜系统的具体代码,供大家参考,具体内容如下 JAVA实现饭店点菜系统 在这个暑假,我会将一些网络上比较经典的java编程练习题. 做一做,发布到博客来.是对我自己学习的监督,也是为了方便大家借鉴学习交流.大家一起共同进步. 这个点菜系统,和我之前Java课程设计中的小学生数学练习有点像.不过少了文件操作,相对比较简单. 我实现的效果 如图 最重要的 还是面向对象的思想,我们要理解并使用. 1.在点菜系统中,我们为了方便 饭店添加菜谱 ,我们要使用一个list

  • 一个简单的java学生寝室查询系统

    本文实例为大家分享了java学生寝室查询系统的具体代码,供大家参考,具体内容如下 前端部分: index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>AHPU Freshman dormitory inquiry</title> <script src="confirm.js

  • Java中SSM+Shiro系统登录验证码的实现方法

     先给大家展示下效果图: 1.验证码生成类: import java.util.Random; import java.awt.image.BufferedImage; import java.awt.Graphics; import java.awt.Font; import java.awt.Color; /** * 验证码生成器类,可生成数字.大写.小写字母及三者混合类型的验证码. 支持自定义验证码字符数量: 支持自定义验证码图片的大小: 支持自定义需排除的特殊字符: * 支持自定义干扰线

  • 基于java swing实现答题系统

    本文实例为大家分享了java swing实现答题系统的具体代码,供大家参考,具体内容如下 如上图所示,代码亲测可用,如下: import java.awt.BorderLayout; import java.awt.Color; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; im

  • java实现学生选课系统

    本文为大家分享了java实现学生选课系统的具体代码,供大家参考,具体内容如下 案例要求: 学生(学号,姓名,专业,所选课程{<3}) 老师(工号,姓名,所教课程{<3}) 课程(课程号,课程名,学分,教师,已选课学生{<30}) 选课系统代码如下: //teacher public class Teacher { private int id; private String teacherName; private Course[] courses; //构造函数 public Teac

  • Java实现简单订餐系统

    本文实例为大家分享了Java实现简单订餐系统的具体代码,供大家参考,具体内容如下 import java.util.Scanner; import java.util.*; public class OrderingMsg { public static void main(String[] args) { // 数据主体:一组订单信息 String[] names = new String[4]; // 订餐人名称 String[] dishMegs = new String[4]; // 所

  • java实现门禁系统

    本文实例为大家分享了java实现门禁系统的具体代码,供大家参考,具体内容如下 Door.java package com.handson.sys; public class Door { public final static String OPEN = "门已开启"; public final static String CLOSE = "门已关闭"; private String state = CLOSE; // 电子门状态 private boolean b

  • java实现汽车租赁系统

    本文实例为大家分享了java实现汽车租赁系统的具体代码,供大家参考,具体内容如下 //车类 public abstract class Vehicle { //车牌号 品牌 日租金 private String id; private String brand; private int perRent; public Vehicle(){} //Vehicle的带参构造方法 public Vehicle(String id, String brand, int perRent) { this.i

  • 基于C语言实现点菜系统

    本文实例为大家分享了C语言点菜系统的具体代码,供大家参考,具体内容如下 用C语言编写的简单的餐厅点菜系统,操作简单,代码不多,菜单可以自己更改,价格也是 #include<stdio.h> #include<stdlib.h> #include<conio.h> #include"windows.h" struct cai /*cai结构体 实现对菜品 已点份数.名称.原材料 的记录*/ { int fenshu; char name[50]; in

  • 餐馆点菜系统C语言源代码

    餐馆点菜系统c语言的源代码,一些封装的函数,对链表的操作,还有文件的存取,供大家参考,具体内容如下 #include "public.h" struct NODE *myhead; struct NODE *orderhead; struct NODE *ashead; char waiter_ID[4+1]; /*******************************设置输入框颜色******************************************* 名称:设置

随机推荐