Java作业--(Account类的子类)在编程练习题9.7中定义了一个Account类来对一个银行账户建模。一个账户有账号、余额、年利率、开户日期等属性,以及存款和取款等方法。

创建支票账户(checking account)和储蓄账户(saving account)两个子类。支票账户有一个透支限定额,但储蓄账户不能透支。

画出这些类的UML图并实现这些类。编写一个测试程序,创建Account、SavingsAccount和CheckingAccount的对象,然后调用它们的toString()方法。

Account类:
import java.util.Date;

public class Account {
	private int id = 0;
	private double balance = 0;
	private double annualInterestRate = 0;
	private Date dateCreated;
	public Account() {
		dateCreated = new Date();
	}
	public Account(int id, double balance) {
		this.id = id;
		this.balance = balance;
		dateCreated = new Date();
	}
	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;
	}
	public Date getDateCreated() {
		return dateCreated;
	}
	public void withDraw(double money) {
		balance -= money;
	}
	public void deposit(double money) {
		balance += money;
	}
	public String toString() {
		return "账户id为:"+ id +" 余额为:"+balance;
	}
}

CheckingAccount类:

public class CheckingAccount extends Account{
	private int quota;
	private double Overdraft_amount;
	
	public CheckingAccount(){
	}
	public CheckingAccount(double balance, int quota) {
		setBalance(balance);
		this.quota = quota;
	}
	public double getOverdraft_amount() {
		return Overdraft_amount;
	}
	public int getQuota() {
		return quota;
	}
	public void withDraw(double money) {
			if(getBalance()-money<0) {
				if(Math.abs(getBalance()-money)>quota) {
					System.out.println("透支额度不足!");
				}
				else {
					System.out.println("已透支 "+Math.abs(getBalance()-money)+" 元");
					setBalance(getBalance()-money);
				}
				Overdraft_amount=Math.abs(getBalance()-money);
			}
			else 
				setBalance(getBalance()-money);
	}
	public String toString() {
		return "账户id为:"+getId()+"余额为:"+getBalance();
	}
}

SavingsAccount类:

public class SavingsAccount extends Account{
	private double interestRate;
	private double interest;
	
	public SavingsAccount() {
	}
	public SavingsAccount(double balance, double interestRate) {
		setBalance(balance);
		this.interestRate = interestRate;
	}
	public double getInterestRate() {
		return interestRate;
	}
	public double getInterest(int month) {
		return interest=this.getBalance()*interestRate*month/12;
	}
	public double getbalance() {
		return getBalance()+interest;
	}
	public String toString() {
		return "账户id为:"+getId()+" 余额为:"+getbalance();
	}
}

测试程序:

public class HomeWork3 {
	public static void main(String[] args) {
		Account account = new Account(139,10000);
		SavingsAccount saccount = new SavingsAccount(5000, 0.0275);
		CheckingAccount caccount = new CheckingAccount(2500,5000);
	
		System.out.println("设置id:");
		saccount.setId(123);
		caccount.setId(789);
		System.out.println("储蓄账户的id为:"+saccount.getId());
		System.out.println("支票账户的id为:"+caccount.getId());
		System.out.println("存款:");
		System.out.println("储蓄账户的存款为:"+saccount.getBalance());
		System.out.println("支票账户的存款为:"+caccount.getBalance());
		System.out.println("储蓄账户的月利率为:"+saccount.getInterestRate());
		System.out.println("存储12个月所得利息:"+saccount.getInterest(12));
		System.out.println("存储12个月后存款为:"+saccount.getbalance());
		System.out.println("取款:");
		System.out.println("支票账户取款3000元:");
		caccount.withDraw(3000);
		System.out.println("支票账户取款4501元:");
		caccount.withDraw(4501);
		System.out.println("取款后支票账户余额:"+caccount.getBalance());
		System.out.println(account.toString());
		System.out.println(saccount.toString());
		System.out.println(caccount.toString());
	}
}

UML图:

在这里插入图片描述

在这里插入图片描述
运行结果:
在这里插入图片描述

  • 8
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值