当前位置:文档之家› 天津理工大学Java实验3实验报告

天津理工大学Java实验3实验报告

天津理工大学计算机科学与工程学院实验报告2016 至2017 学年第一学期课程名称Java语言程序设计学号学生姓名年级2015级专业计算机科学与技术教学班号实验地点7-220实验时间2017年11月27日第5节至第6节主讲教师董玉涛辅导教师董玉涛实验(三)实验名称银行业务管理软件软件环境Windows 8.1,Java SE 9,JDK 8,Eclipse硬件环境PC机实验目的1.理解并掌握面向对象程序设计中类与对象的基本概念2.理解并掌握Java中定义类、创建对象、使用对象成员的方法3. 理解并掌握Java中继承机制及实现方法4. 掌握Java中接口用法5. 掌握Java中多态的实现方法实验内容(应包括实验题目、实验要求、实验任务等)某银行有许多储户,每个储户可以拥有一个或多个帐号。

现要求你开发一个软件,管理银行储户与帐号业务。

见图1。

Bank类中有一个customers集合,用来存储所有的Customer(储户)对象,addCustomer方法用于向该集合中加储户,getCustomer方法根据下标值取某个储户,getNumOfCustomers方法取储户总数,getCustomers方法返回储户的Iterator,以便获得每个储户对象。

Customer类有一个accounts集合,用来存储某个储户的所有Account(帐号)对象,addAccount方法用于向该集合中加帐号,getAccount方法根据下标值取该储户的某个帐号,getNumOfAccounts方法取该储户的帐号总数,getAccounts方法返回该储户的帐号的Iterator,以便获得每个帐号对象。

Account类是抽象类,有一个balance属性,代表余额。

deposit方法表示存款,amount参数是存款额。

withdraw方法表示取款,取款额amount如果超出了余额就会抛出透支异常,我们需要自己定义一个OverdraftException类来表示这个异常,当抛出透支异常时,不进行取款交易,并报告用户此项错误。

SavingsAccount类表示存款帐号,继承Account,新增一个属性interestRate, 代表利率。

CheckingAccount类表示大额存款帐号,也继承Account,它有一个叫canOverdraft的属性,是一个boolean值,代表该帐号能否透支(true-能,false -否);它还有一个叫maxOverdraft的属性,表示该帐号允许的最大透支额。

这个类的withdraw(取款)方法需要考虑的因素比较多:在发生透支时,如果帐号不允许透支(canOverdraft=false),则抛出OverdraftException异常并退出交易;如果允许透支(canOverdraft=true),但透支额(amount-balance)超过最大透支额的话,也抛出OverdraftException异常并退出交易;只有在不发生透支或透支额小于最大透支额时交易才能正常进行。

另外,在每次进行透支交易时,最大透支额(maxOverdraft)应做调整,以便使该帐号的最大透支额随透支次数的增加而不断减少,从而可以避免透支的滥用,阻止信用膨胀。

CheckingAccount类有两个构造方法,只带一个参数的构造方法用来初始化balance,同时设定canOverdraft=false,maxOverdraft=0.00。

CustomerReport类用来显示每个储户的姓名以及他所持有的帐号的类别和余额,以报表的形式输出。

根据以上描述,创建一个TestBanking类,并在其main方法中添加若干储户和帐号,然后模拟存款、取款业务,并最终输出一张完整的报表。

