練習題:銀行卡練習儲蓄卡與信用卡(可透支和設定額度)

iMYoung57發表於2020-11-15

題目要求

(1)宣告一個銀行儲蓄卡類,

  • 包含屬性:賬戶id,餘額balance
  • 包含取款 public void withdraw(double money)
  • 存款 pubic void save(double money)
  • 獲取賬戶資訊: public String getInfo() 可以返回賬戶和餘額

(2) 宣告一個銀行信用卡類,繼承儲蓄卡類

  • 增加屬性:可透支額度,最多可透支金額
  • 重寫存款 public void withdraw(double money),可透支
  • 存款 pubic void save(double money),需要恢復可透支額度
  • 可修改額度

(1)宣告一個銀行儲蓄卡類

package practice.practice01bank;

/**
 * @author lin's
 * @program Java_SE
 * @description 宣告一個銀行儲蓄卡類,
 * 包含屬性:賬戶id,餘額balance
 * 包含取款 public void withdraw(double money)
 * 存款 pubic void save(double money)
 * 獲取賬戶資訊: public String getInfo() 可以返回賬戶和餘額
 */

public class SavingsAccount {
    private int id;
    private double balance = 0;

    public SavingsAccount() {
    }

    public SavingsAccount(int id) {
        this.id = id;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public double getBalance() {
        return balance;
    }

    public void setBalance(double balance) {
        this.balance = balance;
    }

    /**
     * @param money 取款的錢
     */
    public void withdraw(double money) {
        if (money <= balance)
            balance -= money;
        else
            System.out.println("餘額不足");
    }

    /**
     * @param money 存款的錢
     */
    public void save(double money) {
        balance += money;
    }

    /**
     * @return 賬戶資訊
     */
    public String getInfo() {
        if (getId() == 0) {
            return "沒有使用者資訊";
        }
    return "賬戶ID:" + id +
                ", 餘額:" + balance;
    }
}

//測試類
/*
class test {
	
}*/

(2) 宣告一個銀行信用卡類,繼承儲蓄卡類

package practice.practice01bank;

/**
 * @author lin's
 * @program Java_SE
 * @description (2)宣告一個銀行信用卡類,繼承儲蓄卡類
 * 增加屬性:可透支額度,最多可透支金額
 * 重寫存款 public void withdraw(double money),可透支
 * 存款 pubic void save(double money),需要恢復可透支額度
 * 可修改額度
 */

public class CreditCard extends SavingsAccount {
    //額度
    private double creditLine;
    //最大透支金額
    private double maxOverdraft = creditLine;

    public CreditCard() {
    }

    public CreditCard(double creditLine) {
        this.creditLine = creditLine;
        this.maxOverdraft = creditLine;
    }


    public CreditCard(int id, double creditLine) {
        super(id);
        this.creditLine = creditLine;
        this.maxOverdraft = creditLine;
    }

    public double getCreditLine() {
        return creditLine;
    }

    //設定 額度 和 最大透支金額
    public void setCreditLine(double creditLine) {
        //計算形參額度和當前額度的差值
        double flag = creditLine - this.creditLine;
        //更改當前額度
        this.creditLine = creditLine;
        //更改當前最大透支額度
        this.maxOverdraft += flag;
    }

    public double getMaxOverdraft() {
        return maxOverdraft;
    }

    /**
     * @return 信用卡客戶的資訊
     */
    @Override
    public String getInfo() {
        if (getId() == 0)
            return "沒有使用者資訊";
        return "賬戶ID:" + getId() +
                ", 餘額:" + getBalance() +
                ", 最大透支金額" + maxOverdraft +
                ", 信用卡額度:" + creditLine;
    }

    //其他業務

    /**
     * 取款(可透支)
     *
     * @param money 取款的錢
     */
    @Override
    public void withdraw(double money) {
        //取款小於餘額
        if (money <= getBalance()) {
            //設定餘額,最大透支額度不變
            setBalance(getBalance() - money);
//            System.out.println("當前餘額" + getBalance() + "最大透支額度" + maxOverdraft);
        }
        //取款大於餘額,小於餘額與最大透支金額之和
        if (money > getBalance() && money < maxOverdraft + getBalance()) {
            //重置最大透支額度
            maxOverdraft -= money - getBalance();
            //重置餘額為0
            setBalance(0);
        }
    }
    
    /**
     * @param money 存款的錢
     */
    @Override
    public void save(double money) {
        //存的錢大於透支的金額
        if (money > creditLine - maxOverdraft) {
            //設定餘額 = 當前餘額 + 存款 - 欠的錢
            setBalance(getBalance() + money - (creditLine - maxOverdraft));
            maxOverdraft = creditLine;
        }
        //存入的錢小於透支的金額
        else
            maxOverdraft += money;
    }
}

相關文章