目录
1. 基础账户类(Account)
写一个名为Account的类模拟账户。该类的属性和方法如下图所示。该类包括的属性:账号id,余额balance,年利率annualInterestRate;包含的方法:访问器方法(getter和setter方法),返回月利率的方法getMonthlyInterest(),取款方法withdraw(),存款方法deposit()。
写一个用户程序测试Account类。在用户程序中,创建一个账号为1122、余额为20000、年利率4.5%的Account对象。使用withdraw方法提款30000元,并打印余额。 再使用withdraw方法提款2500元,使用deposit方法存款3000元,然后打印余额和月利率。
提示:在提款方法withdraw中,需要判断用户余额是否能够满足提款数额的要求,如果不能,应给出提示。 运行结果如图所示:
package exer6;
/**
* ClassName:IntelliJ IDEA
* Description:
* 1、写一个名为Account的类模拟账户。该类的属性和方法如下图所示。
* 该类包括的属性:账号id,余额balance,年利率annualInterestRate;
* 包含的方法:访问器方法(getter和setter方法),返回月利率的方法getMonthlyInterest(),
* 取款方法withdraw(),存款方法deposit()。
*
* @Author zyjstart
* @Create:2024/9/2 17:06
*/
public class Account {
private int id;
private double balance;
private double annualInterestRate; // 年利率
// 构造器
public Account() {
}
public Account(int id, double balance, double annualInterestRate) {
this.id = id;
this.balance = balance;
this.annualInterestRate = annualInterestRate;
}
// get、set方法
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 getAnnualInterestRate() {
return annualInterestRate;
}
public void setAnnualInterestRate(double annualInterestRate) {
this.annualInterestRate = annualInterestRate;
}
/**
* 获取月利率的方法
*
* @return 月利率
*/
public double getMonthlyInterest() {
return annualInterestRate / 12; // 月利率 = 年利率/12
}
// 取款方法withdraw()
/**
* 取钱操作
* @param amount 取钱金额
*/
public void withdraw(double amount) {
if (balance >= amount) {
balance -= amount;
}
else {
System.out.println("余额不足!");
}
}
// 存款方法deposit()
/**
* 存钱操作
* @param amount 存钱金额
*/
public void deposit(double amount){
if (amount > 0){
balance += amount;
}
}
}
2. 测试基础账户类
package exer6;
/**
* ClassName:IntelliJ IDEA
* Description:
* 写一个用户程序测试Account类。在用户程序中,创建一个账号为1122、余额为20000、年利率4.5%的Account对象。
* 使用withdraw方法提款30000元,并打印余额。
* 再使用withdraw方法提款2500元,使用deposit方法存款3000元,然后打印余额和月利率。
* @Author zyjstart
* @Create:2024/9/2 17:20
*/
public class AccountTest {
public static void main(String[] args) {
// 创建Account的一个实例
Account account = new Account(1122, 20000, 0.045);
// 取钱30000
account.withdraw(300000);
System.out.println("您的账户余额为:" + account.getBalance());
account.withdraw(2500);
// 存钱2500
account.deposit(3000);
System.out.println("您的账户余额为:" + account.getBalance());
System.out.println("您的月利率为:" + account.getMonthlyInterest());
}
}
测试结果
3. 可透支账户类(CheckAccount)
创建Account类的一个子类CheckAccount代表可透支的账户,该账户中定义一个属性overdraft代表可透支限额。在CheckAccount类中重写withdraw方法,其算法如下:
如果(取款金额<账户余额), 可直接取款 如果(取款金额>账户余额), 计算需要透支的额度 判断可透支额overdraft是否足够支付本次透支需要,如果可以 将账户余额修改为0,冲减可透支金额 如果不可以 提示用户超过可透支额的限额
要求:写一个用户程序测试CheckAccount类。在用户程序中,创建一个账号为1122、余额为20000、年利率4.5%,可透支限额为5000元的CheckAccount对象。
使用withdraw方法提款5000元,并打印账户余额和可透支额。
再使用withdraw方法提款18000元,并打印账户余额和可透支额。
再使用withdraw方法提款3000元,并打印账户余额和可透支额。
提示:
(1)子类CheckAccount的构造方法需要将从父类继承的3个属性和子类自己的属性全部初始化。
(2)父类Account的属性balance被设置为private,但在子类CheckAccount的withdraw方法中需要修改它的值,因此应修改父类的balance属性,定义其为protected。
运行结果如下图所示:
package exer6;
/**
* ClassName:IntelliJ IDEA
* Description:
* 创建Account类的一个子类CheckAccount代表可透支的账户,该账户中定义一个属性overdraft代表可透支限额。
* 在CheckAccount类中重写withdraw方法:
* 如果(取款金额<账户余额),
* 可直接取款
* 如果(取款金额>账户余额),
* 计算需要透支的额度
* 判断可透支额overdraft是否足够支付本次透支需要,如果可以
* 将账户余额修改为0,冲减可透支金额
* 如果不可以
* 提示用户超过可透支额的限额
* @Author zyjstart
* @Create:2024/9/2 17:29
*/
public class CheckAccount extends Account {
private double overdraft; // 可透支限额
// 构造器
public CheckAccount() {
}
public CheckAccount(double overdraft) {
this.overdraft = overdraft;
}
public CheckAccount(int id, double balance, double annualInterestRate, double overdraft) {
super(id, balance, annualInterestRate);
this.overdraft = overdraft;
}
// get set方法
public double getOverdraft() {
return overdraft;
}
public void setOverdraft(double overdraft) {
this.overdraft = overdraft;
}
/**
* 针对于可透支的账户的取钱操作
* @param amount 取钱金额
*/
@Override
public void withdraw(double amount){
if (getBalance() >= amount){
// 取钱金额 < 账户金额,直接再账户里取,这里调用父类的存钱操作
super.withdraw(amount);
}else if (getBalance() + overdraft >= amount){
overdraft -= amount - getBalance();
super.withdraw(getBalance());
}else {
System.out.println("超过可透支限额!");
}
}
}
4. 测试可透支账户类
最后,我们编写一个测试类CheckAccountTest
来验证CheckAccount
类的功能。
package exer6;
/**
* ClassName:IntelliJ IDEA
* Description:
* 写一个用户程序测试CheckAccount类。
* 在用户程序中,创建一个账号为1122、余额为20000、年利率4.5%,可透支限额为5000元的CheckAccount对象。
*
* 使用withdraw方法提款5000元,并打印账户余额和可透支额。
* 再使用withdraw方法提款18000元,并打印账户余额和可透支额。
* 再使用withdraw方法提款3000元,并打印账户余额和可透支额。
* @Author zyjstart
* @Create:2024/9/2 17:51
*/
public class CheckAccountTest {
public static void main(String[] args) {
CheckAccount ca = new CheckAccount(1122,20000,0.045,5000);
ca.withdraw(5000);
System.out.println("您的账户余额为:" + ca.getBalance());
System.out.println("您可透支额为:" + ca.getOverdraft());
ca.withdraw(18000);
System.out.println("您的账户余额为:" + ca.getBalance());
System.out.println("您可透支额为:" + ca.getOverdraft());
ca.withdraw(3000);
System.out.println("您的账户余额为:" + ca.getBalance());
System.out.println("您可透支额为:" + ca.getOverdraft());
}
}
运行结果
通过以上步骤,我们成功实现了基础账户和可透支账户的模拟,并通过测试类验证了这些类的功能。希望这篇文章能够帮助你理解如何在Java中使用类和对象来模拟现实世界中的复杂系统。
标签:透支,CheckAccount,Java,进阶,账户,double,withdraw,public From: https://blog.csdn.net/weixin_63106307/article/details/141826274