public class SavingsAccount { int id; //账号 double balance; //余额 double rate; //存款的年利率 int lastDate; //上次变更余额的时期 double accumulation; //余额按日累加之和 static double total; //所有账户的总金额
//记录一笔帐,date为日期,amount为金额,desc为说明 void record(int date, double amount) { accumulation = accumulate(date); lastDate = date; amount = Math.floor(amount * 100 + 0.5) / 100; //保留小数点后两位 balance += amount; total += amount; System.out.println(date+"\t#"+id+"\t#"+amount+"\t#"+balance); } //获得到指定日期为止的存款金额按日累积值 double accumulate(int date) { return accumulation + balance * (date - lastDate); } SavingsAccount(int date, int id, double rate) { this.id=id; this.balance=0; this.rate=rate; this.lastDate=date; this.accumulation=0; System.out.println(date+"\t#"+id+" is created"); } int getId() { return id; } double getBalance() { return balance; } double getRate() { return rate; } static double getTotal() { return total; } //存入现金 void deposit(int date, double amount) { record(date, amount); } //取出现金 void withdraw(int date, double amount) { if (amount > getBalance()) System.out.println("Error: not enough money"); else record(date, -amount); } //结算利息,每年1月1日调用一次该函数 void settle(int date) { double interest = accumulate(date) * rate / 365; //计算年息 if (interest != 0) record(date, interest); accumulation = 0; } //显示账户信息 void show() { System.out.println("#"+id+"\tBalance: "+balance); } public static void main(String[] args) { SavingsAccount sa0=new SavingsAccount(1, 21325302, 0.015); SavingsAccount sa1=new SavingsAccount(1, 58320212, 0.015); sa0.deposit(5, 5000); sa1.deposit(25, 10000); sa0.deposit(45, 5500); sa1.withdraw(60, 4000); //开户后第90天到了银行的计息日,结算所有账户的年息 sa0.settle(90); sa1.settle(90); //输出各个账户信息 sa0.show(); System.out.println(); sa1.show(); System.out.println(); System.out.println("Total: "+SavingsAccount.getTotal()); }}