基于上一个实验Banking_5 ,代码先全部复制过来.

笔记心得:

1.SavingAccount() 需要两种构造方法,接受单个参数和两个的
2.Account 有两个类型 SavingAccount 和 CheckingAccount ,每个人都有两个或一个 ,
setAccount(Account account,int id) ,id=1 表示设置前者, id=2表示设置后者.
3.在 public class CustomerReport{}中 ,首先调用static Bank : Bank bank=Bank.getBank();
然后遍历其中元素, 可能存在只有一个账户,所以需要特判一下:
if(customer.getSavingAccount()!=null) 和if(customer.getCheckingAccount()!=null) ,解决这个空内存 的异常!

实验要求:

  

实验目的:
单例模式。 提示:
1. 修改 Bank 类,创建名为 getBanking 的公有静态方法,它返回一个 Bank 类的实例。 2. 单个的实例应是静态属性,且为私有。同样,Bank 构造器也应该是私有的 创建 CustomerReport 类 1.在前面的银行项目练习中,“客户报告”嵌入在 TestBanking 应用程序的 main 方法中。在这个练习中,改代码被放在,banking.reports 包的
CustomerReport 类中。您的任务是修改这个类,使其使用单一银行对象。 2. 查找标注为注释块/*** ***/的代码行.修改该行以检索单子银行对象。

文件工程组织: (基于上一个实验Banking_5 ,代码 先 全部复制过来,然后再具体改改.)

具体代码:

  Bank.java   (构造器方法私有化,private static Bank bank=new Bank();)

package Banking_6;
//要求使bank实现单例模式
public class Bank {
private Customer[] customers ; //用于存放客户
private int numberofCustomers; //用于记录Customer的个数 private Bank(){ ///构造器方法私有化
numberofCustomers=0;
customers = new Customer[100]; ///这里记得要初始化!不然要发生java.lang.NullPointerException
}
private static Bank bank=new Bank();
public static Bank getBank(){
return bank;
}
public void addCustomer(String f,String l){
int i= this.numberofCustomers;
customers[i]=new Customer(f,l);//新建一个构造对象
this.numberofCustomers++;
}
public int getNumOfCustomers() {
return numberofCustomers;
}
public Customer getCustomer(int index) {
return customers[index];
}
}

  CustomerReport.java  (打印全部Bank的信息 )

package Banking_6;
//遍历银行里的所有账户,进行汇报
public class CustomerReport {
Bank bank=Bank.getBank();
public void generateReport(){
System.out.println("=======================================");
System.out.println(" "+"CUSTOMERS REPORT");
System.out.println("=======================================");
int num=bank.getNumOfCustomers();
Customer customer;
Account Savingaccount,Checkingaccount;
for(int i=0;i<num;i++){
customer=bank.getCustomer(i);
Savingaccount = customer.getSavingAccount();
Checkingaccount=customer.getCheckingAccount();
//输出所有存款信息
System.out.println("Customer: "+customer.getFirstName()+" "+customer.getLastName());
if(customer.getSavingAccount()!=null)
System.out.println("SavingAccount: current balance is $"+customer.getSavingAccount().getBalance());
if(customer.getCheckingAccount()!=null)
System.out.println("CheckingAccount: current balance is $"+customer.getCheckingAccount().getBalance());
System.out.println();
}
} }

  TestBank.java

package TestBanks;
import Banking_6.*;
public class TestBanking_6 { public static void main(String[] args) {
Bank bank = Bank.getBank();
Customer customer;
CustomerReport report = new CustomerReport(); // Create several customers and their accounts
bank.addCustomer("Jane", "Simms");
customer = bank.getCustomer(0);
customer.setAccount(new SavingAccount(500.00, 0.05),1);
customer.setAccount(new CheckingAccount(200.00, 400.00),2); bank.addCustomer("Owen", "Bryant");
customer = bank.getCustomer(1);
customer.setAccount(new CheckingAccount(200.00),2); bank.addCustomer("Tim", "Soley");
customer = bank.getCustomer(2);
customer.setAccount(new SavingAccount(1500.00, 0.05),1);
customer.setAccount(new CheckingAccount(200.00),2); bank.addCustomer("Maria", "Soley");
customer = bank.getCustomer(3);
// Maria and Tim have a shared checking account
customer.setAccount(bank.getCustomer(2).getCheckingAccount(),1);
customer.setAccount(new SavingAccount(150.00, 0.05),2); // Generate a report
report.generateReport();
}
}

  Account.java

package Banking_6;
public class Account { protected double balance=0;//余额 ,uml前该变量是 '-'
public Account(double init_balance){
balance=init_balance;
}
public double getBalance() {
return balance;
}
public void setBalance(double b){this.balance=b;}
//存钱 public boolean deposit(double amt){
this.balance+=amt;return true;
}
//取钱
public Boolean withdraw(double amt) {
if(amt>this.balance)
return false;
else{
this.balance-=amt;
return true;
}
}
}

  TestBanking_6.java  (测试类) 

 package TestBanks;
import Banking_6.*;
public class TestBanking_6 { public static void main(String[] args) {
Bank bank = Bank.getBank();
Customer customer;
CustomerReport report = new CustomerReport(); // Create several customers and their accounts
bank.addCustomer("Jane", "Simms");
customer = bank.getCustomer(0);
customer.setAccount(new SavingAccount(500.00, 0.05),1);
customer.setAccount(new CheckingAccount(200.00, 400.00),2); bank.addCustomer("Owen", "Bryant");
customer = bank.getCustomer(1);
customer.setAccount(new CheckingAccount(200.00),2); bank.addCustomer("Tim", "Soley");
customer = bank.getCustomer(2);
customer.setAccount(new SavingAccount(1500.00, 0.05),1);
customer.setAccount(new CheckingAccount(200.00),2); bank.addCustomer("Maria", "Soley");
customer = bank.getCustomer(3);
// Maria and Tim have a shared checking account
customer.setAccount(bank.getCustomer(2).getCheckingAccount(),1);
customer.setAccount(new SavingAccount(150.00, 0.05),2); // Generate a report
report.generateReport();
}
}

