⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bigatmscreen.java

📁 Java 入门书的源码
💻 JAVA
字号:
//Copyright (c) 1998, Arthur Gittleman
//This example is provided WITHOUT ANY WARRANTY either expressed or implied.

/* Illustrates event-driven object-oriented 
 * programming previewing the concepts and
 * techniques to be introduced in Chapters 2-8.
 */

import personData.*;        
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.math.BigDecimal;

public class BigAtmScreen extends Applet
                         implements ActionListener, ItemListener {
  private Button start = new Button("Start");
  private Button finish = new Button("Finish");
  private TextField dataEntry = new TextField(10);
  private CheckboxGroup group = new CheckboxGroup();
  private Checkbox savings = new Checkbox("Savings",false,group); 
  private Checkbox checking = new Checkbox("Checking",false,group);
  private Choice transaction = new Choice();
  private String message = "Welcome to Art's Bank";
  private MyCanvas canvas = new MyCanvas();  
  private Label textLabel = new Label("Enter Name");
  private Bank bank = new Bank();
  private Person[] person = Database.personData();
  private Teller teller;
  private Font font = new Font("Serif",Font.BOLD,18); 
  private FontMetrics metrics = getFontMetrics(font);

  public void init() {
    setLayout(new BorderLayout());
    setFont(font);
    Panel text = new Panel();
    text.setLayout(new GridLayout(2,1));
    text.add(dataEntry);
    text.add(textLabel);
    Panel north = new Panel();
    north.add(text);
    Panel checkboxes = new Panel();
    checkboxes.setLayout(new GridLayout(2,1));
    checkboxes.add(savings);
    checkboxes.add(checking);
    north.add(checkboxes);
    transaction.add("Deposit");
    transaction.add("Withdraw");
    transaction.add("Balance");
    north.add(transaction);
    add(north,"North");
    Panel south = new Panel();
    south.add(start);
    south.add(finish);
    add(south,"South");
    canvas.setBackground(Color.yellow);
    add(canvas,"Center");
    dataEntry.addActionListener(this);
    savings.addItemListener(this);
    checking.addItemListener(this);
    transaction.addItemListener(this);
    start.addActionListener(this);
    finish.addActionListener(this);
    clear();
  }
  public void actionPerformed(ActionEvent e) {
     Object source = e.getSource();
     if (source==dataEntry){
       String s = textLabel.getText();
       if (s.equals("Enter Name")){
         String name = dataEntry.getText();
         if (name.equals("John Venn"))
            teller.acceptCard(person[0]);
         else if (name.equals("Mabel Venn"))
            teller.acceptCard(person[1]);
         else {
           message = "Enter John Venn or Mabel Venn";
           dataEntry.setText("");
           canvas.repaint();
         }
       }
       else if (s.equals("Enter PIN")) 
                teller.acceptPIN(dataEntry.getText());
       else if (s.equals("Enter Amount"))
                teller.acceptAmount(new BigDecimal(dataEntry.getText()));
     }
     else if (source == finish)  clear();
     else if (source == start){
            dataEntry.setEnabled(true); 
            dataEntry.requestFocus(); 
            textLabel.setEnabled(true);
            start.setEnabled(false);
     }
  }
  public void itemStateChanged(ItemEvent e) {
    Object item = e.getItemSelectable();
    if (item == transaction) 
      teller.acceptTransaction(transaction.getSelectedIndex()); 
    else if (item == savings)
      teller.acceptType(Bank.SAVINGS);
    else if (item == checking)
      teller.acceptType(Bank.CHECKING); 
  }
  public void enterPIN() {
    dataEntry.setText("");
    textLabel.setText("Enter PIN");
    message = "Enter your PIN number";
    canvas.repaint();
  }
  public void selectTransaction() {
    dataEntry.setText("");
    dataEntry.setEnabled(false);
    textLabel.setEnabled(false);
    transaction.setEnabled(true);
    message = "Select your transaction";
    canvas.repaint();
  } 
  public void selectType() {
    savings.setEnabled(true);
    checking.setEnabled(true);
    transaction.setEnabled(false);
    message = "Select your account type";
    canvas.repaint();  
  }
  public void specifyAmount() {
    dataEntry.setEnabled(true);
    dataEntry.requestFocus();
    textLabel.setEnabled(true);
    textLabel.setText("Enter Amount");
    savings.setEnabled(false);
    checking.setEnabled(false);
    message = "Specify the amount";
    canvas.repaint();
  } 
  public void display(String s) {
    dataEntry.setText("");
    textLabel.setEnabled(false);
    dataEntry.setEnabled(false);
    checking.setEnabled(false);
    savings.setEnabled(false);
    message = s;
    canvas.repaint();
  }
  public void clear() {
    start.setEnabled(true);
    savings.setEnabled(false);
    checking.setEnabled(false);
    transaction.setEnabled(false);
    textLabel.setText("Enter Name");
    textLabel.setEnabled(false);
    dataEntry.setText(""); 
    dataEntry.setEnabled(false);
    message = "Welcome to Art's bank";
    canvas.repaint();
    teller = new Teller(bank,this);
  }
  class MyCanvas extends Canvas {
    public void paint(Graphics g) {
      int w = metrics.stringWidth(message);
      g.drawString(message, (getSize().width-w)/2, getSize().height/3);
    }
  }
}
  
