当前位置: 首页 > backend >正文

Java零基础笔记09(Java编程核心:面向对象编程高级练习:支付模块)

加油站支付小模块

● 某加油站为了吸引更多的车主,推出了如下活动,车主可以办理金卡和银卡。

● 卡片信息包括:车牌号码、车主姓名、电话号码、卡片余额。

● 金卡办理时入存金额必须>=5000元,银卡办理时预存金额必须>=2000元,金卡支付时享受8折优惠,银卡支付时享受9折优惠,金卡消费满200元可以提供打印免费洗车票的服务。 ● 需求:请使用面向对象编程,完成该加油站支付机的存款和消费程序。

 card类

// lombok技术可以实现为类自动添加getter setter方法
@Data // @Data注解可以自动生成getter setter方法
@NoArgsConstructor
@AllArgsConstructor
public class Card {private String cardId; // 车牌号码private String name;private String phone;private double money; // 余额// 预存金额。public void deposit(double money) {this.money += money;}// 消费金额。public void consume(double money) {this.money -= money;}
}

金卡类

public class GoldCard extends Card{public GoldCard(String card, String name, String phone, double money) {super(card, name, phone, money);}@Overridepublic void consume(double money) {System.out.println("您当前消费:" + money);System.out.println("优惠后的价格:" + money * 0.8);// 更新金卡的账户余额。setMoney(getMoney() - money * 0.8);if(getMoney() < money * 0.8){System.out.println("您余额是:" + getMoney() + ",当前余额不足!请存钱!");return; // 干掉方法!}// 判断消费如果大于200,调用一个独有的功能,打印洗车票。if(money * 0.8 >= 200){printTicket();}else {System.out.println("您当前消费不满200,不能免费洗车!");}}// 打印洗车票。public void printTicket() {System.out.println("您消费了,请打印洗车票。");}
}

银卡类

public class SilverCard extends Card{public GoldCard(String card, String name, String phone, double money) {super(card, name, phone, money);}@Overridepublic void consume(double money) {System.out.println("您当前消费:" + money);System.out.println("优惠后的价格:" + money * 0.9);if(getMoney() < money * 0.9){System.out.println("您余额是:" + getMoney() + ",当前余额不足!请存钱!");return; // 干掉方法!}// 更新金卡的账户余额。setMoney(getMoney() - money * 0.9);}
}

主程序

// 主程序
public static void main(String[] args) {// 目标:加油站支付小程序。// 1、创建卡片类,以便创建金卡或者银卡对象,封装车主的数据。// 2、定义一个卡片父类:Card,定义金卡和银卡的共同属性和方法。// 3、定义一个金卡类,继承Card类:金卡必须重写消费方法(8折优惠),独有功能打印洗车票。// 4、定义一个银卡类,继承Card类:银卡必须重写消费方法(9折优惠)// 5、办一张金卡:创建金卡对象。交给一个独立的业务(支付机)来完成:存款,消费。GoldCard goldCard = new GoldCard( "鄂A860MM", "dLei", "18665616520", 5000);pay(goldCard);// 6、办一张银卡:创建银卡对象。交给一个独立的业务(支付机)来完成:存款,消费。SilverCard silverCard = new SilverCard( "粤A888888",  "dLei",  "18984724244", 2000);pay(silverCard);
}// 支付机,用一个方法来刷卡,可能接收金卡,也可能接收银卡。
public static void pay(Card c){System.out.println("请刷卡, 请您输入当前消费的金额:");Scanner sc = new Scanner(System.in);double money = sc.nextDouble();c.consume(money);
}
http://www.xdnf.cn/news/15062.html

相关文章:

  • 【01】MFC入门到精通—— MFC新建基于对话框的项目 介绍(工作界面、资源视图 、类视图)
  • 前端开发流程设计详解
  • AMIS全栈低代码开发
  • python Gui界面小白入门学习
  • 数据一致性解决方案总结
  • Java结构型模式---装饰者模式
  • 【通识】NodeJS基础
  • jmeter做跨线程组
  • 【LeetCode207.课程表】以及变式
  • Redis数据淘汰策略
  • 从0开始学习R语言--Day42--LM检验
  • 旅游管理实训室建设的关键要点探讨
  • uniapp中使用uView-plus踩坑记录
  • 数据结构基础准备:包装类 泛型 泛型的上界 密封类
  • 脑电分析入门指南:信号处理、特征提取与机器学习
  • 主流大模型Agent框架 AutoGPT详解
  • 深度学习模型在C++平台的部署
  • vue2 echarts中国地图、在地图上标注经纬度及标注点
  • 伪装计算器软件,隐藏手机隐私文件
  • 精准医疗,AR 锚定球囊扩张导管为健康护航​
  • 暑假读书笔记第五天
  • 剑指offer54_平衡二叉树
  • PostgreSQL如何进行跨服务器迁移数据
  • JavaEE初阶第八期:解锁多线程,从 “单车道” 到 “高速公路” 的编程升级(六)
  • Flink-1.19.0源码详解-番外补充4-JobGraph图
  • HTML应用指南:利用GET请求获取全国山姆门店位置信息
  • 二分查找篇——在排序数组中查找元素的第一个和最后一个位置【LeetCode】
  • Go 延迟调用 defer 用法详解
  • dify配置邮箱,密码重置以及邮箱邀请加入
  • Android Notification 通过增加addAction 跳转回Service重新执行逻辑