采用下表中的数据进行模拟:帐号储户姓名Savings Account Checking Account Jane Simms SavingsAccount (500.00, 0.05) CheckingAccount (200.00, true, 400.00)Owen Bryant 无CheckingAccount (200.00)Tim Soley SavingsAccount (1500.00, 0.05) CheckingAccount (300.00)Maria Soley SavingsAccount (150.00, 0.05) 与Tim Soley共享一个CheckingAccount输出报表格式如下:CUSTOMERS REPORT==================储户姓名:Jane SimmsSavings Account:当前余额是¥XXXXChecking Account:当前余额是¥XXXX储户姓名:Owen BryantChecking Account:当前余额是¥XXXX储户姓名:Tim SoleySavings Account:当前余额是¥XXXXChecking Account:当前余额是¥XXXX储户姓名:Maria SoleySavings Account:当前余额是¥XXXXChecking Account:当前余额是¥XXXX实验过程与实验结果(可包括实验实施的步骤、算法描述、流程、结论等)一、实验步骤与算法描述(1)定义一个抽象基类Account(2)定义一个BANK类,在类中定义customers集合,用来存储所有的Customer对象。

类中包含4个方法:addCustomer方法用于向该集合中加储户;getCustomer方法根据下标值取某个储户;getNumOfCustomers方法取储户总数;getCustomers方法返回储户的Iterator,以便获得每个储户对象。

(3)定义一个CUSTOMER类,在类中定义一个accounts集合,用来存储某个储户的所有Account对象。

类中包含4个方法:addAccount方法用于向该集合中加帐号;getAccount方法根据下标值取该储户的某个帐号;getNumOfAccounts方法取该储户的帐号总数;getAccounts方法返回该储户的帐号的Iterator,以便获得每个帐号对象。

(4)定义一个SAVINGSACCOUNT类,继承Account,新增一个属性interestRate, 代表利率。

(5)定义一个CheckingAccount类,继承Account,按照题目要求相应在类中声明两个属性:canOverdraft与maxOverdraft的属性,(6)定义一个CustomerReport类,用来显示每个储户的姓名以及他所持有的帐号的类别和余额,以报表的形式输出。

(7)创建TESTMAIN主类,调用上述各类的方法。

并在其main方法中添加相应的储户和帐号,模拟存款、取款业务。

二、实验结果:三、实验分析总结本次实验中,主要练习编译了跟抽象类有关的相关程序。

其中主要包括已知抽象方法编写抽象类、抽象类抽象方法实现多态性、通过定义多个子类来实现对类的继承。

通过本次实验,基本掌握了实现多态的方法,也练习了抽象类和抽象方法的定义和使用。

以后也还需要多加练习,能更加熟悉。

同时,编写程序中遇到问题再所难免,应耐心探究其中的原因,从出现问题的地方起,并联系前后程序,仔细推敲,逐个排查。

直到最终搞清为止。

