IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Java实例学习1 小型点餐系统 -> 正文阅读

[Java知识库]Java实例学习1 小型点餐系统

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

一.题目

image-20211109103446947

二.解决步骤

项目结构分析

image-20211109104036473

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

写出来就这…呜呜呜😭

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

  • 父类

    image-20211109111912045

  • 子类

    • 培根披萨

      image-20211109111948779

    • 水果披萨

      image-20211109111958860

  • 打算用于输出的函数

    image-20211109112017003

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

  • 新建模块

    image-20211109112214555

  • 新建包和父类

    image-20211109112325511

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

      image-20211109112923000
    • 点击之后,全部选中

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

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

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

    • 还是用快捷键alt+insert

      • 无参构造器

      • 含三个参数的构造器

        image-20211109113843841

  • 父类完整代码

    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;
        }
    
    }
    
  • 目前层次结构

    image-20211109122944488

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;
            }
        }
    }
    
  • 先来测试一下子

    image-20211109132659886

    可以成功录入信息!

小技巧:代码块的使用

image-20211109132336680

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

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

    image-20211109132536026

封装对象
  • 把输入的东西作为参数传入构造器,再调用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;
            }
        }
    }
    
    
  • 测试一下

    image-20211109133517174

在子类中重写showPizza()方法

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

  • 培根匹萨

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

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

    image-20211109134004179

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()+"\n加入的配料是:"+ingredient+".";
        }
        //构造器
        //可用快捷键
    
    
        public FruitPizza() {
        }
    
        public FruitPizza(String name, int size, int price, String ingredient) {
            super(name, size, price);
            this.ingredient = ingredient;
        }
    
    }
    
  • Test类

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

四.基础知识补充(用到啥学啥)

1.scanner类

java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入

  • 创建Scanner对象的基本语法

    Scanner s = new Scanner(System.in);
    
  • 先来看一个简单的输入示例

    package com.scanner.test001;
    
    import java.util.Scanner;
    
    public class TestScann {
        public static void main(String[] args) {
            int age;
            double weight;
            Scanner scan = new Scanner(System.in);
            //从键盘接收数据
            System.out.print("yours age:");
            age = scan.nextInt();
            System.out.print("yours weight:");
            weight = scan.nextDouble();
            System.out.println("age:"+age+";weight:"+weight);
    
        }
    }
    

    image-20211109124247803

    直观感受了下,也大概指导scan类的那几个方法是啥意思

    nextInt()应该就是接收整数 nextDouble是接收小数

现在去runoob上看看

next方法和nextLine方法

next方法
package com.scanner.test001;

import java.util.Scanner;

public class TestScann {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        //从键盘接收数据


        // next方式接收字符串
        System.out.println("next方式接收:");

        //判断是否还有输入
        if (scan.hasNext()) {
            String str1 = scan.next();
            System.out.println("输入的数据为:" + str1);
        }

        scan.close();
    }
}

image-20211109125025622

nextLine方法
package com.scanner.test001;

import java.util.Scanner;

public class TestScann {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        //从键盘接收数据


        // nextLine方式接收字符串
        System.out.println("nextLine方式接收:");

        //判断是否还有输入
        if (scan.hasNextLine()) {
            String str1 = scan.nextLine();
            System.out.println("输入的数据为:" + str1);
        }

        scan.close();
    }
}

image-20211109125131221

俩方法的区别
  • next()

    • 读到有效字符后才结束输入
    • 有效字符前面的空白,next()方法会自动将其去掉
    • 只有输入有效字符后才将其后面输入的空白作为分隔符或结束符
    • 不能得到带空格的字符串
  • nextLine()

    • 以Enter为结束符(返回输入回车之前的所有字符)
    • 可获得空白

再来个实例

  • 计算和与平均数

    package com.scanner.test001;
    
    import java.util.Scanner;
    public class AddTest {
        public static void main(String[] args){
            System.out.println("请输入数字:");
            Scanner scan = new Scanner(System.in);
    
            double sum = 0;
            int m = 0;
    
            while(scan.hasNextDouble()) {
                double x = scan.nextDouble();
                m = m + 1;
                sum = sum + x;
            }
    
            System.out.println(m+"个数和为:"+sum);
            System.out.println(m+"个数的平均值为:" + (sum/m));
            scan.close();
        }
    }
    

    image-20211109131122279

    image-20211109131050271

总结一下

image-20211109130528854
package com.scanner.test001;

import java.util.Scanner;
public class AddTest {
    public static void main(String[] args){
        System.out.println("请输入数字:");
        Scanner scan = new Scanner(System.in);

        double sum = 0;
        int m = 0;

        while(scan.hasNextDouble()) {
            double x = scan.nextDouble();
            m = m + 1;
            sum = sum + x;
        }

        System.out.println(m+"个数和为:"+sum);
        System.out.println(m+"个数的平均值为:" + (sum/m));
        scan.close();
    }
}
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-11-10 12:16:21  更:2021-11-10 12:17:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 23:42:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码