Java實現(xiàn)加油站支付小程序功能(存款與消費)
一、該代碼主要實現(xiàn)以下功能:
1)類結(jié)構(gòu)設(shè)計(基于繼承關(guān)系)
- 父類
Card:封裝了所有卡片的共性屬性(卡號carId、持卡人姓名name、電話phone、余額money)和基礎(chǔ)功能(preStore存款方法、consume消費方法),通過 Lombok 的@Data等注解自動生成 getter、setter 等方法。 - 子類
GoldCard(金卡):繼承Card,重寫consume方法實現(xiàn) 8 折優(yōu)惠,新增printTicket方法(消費滿 200 元贈送洗車票)。 - 子類
SilverCard(銀卡):繼承Card,重寫consume方法實現(xiàn) 9 折優(yōu)惠。
2)核心業(yè)務(wù)功能
- 存款功能:通過
in方法實現(xiàn),支持用戶輸入存款金額,調(diào)用卡片的preStore方法將金額存入卡內(nèi),并顯示當前余額。 - 消費功能:通過
pay方法實現(xiàn),支持用戶輸入消費金額,根據(jù)卡片類型(金卡 / 銀卡)自動應(yīng)用對應(yīng)折扣(8 折 / 9 折):- 金卡:消費時計算 8 折后金額,若余額不足則提示失敗;若折后金額≥200 元,自動打印洗車票。
- 銀卡:消費時計算 9 折后金額,若余額不足則提示失敗。
3)程序演示流程
- 創(chuàng)建一張金卡和一張銀卡對象,初始化卡號、持卡人信息和初始余額。
- 分別為兩張卡執(zhí)行存款操作(用戶輸入存款金額)。
- 分別為兩張卡執(zhí)行消費操作(用戶輸入消費金額),展示不同卡片的折扣計算、余額更新及特色功能(如金卡的洗車票)。
二、實現(xiàn)以上功能的代碼如下:
package Demo.pay;
import java.util.Scanner;
public class Test {
/**
* 實現(xiàn)加油站支付小程序的主流程
* 1. 創(chuàng)建金卡和銀卡對象
* 2. 演示卡片的存款和消費功能
*/
public static void main(String[] args) {
//目標:加油站支付小程序。
//1、創(chuàng)建卡片類,以便創(chuàng)建金卡或銀卡對象,封裝車主的數(shù)據(jù)。
//2、定義一個卡片父類:Card,定義金卡和銀卡共有的屬性和方法。
// 定義一個金卡類,繼承Card卡片類:GoldCard,金卡必須重寫消費方法(8折優(yōu)惠),獨有功能打印車票。
// 定義一個銀卡類,繼承Card卡片類:SilverCard,銀卡必須重寫消費方法(9折優(yōu)惠)。
//3、辦一張金卡,創(chuàng)建金卡對象,交給一個獨立的業(yè)務(wù)(支付機)來完成:存款,消費。
//相關(guān)信息
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("================================================");
// 辦一張銀卡,創(chuàng)建銀卡對象,交給一個獨立的業(yè)務(wù)(支付機)來完成:存款,消費。
//相關(guān)信息
System.out.println("辦一張銀卡:");
Card silverCard = new SilverCard("123456", "王五", "12345678901", 5000);
System.out.println("銀卡信息:" + silverCard);
System.out.println("------------------------");
//存款
in(silverCard);
System.out.println("------------------------");
//消費
pay(silverCard);
}
/**
* 存款機
* 用于處理卡片存款業(yè)務(wù),可以接受金卡或銀卡進行存款操作
*
* @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());
}
/**
* 支付機
* 用于處理卡片消費業(yè)務(wù),可以接受金卡或銀卡進行消費
*
* @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技術(shù)可以實現(xiàn)為類自動添加getter和setter方法
@Data //@Data注解會自動為類添加getter和setter方法
@AllArgsConstructor
@NoArgsConstructor
/**
* Card,定義金卡和銀卡共有的屬性和方法。
* 包含卡的基本信息以及預(yù)存和消費功能
*/
public class Card {
private String carId;
private String name;
private String phone;
private double money;
/**
* 預(yù)存金額到卡中
* @param money 需要預(yù)存的金額
*/
public void preStore(double money) {
this.money += money;
}
/**
* 從卡中消費金額
* @param money 需要消費的金額
*/
public void consume(double money) {
this.money -= money;
}
}注意:lombok技術(shù)可以實現(xiàn)為類自動添加getter和setter方法……
步驟如下:
在 IntelliJ IDEA 中使用 Lombok 的@Data等注解時,通常按Alt+Enter就可以導入,但如果沒有出現(xiàn)預(yù)期的創(chuàng)建選項,通常是因為 Lombok 相關(guān)配置不完整導致的。
可以按照以下步驟排查并解決:
1)設(shè)置

