Java实验五 简单银行账户应用程序(输入输出处理) - 5
更新时间:2024-04-02 17:33:01 阅读量: 综合文库 文档下载
- java实验五实验报告推荐度:
- 相关推荐
实验五 简单银行账户应用程序(输入/输出处理)
一、实验目的
1. 熟练运用Java I/O API读取/写入数据文件 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类型,不再使用numberOfAccounts
1
实例变量; ·修改构造器,将accounts实例变量初始化为新的ArrayList对象; ·修改addAccount方法,使用add方法; ·修改getAccount方法,使用get方法; ·修改getNumberOfAccounts方法,使用size方法。 6. 创建Bank类: ·位于包com.mybank.domain中; ·声明customers实例变量为List
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读取信息。
2
OverdraftException.java:
package com.mybank.domain;
public class OverdraftException extends Exception {// 创建异常类OverdraftException private double deficit; public OverdraftException(String message, double deficit) {// 有两个参数的公有构造器:message和deficit super(message); this.deficit = deficit; } public double getdefict() {// 一个公有存取器getDeficit() return deficit; } }
Account.java:
package com.mybank.domain;
3
import com.mybank.test.*; public class Account { private double balance; public void initBalance(double balance) { this.balance = balance; } public void deposit(double amt) {// 修改deposit方法使它不返回值(即void) balance = balance + amt; } public void withdraw(double amt) throws OverdraftException {// 修改withdraw方法使它不返回值(即void), // 声明该方法抛出OverdraftException异常 if (balance <= amt) { throw new OverdraftException(\超出余额\ } else { balance = balance - amt; } } public double getBalance() { return balance; } }
Checkingaccout.java:
package com.mybank.domain;
public class Checkingaccout extends Account { private double overdraftamount; public Checkingaccout(int balance, double overdraftamount) { super.initBalance(balance); this.overdraftamount = overdraftamount; }
4
public Checkingaccout(int balance) { this(balance, 0.0); } public void withdraw(double amount) throws OverdraftException {// 修改withdraw方法使它无返回值(即void), // 声明该方法抛出OverdraftException异常。 if (this.getBalance() < amount) { double overdraftneeded = amount - this.getBalance(); if (overdraftamount < overdraftneeded) { throw new OverdraftException(\超出透支额度\ } else { this.initBalance(this.getBalance() - amount); } } else { this.initBalance(this.getBalance() - amount); } } }
Customer1.java:
package com.mybank.domain; import java.util.*;
public class Customer1 { private String firstname; private String lastname; List accounts;// 将accounts实例变量的声明修改为List类型, public Customer1() { accounts = new ArrayList(); } public Customer1(String firstname, String lastname) {// 将accounts实例变量初始化为新的ArrayList对象 accounts = new ArrayList(); this.firstname = firstname;
5
}
}
this.lastname = lastname;
public String getFirstName() { return firstname; }
public String getLastName() { return lastname; }
public void addaccout(Account accout) {// addAccount方法,使用add方法 accounts.add(accout); }
public int getnumberofaccout() {// getNumberOfAccounts方法,使用size方法 return accounts.size(); }
public Account getaccout(int index) {// getAccount方法,使用get方法; return accounts.get(index); }
Bank .java:
package com.mybank.domain; import java.util.ArrayList; import java.util.LinkedList; import java.util.List;
import com.mybank.test.*; public class Bank { List
6
}
public Customer1 getCustomer(int number) {// getCustomer方法,使用get方法; return customer.get(number); }
}
DataSource.java:
package com.mybank.data; import java.io.*; import java.util.*;
public class DataSource { private String dataFile;// dataFile实例变量 public DataSource(String dataFileSource) { dataFile = dataFileSource; } public void loadData() {// 公有方法loadData File file = new File(dataFile); Scanner sc = null; String temp; double temp1; try { sc = new Scanner(file); while (sc.hasNext()) { try { temp = sc.next(); System.out.println(temp); } catch (InputMismatchException ee) { temp1 = sc.nextDouble(); System.out.println(temp1); } } } catch (FileNotFoundException e) { System.out.println(e); } } }
CustomerReport.java:
7
package com.mybank.report; import java.io.*; import java.util.*;
public class CustomerReport { public void saveinfo(String filename, String a, String b, double leftmoney) {// 实现数据写入文件 try { String s; s = a + b; File file = new File(filename); FileWriter one = new FileWriter(file); BufferedWriter out = new BufferedWriter(one); out.write(s + \ out.close(); } catch (IOException ee) { System.out.println(\ } } public void generateReport(String filename) {// 公有方法generateReport,实现数据读 String s; try { File file = new File(filename); FileReader one = new FileReader(file); BufferedReader in = new BufferedReader(one); while ((s = in.readLine()) != null) { System.out.println(s); } in.close(); } catch (IOException ee) { System.out.println(\ } } }
TestReport.java:
package com.mybank.test; import com.mybank.data.*; import com.mybank.domain.*; import com.mybank.report.*; import java.util.*;
8
public class TestReport { public static void main(String[] args) { Scanner read=new Scanner(System.in);
CustomerReport data1=new CustomerReport(); DataSource data=new DataSource(\ Bank bank=new Bank(); String a,b; double left=0; double c,d;
int t=0,count=0;
outer://外层循环,实现用户注册 for(;;){ System.out.println(\用户名 a=read.next(); b=read.next(); Customer1 customer=new Customer1(a,b); bank.addCustomer(customer); System.out.println(\注册账户:1.savingaccount 2.checkingaccount\账户类型 t=read.nextInt(); switch(t){ case 1:Account account=new Savingaccout(500,0.02); customer.addaccout(account);break; case2:Account account1=new Checkingaccout(500,100);customer.addaccout(account1);break; } inner://内层循环,实现用户具体操作 for(;;){ System.out.println(\2:withdraw+money 3:do nothing(input you choice:) 4:exit\ int j=0; double number=0; j=read.nextInt(); switch(j){ case 2:System.out.println(\ number=read.nextDouble(); try{ customer.getaccout(count).withdraw(number); } catch(OverdraftException e){ System.out.println(e.toString()); } left= customer.getaccout(count).getBalance(); System.out.println(\余额:\ break;
9
case 1:System.out.println(\ number=read.nextDouble(); customer.getaccout(count).deposit(number); left= customer.getaccout(count).getBalance(); System.out.println(\余额:\ break; case 3:break inner; case 4:break outer; } } count++; }
data1.saveinfo(\将用户信息写入test。dat
System.out.println(\读取用户数据 data1.generateReport(\
System.out.println(\ data.loadData(); } }
10
正在阅读:
Java实验五 简单银行账户应用程序(输入输出处理) - 504-02
初中综合实践活动实施方案01-12
150万吨焦炉烟气回收项目经济可研分析及锅炉开车操作规程03-19
机器人创新设计作品说明材料07-01
义务教育教科书英语(Go for it!)七年级上册tapescripts06-14
广东省高明实验中学高中语文粤教版选修传记选读学案:在哈金森工厂 精品10-06
毕节职卫台帐(空表)05-05
听爸爸讲家族孝道传承作文07-13
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 账户
- 应用程序
- 输出
- 输入
- 实验
- 简单
- 银行
- 处理
- Java