Java实验五 简单银行账户应用程序输入输出处理5.docx
- 文档编号:9820596
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:14
- 大小:46.72KB
Java实验五 简单银行账户应用程序输入输出处理5.docx
《Java实验五 简单银行账户应用程序输入输出处理5.docx》由会员分享,可在线阅读,更多相关《Java实验五 简单银行账户应用程序输入输出处理5.docx(14页珍藏版)》请在冰点文库上搜索。
Java实验五简单银行账户应用程序输入输出处理5
实验五简单银行账户应用程序(输入/输出处理)
一、实验目的
1.熟练运用JavaI/OAPI读取/写入数据文件
2.熟练掌握Java面向对象的编程
3.能够定义、创建并使用异常类
4.能够使用集合(Collection框架)表示关联
二、预备知识
1.JDK的安装设置:
JDK/JRE/JVM;
2.Eclipse集成开发环境的绿色安装;
3.掌握Java语言的面向对象特性(封装性、继承性、多态性);
4.掌握Java应用编程关于异常、输入输出流、容器等相关知识。
三、实验描述
1.实验类型:
设计
2.实验学时:
2学时
3.实验内容:
1项(参照四)
四、实验内容
(1)检查所使用的计算机系统:
1.确认是否已安装JDK,并确认系统的环境变量设置;
2.确认目录D:
\eclipse3.3,是否已绿色安装Eclipse集成开发环境。
(2)实验内容:
设计Java类文件,并作简单测试
具体要求:
1.创建项目:
BankProject;
2.创建异常类OverdraftException,它由Account类的withdraw方法抛出;
·要求扩展Exception;
·添加一个double类型的私有实例变量deficit;
·添加一个有两个参数的公有构造器:
message和deficit。
Message参数应传递给超类构造器。
deficit参数初始化deficit实例变量;
·增加一个公有存取器getDeficit()。
3.修改Account类:
·修改deposit方法使它不返回值(即void);
·修改withdraw方法使它不返回值(即void),声明该方法抛出OverdraftException异常。
修改代码以抛出新异常,指明异常原因和赤字数额。
4.修改CheckingAccount类:
·修改withdraw方法使它无返回值(即void),声明该方法抛出OverdraftException异常。
·修改代码以抛出新异常,有两种情况需要处理:
一是存在没有透支保护的赤字;二是overdraftProtection数额不足以弥补赤字。
5.修改Customer类:
·将accounts实例变量的声明修改为List
·修改构造器,将accounts实例变量初始化为新的ArrayList对象;
·修改addAccount方法,使用add方法;
·修改getAccount方法,使用get方法;
·修改getNumberOfAccounts方法,使用size方法。
6.创建Bank类:
·位于包com.mybank.domain中;
·声明customers实例变量为List
·通过静态初始化块,将customers实例变量初始化为新的ArrayList对象;
·创建addCustomer方法,使用add方法;
·创建getCustomer方法,使用get方法;
·创建getNumberOfCustomers方法,使用size方法。
7.读取数据文件
·创建资源文件test.dat,该文件存放用户账户的基本信息;
·创建DataSource类:
位于com.mybank.data包中;
·dataFile实例变量;添加公有构造器,该构造器带有一个字符串参数dataFilePath并初始化dataFile实例变量;
·添加公有方法loadData,要求使用Scanner类格式化读取Bank客户对象和每个客户的账户对象。
8.创建CustomerReport类:
·位于包com.mybank.report中;
·添加公有方法generateReport,要求利用InputStream/OutputStream或者Reader/Writer格式化输出银行的客户及账户信息。
9.创建TestReport类:
·位于包com.mybank.test中;
·要求初始化DataSource、CustomerReport类实例对象,分别调用loadData方法和generateReport方法实现格式化读取数据和输出数据。
五、实验要求及总结
1.结合上课内容,对上述程序先阅读,然后上机并调试程序,并对实验结果写出你自己的分析结论。
2.整理上机步骤,总结经验和体会。
3.完成实验报告和上交程序。
实验五:
实验结果:
注册用户名,选择checkingaccount账户类型,初始化500元,赤字为100元,先存100元,再取1000元,抛出异常,最后通过Bufferedreader和Scanner读取信息。
OverdraftException.java:
packagecom.mybank.domain;
publicclassOverdraftExceptionextendsException{//创建异常类OverdraftException
privatedoubledeficit;
publicOverdraftException(Stringmessage,doubledeficit){//有两个参数的公有构造器:
message和deficit
super(message);
this.deficit=deficit;
}
publicdoublegetdefict(){//一个公有存取器getDeficit()
returndeficit;
}
}
Account.java:
packagecom.mybank.domain;
importcom.mybank.test.*;
publicclassAccount{
privatedoublebalance;
publicvoidinitBalance(doublebalance){
this.balance=balance;
}
publicvoiddeposit(doubleamt){//修改deposit方法使它不返回值(即void)
balance=balance+amt;
}
publicvoidwithdraw(doubleamt)throwsOverdraftException{//修改withdraw方法使它不返回值(即void),
//声明该方法抛出OverdraftException异常
if(balance<=amt){
thrownewOverdraftException("超出余额",amt);
}else{
balance=balance-amt;
}
}
publicdoublegetBalance(){
returnbalance;
}
}
Checkingaccout.java:
packagecom.mybank.domain;
publicclassCheckingaccoutextendsAccount{
privatedoubleoverdraftamount;
publicCheckingaccout(intbalance,doubleoverdraftamount){
super.initBalance(balance);
this.overdraftamount=overdraftamount;
}
publicCheckingaccout(intbalance){
this(balance,0.0);
}
publicvoidwithdraw(doubleamount)throwsOverdraftException{// 修改withdraw方法使它无返回值(即void),
//声明该方法抛出OverdraftException异常。
if(this.getBalance() doubleoverdraftneeded=amount-this.getBalance(); if(overdraftamount thrownewOverdraftException("超出透支额度",amount); }else{ this.initBalance(this.getBalance()-amount); } }else{ this.initBalance(this.getBalance()-amount); } } } Customer1.java: packagecom.mybank.domain; importjava.util.*; publicclassCustomer1{ privateStringfirstname; privateStringlastname; List publicCustomer1(){ accounts=newArrayList } publicCustomer1(Stringfirstname,Stringlastname){//将accounts实例变量初始化为新的ArrayList对象 accounts=newArrayList this.firstname=firstname; this.lastname=lastname; } publicStringgetFirstName(){ returnfirstname; } publicStringgetLastName(){ returnlastname; } publicvoidaddaccout(Accountaccout){//addAccount方法,使用add方法 accounts.add(accout); } publicintgetnumberofaccout(){//getNumberOfAccounts方法,使用size方法 returnaccounts.size(); } publicAccountgetaccout(intindex){//getAccount方法,使用get方法; returnaccounts.get(index); } } Bank.java: packagecom.mybank.domain; importjava.util.ArrayList; importjava.util.LinkedList; importjava.util.List; importcom.mybank.test.*; publicclassBank{ List publicvoidaddCustomer(Customer1aa){//addCustomer方法,使用add方法; customer.add(aa); } publicintgetnumberofCustomer(){//getNumberOfCustomers方法,使用size方法 returncustomer.size(); } publicCustomer1getCustomer(intnumber){//getCustomer方法,使用get方法; returncustomer.get(number); } } DataSource.java: packagecom.mybank.data; importjava.io.*; importjava.util.*; publicclassDataSource{ privateStringdataFile;//dataFile实例变量 publicDataSource(StringdataFileSource){ dataFile=dataFileSource; } publicvoidloadData(){//公有方法loadData Filefile=newFile(dataFile); Scannersc=null; Stringtemp; doubletemp1; try{ sc=newScanner(file); while(sc.hasNext()){ try{ temp=sc.next(); System.out.println(temp); }catch(InputMismatchExceptionee){ temp1=sc.nextDouble(); System.out.println(temp1); } } }catch(FileNotFoundExceptione){ System.out.println(e); } } } CustomerReport.java: packagecom.mybank.report; importjava.io.*; importjava.util.*; publicclassCustomerReport{ publicvoidsaveinfo(Stringfilename,Stringa,Stringb,doubleleftmoney){//实现数据写入文件 try{ Strings; s=a+b; Filefile=newFile(filename); FileWriterone=newFileWriter(file); BufferedWriterout=newBufferedWriter(one); out.write(s+"\n"+"leftmoney: "+leftmoney); out.close(); }catch(IOExceptionee){ System.out.println("Filereaderror"+ee); } } publicvoidgenerateReport(Stringfilename){//公有方法generateReport,实现数据读 Strings; try{ Filefile=newFile(filename); FileReaderone=newFileReader(file); BufferedReaderin=newBufferedReader(one); while((s=in.readLine())! =null){ System.out.println(s); } in.close(); }catch(IOExceptionee){ System.out.println("Filereaderror"+ee); } } } TestReport.java: packagecom.mybank.test; importcom.mybank.data.*; importcom.mybank.domain.*; importcom.mybank.report.*; importjava.util.*; publicclassTestReport{ publicstaticvoidmain(String[]args){ Scannerread=newScanner(System.in); CustomerReportdata1=newCustomerReport(); DataSourcedata=newDataSource("test.dat"); Bankbank=newBank(); Stringa,b; doubleleft=0; doublec,d; intt=0,count=0; outer: //外层循环,实现用户注册 for(;;){ System.out.println("inputyourfirstnameandlastname: ");//用户名 a=read.next(); b=read.next(); Customer1customer=newCustomer1(a,b); bank.addCustomer(customer); System.out.println("注册账户: 1.savingaccount2.checkingaccount");//账户类型 t=read.nextInt(); switch(t){ case1: Accountaccount=newSavingaccout(500,0.02); customer.addaccout(account);break; case2: Accountaccount1=newCheckingaccout(500,100);customer.addaccout(account1);break; } inner: //内层循环,实现用户具体操作 for(;;){ System.out.println("1: deposit+money2: withdraw+money3: donothing(inputyouchoice: )4: exit"); intj=0; doublenumber=0; j=read.nextInt(); switch(j){ case2: System.out.println("inputthenumber: "); number=read.nextDouble(); try{ customer.getaccout(count).withdraw(number); } catch(OverdraftExceptione){ System.out.println(e.toString()); } left=customer.getaccout(count).getBalance(); System.out.println("余额: "+left); break; case1: System.out.println("inputthenumber: "); number=read.nextDouble(); customer.getaccout(count).deposit(number); left=customer.getaccout(count).getBalance(); System.out.println("余额: "+left); break; case3: breakinner; case4: breakouter; } } count++; } data1.saveinfo("test.dat",a,b,left);//将用户信息写入test。 dat System.out.println("inforeadbyBUfferedreader\n");//读取用户数据 data1.generateReport("test.dat"); System.out.println("inforeadbyScanner\n"); data.loadData(); } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java实验五 简单银行账户应用程序输入输出处理5 Java 实验 简单 银行 账户 应用程序 输入输出 处理