天津理工大学Java实验3实验报告_第1页
天津理工大学Java实验3实验报告_第2页
天津理工大学Java实验3实验报告_第3页
天津理工大学Java实验3实验报告_第4页
天津理工大学Java实验3实验报告_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、天津理工大学计算机科学与工程学院实验报告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中

2、多态的实现方法 实验内容(应包括实验题目、实验要求、实验任务等)某银行有许多储户,每个储户可以拥有一个或多个帐号。现要求你开发一个软件,管理银行储户与帐号业务。见图1。Bank类中有一个customers集合,用来存储所有的Customer(储户)对象,addCustomer方法用于向该集合中加储户,getCustomer方法根据下标值取某个储户,getNumOfCustomers方法取储户总数,getCustomers方法返回储户的Iterator,以便获得每个储户对象。Customer类有一个accounts集合,用来存储某个储户的所有Account(帐号)对象,addAccount方法用

3、于向该集合中加帐号,getAccount方法根据下标值取该储户的某个帐号,getNumOfAccounts方法取该储户的帐号总数,getAccounts方法返回该储户的帐号的Iterator,以便获得每个帐号对象。Account类是抽象类,有一个balance属性,代表余额。deposit方法表示存款,amount参数是存款额。withdraw方法表示取款,取款额amount如果超出了余额就会抛出透支异常,我们需要自己定义一个OverdraftException类来表示这个异常,当抛出透支异常时,不进行取款交易,并报告用户此项错误。SavingsAccount类表示存款帐号,继承Account

4、,新增一个属性interestRate, 代表利率。CheckingAccount类表示大额存款帐号,也继承Account,它有一个叫canOverdraft的属性,是一个boolean值,代表该帐号能否透支(true能,false否);它还有一个叫maxOverdraft的属性,表示该帐号允许的最大透支额。这个类的withdraw(取款)方法需要考虑的因素比较多:在发生透支时,如果帐号不允许透支(canOverdraft=false),则抛出OverdraftException异常并退出交易;如果允许透支(canOverdraft=true),但透支额(amount-balance)超过最大

5、透支额的话,也抛出OverdraftException异常并退出交易;只有在不发生透支或透支额小于最大透支额时交易才能正常进行。另外,在每次进行透支交易时,最大透支额(maxOverdraft)应做调整,以便使该帐号的最大透支额随透支次数的增加而不断减少,从而可以避免透支的滥用,阻止信用膨胀。CheckingAccount类有两个构造方法,只带一个参数的构造方法用来初始化balance,同时设定canOverdraft=false,maxOverdraft=0.00。CustomerReport类用来显示每个储户的姓名以及他所持有的帐号的类别和余额,以报表的形式输出。根据以上描述,创建一个Te

6、stBanking类,并在其main方法中添加若干储户和帐号,然后模拟存款、取款业务,并最终输出一张完整的报表。采用下表中的数据进行模拟:储户姓名帐 号Savings AccountChecking AccountJane SimmsSavingsAccount (500.00, 0.05)CheckingAccount (200.00, true, 400.00)Owen Bryant无CheckingAccount (200.00)Tim SoleySavingsAccount (1500.00, 0.05)CheckingAccount (300.00)Maria SoleySaving

7、sAccount (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:当前余额是¥XXXXCh

8、ecking Account:当前余额是¥XXXX实验过程与实验结果(可包括实验实施的步骤、算法描述、流程、结论等)一、 实验步骤与算法描述(1) 定义一个抽象基类Account(2) 定义一个BANK类, 在类中定义customers集合,用来存储所有的Customer对象。类中包含4个方法:addCustomer方法用于向该集合中加储户;getCustomer方法根据下标值取某个储户;getNumOfCustomers方法取储户总数;getCustomers方法返回储户的Iterator,以便获得每个储户对象。(3) 定义一个CUSTOMER类,在类中定义一个accounts集合,用来存储

9、某个储户的所有Account对象。类中包含4个方法:addAccount方法用于向该集合中加帐号;getAccount方法根据下标值取该储户的某个帐号;getNumOfAccounts方法取该储户的帐号总数;getAccounts方法返回该储户的帐号的Iterator,以便获得每个帐号对象。(4) 定义一个SAVINGSACCOUNT类,继承Account,新增一个属性interestRate, 代表利率。(5)定义一个CheckingAccount类,继承Account,按照题目要求相应在类中声明两个属性: canOverdraft与 maxOverdraft的属性, (6)定义一个Cust

10、omerReport类,用来显示每个储户的姓名以及他所持有的帐号的类别和余额,以报表的形式输出。(7)创建TESTMAIN主类,调用上述各类的方法。并在其main方法中添加相应的储户和帐号,模拟存款、取款业务。二、 实验结果:三、 实验分析总结本次实验中,主要练习编译了跟抽象类有关的相关程序。其中主要包括已知抽象方法编写抽象类、抽象类抽象方法实现多态性、通过定义多个子类来实现对类的继承。通过本次实验,基本掌握了实现多态的方法,也练习了抽象类和抽象方法的定义和使用。以后也还需要多加练习,能更加熟悉。同时,编写程序中遇到问题再所难免,应耐心探究其中的原因,从出现问题的地方起,并联系前后程序,仔细推

11、敲,逐个排查。直到最终搞清为止。附录(源程序清单)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;

12、protected void withdraw(double amount) throws OverdraftExceptionif(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 addCust

13、omer(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.g

14、et(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=custo

15、mers.iterator();return it;package ex3;public class CHECACCOUNT extends Accountpublic 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

16、;protected double maxOverdraft;protected void deposit(double amount)this.balance+=amount;public void withdraw(double amount) throws OverdraftExceptionif(balance<amount && canOverdraft=false)throw new OverdraftException("不允许透支!");if(canOverdraft=true && maxOverdraft<(a

17、mount-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

18、last)this.firstName=first;this.lastName=last;String getName()return this.lastName+" "+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();w

19、hile(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&l

20、t;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("储户姓名:&qu

21、ot;+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.

22、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(

23、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).getBal

24、ance();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 SAVING extends Account double interestRate;public SAVING(double d, double e)super(d);erestRate=e;package ex3;public class TESTMAIN public static void main(String args) BANK

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论