JAVA实验——更改C++中4到12章个人银行账户管理系统案例的心得体会(第8和9章)

5.第8章:多态特性

改动的一些点:(1)由于C++中有运算符重载而JAVA中没有,故此点不做改动。

  (2)在JAVA中没有C++中虚函数的virtual关键字,取而代之的是父类中的抽象方法,同C++一样,抽象父类都是使用abstract关键字,不过在JAVA中,子类实现父类方法时就相当于完成了C++中虚函数的功能。

  (3)JAVA中没有sizeof()来计算数组所占内存空间大小,故在计算对象数组长度时,采用对象数组引用的length静态域变量直接得到数组长度。

  (4)对于输入方面,JAVA中没有getline(cin,string)来读入输入的一行命令,而是通过扫描器类Scanner以及其中一系列nextXX()方法,如next()读入输入的字符串,nextLine()读入一行。输入的文本以空格等为分隔符。另外为了能够只读入一个字符,可以使用String类的charAt(index)方法。

源代码:

Date类和Accumulator都与第7章一样,其余类的代码如下:

SavingsAccount8类(父类):

abstract public class SavingsAccount8 {

private String id;
private double balance;
private static double total=0;//所有账户的总金额
protected SavingsAccount8(final Date date,final String id){
this.id=id;
balance=0;
date.show();
System.out.println("\t#"+id+" created");
}
protected final void error(final String msg) {
System.out.println("Error(#"+id+"):"+msg);
}
//记录一笔账,有日期、金额和说明(desc)
protected void record(final Date date,double amount,final String desc){
amount=Math.floor(amount*100+0.5)/100;//保留小数点后两位
total+=amount;
balance+=amount;
date.show();
System.out.println("\t#"+id+"\t"+amount+"\t"+balance+"\t"+desc);
}
public final String getId(){return id;}
public final double getBalance(){return balance;}
public static double getTotal(){return total;}
abstract public void deposit(final Date date,double amount,final String desc);
//取出现金,data为日期,amount为金额,desc为款项说明
abstract public void withdraw(final Date date,double amount,final String desc);
//结算(计算利息、年费等),每月结算一次,date为结算日期
abstract public void settle(final Date date);
public void show(){
System.out.print(id+"\tBalance: "+balance);
}

}

SavingsAccount81类(子类1):

public class SavingsAccount81 extends SavingsAccount8{
private Accumulator acc;//辅助计算利息的累加器
private double rate;//存款的年利率
public SavingsAccount81(final Date date,final String id,double rate){
super(date,id);
this.rate=rate;
acc=new Accumulator(date,0);
}
public final double getRate(){return rate;}
//存入和取出现金
public void deposit(final Date date,double amount,final String desc){
record(date,amount,desc);
acc.change(date, getBalance());
}
public void withdraw(final Date date,double amount,final String desc){
if(amount>getBalance())
System.out.println("not enough money");
else{
record(date,-amount,desc);
acc.change(date, getBalance());
}
}
public void settle(final Date date){
if(date.getMonth()==1) {
double interest=acc.getSum(date)*rate/date.distance(new Date(date.getYear()-1,1,1));
if(interest!=0)
record(date,interest,"interest");
acc.reset(date,getBalance());
}

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值