Java实例学习1 小型点餐系统

Posted 临风而眠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java实例学习1 小型点餐系统相关的知识,希望对你有一定的参考价值。

Java实例学习1 小型点餐系统

一.题目

二.解决步骤

项目结构分析

先自己写…(发现目前学的是真的拉)

写出来就这…呜呜呜😭

错误一堆,逻辑不清…呜呜呜

  • 父类

  • 子类

    • 培根披萨

    • 水果披萨

  • 打算用于输出的函数

呜呜新建个模块重写跟着敲

  • 新建模块

  • 新建包和父类

1.父类Pizza类
  • 先写好属性

    package com.practice.test001;
    
    /**
     * @Auther: v
     * 父类:披萨类
     */
    public class Pizza {
        //属性
        private String name; //名称
        private int size; //大小
        private int price; //价格
    
        //方法
    
    
        //构造器
        
    }
    
  • 方法

    教程里面那个快捷键我去查了一下:IntelliJ IDEA如何生成构造器及快捷键

    • 每个属性都要setter getter方法,用快捷键alt + insert

    • 点击之后,全部选中

    • 点击OK,就自动生成了🐮!

    • 加一个展示Pizza信息的方法

          public String showPizza(){
              return "匹萨的名字是 :"+name+",匹萨的大小是 :"+size+",匹萨的价格是 :"+price;
          }
      
      
  • 添加构造器

    • 还是用快捷键alt+insert

      • 无参构造器

      • 含三个参数的构造器

  • 父类完整代码

    package com.practice.test001;
    
    /**
     * @Auther: v
     * 父类:披萨类
     */
    public class Pizza {
        //属性
        private String name; //名称
        private int size; //大小
        private int price; //价格
    
        //方法
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getSize() {
            return size;
        }
    
        public void setSize(int size) {
            this.size = size;
        }
    
        public int getPrice() {
            return price;
        }
    
        public void setPrice(int price) {
            this.price = price;
        }
    
        public String showPizza() {
            return "匹萨的名字是 :" + name + ",匹萨的大小是 :" + size + ",匹萨的价格是 :" + price;
        }
    
    
        //构造器
    
        public Pizza() {
        }
    
        public Pizza(String name, int size, int price) {
            this.name = name;
            this.size = size;
            this.price = price;
        }
    
    }
    
2.子类
  • 水果匹萨

    可以用快捷键🔥速生成

    快捷键:alt+insert或者选中属性之后alt+enter

    package com.practice.test001;
    
    /**
     * 子类:水果匹萨
     */
    public class FruitPizza extends Pizza {
        //属性
        private String ingredient;//配料
    
        //方法
        //可以用快捷键生成setter方法和getter方法
        public String getIngredient() {
            return ingredient;
        }
    
        public void setIngredient(String ingredient){
            this.ingredient = ingredient;
        }
    
        //构造器
        //可用快捷键
    
    
        public FruitPizza() {
        }
    
        public FruitPizza(String name, int size, int price, String ingredient) {
            super(name, size, price);
            this.ingredient = ingredient;
        }
    
    }
    
  • 培根匹萨

    package com.practice.test001;
    
    public class BaconPizza extends Pizza {
        //属性
        private int weight; //克数
    
        //方法
        public int getWeight() {
            return weight;
        }
    
        public void setWeight(int weight) {
            this.weight = weight;
        }
    
    
        //构造器
    
        public BaconPizza() {
        }
    
        public BaconPizza(String name, int size, int price, int weight) {
            super(name, size, price);
            this.weight = weight;
        }
    
    }
    
  • 目前层次结构

3.业务逻辑
  • 添加一个测试类

    package com.practice.test001;
    
    import java.util.Scanner;
    
    public class Test {
        public static void main(String[] args) {
            //选择购买匹萨
            Scanner scan = new Scanner(System.in);
            System.out.println("请选择你想要购买的匹萨类型(1.培根披萨 2.水果匹萨)");
            int choice = scan.nextInt();
            switch (choice) {
                case 1: {
                    System.out.print("请输入培根的克数:");
                    int weight = scan.nextInt();
                    System.out.print("请输入匹萨的大小:");
                    int size = scan.nextInt();
                    System.out.print("请输入披萨的价格:");
                    int price = scan.nextInt();
                }
    
                break;//break放在里面也可,放外面更清晰
                case 2: {
                    System.out.print("请输入你想要加入的水果:");
                    String ingredient = scan.next();
                    System.out.print("请输入匹萨的大小:");
                    int size = scan.nextInt();
                    System.out.print("请输入披萨的价格:");
                    int price = scan.nextInt();
                }
    
                break;
            }
        }
    }
    
  • 先来测试一下子

    可以成功录入信息!

小技巧:代码块的使用

注意case后面要用英文格式的冒号

  • 可以划定作用域,这样子size和price就没问题了

封装对象
  • 把输入的东西作为参数传入构造器,再调用showPizza()方法

    package com.practice.test001;
    
    import java.util.Scanner;
    
    public class Test {
        public static void main(String[] args) {
            //选择购买匹萨
            Scanner scan = new Scanner(System.in);
            System.out.println("请选择你想要购买的匹萨类型(1.培根披萨 2.水果匹萨)");
            int choice = scan.nextInt();
            switch (choice) {
                case 1: {
                    System.out.print("请输入培根的克数:");
                    int weight = scan.nextInt();
                    System.out.print("请输入匹萨的大小:");
                    int size = scan.nextInt();
                    System.out.print("请输入披萨的价格:");
                    int price = scan.nextInt();
                    BaconPizza bp = new BaconPizza("培根披萨",size,price,weight);
                    System.out.println(bp.showPizza());
                    //bp.showPizza()返回的是字符串
    
                }
    
                break;//break放在里面也可,放外面更清晰
                case 2: {
                    System.out.print("请输入你想要加入的水果:");
                    String ingredient = scan.next();
                    System.out.print("请输入匹萨的大小:");
                    int size = scan.nextInt();
                    System.out.print("请输入披萨的价格:");
                    int price = scan.nextInt();
                    FruitPizza fp = new FruitPizza("水果披萨",size,price,ingredient);
                    System.out.println(fp.showPizza());
                }
    
                break;
            }
        }
    }
    
    
  • 测试一下

