package top.qaqaq.java.P279;
public class Account {
private int id;// 账号
private double balance;// 余额
private double annuallneterstRate;// 年利率
public Account(int id, double balance, double annuallneterstRate) {
super();
this.id = id;
this.balance = balance;
this.annuallneterstRate = annuallneterstRate;
}
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;
}
public double getAnnuallneterstRate() {
return annuallneterstRate;
}
public void setAnnuallneterstRate(double annuallneterstRate) {
this.annuallneterstRate = annuallneterstRate;
}
// 返回月利率
public double getMonthlyInterest() {
return annuallneterstRate / 12;
}
// 取钱
public void withdraw(double amount) {
if (balance >= amount) {
balance -= amount;
return;
}
System.out.println("余额不足");
}
// 存钱
public void deposit(double amount) {
if (amount > 0) {
balance += amount;
}
}
}
package top.qaqaq.java.P279;
/*
* 写一个用户程序测试 Account 类。在用户程序中,
* 创建一个账号为 1122、余额为 20000、年利率 4.5%的 Account 对象。
* 使用 withdraw 方法提款 30000 元,并打印余额。
* 再使用 withdraw 方法提款 2500 元,
* 使用 deposit 方法存款 3000 元,然后打印余额和月利率。
*
*
*
*
*
*/
public class AccountTest {
public static void main(String[] args) {
Account acct = new Account(1122, 20000, 0.045);
acct.withdraw(30000);
System.out.println("您的账户余额为:" + acct.getBalance());
acct.withdraw(2500);
System.out.println("您的账户余额为:" + acct.getBalance());
acct.deposit(3000);
System.out.println("您的账户余额为:" + acct.getBalance());
System.out.println("月利率为:" + (acct.getMonthlyInterest()) * 100 + "%");
}
}
/*
* 创建 Account 类的一个子类 CheckAccount 代表可透支的账户,该账户中定义一个属性 overdraft 代表可透支限额。
* 在 CheckAccount 类中重写 withdraw 方法,其算法如下:
如果(取款金额<账户余额),
可直接取款
如果(取款金额>账户余额),
计算需要透支的额度
判断可透支额 overdraft 是否足够支付本次透支需要,如果可以
将账户余额修改为 0,冲减可透支金额
如果不可以
提示用户超过可透支额的限额
*
*
*
*
*
*/
package top.qaqaq.java.P279;
public class CheckAccount extends Account {
private double overdraft;// 可透支限额
public CheckAccount(int id, double balance, double annuallneterstRate, double overdraft) {
super(id, balance, annuallneterstRate);
this.overdraft = overdraft;
}
public double getOverdraft() {
return overdraft;
}
public void setOverdraft(double overdraft) {
this.overdraft = overdraft;
}
@Override
public void withdraw(double amount) {
if (getBalance() >= amount) {// 余额就足够消费
// getBalance() -= amount;
// 方式一:
// setBalance(getBalance() - amount);
// 方式二:
super.withdraw(amount);
} else if (overdraft >= amount - getBalance()) {// 透支额度+余额足够消费
overdraft -= (amount - getBalance());
// setBalance(0);
// 或
super.withdraw(getBalance());
} else {
System.out.println("超过可透支限额!");
}
}
}
package top.qaqaq.java.P279;
/*
* 写一个用户程序测试 CheckAccount 类。
* 在用户程序中,创建一个账号为 1122、余额为 20000、年利率 4.5%,可透支限额为 5000 元的 CheckAccount 对象。
使用 withdraw 方法提款 5000 元,并打印账户余额和可透支额。
再使用 withdraw 方法提款 18000 元,并打印账户余额和可透支额。
再使用 withdraw 方法提款 3000 元,并打印账户余额和可透支额。
*
*
*
*
*
*
*/
public class CheckAccountTest {
public static void main(String[] args) {
CheckAccount acct = new CheckAccount(1122, 20000, 0.045, 5000);
acct.withdraw(5000);
System.out.println("您的账户余额为:" + acct.getBalance());
System.out.println("您的可透支额度为:" + acct.getOverdraft());
acct.withdraw(18000);
System.out.println("您的账户余额为:" + acct.getBalance());
System.out.println("您的可透支额度为:" + acct.getOverdraft());
acct.withdraw(3000);
System.out.println("您的账户余额为:" + acct.getBalance());
System.out.println("您的可透支额度为:" + acct.getOverdraft());
}
}