2014年4月17日 星期四
練習 8
續練習7. 設計一個活期存款教易帳戶 UI, 畫面上有 Label 元件 (銀行帳號 , 存入金額) 以及 TextField, 另外有一個確認按鈕 Button, 按下時顯示"交易完成"
http://download.eclipse.org/windowbuilder/WB/release/R201309271200/4.2/
2014年4月10日 星期四
練習 7: 多執行緒
續練習 6。現今有 3 個人共用一本活期存款的賬戶,而於同一個時間分別存入 500元、 1000元、 2000元,請顯示餘額
檔案:ATM.java
檔案:Account.java
檔案:AccountException.java
檔案:DemandDepositAccount.java
檔案:FixedDepositAccount.java
檔案:AccountTest.java
若 deposit ()這方法不用 synchronized 這修飾字時,會有不正常的顯示
package bank2;
public class ATM extends Thread {
DemandDepositAccount account;
int money;
public ATM(DemandDepositAccount account, int money){
this.account = account;
this.money = money;
}
public void run(){
try {
account.deposit(money);
} catch (AccountException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
檔案:Account.java
package bank2;
public abstract class Account {
int balance;
Account(int money) {
balance = money;
}
public abstract int inquiry();
}
檔案:AccountException.java
package bank2;
public class AccountException extends Exception {
public String getMessage() // 覆寫 Throwable 的 toString()
{
return "金額不可以為負數";
}
public void showMessage() { // 自定方法
System.out.println("例外發生:請從新輸入金額");
}
}
檔案:DemandDepositAccount.java
package bank2;
public class DemandDepositAccount extends Account {
DemandDepositAccount(int money){
super(money);
}
public synchronized void deposit(int money) throws AccountException {
if (money < 0) {
throw new AccountException();
}
else {
balance += money;
System.out.println("money: " +balance);
}
}
public void withdraw(int money) throws AccountException{
if (money < 0)
throw new AccountException();
else
balance -= money;
}
public int inquiry() {
return balance;
}
}
檔案:FixedDepositAccount.java
package bank2;
public class FixedDepositAccount extends Account {
FixedDepositAccount(int money) {
super(money);
try{
if (money < 50000)
throw new ArithmeticException("例外狀況:定期存款最少需 50,000 元");
}catch(Exception e){
System.out.println(e.toString());
}
}
public FixedDepositAccount() {
// TODO Auto-generated constructor stub
super(50000);
}
@Override
public int inquiry() {
// TODO Auto-generated method stub
(new FixedDepositAccount() {
public void showMe(){
System.out.println("本銀行定額存款10萬以上,另有優惠,請多加利用");
}
}).showMe();
return balance;
}
}
檔案:AccountTest.java
package bank2;
public class AccountTest {
public static void main(String[] args) {
DemandDepositAccount account1 = new DemandDepositAccount(1000);
ATM A1 = new ATM(account1, 500);
ATM A2 = new ATM(account1, 1000);
ATM A3 = new ATM(account1, 2000);
A1.start();
A2.start();
A3.start();
}
}
執行結果
若 deposit ()這方法不用 synchronized 這修飾字時,會有不正常的顯示
2014年4月9日 星期三
練習 6:多型
續練習 5。若某客戶同時擁有活期帳戶與定期存款帳戶,而要同時查詢帳戶餘額。試以多型實作
檔案:Account.java
檔案:AccountException.java
檔案:DemandDepositAccount.java
檔案:FixedDepositAccount.java
檔案:AccountTest.java
當然,可以將此測試檔案改寫為
檔案:AccountTest.java
檔案:Account.java
package bank2;
public abstract class Account {
int balance;
Account(int money) {
balance = money;
}
public abstract int inquiry();
}
檔案:AccountException.java
package bank2;
public class AccountException extends Exception {
public String getMessage() // 覆寫 Throwable 的 toString()
{
return "金額不可以為負數";
}
public void showMessage() { // 自定方法
System.out.println("例外發生:請從新輸入金額");
}
}
檔案:DemandDepositAccount.java
package bank2;
public class DemandDepositAccount extends Account {
DemandDepositAccount(int money){
super(money);
}
public void deposit(int money) throws AccountException {
if (money < 0) {
throw new AccountException();
}
else
balance += money;
}
public void withdraw(int money) throws AccountException{
if (money < 0)
throw new AccountException();
else
balance -= money;
}
public int inquiry() {
return balance;
}
}
檔案:FixedDepositAccount.java
package bank2;
public class FixedDepositAccount extends Account {
FixedDepositAccount(int money) {
super(money);
try{
if (money < 50000)
throw new ArithmeticException("例外狀況:定期存款最少需 50,000 元");
}catch(Exception e){
System.out.println(e.toString());
}
}
public FixedDepositAccount() {
// TODO Auto-generated constructor stub
super(50000);
}
@Override
public int inquiry() {
// TODO Auto-generated method stub
(new FixedDepositAccount() {
public void showMe(){
System.out.println("本銀行定額存款10萬以上,另有優惠,請多加利用");
}
}).showMe();
return balance;
}
}
檔案:AccountTest.java
package bank2;
public class AccountTest {
public static void main(String[] args) {
try{
DemandDepositAccount demandDepositAcc = new DemandDepositAccount(1000);
demandDepositAcc.deposit(500);
demandDepositAcc.withdraw(300);
System.out.println("活期賬戶餘額:" + demandDepositAcc.inquiry());
FixedDepositAccount fixedDepositAcc = new FixedDepositAccount(20000);
System.out.println("定期賬戶餘額:" + fixedDepositAcc.inquiry());
Account account = demandDepositAcc;
System.out.println("活期賬戶餘額2:" + account.inquiry());
account = fixedDepositAcc;
System.out.println("定期賬戶餘額2:" + account.inquiry());
}
catch(AccountException e){
System.out.println(e.toString());
e.showMessage();
}
}
}
執行結果
當然,可以將此測試檔案改寫為
檔案:AccountTest.java
package bank2;
public class AccountTest {
public static void main(String[] args) {
try{
Account account = new DemandDepositAccount(1000);
((DemandDepositAccount) account).deposit(500);
((DemandDepositAccount) account).withdraw(300);
System.out.println("活期賬戶餘額2:" + account.inquiry());
account = new FixedDepositAccount(50000);
System.out.println("定期賬戶餘額2:" + account.inquiry());
}
catch(AccountException e){
System.out.println(e.toString());
e.showMessage();
}
}
}
執行結果
練習 5: 例外,以 throw new 實作
續練習4: 銀行更改定期帳戶的開戶條件,凡開戶時金額小於 50,000元以下時,系統自動顯示例外訊息。
提示:以 throw new 類別實作
檔案:Account.java
檔案:AccountException.java
檔案:DemandDepositAccount.java
檔案:FixedDepositAccount.java
檔案:AccountTest.java
我們也可改寫 檔案:FixedDepositAccount.java
檔案:Account.java
package bank2;
public abstract class Account {
int balance;
Account(int money) {
balance = money;
}
public abstract int inquiry();
}
檔案:AccountException.java
package bank2;
public class AccountException extends Exception {
public String getMessage() // 覆寫 Throwable 的 toString()
{
return "金額不可以為負數";
}
public void showMessage() { // 自定方法
System.out.println("例外發生:請從新輸入金額");
}
}
檔案:DemandDepositAccount.java
package bank2;
public class DemandDepositAccount extends Account {
DemandDepositAccount(int money){
super(money);
}
public void deposit(int money) throws AccountException {
if (money < 0) {
throw new AccountException();
}
else
balance += money;
}
public void withdraw(int money) throws AccountException{
if (money < 0)
throw new AccountException();
else
balance -= money;
}
public int inquiry() {
return balance;
}
}
檔案:FixedDepositAccount.java
package bank2;
public class FixedDepositAccount extends Account {
FixedDepositAccount(int money) {
super(money);
if (money < 50000)
throw new ArithmeticException("例外狀況:定期存款最少需 50,000 元");
}
public FixedDepositAccount() {
super(50000);
}
@Override
public int inquiry() {
// TODO Auto-generated method stub
(new FixedDepositAccount() {
public void showMe(){
System.out.println("本銀行定額存款10萬以上,另有優惠,請多加利用");
}
}).showMe();
return balance;
}
}
檔案:AccountTest.java
package bank2;
public class AccountTest {
public static void main(String[] args) {
try{
DemandDepositAccount demandDepositAcc = new DemandDepositAccount(1000);
demandDepositAcc.deposit(500);
demandDepositAcc.withdraw(300);
System.out.println("活期賬戶餘額:" + demandDepositAcc.inquiry());
FixedDepositAccount fixedDepositAcc = new FixedDepositAccount(20000);
System.out.println("定期賬戶餘額:" + fixedDepositAcc.inquiry());
}
catch(AccountException e){
System.out.println(e.toString());
e.showMessage();
}
}
}
執行結果
我們也可改寫 檔案:FixedDepositAccount.java
package bank2;
public class FixedDepositAccount extends Account {
FixedDepositAccount(int money) {
super(money);
try{
if (money < 50000)
throw new ArithmeticException("例外狀況:定期存款最少需 50,000 元");
}catch(Exception e){
System.out.println(e.toString());
}
}
public FixedDepositAccount() {
// TODO Auto-generated constructor stub
super(50000);
}
@Override
public int inquiry() {
// TODO Auto-generated method stub
(new FixedDepositAccount() {
public void showMe(){
System.out.println("本銀行定額存款10萬以上,另有優惠,請多加利用");
}
}).showMe();
return balance;
}
}
執行結果
練習 4: 匿名類別
續練習3: 銀行臨時舉行促銷活動,凡定期存款客戶查詢帳號餘額時,會告知客戶,而顯示「本銀行定額存款10萬以上,另有優惠,請多加利用」訊息。
提示:在查詢時,以匿名類別實作
檔案:Account.java
檔案:AccountException.java
檔案:DemandDepositAccount.java
檔案:FixedDepositAccount.java
檔案:AccountTest.java
檔案:Account.java
package bank2;
public abstract class Account {
int balance;
Account(int money) {
balance = money;
}
public abstract int inquiry();
}
檔案:AccountException.java
package bank2;
public class AccountException extends Exception {
public String getMessage() // 覆寫 Throwable 的 toString()
{
return "金額不可以為負數";
}
public void showMessage() { // 自定方法
System.out.println("例外發生:請從新輸入金額");
}
}
檔案:DemandDepositAccount.java
package bank2;
public class DemandDepositAccount extends Account {
DemandDepositAccount(int money){
super(money);
}
public void deposit(int money) throws AccountException {
if (money < 0) {
throw new AccountException();
}
else
balance += money;
}
public void withdraw(int money) throws AccountException{
if (money < 0)
throw new AccountException();
else
balance -= money;
}
public int inquiry() {
return balance;
}
}
檔案:FixedDepositAccount.java
package bank2;
public class FixedDepositAccount extends Account {
FixedDepositAccount(int money) {
super(money);
// TODO Auto-generated constructor stub
}
public FixedDepositAccount() {
// TODO Auto-generated constructor stub
super(50000);
}
@Override
public int inquiry() {
// TODO Auto-generated method stub
(new FixedDepositAccount() {
public void showMe(){
System.out.println("本銀行定額存款10萬以上,另有優惠,請多加利用");
}
}).showMe();
return balance;
}
}
檔案:AccountTest.java
package bank2;
public class AccountTest {
public static void main(String[] args) {
try{
DemandDepositAccount demandDepositAcc = new DemandDepositAccount(1000);
demandDepositAcc.deposit(500);
demandDepositAcc.withdraw(300);
System.out.println("活期賬戶餘額:" + demandDepositAcc.inquiry());
FixedDepositAccount fixedDepositAcc = new FixedDepositAccount(20000);
System.out.println("定期賬戶餘額:" + fixedDepositAcc.inquiry());
}
catch(AccountException e){
System.out.println(e.toString());
e.showMessage();
}
}
}
執行結果
練習 3 : 例外處理
續練習 2。在活期賬戶中,自定存入負數的例外
檔案:Account.java
檔案:AccountException.java
檔案:DemandDepositAccount.java
檔案:FixedDepositAccount.java
檔案:AccountTest.java
檔案:Account.java
package bank2;
public abstract class Account {
int balance;
Account(int money) {
balance = money;
}
public abstract int inquiry();
}
檔案:AccountException.java
package bank2;
public class AccountException extends Exception {
public String getMessage() // 覆寫 Throwable 的 toString()
{
return "金額不可以為負數";
}
public void showMessage() { // 自定方法
System.out.println("例外發生:請從新輸入金額");
}
}
檔案:DemandDepositAccount.java
package bank2;
public class DemandDepositAccount extends Account {
DemandDepositAccount(int money){
super(money);
}
public void deposit(int money) throws AccountException {
if (money < 0) {
throw new AccountException();
}
else
balance += money;
}
public void withdraw(int money) throws AccountException{
if (money < 0)
throw new AccountException();
else
balance -= money;
}
public int inquiry() {
return balance;
}
}
檔案:FixedDepositAccount.java
package bank2;
public class FixedDepositAccount extends Account {
FixedDepositAccount(int money) {
super(money);
// TODO Auto-generated constructor stub
}
public FixedDepositAccount() {
// TODO Auto-generated constructor stub
super(50000);
}
@Override
public int inquiry() {
// TODO Auto-generated method stub
return balance;
}
}
檔案:AccountTest.java
package bank2;
public class AccountTest {
public static void main(String[] args) {
try{
DemandDepositAccount demandDepositAcc = new DemandDepositAccount(1000);
demandDepositAcc.deposit(-100);
demandDepositAcc.withdraw(300);
System.out.println("活期賬戶餘額:" + demandDepositAcc.inquiry());
FixedDepositAccount fixedDepositAcc = new FixedDepositAccount(20000);
System.out.println("定期賬戶餘額:" + fixedDepositAcc.inquiry());
}
catch(AccountException e){
System.out.println(e.toString());
e.showMessage();
}
}
}
執行結果
練習2 - 繼承, 抽象類別,抽象方法
續練習 1。沒有久,張三又去福爾摩沙銀行開立定期賬戶 Fixed Deposit。張三存入 30,000 元,約定一年後到期。此帳戶,銀行只提供餘額查詢的功能。
提示:
1. 以抽象類別、方法實作
檔案:Account.java
檔案:FixedDepositAccount.java
檔案:DemandDepositAccount.java
檔案:AccountTest.java
檔案:Account.java
package bank2;
public abstract class Account {
int balance;
Account(int money){
balance = money;
}
public abstract int inquiry();
}
檔案:FixedDepositAccount.java
package bank2;
public class FixedDepositAccount extends Account {
FixedDepositAccount(int money) {
super(money);
// TODO Auto-generated constructor stub
}
@Override
public int inquiry() {
// TODO Auto-generated method stub
return balance;
}
}
檔案:DemandDepositAccount.java
package bank2;
public class DemandDepositAccount extends Account {
DemandDepositAccount(int money){
super(money);
}
public void deposit(int money) {
balance += money;
}
public void withdraw(int money){
balance -= money;
}
public int inquiry() {
return balance;
}
}
檔案:AccountTest.java
package bank2;
import bank.DemandDepositAccount;
public class AccountTest {
public static void main(String[] args) {
DemandDepositAccount demandDepositAcc = new DemandDepositAccount(1000);
demandDepositAcc.deposit(500);
demandDepositAcc.withdraw(300);
System.out.println("活期賬戶餘額:" + demandDepositAcc.inquiry());
FixedDepositAccount fixedDepositAcc = new FixedDepositAccount(10000);
System.out.println("定期存款餘額:" + fixedDepositAcc.inquiry());
}
}
執行結果
練習 1:單 class 類別
3/18 某天張三因業務需要至福爾摩沙銀行(Formosa Bank) 開立一個活期存款(Demand deposit)戶頭,銀行行員告知,開戶金額最低為 1000 元,可隨時存取,銀行亦提供餘額查詢的服務。張三以最低金額開戶,之後 3/30 存入 500 元,而於 4/8 領取 300 元後,ATM 會顯示餘額剩下多少元?注意:銀行會將此帳戶存在 bank 的目錄夾。
提示:
1. 套件 package 設為 bank
2. 活期賬戶 Demand Deposit Account
檔案:DemandDepositAccount.java
檔案:AccountText.java
檔案:DemandDepositAccount.java
package bank;
public class DemandDepositAccount {
int balance;
DemandDepositAccount(int deposit){
balance = deposit;
}
public void deposit(int money) {
balance += money;
}
public void withdraw(int money){
balance -= money;
}
public int inquiry() {
return balance;
}
}
檔案:AccountText.java
package bank;
public class AccountTest {
public static void main(String[] args) {
DemandDepositAccount demandDepositAcc = new DemandDepositAccount(1000);
demandDepositAcc.deposit(500);
demandDepositAcc.withdraw(300);
System.out.println("活期賬戶餘額:" + demandDepositAcc.inquiry());
}
}
執行結果
訂閱:
文章 (Atom)









