Java实例学习1 小型点餐系统
Posted 临风而眠
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java实例学习1 小型点餐系统相关的知识,希望对你有一定的参考价值。
Java实例学习1 小型点餐系统
- 根据B站这个很棒的教程敲的代码:【Java零基础小项目】半小时用Java写一个披萨点餐系统,简简单单~
- 复习类与对象、继承与多态、工厂设计模式
一.题目
二.解决步骤
项目结构分析
先自己写…(发现目前学的是真的拉)
写出来就这…呜呜呜😭
错误一堆,逻辑不清…呜呜呜
-
父类
-
子类
-
培根披萨
-
水果披萨
-
-
打算用于输出的函数
呜呜新建个模块重写跟着敲
-
新建模块
-
新建包和父类
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-骑手送外卖商家统计项目代码