package ex3;public abstract class Account{protected double balance;public Account(double d){this.balance=d;}public double getBalance(){return this.balance;}public void setBalance(double newBalance){this.balance=newBalance;}protected void deposit(double amount){this.balance+=amount;}protected void withdraw(double amount) throws OverdraftException {if(balance<amount){throw new OverdraftException("取款超过余额");}this.balance-=amount;}}package ex3;import java.util.*;public class BANK{List<CUSTOMER> customers=new ArrayList<CUSTOMER>();public BANK(){}public void addCustomer(String first,String last){CUSTOMER cstm=new CUSTOMER(first,last);customers.add(cstm);}public CUSTOMER getCustomer(int i){List<CUSTOMER> list=new ArrayList<CUSTOMER>();Iterator<CUSTOMER> it=customers.iterator();while(it.hasNext()){CUSTOMER temp=it.next();list.add(temp);}return list.get(i-1);}public int getNumOfCustomers(){List<CUSTOMER> list=new ArrayList<CUSTOMER>();Iterator<CUSTOMER> it=customers.iterator();while(it.hasNext()){CUSTOMER temp=it.next();list.add(temp);}return list.size();}public Iterator<CUSTOMER> getCustomers(){Iterator<CUSTOMER> it=customers.iterator();return it;}}package ex3;public class CHECACCOUNT extends Account{public CHECACCOUNT(double bal){super(bal);canOverdraft=false;maxOverdraft=0.00;}public CHECACCOUNT(double bal,boolean initcan,double initmax) {super(bal);canOverdraft=initcan;maxOverdraft=initmax;}protected boolean canOverdraft;protected double maxOverdraft;protected void deposit(double amount){this.balance+=amount;}public void withdraw(double amount) throws OverdraftException{if(balance<amount && canOverdraft==false){throw new OverdraftException("不允许透支!");}if(canOverdraft==true && maxOverdraft<(amount-balance)){throw new OverdraftException("超过透支限额!");}balance-=amount;if(balance<0){maxOverdraft+=balance;}}}package ex3;import java.util.*;public class CUSTOMER{String firstName;String lastName;List<Account> accounts=new ArrayList<Account>();public CUSTOMER(String first,String last){this.firstName=first;stName=last;}String getName(){return stName+" "+this.firstName;}public void addAccount(Account acc){accounts.add(acc);}public Account getAccount(int i){List<Account> list=new ArrayList<Account>();Iterator<Account> it=accounts.iterator();while(it.hasNext()){Account temp=it.next();list.add(temp);}return list.get(i-1);}public int getNumOfAccounts(){List<Account> list=new ArrayList<Account>();Iterator<Account> it=accounts.iterator();while(it.hasNext()){Account temp=it.next();list.add(temp);}return list.size();}public Iterator<Account> getAccounts(){Iterator<Account> it=accounts.iterator();return it;}}package ex3;public class CUSTOMERREPORT {public CUSTOMERREPORT(){}public void generateReport(BANK bank){System.out.println("CUSTOMERS REPORT");System.out.println("==================");System.out.println("储户姓名:"+bank.getCustomer(1).getName());System.out.println("Savings Account:当前余额是¥"+bank.getCustomer(1).getAccount(1).getBalance());System.out.println("Checking Account:当前余额是¥"+bank.getCustomer(1).getAccount(2).getBalance());System.out.println();System.out.println("储户姓名:"+bank.getCustomer(2).getName());System.out.println("Checking Account:当前余额是¥"+bank.getCustomer(2).getAccount(1).getBalance());System.out.println();System.out.println("储户姓名:"+bank.getCustomer(3).getName());System.out.println("Savings Account:当前余额是¥"+bank.getCustomer(3).getAccount(1).getBalance());System.out.println("Checking Account:当前余额是¥"+bank.getCustomer(3).getAccount(2).getBalance());System.out.println();System.out.println("储户姓名:"+bank.getCustomer(4).getName());System.out.println("Savings Account:当前余额是¥"+bank.getCustomer(4).getAccount(1).getBalance());System.out.println("Checking Account:当前余额是¥"+bank.getCustomer(4).getAccount(2).getBalance());}}package ex3;public class OverdraftException extends Exception{private static final long serialVersionUID = 1L;public OverdraftException(){super();}public OverdraftException(String msg){super(msg);}}package ex3;public class SA VING extends Account{double interestRate;public SA VING(double d, double e){super(d);this.interestRate=e;}}package ex3;public class TESTMAIN{public static void main(String[] args){BANK bank=new BANK();bank.addCustomer("Simms", "Jane");bank.addCustomer("Bryant", "Owen");bank.addCustomer("Soley", "Tim");bank.addCustomer("Soley", "Maria");SA VING saving=new SA VING(500.00,0.05);CHECACCOUNT checking=new CHECACCOUNT (200.00, true, 400.00);bank.getCustomer(1).addAccount(saving);bank.getCustomer(1).addAccount(checking);checking=new CHECACCOUNT (200.00);bank.getCustomer(2).addAccount(checking);saving=new SA VING(1500.00, 0.05);checking=new CHECACCOUNT (200.00, true, 400.00);bank.getCustomer(3).addAccount(saving);计算机科学与工程系bank.getCustomer(3).addAccount(checking);saving=new SA VING(150.00, 0.05);bank.getCustomer(4).addAccount(saving);bank.getCustomer(4).addAccount(checking);CUSTOMERREPORT cr=new CUSTOMERREPORT();cr.generateReport(bank);}}11。

相关主题