在子类中重写showPizza()方法

因为两个子类的输出有点不同,所以重写一下

  • 培根匹萨

        //重写父类showPizza()方法
        @Override
        public String showPizza(){
            //调用前面父类的
            return super.showPizza()+"\\n培根的克数是:"+weight+"克";
        }
    
  • 水果匹萨

        //重写父类showPizza()方法
        @Override
        public String showPizza(){
            //调用前面父类的
            return super.showPizza()+"\\n加入的配料是:"+ingredient+".";
        }
    
  • OK了

4.优化业务逻辑,增加工厂类
  • 前面Test类里面

  • 选择和创建对象其实可以划分到两块

  • 添加PizzaStore类

    package com.practice.test001;
    
    import java.util.Scanner;
    
    public class PizzaStore {
        public static Pizza getPizza(int choice) {
            Scanner scan = new Scanner(System.in);
            Pizza p = null;
            switch (choice) {
                case 1: {
                    System.out.print("请输入培根的克数:");
                    int weight = scan.nextInt();
                    System.out.print("请输入匹萨的大小:");
                    int size = scan.nextInt();
                    System.out.print("请输入披萨的价格:");
                    int price = scan.nextInt();
                    BaconPizza bp = new BaconPizza("培根披萨", size, price, weight);
    //                System.out.println(bp.showPizza());
                    //bp.showPizza()返回的是字符串
                    p = bp;
                }
    
                break;//break放在里面也可,放外面更清晰
                case 2: {
                    System.out.print("请输入你想要加入的水果:");
                    String ingredient = scan.next();
                    System.out.print("请输入匹萨的大小:");
                    int size = scan.nextInt();
                    System.out.print("请输入披萨的价格:");
                    int price = scan.nextInt();
                    FruitPizza fp = new FruitPizza("水果披萨", size, price, ingredient);
                    p = fp;
    //                System.out.println(fp.showPizza());
                }
    
                break;
            }
            return p;
        }
    }
    
    
  • 修改Test类

    此时Test类中的main方法更加清晰了

    package com.practice.test001;
    
    import java.util.Scanner;
    
    public class Test {
        public static void main(String[] args) {
            //选择购买匹萨
            Scanner scan = new Scanner(System.in);
            System.out.println("请选择你想要购买的匹萨类型(1.培根披萨 2.水果匹萨)");
            int choice = scan.nextInt();
            //通过工厂获取披萨
            Pizza pizza = PizzaStore.getPizza(choice);
            System.out.println(pizza.showPizza());
        }
    }
    

三.完整代码

  • Pizza类

    package com.practice.test001;
    
    /**
     * @Auther: v
     * 父类:披萨类
     */
    public class Pizza {
        //属性
        private String name; //名称
        private int size; //大小
        private int price; //价格
    
        //方法
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getSize() {
            return size;
        }
    
        public void setSize(int size) {
            this.size = size;
        }
    
        public int getPrice() {
            return price;
        }
    
        public void setPrice(int price) {
            this.price = price;
        }
    
        public String showPizza() {
            return "匹萨的名字是 :" + name + ",\\n匹萨的大小是 :" + size + "寸,\\n匹萨的价格是 :" + price+"元";
        }
    
    
        //构造器
    
        public Pizza() {
        }
    
        public Pizza(String name, int size, int price) {
            this.name = name;
            this.size = size;
            this.price = price;
        }
    
    }
    
  • BaconPizza子类

    package com.practice.test001;
    
    public class BaconPizza extends Pizza {
        //属性
        private int weight; //克数
    
        //方法
        public int getWeight() {
            return weight;
        }
    
        public void setWeight(int weight) {
            this.weight = weight;
        }
    
        //重写父类showPizza()方法
        @Override
        public String showPizza(){
            //调用前面父类的
            return super.showPizza()+"\\n培根的克数是:"+weight+"克";
        }
    
    
        //构造器
    
        public BaconPizza() {
        }
    
        public BaconPizza(String name, int size, int price, int weight) {
            super(name, size, price);
            this.weight = weight;
        }
    
    }
    
  • FruitPizza子类

    package com.practice.test001;
    
    /**
     * 子类:水果匹萨
     */
    public class FruitPizza extends Pizza {
        //属性
        private String ingredient;//配料
    
        //方法
        //可以用快捷键生成setter方法和getter方法
        public String getIngredient() {
            return ingredient;
        }
    
        public void setIngredient(String ingredient){
            this.ingredient = ingredient;
        }
    
        //重写父类showPizza()方法
        @Override
        public String showPizza(){
            //调用前面父类的
            return super.showPizza计算机课程设计-基于javaweb的在线点餐系统-线上点餐系统代码java外卖点餐系统代码

    计算机毕业设计-基于javaweb的外卖点餐系统-基于jsp的外卖系统源代码-校园外卖点餐系统java-骑手送外卖商家统计项目代码

    java Spring Boot企业微信点餐系统

    一个简单C语言点餐系统的学习心得

    Java外卖点餐系统「附全部代码」

    点餐系统总结