Java实现加油站支付小程序功能(存款与消费)
作者:jaysee-sjc
本文给大家介绍Java实现加油站支付小程序功能(存款与消费),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
一、该代码主要实现以下功能:
1)类结构设计(基于继承关系)
- 父类
Card
:封装了所有卡片的共性属性(卡号carId
、持卡人姓名name
、电话phone
、余额money
)和基础功能(preStore
存款方法、consume
消费方法),通过 Lombok 的@Data
等注解自动生成 getter、setter 等方法。 - 子类
GoldCard
(金卡):继承Card
,重写consume
方法实现 8 折优惠,新增printTicket
方法(消费满 200 元赠送洗车票)。 - 子类
SilverCard
(银卡):继承Card
,重写consume
方法实现 9 折优惠。
2)核心业务功能
- 存款功能:通过
in
方法实现,支持用户输入存款金额,调用卡片的preStore
方法将金额存入卡内,并显示当前余额。 - 消费功能:通过
pay
方法实现,支持用户输入消费金额,根据卡片类型(金卡 / 银卡)自动应用对应折扣(8 折 / 9 折):- 金卡:消费时计算 8 折后金额,若余额不足则提示失败;若折后金额≥200 元,自动打印洗车票。
- 银卡:消费时计算 9 折后金额,若余额不足则提示失败。
3)程序演示流程
- 创建一张金卡和一张银卡对象,初始化卡号、持卡人信息和初始余额。
- 分别为两张卡执行存款操作(用户输入存款金额)。
- 分别为两张卡执行消费操作(用户输入消费金额),展示不同卡片的折扣计算、余额更新及特色功能(如金卡的洗车票)。
二、实现以上功能的代码如下:
package Demo.pay; import java.util.Scanner; public class Test { /** * 实现加油站支付小程序的主流程 * 1. 创建金卡和银卡对象 * 2. 演示卡片的存款和消费功能 */ public static void main(String[] args) { //目标:加油站支付小程序。 //1、创建卡片类,以便创建金卡或银卡对象,封装车主的数据。 //2、定义一个卡片父类:Card,定义金卡和银卡共有的属性和方法。 // 定义一个金卡类,继承Card卡片类:GoldCard,金卡必须重写消费方法(8折优惠),独有功能打印车票。 // 定义一个银卡类,继承Card卡片类:SilverCard,银卡必须重写消费方法(9折优惠)。 //3、办一张金卡,创建金卡对象,交给一个独立的业务(支付机)来完成:存款,消费。 //相关信息 System.out.println("办一张金卡:"); Card goldCard = new GoldCard("123456", "张三", "12345678901", 1000); System.out.println("金卡信息:" + goldCard); System.out.println("------------------------"); //存款 in(goldCard); System.out.println("------------------------"); //消费 pay(goldCard); System.out.println("================================================"); // 办一张银卡,创建银卡对象,交给一个独立的业务(支付机)来完成:存款,消费。 //相关信息 System.out.println("办一张银卡:"); Card silverCard = new SilverCard("123456", "王五", "12345678901", 5000); System.out.println("银卡信息:" + silverCard); System.out.println("------------------------"); //存款 in(silverCard); System.out.println("------------------------"); //消费 pay(silverCard); } /** * 存款机 * 用于处理卡片存款业务,可以接受金卡或银卡进行存款操作 * * @param CardIn 卡片对象,可以是金卡或银卡 */ public static void in(Card CardIn) { System.out.println("请输入存款金额:"); Scanner sc = new Scanner(System.in); Double goldIn = sc.nextDouble(); CardIn.preStore(goldIn);//存入 System.out.println("当前余额为:" + CardIn.getMoney()); } /** * 支付机 * 用于处理卡片消费业务,可以接受金卡或银卡进行消费 * * @param card 卡片对象,可以是金卡或银卡 */ public static void pay(Card card) { System.out.println("请输入消费金额:"); Scanner sc = new Scanner(System.in); double money = sc.nextDouble(); card.consume(money);//消费 } }
package Demo.pay; //父类 //导包 import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; //lombok技术可以实现为类自动添加getter和setter方法 @Data //@Data注解会自动为类添加getter和setter方法 @AllArgsConstructor @NoArgsConstructor /** * Card,定义金卡和银卡共有的属性和方法。 * 包含卡的基本信息以及预存和消费功能 */ public class Card { private String carId; private String name; private String phone; private double money; /** * 预存金额到卡中 * @param money 需要预存的金额 */ public void preStore(double money) { this.money += money; } /** * 从卡中消费金额 * @param money 需要消费的金额 */ public void consume(double money) { this.money -= money; } }
注意:lombok技术可以实现为类自动添加getter和setter方法……
步骤如下:
在 IntelliJ IDEA 中使用 Lombok 的@Data
等注解时,通常按Alt+Enter
就可以导入,但如果没有出现预期的创建选项,通常是因为 Lombok 相关配置不完整导致的。
可以按照以下步骤排查并解决:
1)设置
2)构建、执行、部署 -> 编译器 -> 注解处理器 -> 启用注解处理 -> 应用即可自动导包。
package Demo.pay; /** * 金卡类,继承自Card类 * 金卡享有8折优惠,并且消费满200元可获得洗车票 */ public class GoldCard extends Card{ /** * 金卡构造函数 * @param carId 卡号 * @param name 持卡人姓名 * @param phone 持卡人电话 * @param money 卡内余额 */ public GoldCard(String carId, String name, String phone, double money) { super(carId, name, phone, money); } /** * 金卡消费方法,享受8折优惠 * 如果余额不足则消费失败 * 如果消费金额满200元则赠送洗车票 * @param 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("您的余额是:"+ getMoney()+ ",余额不足!"); return; } setMoney(getMoney()-money*0.8); System.out.println("您当前金卡余额为:"+ getMoney()); //判断消费如果大于200,调用一个独有的功能,打印洗车票。 if (money*0.8>=200){ printTicket(); } else { System.out.println("------------------------"); System.out.println("您没有消费200元以上,没有洗车票"); } } /** * 打印洗车票方法 * 当消费满200元时调用此方法 */ public void printTicket(){ System.out.println("------------------------"); System.out.println("恭喜您,获得一张洗车票"); } }
package Demo.pay; /** * 银卡类,继承自Card类 * 用于处理银卡用户的消费逻辑,享受9折优惠 */ public class SilverCard extends Card{ /** * 银卡构造函数 * @param carId 卡号 * @param name 持卡人姓名 * @param phone 持卡人电话 * @param money 初始金额 */ public SilverCard(String carId, String name, String phone, double money){ super(carId, name, phone, money); } /** * 银卡消费方法,享受9折优惠 * @param money 消费金额 */ @Override public 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); System.out.println("您当前银卡余额为:"+ getMoney()); //更新银卡的账号余额 setMoney(getMoney()-money*0.9); } }
到此这篇关于Java实现加油站支付小程序功能(存款与消费)的文章就介绍到这了,更多相关java加油支付小程序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!