问题:加油站支付小模块
- 某加油站为了吸引更多的车主,推出了如下活动
- 车主可以办理金卡和银卡
- 卡片信息包括:车牌号码,车主姓名,电话号码,卡片余额
- 金卡办理时入存金额必须>=5000元,金卡支付享受8折优惠,且消费满200元可以提供洗车服务
- 银卡办理时入存金额必须>=2000元,银卡支付享受9折优惠
- 需求:请使用面向对象编程,完成该加油站支付机的存款和消费程序
Text.java
package 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.java
import 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.java
package 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.java
package 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 的属性为 carId(String)、phone(String),而子类构造器参数中 phone 被定义为 double 或 int,且参数名 card 与父类 carId 不匹配。
总结
这个小项目结合了之前学过的封装,继承,多态等知识,第一遍先跟着课程敲一遍,理解里面的业务逻辑,后续要自己尝试重新多去敲几遍,巩固之前学过的知识。
3673

被折叠的 条评论
为什么被折叠?



