//当没有透支款项或不足以透支款项不足以支付当前所需时
result=false;
}
else{
balance=0.0;
overdraftAmount-=overdraftNeeded;
}
}
else{
balance=balance-amount;
}
returnresult;
}
}
5、删除当前的TestBanking类,复制实验模板中的TestBanking类并且修改当前的TestBanking类,其具体实现代码如下所示:
packagemybank.test;
//导入mybank包中的所有类
importmybank.Account;
importmybank.Bank;
importmybank.CheckingAccount;
importmybank.Customer;
importmybank.SavingsAccount;
publicclassTestBanking{
publicstaticvoidmain(String[]args){
Bankbank=newBank();
Customercustomer;
Accountaccount;
//建立银行客户和他们名下的账户信息
System.out.println("创建客户JaneSmith.");
bank.addCustomer("Jane","Simms");
customer=bank.getCustomer(0);
System.out.println("他名下创建的账户有余额500.00并且3%的利润.");
customer.setAccount(newSavingsAccount(500.00,0.03));
System.out.println("创建客户OwenBryant.");
bank.addCustomer("Owen","Bryant");
customer=bank.getCustomer
(1);
System.out.println("他名下创建的账户有余额500.00并且没有可透支款项.");
customer.setAccount(newCheckingAccount(500.00));
System.out.println("创建客户TimSoley.");
bank.addCustomer("Tim","Soley");
customer=bank.getCustomer
(2);
System.out.println("他名下创建的账户有余额500.00并且有500余额的可透支账户.");
customer.setAccount(newCheckingAccount(500.00,500.00));
System.out.println("创建客户MariaSoley.");
bank.addCustomer("Maria","Soley");
customer=bank.getCustomer(3);
System.out.println("Maria和她的丈夫共有着这份账户.");
customer.setAccount(bank.getCustomer
(2).getAccount());
System.out.println();
//说明各种账户所发生动作的类型并为SavingsAccount设定测试标准
System.out.println("已经将JaneSmith和其名下账户信息进行保存.");
customer=bank.getCustomer(0);
account=customer.getAccount();
//Performsomeaccounttransactions
System.out.println("Withdraw150.00:
"+account.withdraw(150.00));
System.out.println("Deposit22.50:
"+account.deposit(22.50));
System.out.println("Withdraw47.62:
"+account.withdraw(47.62));
System.out.println("Withdraw400.00:
"+account.withdraw(400.00));
//Printoutthefinalaccountbalance
System.out.println("客户["+customer.getLastName()
+","+customer.getFirstName()
+"]仍有余额"+account.getBalance());
System.out.println();
//测试CheckingAccount中的透支款项
System.out.println("已经将客户OwenBryant和他的账户进行更新,没有透支款项.");
customer=bank.getCustomer
(1);
account=customer.getAccount();
//Performsomeaccounttransactions
System.out.println("Withdraw150.00:
"+account.withdraw(150.00));
System.out.println("Deposit22.50:
"+account.deposit(22.50));
System.out.println("Withdraw47.62:
"+account.withdraw(47.62));
System.out.println("Withdraw400.00:
"+account.withdraw(400.00));
//Printoutthefinalaccountbalance
System.out.println("客户["+customer.getLastName()
+","+customer.getFirstName()
+"]仍有余额"+account.getBalance());
System.out.println();
System.out.println("检查并更新过客户TimSoley和他的账户信息,其中存在透支款项.");
customer=bank.getCustomer
(2);
account=customer.getAccount();
//Performsomeaccounttransactions
System.out.println("Withdraw150.00:
"+account.withdraw(150.00));
System.out.println("Deposit22.50:
"+account.deposit(22.50));
System.out.println("Withdraw47.62:
"+account.withdraw(47.62));
System.out.println("Withdraw400.00:
"+account.withdraw(400.00));
//Printoutthefinalaccountbalance
System.out.println("客户["+customer.getLastName()
+","+customer.getFirstName()
+"]仍有余额"+account.getBalance());
System.out.println();
System.out.println("检查并更新客户MariaSoley和他丈夫共同持有的账户.");
customer=bank.getCustomer(3);
account=customer.getAccount();
//Performsomeaccounttransactions
System.out.println("Deposit150.00:
"+account.deposit(150.00));
System.out.println("Withdraw750.00:
"+account.withdraw(750.00));
//Printoutthefinalaccountbalance
System.out.println("客户["+customer.getLastName()
+","+customer.getFirstName()
+"]仍有余额"+account.getBalance());
}
}
6、运行TestBanking程序
其调试运行结果如下所示:
五、实验小结:
1、能够使用继承和方法覆盖创建子类,如SavingsAccount类和CheckingAccount类均继承自Account类
2、学会使用综合使用面向对象技术,根据现实问题抽象设计模拟银行账户类,如透支款项,存取账户,共有财产等
实验三、使用接口和抽象类设计实验
一、实验目的
练习使用抽象类和接口,并探究这些类组件的多态属性。
二、实验设备与环境
装有JAVA语言工具软件(NetbeansIDE6.5)的计算机。
三、实验内容
创建一个来源于抽象类Animal的动物层次。
几个动物类将实现一个叫做Pet的接口。
层次结构见习题册P7-12图7-2。
具体步骤如下:
(1)按照7-13页的要求创建Pet接口
(2)按要求创建Animal类
(3)创建TestAnimals类
(4)编译TestAnimals类
(5)运行TestAnimals程序
四、实验过程及结果
1、打开Eclipse→新建Project→Excerise2
2、依据书本上的UML类图,得知接口Pet将实现Cat和Fish类中的方法,并且在该接口中应当声明三个由Public修饰的方法:
getName,setName和Play,据此,得出接口Pet的代码如下所示:
packageExecrise2;
publicinterfacePet{
publicvoidsetName(Stringname);
publicStringgetName();
publicvoidplay();
}
3、创建Animal类,要求声明并初始化一个受保护的实例变量“legs”,来记录动物腿的数目,同时应当抽象声明方法“eat”和具体方法“walk”,依据上述要求,实现代码如下图所示:
packageExecrise2;
publicabstractclassAnimal{
protectedintlegs;
protectedAnimal(intlegs){
this.legs=legs;
}
publicabstractvoideat();//抽象方法eat
publicvoidwalk(){//具体方法walk
System.out.println("这个动物用"+legs+"腿走路.");
}}
4、创建Spider类,要求Spider类继承自Animal类,并且声明一个构造器和定以一个方法eat,其代码如下图所示:
packageExecrise2;
publicclassSpiderextendsAnimal{
publicSpider(){
super(8);//蜘蛛有八只腿
}
publicvoideat(){//蜘蛛具体吃什么
System.out.println("蜘蛛结网捕食飞行的昆虫.");
}
}
5、创建Cat类,要求能够包含一个实例变量来存储宠物的名字,同样的,需要声明一个构造器来指明猫有多少条腿,并实现Pet接口的方法,具体代码如下:
packageExecrise2;
publicclassCatexten