2)構(gòu)建、執(zhí)行、部署 -> 編譯器 -> 注解處理器 -> 啟用注解處理 -> 應(yīng)用即可自動導包。

package Demo.pay;
/**
* 金卡類,繼承自Card類
* 金卡享有8折優(yōu)惠,并且消費滿200元可獲得洗車票
*/
public class GoldCard extends Card{
/**
* 金卡構(gòu)造函數(shù)
* @param carId 卡號
* @param name 持卡人姓名
* @param phone 持卡人電話
* @param money 卡內(nèi)余額
*/
public GoldCard(String carId, String name, String phone, double money) {
super(carId, name, phone, money);
}
/**
* 金卡消費方法,享受8折優(yōu)惠
* 如果余額不足則消費失敗
* 如果消費金額滿200元則贈送洗車票
* @param money 消費金額
*/
@Override
public void consume(double money) {
System.out.println("您當前金卡消費:"+ money);
System.out.println("優(yōu)惠后的價格:"+ money * 0.8);
if(getMoney()<money*0.8){
System.out.println("您的余額是:"+ getMoney()+ ",余額不足!");
return;
}
setMoney(getMoney()-money*0.8);
System.out.println("您當前金卡余額為:"+ getMoney());
//判斷消費如果大于200,調(diào)用一個獨有的功能,打印洗車票。
if (money*0.8>=200){
printTicket();
}
else {
System.out.println("------------------------");
System.out.println("您沒有消費200元以上,沒有洗車票");
}
}
/**
* 打印洗車票方法
* 當消費滿200元時調(diào)用此方法
*/
public void printTicket(){
System.out.println("------------------------");
System.out.println("恭喜您,獲得一張洗車票");
}
}package Demo.pay;
/**
* 銀卡類,繼承自Card類
* 用于處理銀卡用戶的消費邏輯,享受9折優(yōu)惠
*/
public class SilverCard extends Card{
/**
* 銀卡構(gòu)造函數(shù)
* @param carId 卡號
* @param name 持卡人姓名
* @param phone 持卡人電話
* @param money 初始金額
*/
public SilverCard(String carId, String name, String phone, double money){
super(carId, name, phone, money);
}
/**
* 銀卡消費方法,享受9折優(yōu)惠
* @param money 消費金額
*/
@Override
public void consume(double money){
System.out.println("您當前銀卡消費:"+ money);
System.out.println("優(yōu)惠后的價格:"+ 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);
}
}到此這篇關(guān)于Java實現(xiàn)加油站支付小程序功能(存款與消費)的文章就介紹到這了,更多相關(guān)java加油支付小程序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java實現(xiàn)SFTP文件上傳的詳細教程與代碼解析
在現(xiàn)代軟件開發(fā)中,文件傳輸是一個常見的需求,尤其是在需要將文件上傳到遠程服務(wù)器時,本文將詳細介紹如何使用Java實現(xiàn)SFTP文件上傳,需要的可以參考一下2025-05-05
Java POI實現(xiàn)Excel導入導出通用方法與樣式處理
Apache POI庫是Java領(lǐng)域處理Microsoft Office文件的關(guān)鍵工具,該項目使用POI 3.17版本實現(xiàn)Excel文件的讀寫功能,本文介紹Excel導入導出的步驟以及如何添加和維護樣式,包括字體、顏色、邊框和對齊等,需要的朋友可以參考下2025-08-08
MyBatis使用resultMap如何解決列名和屬性名不一致
這篇文章主要介紹了MyBatis使用resultMap如何解決列名和屬性名不一致的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01
如何使用@Slf4j和logback-spring.xml搭建日志框架
這篇文章主要介紹了如何使用@Slf4j和logback-spring.xml搭建日志框架問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06
mybatis 實現(xiàn)多條update同時執(zhí)行
這篇文章主要介紹了mybatis 實現(xiàn)多條update同時執(zhí)行,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01

