【Java 基础实验_Bank项目_06】单例模式(Static Bank) , 查询异常输出
基于上一个实验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) , 查询异常输出的更多相关文章
- Java基础-SSM之mybatis的统计函数和分页查询
Java基础-SSM之mybatis的统计函数和分页查询 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- 【Java 基础 实验-抽象类应用的练习】(抽象类Employee被SalariedEmployee和HourEmployee继承 , 遍历,Scanner 输出)
笔记总结: 1.Employee为抽象类,两个子类进行继承, public abstract double earning();两个子类分别实现 2.Employee[] emps[i].toStri ...
- Java基础知识强化02:import static 和 import
1.import static静态导入是JDK1.5中的新特性.一般我们导入一个类都用 import com.....ClassName;而静态导入是这样:import static com..... ...
- 【Java基础-实验7】Banking_7 -添加银行透支扣款系统的 thorw异常机制
实验基本要求: 实验题目 7:(在6基础上修改) 将建立一个 OverdraftException 异常,它由 Account 类的withdraw()方法 抛出. 实验目的: 自定义异常 实验说明: ...
- java基础部分小项目
贪吃蛇项目 import java.awt.Color; import java.awt.Graphics; import java.awt.Toolkit; import java.awt.even ...
- JAVA基础知识(2)--关键字static的使用
在Java类中声明属性.方法和内部类时,可使用关键字static作为修饰符,static标记的属性和方法可以由整个类进行共享,因此static修饰的属性称为类成员或者称为类方法:static修饰的方法 ...
- Java基础之类和对象、单例模式、继承
Java类和对象 一般的类只能是public或者default的,若是public的,类名必须和文件名一样.一般在一个文件只写一个类,故这个类一般是加上public. 内部类还可以是private和p ...
- Java基础学习总结(10)——static关键字
一.static关键字 原来一个类里面的成员变量,每new一个对象,这个对象就有一份自己的成员变量,因为这些成员变量都不是静态成员变量.对于static成员变量来说,这个成员变量只有一份,而且这一份是 ...
- Java基础自学小项目
实现一个基于文本界面的<家庭记账软件> 需求:能够记录家庭的收入,支出,并能够收支明细表 主要涉及一下知识点: - 局部变量和基本数据类型 - 循环语句 - 分支语句 - 方法调用和返回值 ...
随机推荐
- Java实现回形数,只利用数组、循环和if-else语句
import java.util.Scanner; public class learn { public static void main(String[] args){ System.out.pr ...
- matlab截取图像
声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 对于Matlab的使用情况常常是这样子的,很多零碎的函数名字很难记忆,经常用过后过一段时间就又忘记了,又得去网 ...
- 高级UI-NavigationView侧滑
NavigationView是遵循MD设计规范的侧滑模式,推荐使用 要使用NavigationView,就需要引入support-design依赖 implementation 'com.androi ...
- 20175316盛茂淞 2018-2019-2 《Java程序设计》第11周学习总结
20175316 <Java程序设计> 第11周学习总结 教材内容学习总结 第十三章 URL类 URL类是java.net包中的一个重要的类,URL的实例封装着一个统一资源定位符,使用UR ...
- iOS核心动画高级技巧 - 8
iOS核心动画高级技巧 - 1 iOS核心动画高级技巧 - 2 iOS核心动画高级技巧 - 3 iOS核心动画高级技巧 - 4 iOS核心动画高级技巧 - 5 iOS核心动画高级技巧 - 6 iOS核 ...
- Java基础---Java方法
基本方法的定义: public static void 方法名称() { 方法体 } 方法名称的命名规则和变量一样,使用小驼峰. 方法体:也就是大括号当中可以包含任意条语句. 注意事项: 1. 方法定 ...
- python学习-25 函数递归
递归 例如: def abc(n): print(n) if int(n/2) == 0: return n return abc(int(n/2)) abc(10) 运行结果: 10 5 2 1 P ...
- 『Python基础』第2节: Python简介及入门
一. Python介绍 Python是一门高级计算机程序设计语言,1989年,荷兰的Guido von Rossum创造了它.Guido是是一个牛人,1982年,他从阿姆斯特丹大学获得了数学和计算机硕 ...
- asp.net core-13.Cookie-based认证实现
1.打开visual studio code创建一个MVC项目
- asp.net mvc抓取微信文章里面所有的图片
/// <summary> /// 下载指定URL下的所有图片 /// </summary> public class WebPageImage { /// <summa ...