作业要求:
模拟计算银行存款和取款操作,计算存款利息和存款提成。
具体要求:
建立抽象类:Bank
成员变量:
没有
抽象方法:
public double computerIncome( ) //计算存款利息
利息=年数*利率*存款
非抽象方法:
2个方法:查看当前利率(定期,活期)
建立接口 : Attachable
接口中只有1个抽象方法:
double computerAdditional() //计算存款提成
建立异常处理类:InsufficientFundsException
class InsufficientFundsException extends Exception
处理取钱不能超出余额的异常。
建立2 个具体银行子类,为Bank类的子类(如中国银行ChinaBank和烟台银行YantaiBank),具体计算存款利率,实现取钱利息计算和存款提成计算。
建立子类的构造函数(参数为银行的名字)
继承父类实现其抽象方法,计算取款利息。
实现接口,计算存款提成。
具体实现算法请用注释标明。(如,5万元以下给予1%提成,5万元以上给予2%提成,仅作参考)
账户类同前。
建立测试类,测试实验结果。
代码:
Bank.java
public abstract class Bank
{
public abstract double computerIncome();
public double getTRate(){
return 0;
}
public double getInRate(){
return 0;
}
}<span style="font-weight: bold;">
</span>
Attachable.java
public interface Attachable
{
double computerAdditional();
}
InsufficientFundsException.java
public class InsufficientFundsException extends Exception
{
String message;
public InsufficientFundsException(double m){
message = "账户余额不足"+m+"请重新输入";
}
public String toString(){
return message;
}
}
YantaiBank.java
public class YantaiBank extends Bank implements Attachable
{
private String name;
private double savedYear;
private double savedMoney;
public YantaiBank(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setSavedYear(double year){
savedYear = year;
}
public void setSavedMoney(double money){
savedMoney = money;
}
public double getTRate(){
return 0.01;
}
public double getInRate(){
return 0.00003;
}
public double computerAdditional(){
if(savedMoney < 30000){
return savedMoney*0.01;
}
else if(savedMoney >= 30000 && savedMoney < 60000){
return savedMoney*0.02;
}
else {
return savedMoney*0.03;
}
}
public double computerIncome(){
double income;
income = (int)savedYear*getTRate()*savedMoney+(savedYear-(int)savedYear)*365*getInRate()*savedMoney;
return income;
}
}
Account.java
import java.util.*;
public class Account
{
private String name;
private double money;
private Bank cbank;
private double year;
public Account(String name){
this.name = name;
money = 0;
}
public double getYear(){
return year;
}
public double getMoney(){
return money;
}
public void setBank(Bank cbank){
this.cbank = cbank;
}
public void saveMoney() {
double temp = money;
System.out.println("欢迎"+name+"办理存款业务!");
Scanner reader = new Scanner(System.in);
System.out.println("请输入存款金额:");
money = reader.nextDouble();
System.out.println("请输入存期:");
year = reader.nextDouble();
money = money + temp;
System.out.println(money+"元已存入!账户余额:"+money);
}
public void takeMoney() throws InsufficientFundsException{
double take;
Scanner reader = new Scanner(System.in);
System.out.println("欢迎"+name+"办理取款业务!您的余额为"+(money + cbank.computerIncome()));
System.out.println("请输入取款金额:");
take = reader.nextDouble();
if(take > money+ cbank.computerIncome()){
throw new InsufficientFundsException(take);
}
else{
money = money + cbank.computerIncome() - take;
System.out.println("账户余额:"+money);
}
}
}
Main.java
import java.util.*;
public class Main
{
public static void main(String[] args)
{
Account zhangsan = new Account("zhangsan");
YantaiBank YBank = new YantaiBank("YantaiBank");
zhangsan.saveMoney();
YBank.setSavedYear(zhangsan.getYear());
YBank.setSavedMoney(zhangsan.getMoney());
System.out.println(YBank.getName()+"提成:"+YBank.computerAdditional());
zhangsan.setBank(YBank);
while(true){
try{
zhangsan.takeMoney();
break;
}
catch(InsufficientFundsException e){
System.out.println(e.toString());
}
}
}
}
运行结果