Java实现加油站支付小程序功能(存款与消费)

 更新时间:2025年08月29日 09:43:46   作者:jaysee-sjc  
本文给大家介绍Java实现加油站支付小程序功能(存款与消费),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

一、该代码主要实现以下功能:

1)类结构设计(基于继承关系)

  • 父类Card:封装了所有卡片的共性属性(卡号carId、持卡人姓名name、电话phone、余额money)和基础功能(preStore存款方法、consume消费方法),通过 Lombok@Data等注解自动生成 gettersetter 等方法。
  • 子类GoldCard(金卡):继承Card,重写consume方法实现 8 折优惠,新增printTicket方法(消费满 200 元赠送洗车票)。
  • 子类SilverCard(银卡):继承Card,重写consume方法实现 9 折优惠。

2)核心业务功能

  • 存款功能:通过in方法实现,支持用户输入存款金额,调用卡片的preStore方法将金额存入卡内,并显示当前余额。
  • 消费功能:通过pay方法实现,支持用户输入消费金额,根据卡片类型(金卡 / 银卡)自动应用对应折扣(8 折 / 9 折):
    • 金卡:消费时计算 8 折后金额,若余额不足则提示失败;若折后金额≥200 元,自动打印洗车票。
    • 银卡:消费时计算 9 折后金额,若余额不足则提示失败。

3)程序演示流程

  1. 创建一张金卡和一张银卡对象,初始化卡号、持卡人信息和初始余额。
  2. 分别为两张卡执行存款操作(用户输入存款金额)。
  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技术可以实现为类自动添加gettersetter方法……

步骤如下:

在 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加油支付小程序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Logstash配置Java日志格式的方法小结

    Logstash配置Java日志格式的方法小结

    Logstash 是用于日志收集的开源工具,通常与 Elasticsearch 和 Kibana 一起使用,形成 ELK Stack,Logstash 非常灵活,可以通过配置文件(通常是 .conf 文件)来定义数据的输入、处理和输出,本文给大家介绍了Logstash配置Java日志格式的方法,需要的朋友可以参考下
    2024-09-09
  • Restful API中的错误处理方法

    Restful API中的错误处理方法

    这篇文章主要给大家介绍了关于Restful API中错误处理方法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • 解决IDEA2020.1版本不兼容Lombok的问题

    解决IDEA2020.1版本不兼容Lombok的问题

    这篇文章主要介绍了解决IDEA2020.1版本不兼容Lombok的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • java线程之join方法的使用介绍

    java线程之join方法的使用介绍

    本篇文章介绍了,java线程之join方法的使用分析,需要的朋友参考下
    2013-05-05
  • Java实现SFTP文件上传的详细教程与代码解析

    Java实现SFTP文件上传的详细教程与代码解析

    在现代软件开发中,文件传输是一个常见的需求,尤其是在需要将文件上传到远程服务器时,本文将详细介绍如何使用Java实现SFTP文件上传,需要的可以参考一下
    2025-05-05
  • Java POI实现Excel导入导出通用方法与样式处理

    Java POI实现Excel导入导出通用方法与样式处理

    Apache POI库是Java领域处理Microsoft Office文件的关键工具,该项目使用POI 3.17版本实现Excel文件的读写功能,本文介绍Excel导入导出的步骤以及如何添加和维护样式,包括字体、颜色、边框和对齐等,需要的朋友可以参考下
    2025-08-08
  • SpringMVC Idea 搭建 部署war的详细过程

    SpringMVC Idea 搭建 部署war的详细过程

    本文介绍了如何在IntelliJ IDEA中使用Maven模板创建一个Web项目,并详细说明了如何配置web.xml、创建springmvc-servlet.xml和application.properties文件,以及如何使用Maven打包生成WAR文件并部署到Tomcat服务器,感兴趣的朋友跟随小编一起看看吧
    2025-01-01
  • MyBatis使用resultMap如何解决列名和属性名不一致

    MyBatis使用resultMap如何解决列名和属性名不一致

    这篇文章主要介绍了MyBatis使用resultMap如何解决列名和属性名不一致的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • 如何使用@Slf4j和logback-spring.xml搭建日志框架

    如何使用@Slf4j和logback-spring.xml搭建日志框架

    这篇文章主要介绍了如何使用@Slf4j和logback-spring.xml搭建日志框架问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • mybatis 实现多条update同时执行

    mybatis 实现多条update同时执行

    这篇文章主要介绍了mybatis 实现多条update同时执行,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01

最新评论