【JavaSE】练习题:银行卡练习储蓄卡与信用卡(可透支和设置额度)

题目要求

(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 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 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;
    }
}
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值