【强推】加油站支付模块开发复盘:面向对象+流程控制实现计价与找零逻辑 📅 2026/7/13 21:49:11 问题加油站支付小模块某加油站为了吸引更多的车主推出了如下活动车主可以办理金卡和银卡卡片信息包括车牌号码车主姓名电话号码卡片余额金卡办理时入存金额必须5000元金卡支付享受8折优惠且消费满200元可以提供洗车服务银卡办理时入存金额必须2000元银卡支付享受9折优惠需求请使用面向对象编程完成该加油站支付机的存款和消费程序Text.javapackage com.itheima.demo; import java.util.Scanner; public class Text { public static void main(String[] args) { //目标加油站支付小程序 //1.城建卡片类以便创建金卡或者银卡对象封装车主的数据 //2.定义一个卡片父类Card定义一个金卡和银卡的共同属性和方法 //3.定义一个金卡类继承Card类金卡必须重写消费方法8折优惠及独有功能打印洗车票 GoldCard goldCard new GoldCard(01,张三,1380000001,1000); //3.定义一个银卡类继承Card类银卡必须重写消费方法9折优惠 SilverCard silverCard new SilverCard(02,李四,1380000002,2000); //4。办一张金卡创建金卡对象交给一个独立的业务存款消费 //5.办一张银卡创建银卡对象交给一个独立的业务存款消费 pay(silverCard); pay(goldCard); } //pay()方法定义在main()方法外面Java中不允许在方法内部嵌套定义方法 public static void pay(Card c){ System.out.println(请输入消费金额); Scanner sc new Scanner(System.in); double money sc.nextDouble(); c.consume(money); } }Card.javaimport lombok.Data; import lombok.NoArgsConstructor; // Data注解可以自动生成getter和setter方法无参数构造器toString方法等 Data AllArgsConstructor //自动构造有参构造器 NoArgsConstructor //自动构造无参构造器 public class Card { private String carId ; private String name ; private double phone; private double money; //预存金额 public void deposit(double money){ this.money money; } //消费金额 public void consume(double money){ this.money - money; } }GoldCard.javapackage com.itheima.demo; public class GoldCard extends Card{ public GoldCard(String carId, String name, double phone, int money) { super(carId, name, phone, money);//调用父类有参构造器 } Override public void consume(double money) { System.out.println(您当前金卡消费money); System.out.println(优惠后的价格是money*0.8); if (getMoney()money*0.8){ System.out.println(余额不足); return;//干掉方法 } //更新金卡的账户余额,用set进行修改get进行获取 setMoney(getMoney()-money*0.8); //判断消费如果大于200调用一个独有的功能打印洗车票 if(money * 0.8 200){ printWashCarTicket(); }else { System.out.println(没有消费200元以上没有洗车票); } } //打印洗车票 public void printWashCarTicket(){ System.out.println(您已获得一张金卡洗车券); } }SilverCard.javapackage com.itheima.demo; public class SilverCard extends Card { public SilverCard(String carId,String name, double phone, int money) { super(carId, name, phone, money);//调用父类有参构造器 } Override public void consume(double money) { System.out.println(您当前银卡消费 money); System.out.println(优惠后的价格是 money * 0.9); setMoney(getMoney() - money * 0.9); if (getMoney()money*0.9){ System.out.println(余额不足); return; //干掉方法 } } }过程中遇到的问题方法嵌套定义在Text.java中方法定义位置错误pay() 方法定义在 main() 方法内部Java 中不允许在方法内部嵌套定义方法。构造器继承问题GoldCard 和 SilverCard 构造器未调用父类构造器。参数类型不匹配父类 Card 的属性为 carIdString、phoneString而子类构造器参数中 phone 被定义为 double 或 int且参数名 card 与父类 carId 不匹配。总结这个小项目结合了之前学过的封装继承多态等知识第一遍先跟着课程敲一遍理解里面的业务逻辑后续要自己尝试重新多去敲几遍巩固之前学过的知识。