class Teller {
  public static final int DEPOSIT = 0;
  public static final int WITHDRAW = 1;
  public static final int BALANCE = 2;
  private String id;
  private int transType;
  private int  acctType;
  private Person user;
  private Bank bank;
  private Account account; 
  private BigAtmScreen screen; 

  public Teller(Bank b, BigAtmScreen s) {
    bank = b;
    screen = s;
  }
  public void acceptCard(Person p) {
    user = p;
    screen.enterPIN();
  }  
  public void acceptPIN(String s) {
    id = s;
    screen.selectTransaction();
  }
  public void acceptTransaction(int trans) {
    transType = trans;
    screen.selectType();
  }
  public void acceptType(int type) {
    acctType = type;  
    bank.find(id,acctType,this);
  }
  public void acceptAccount(Account a) {
    account = a; 
    if (account != null)       
      if (transType == BALANCE){
         BigDecimal balance = account.getBalance();
         screen.display("The balance is $" + balance);
      }   
      else {
         if (transType == DEPOSIT || transType == WITHDRAW){
           screen.specifyAmount();
         }                                                   
      }
    else 
      screen.display("No such account -- session terminated"); 
  } 
  public void acceptAmount(BigDecimal amount) {
    switch(transType) {
      case DEPOSIT :      
        account.deposit(amount);
        screen.display("Deposit of $" + amount); 
        break;
      case WITHDRAW: 
        BigDecimal taken = account.withdraw(amount);
        if (taken.compareTo(new BigDecimal(0.0)) >= 0)
          screen.display("Withdrawal of $" + taken);
        else
          screen.display("Insufficient funds");   
        break;
    }
  }
}

class Database {
  public static Person[] personData() {
    Name n1 = new Name("John","Venn");
    Address a1 = new Address( "123 Main St.", "Tyler","WY", "45654");
    Person p1 = new Person("123123123",n1,a1); 
    Name n2 = new Name("Mabel","Venn");
    Person p2 = new Person("456456456",n2,a1);
    Person[] p = {p1,p2};
    return p;
  } 
  public static Account [] accountData() {
    Person[] p = personData(); 
    Account p1Savings = new Savings(new BigDecimal(1500.00),p[0],4.0);
    Account p1Checking = new Checking(p[0],2500.00,.50);
    Account p2Savings = new Savings(new BigDecimal(1000.00),p[1],3.5);
    Account[] a = {p1Savings,p1Checking,p2Savings}; 
    return a;
  }
}
class Bank { 
  public static final int SAVINGS = 1;
  public static final int CHECKING = 2; 
  private Account [] accounts = Database.accountData();
  public void find(String id, int acctType, Teller teller) {
    for (int i=0; i<accounts.length; i++) {
      Account acct = accounts[i];  
      if (acct.getId().equals(id))
        switch(acctType) {
          case SAVINGS:
            if (acct instanceof Savings){ 
              teller.acceptAccount(acct);
              return;    
            } 
          case CHECKING: 
            if (acct instanceof Checking){ 
              teller.acceptAccount(acct);
              return;
            }
          }
     }
     teller.acceptAccount(null);
  }   
}
abstract class Account {
  private BigDecimal balance; 
  private Person holder;                                                                 
  public Account(Person p)   {                                                                    
    this(new BigDecimal(0),p);
  }
  public Account(BigDecimal initialAmount, Person p) {
    balance = initialAmount;
    holder = p;
  }
  public String getId() {
    return holder.getId();
  }    
  public void deposit(BigDecimal amount) {                                             
    balance = balance.add(amount);
  }
  public BigDecimal withdraw(BigDecimal amount) {
    if (balance.compareTo(amount) >= 0){
       balance = balance.subtract(amount);
       return amount; 
    }
    else
       return new BigDecimal(-1.0);
  } 
  public BigDecimal getBalance() {                                                         
    return balance;
  }
  public void setBalance(BigDecimal amount) {
    balance = amount;
  }    
}
class Checking extends Account {  
  private double minBalance;
  private double charge;
  public Checking(Person p,double minAmount, double charge) {
    super(p);
    minBalance = minAmount;
    this.charge = charge;
  }
  public BigDecimal processCheck(BigDecimal amount)  {
    if (getBalance().compareTo(new BigDecimal(minBalance)) >= 0)
      return super.withdraw(amount);
    else 
      return super.withdraw(amount.add(new BigDecimal(charge)));      
  }
  public BigDecimal withdraw(BigDecimal amount) {
    return processCheck(amount);
  }
} 
class Savings extends Account  {
  private double interestRate;
  public Savings(BigDecimal amount, Person p, double rate) {
    super(amount,p);
    interestRate = rate;
  }     
  public void postInterest()  {
    BigDecimal balance = getBalance();
    double decimalRate = interestRate/100;
    BigDecimal interest = balance.multiply(new BigDecimal(decimalRate));
    setBalance(balance.add(interest));
  }
}
  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -