Session.java
上传用户:ljt780218
上传日期:2022-07-30
资源大小:110k
文件大小:4k
源码类别:

金融证券系统

开发平台:

Java

  1. // <html><head><title>ATM Simulation Implementation - Individual Sessions</title></head><body><h2>ATM Simulation Implementation - Individual Sessions</h2><pre>
  2. /*
  3.  * Example ATM simulation - file Session.java
  4.  *
  5.  * This file implements the class that represents a single customer session
  6.  * with the ATM
  7.  *
  8.  * Copyright (c) 1997 - Russell C. Bjork
  9.  *
  10.  */
  11. package atm;
  12. import atm.transaction.Transaction;
  13. import atm.util.Status;
  14. import atm.util.Money;
  15. //</pre><hr><h3>Class Session</h3><pre>
  16. public class Session
  17.   {
  18.     //</pre><a name="Session::Session"><hr><pre>
  19.     
  20.     public Session(int cardNumber, ATM atm, Bank bank)
  21.       { _cardNumber = cardNumber;
  22.         _atm = atm;
  23.         _bank = bank;
  24.         _state = RUNNING;
  25.         _PIN = 0;
  26.         _currentTransaction = null;
  27.       }
  28.     
  29.     
  30.     //</pre><a name="Session::doSessionUseCase"><hr><pre>
  31.     public void doSessionUseCase()
  32.       {
  33.         _PIN = _atm.getPIN();
  34.         
  35.         do
  36.           {
  37.             String anotherMenu[] = { "Yes", "No" };
  38.             _currentTransaction = Transaction.chooseTransaction(this, _atm, _bank);
  39.             int status = _currentTransaction.doTransactionUseCase();
  40.             switch (status)
  41.               {
  42.                 case Status.SUCCESS:
  43.     
  44.                   if (1 != _atm.getMenuChoice
  45.                     ("Do you want to perform another transaction?",2,anotherMenu))
  46.                       _state = FINISHED;
  47.                   break;
  48.                 
  49.                 case Status.INVALID_PIN:
  50.                  
  51.                   _state = ABORTED;
  52.                   break;
  53.                  
  54.                default:
  55.                  
  56.                  boolean doAnother = doFailedTransactionExtension(status);
  57.                  if (! doAnother)
  58.                    _state = FINISHED;
  59.               }
  60.            }
  61.         while (_state == RUNNING);
  62.     
  63.         if (_state != ABORTED) 
  64.             _atm.ejectCard();
  65.       }
  66.     //</pre><a name="Session::doInvalidPINExtension"><hr><pre>
  67.     public int doInvalidPINExtension()
  68.       { 
  69.         int code;
  70.         for (int i = 0; i < 3; i ++)
  71.           { _PIN = _atm.reEnterPIN();
  72.             code = _currentTransaction.sendToBank();     
  73.             if (code != Status.INVALID_PIN)
  74.                 return code;
  75.           }
  76.         _atm.retainCard();
  77.         _state = ABORTED;
  78.         return Status.INVALID_PIN;
  79.       }
  80.     
  81.     
  82.     //</pre><a name="Session:doFailedTransactionExtension"><hr><pre>
  83.     public boolean doFailedTransactionExtension(int reason)
  84.       { switch(reason)
  85.           { 
  86.             case Status.TOO_LITTLE_CASH:
  87.     
  88.                 return _atm.reportTransactionFailure(
  89.              "Sorry, there is not enough cash available to satisfy your request");
  90.     
  91.             case Status.ENVELOPE_DEPOSIT_TIMED_OUT:
  92.     
  93.                 return _atm.reportTransactionFailure(
  94.              "Envelope not deposited - transaction cancelled");
  95.              
  96.             default:
  97.     
  98.                 return _atm.reportTransactionFailure(
  99.                               _bank.rejectionExplanation(reason));
  100.     
  101.           } 
  102.       }
  103.     
  104.     
  105.     //</pre><a name="Session::cardNumber"><hr><pre>
  106.     
  107.     public int cardNumber()
  108.       { return _cardNumber; 
  109.       }
  110.     
  111.     
  112.     //</pre><a name="Session::PIN"><hr><pre>
  113.     
  114.     public int PIN()
  115.       { return _PIN; 
  116.       }
  117.     
  118.     //</pre><hr><pre>
  119.     
  120.     // Possible values for _state instance variable
  121.     private static final int RUNNING = 0;
  122.     private static final int FINISHED = 1;
  123.     private static final int ABORTED = 2;
  124.     
  125.     // Instance variables
  126.     
  127.     private int         _cardNumber;
  128.     private ATM         _atm;
  129.     private Bank        _bank;
  130.     private int         _state;
  131.     private int         _PIN;
  132.     private Transaction _currentTransaction;
  133.     
  134.   }
  135.   
  136. //</pre></body></html>