2练习1:创建一个简单的银行程序包
练习目标-Java 语言中面向对象的封装性及构造器的使用。
任务
在这个练习里,创建一个简单版本的(账户类)Account类。将这个源文件放入banking程序包中。在创建单个帐户的默认程序包中,已编写了一个测试程序TestBanking。这个测试程序初始化帐户余额,并可执行几种简单的事物处理。最后,该测试程序显示该帐户的最终余额。
1. 创建banking 包
2. 在banking 包下创建Account类。该类必须实现上述UML框图中的模型。
- 声明一个私有对象属性:balance,这个属性保留了银行帐户的当前(或即时)余额。
- 声明一个带有一个参数(init_balance)的公有构造器,这个参数为balance属性赋值。
- 声明一个公有方法getBalance,该方法用于获取经常余额。
- 声明一个公有方法deposit,该方法向当前余额增加金额。
- 声明一个公有方法withdraw从当前余额中减去金额。
3. 编译TestBanking.java文件。
4. 运行TestBanking类。可以看到下列输出结果:
Creating an account with a 500.00 balance
Withdraw 150.00
Deposit 22.50
Withdraw 47.62
The account has a balance of 324.88
练习2
练习目标-使用引用类型的成员变量:在本练习中,将扩展银行项目,添加一个(客户类)Customer类。Customer类将包含一个Account对象。
任务
- 在banking包下的创建Customer类。该类必须实现上面的UML图表中的模型。
a. 声明三个私有对象属性:firstName、lastName和account。
b. 声明一个公有构造器,这个构造器带有两个代表对象属性的参数(f和l)
c. 声明两个公有存取器来访问该对象属性,方法getFirstName和getLastName返回相应的属性。
d. 声明setAccount 方法来对account属性赋值。
e. 声明getAccount 方法以获取account属性。
- 在exercise2主目录里,编译运行这个TestBanking程序。应该看到如下输出结果:
Creating the customer Jane Smith.
Creating her account with a 500.00 balance.
Withdraw 150.00
Deposit 22.50
Withdraw 47.62
Customer [Smith, Jane] has a balance of 324.88
练习3:修改withdraw 方法
练习目标-使用有返回值的方法:在本练习里,将修改withdraw方法以返回一个布尔值来指示交易是否成功。
任务
1. 修改Account类
- 修改deposit 方法返回true(意味所有存款是成功的)。
- 修改withdraw方法来检查提款数目是否大于余额。如果amt小于balance,则从余额中扣除提款数目并返回true,否则余额不变返回false。
2. 在exercise2主目录编译并运行TestBanking程序,将看到下列输出;
Creating the customer Jane Smith.
Creating her account with a 500.00 balance.
Withdraw 150.00: true
Deposit 22.50: true
Withdraw 47.62: true
Withdraw 400.00: false
Customer [Smith, Jane] has a balance of 324.88
练习4:用List表示多重性
练习目标-在类中使用List作为模拟集合操作: 在本练习中,将用List实现银行与客户间的多重关系。
任务
对银行来说,可添加Bank类。 Bank 对象跟踪自身与其客户间的关系。用Customer对象的List实现这个集合化的关系。还要保持一个整数属性来跟踪银行当前有多少客户。
- 创建 Bank 类
- 为Bank类增加两个属性:customers(Customer对象的List)和numberOfCustomers(整数, 当前Customer对象的数量)
- 添加公有构造器,初始化customersList。
- 添加addCustomer方法。该方法必须依照参数(姓,名)构造一个新的Customer对象然后把它放到customerList中。
- 添加getNumOfCustomers 访问方法,它返回numberofCustomers属性值。
- 添加getCustomer方法。它返回与给出的index参数相关的客户。
- 编译并运行TestBanking程序。可以看到下列输出结果:
Customer 1 is Simms,Jane
Customer 2 is Bryant,Owen
Customer 3 is Soley,Tim
Customer 4 is Soley,Maria
当前客户数量 = 4
package banking; //账户 public class Account { private double balance=500;//当前余额 //构造共有方法 public Account(double init_balance) { this.balance=init_balance; } public double getBalance() { return balance; } //增加余额 public double dePosit(double amt) { balance+=amt; return balance; } //减去金额 public double withdraw(double amt) { balance-=amt; return balance; } //第三问方法 //增加余额 public boolean dePosit1(double amt) { balance+=amt; System.out.print("dePosit"+amt+":"); return true; } //减去金额 public boolean withdraw1(double amt) { if(amt<=balance) { balance-=amt; System.out.print("Withdraw"+amt+":"); return true; } else { this.balance=balance; System.out.print("Withdraw "+amt+" :"); return false; } } public Account() { super(); } }
package banking; //顾客 public class Customer extends Account { //属性 String firstName; String lastNam; double account; public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastNam() { return lastNam; } public void setLastNam(String lastNam) { this.lastNam = lastNam; } public double getAccount() { return account; } public void setAccount(double account) { this.account = account; } public Customer( String firstName, String lastNam) { this.firstName = firstName; this.lastNam = lastNam; } public Customer() { } @Override public String toString() { return "Customer " +firstName +"," + lastNam; } }
package banking; import java.util.ArrayList; import java.util.List; //银行 public class Bank { private List<Customer> customers;//List型 int numberOfCustomers; public Bank() { customers=new ArrayList<Customer>();//初始化集合 } public void addCustomer(String f,String l) { Customer c=new Customer(f,l); customers.add(c); } public int getNumOfCustomers(){ numberOfCustomers=customers.size(); return numberOfCustomers; } public Customer getCustomer(int index) { Customer s=new Customer(); s=customers.get(index); return s; } public void setNumberOfCustomers(int numberOfCustomers) { this.numberOfCustomers = numberOfCustomers; } public List<Customer> getCustomers() { return customers; } public int getNumberOfCustomers() { return numberOfCustomers; } }
package banking; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class TestBanking { public static void main(String[] args) { Account ac=new Account(500.0); System.out.println("Creating an account with a "+ac.getBalance()+" balance"); ac.withdraw(150); System.out.println("Withdraw "+ac.getBalance()); double x=ac.getBalance(); System.out.println("Deposit "+(ac.dePosit(22.50)-x)); System.out.println("Withdraw "+ac.withdraw(47.62)); System.out.println("The account has a balance of "+ac.getBalance()); System.out.println("第二问测试结果------------------"); Customer cu=new Customer(); cu.setFirstName("Smith"); cu.setLastNam("Jane"); System.out.println("Creating the customer "+cu.getFirstName()+","+cu.getLastNam()); System.out.println("Creating her account with a "+cu.getBalance()+" balance."); cu.withdraw(150); System.out.println("Withdraw "+cu.getBalance()); double y=ac.getBalance(); System.out.println("Deposit "+(cu.dePosit(22.50)-y)); System.out.println("Withdraw "+cu.withdraw(47.62)); System.out.println("Customer [ "+cu.getFirstName()+","+cu.getLastNam()+" ] has a balance of "+cu.getBalance()); System.out.println("第三问测试结果------------------"); System.out.println("Creating the customer "+cu.getFirstName()+","+cu.getLastNam()); System.out.println("Creating her account with a "+cu.getBalance()+" balance."); System.out.println(ac.withdraw1(150)); System.out.println((ac.dePosit1(22.50))); System.out.println(ac.withdraw1(47.62)); System.out.println(ac.withdraw1(400.00)); System.out.println("Customer [ "+cu.getFirstName()+","+cu.getLastNam()+" ] has a balance of "+cu.getBalance()); System.out.println("第四问-------------------"); Bank ban=new Bank(); ban.addCustomer("Simms","Jane"); ban.addCustomer("Bryant","Owen"); ban.addCustomer("Soley","Tim"); ban.addCustomer("Soley","Maria"); for(int i=0;i<ban.getNumOfCustomers();i++){ System.out.println("Customer "+(i+1)+" is"+" "+ban.getCustomer(i)); } System.out.println("当前客户数量="+ban.getNumOfCustomers()); //System.out.print(cu1.toString()); // System.out.println("迭代器:"); // Iterator<Customer> it=cu1.iterator(); // // while(it.hasNext()) // { // Customer c=it.next(); // System.out.println(c); // } // } }