Java实验五 简单银行账户应用程序(输入输出处理) - 5

更新时间:2024-04-02 17:33:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验五 简单银行账户应用程序(输入/输出处理)

一、实验目的

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类型; ·通过静态初始化块,将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读取信息。

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 customer = new ArrayList();// 声明customers实例变量为List类型 public void addCustomer(Customer1 aa) {// addCustomer方法,使用add方法; customer.add(aa); } public int getnumberofCustomer() {// getNumberOfCustomers方法,使用size方法 return customer.size();

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

本文来源:https://www.bwwdw.com/article/w4dr.html

Top