输出结果:

=======================================
CUSTOMERS REPORT
=======================================
Customer: Jane Simms
SavingAccount: current balance is $500.0
CheckingAccount: current balance is $200.0 Customer: Owen Bryant
CheckingAccount: current balance is $200.0 Customer: Tim Soley
SavingAccount: current balance is $1500.0
CheckingAccount: current balance is $200.0 Customer: Maria Soley
SavingAccount: current balance is $200.0
CheckingAccount: current balance is $150.0

  

【Java 基础实验_Bank项目_06】单例模式(Static Bank) , 查询异常输出的更多相关文章

  1. Java基础-SSM之mybatis的统计函数和分页查询

    Java基础-SSM之mybatis的统计函数和分页查询 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  2. 【Java 基础 实验-抽象类应用的练习】(抽象类Employee被SalariedEmployee和HourEmployee继承 , 遍历,Scanner 输出)

    笔记总结: 1.Employee为抽象类,两个子类进行继承, public abstract double earning();两个子类分别实现 2.Employee[] emps[i].toStri ...

  3. Java基础知识强化02:import static 和 import

    1.import static静态导入是JDK1.5中的新特性.一般我们导入一个类都用 import com.....ClassName;而静态导入是这样:import static com..... ...

  4. 【Java基础-实验7】Banking_7 -添加银行透支扣款系统的 thorw异常机制

    实验基本要求: 实验题目 7:(在6基础上修改) 将建立一个 OverdraftException 异常,它由 Account 类的withdraw()方法 抛出. 实验目的: 自定义异常 实验说明: ...

  5. java基础部分小项目

    贪吃蛇项目 import java.awt.Color; import java.awt.Graphics; import java.awt.Toolkit; import java.awt.even ...

  6. JAVA基础知识(2)--关键字static的使用

    在Java类中声明属性.方法和内部类时,可使用关键字static作为修饰符,static标记的属性和方法可以由整个类进行共享,因此static修饰的属性称为类成员或者称为类方法:static修饰的方法 ...

  7. Java基础之类和对象、单例模式、继承

    Java类和对象 一般的类只能是public或者default的,若是public的,类名必须和文件名一样.一般在一个文件只写一个类,故这个类一般是加上public. 内部类还可以是private和p ...

  8. Java基础学习总结(10)——static关键字

    一.static关键字 原来一个类里面的成员变量,每new一个对象,这个对象就有一份自己的成员变量,因为这些成员变量都不是静态成员变量.对于static成员变量来说,这个成员变量只有一份,而且这一份是 ...

  9. Java基础自学小项目

    实现一个基于文本界面的<家庭记账软件> 需求:能够记录家庭的收入,支出,并能够收支明细表 主要涉及一下知识点: - 局部变量和基本数据类型 - 循环语句 - 分支语句 - 方法调用和返回值 ...

随机推荐

  1. leetcode1277 Count Square Submatrices with All Ones

    思路: 使用动态规划,dp[i][j]表示以(i, j)作为右下角的最大的全1矩阵的边长. 实现: class Solution { public: int countSquares(vector&l ...

  2. python 列表推导式 - python基础入门(16)

    截止到目前为止,python基础内容已经学习了50%左右,在学习编程过程中,我们不仅要学习python语法,同时也需要学习如何把自己代码写的更美观,效率更高. 一.什么是推导式 推导式是从一个或者多个 ...

  3. jquery入口函数的测试

    /*编写一个自定义的jquery框架*/ (function (window,undefined) { var njquery=function (selector ,) { return new j ...

  4. [转帖]Keccak简介

    Keccak简介 https://blog.csdn.net/chengqiuming/article/details/82819769 2018年09月23日 08:04:40 cakincqm 阅 ...

  5. java多线程上篇(一)

    操作系统与程序运行以及进程简介 一.线程与操作系统 操作系统是对计算机硬件资源的管理程序,是应用程序与计算机硬件交互的中间层,其本质仍旧是运行于硬件电路上的程序 对计算机硬件来说不存在操作系统,只是处 ...

  6. 通过JAX-WS实现WebService

    (一)服务端的创建 一,首先创建一个Web 项目,或者创建一个Web Service项目也行(差别就是后者在开始就设置了Web Service的调用方式) 二,在项目中创建一个类作为我们要发布的服务( ...

  7. 1205: 求一元二次方程的实数根(C)

    一.题目 acm.wust.edu.cn/problem.php?id=1205&soj=0 二.分析 一元二次方程有三个系数a.b.c,两个根x1.x2,以及d(德尔塔): a.b.c均为实 ...

  8. 解决 windows oracle ORA-01113和ORA-01110错误

    windows2008上的数据库版本为11.2.0.4.0,数据库打开为mount状态.报错如下: SQL> startup ORACLE instance started. Total Sys ...

  9. gmpy安装使用方法

    gmpy是一种C编码的Python扩展模块,提供对GMP(或MPIR)多精度算术库的访问.gmpy 1.17是1.x系列的最终版本,没有进一步的更新计划.所有进一步的开发都在2.x系列(也称为gmpy ...

  10. 情感交流篇:HTML页面如何与后端联系

    通过ajax get方法: 基本格式:$.get("后台一般处理程序文件路径",{传值,格式为  KEY:VULES},function(后台返回值){接到后台数据后处理}); $ ...