Case Study – ATM system

49

Transcript of Case Study – ATM system

Phần mềm được thiết kế sẽ điều khiển một máy mô phỏng máy rút tiền tự động (ATM) có đầu đọc để đọc thẻ ATM

có bảng điều khiển (bàn phím và màn hình) để tương tác với khách hàng

có khe cắm để phong bì thư chứa tiền

có thiết bị trả tiền mặt (bằng bội số của 20USD)

có máy in để in biên lai của khách hàng

có bộ chuyển đổi phím cho phép điều khiển bắt đầu hoặc ngừng máy.

Máy ATM sẽ liên lạc với máy tính của ngân hàng qua một liên kết truyền thông thích hợp

Máy ATM sẽ phục vụ một khách hàng mỗi lần.

Một khách hàng sẽ phải nạp thẻ ATM

nhập mã số cá nhân (PIN) Cả hai sẽ được gửi đến ngân

hàng để xác nhận tính hợp lệ như là một phần của mỗi giao dịch.

Sau đó, khách hàng có thể thực hiện một hoặc nhiều giao dịch.

Thẻ sẽ được giữ lại trong máy cho đến khi khách hàng cho biết rằng anh ta / cô ta không muốn tiếp tục giao dịch. Tại thời điểm đó nó sẽ được trả lại.

Máy ATM phải có khả năng cung cấp các dịch vụ sau cho khách hàng: Khách hàng có khả năng rút tiền mặt từ tài

khoản tương ứng với thẻ, số tiền rút là bội số của $20.00. Sự chấp thuận phải được xác nhận từ ngân hàng trước khi tiền mặt được rút ra.

Khách hàng có thể thực hiện gửi một khoản tiền bất kỳ cho tài khoản tương ứng với thẻ, bao gồm tiền mặt và / hoặc séc trong một phong bì. Khách hàng sẽ nhập số tiền đặt cọc vào máy ATM, tùy thuộc vào sự kiểm tra thủ công khi phong bì được người vận hành dỡ bỏ. Sự chấp thuận phải được xác nhận từ ngân hàng trước khi nhận được phong bì.

Khách hàng có thể thực hiện chuyển tiền giữa hai tài khoản.

Khách hàng có thể thực hiện việc kiểm tra số dư tài khoản tương ứng với thẻ.

Khách hàng có thể hủy bỏ một giao dịch đang tiến hành bằng cách nhấn phím Hủy thay vì trả lời yêu cầu từ máy.

Máy ATM sẽ thông báo từng giao dịch cho ngân hàng và nhận được xác minh rằng ngân hàng đã cho phép. Thông thường, một giao dịch sẽ được ngân hàng hoàn thành sau khi đã được phê duyệt.

Trong trường hợp gửi tiền, một tin nhắn thứ hai sẽ được gửi đến ngân hàng cho biết khách hàng đã gửi tiền cho phong bì. (Nếu khách hàng không gửi tiền trong phong bì trong khoảng thời gian chờ, hoặc hủy bỏ thì hệ thống sẽ không gửi tin nhắn thứ hai đến ngân hàng và khoản tiền gửi sẽ không được ghi có vào tài khoản của khách hàng.)

Nếu ngân hàng xác định mã PIN của khách hàng là không hợp lệ, khách hàng sẽ phải nhập lại mã PIN trước khi giao dịch có thể tiến hành.

Nếu khách hàng không thể nhập mã PIN thành công sau ba lần thử, thì thẻ sẽ được giữ lại vĩnh viễn bởi máy và khách hàng sẽ phải liên lạc với ngân hàng để lấy lại.

Nếu một giao dịch thất bại vì bất kỳ lý do nào ngoài mã PIN không hợp lệ, máy ATM sẽ giải thích sự cố và sẽ hỏi khách hàng xem họ có muốn thực hiện giao dịch khác không.

Máy ATM sẽ cung cấp cho

khách hàng một hóa đơn

biên nhận cho mỗi giao

dịch thành công, hiển thị

ngày, giờ, vị trí máy, loại

giao dịch, tài khoản, số

tiền, và kết thúc và số dư

hiện thời của tài khoản.

Máy ATM có bộ phận điều khiển cho phép cán bộ vận hành có thể khởi động hoặc tạm ngừng phục vụ

Khi chuyển sang vị trí “ON”, cán bộ vận hành phải xác minh và nhập số tiền mặt có trong máy

Máy chỉ có thể tắt khi không phục vụ khách hàng

Khi chuyển sang vị trí “OFF”, máy sẽ tắt và cán bộ vận hành có thể lấy phong bì tiền gửi, nạp thêm tiền mặt, biên lai

ATM sẽ duy trì nhật ký nội bộ ghi lại các giao dịch nhằm giải quyết những vấn đề phát sinh.

Các mục sẽ được thực hiện trong nhật ký khi máy ATM được khởi động và tắt, mỗi tin nhắn được gửi đến Ngân hàng, việc phân phát tiền mặt, và để nhận một phong bì.

Các mục đăng nhập có thể chứa số thẻ và số tiền, nhưng để bảo mật sẽ không bao giờ chứa mã PIN.

Xác định yêu cầu nghiệp vụ 1. Xác định và mô tả các tác nhân

2. Xây dựng bảng thuật ngữ

3. Xác định và mô tả các ca sử dụng

4. Xây dựng kịch bản

5. Xây dựng biểu đồ hoạt động (Tùy chọn)

6. Xây dựng biểu đồ giao tiếp (Tùy chọn) Xác định yêu cầu hệ thống

1. Xác định và mô tả các tác nhân

2. Xác định và mô tả các ca sử dụng

3. Xây dựng kịch bản

4. Xây dựng biểu đồ ca sử dụng

5. Xếp ưu tiên các ca sử dụng

6. Phác họa giao diện người dùng

Khách hàng (Customer)

Cán bộ điều hành (Operator)

Ngân hàng (Bank)

TT Tiếng Anh Tiếng Việt Giải thích

1 ATM System

2 Customer

3 PIN

4 Session

5 Transaction

6 Withdrawal

7 Deposit

8 Transper

9 Inquiry

10 Operator

11 System Start

12 System Shutdown

System Startup Hệ thống được khởi động khi cán bộ điều hành (Operator)

chuyển công tắc điều khiển sang vị trí «ON».

Cán bộ điều hành sẽ được yêu cầu nhập vào số tiền hiện có trong máy rút tiền

Kết nối với ngân hàng được thiết lập

Sẵn sàng phục vụ. System Shutdown

Hệ thống sẽ tắt khi cán bộ điều hành đảm bảo rằng không có khách hàng đang sử dụng máy

Chuyển công tắc của điều khiển sang vị trí «OFF».

Kết nối với ngân hàng sẽ bị loại bỏ

Cán bộ điều hành thu các phong bì tiền gửi, bổ sung tiền mặt và giấy in biên lai.

Session Một phiên được bắt đầu khi một khách hàng chèn một thẻ ATM vào khe

đọc thẻ của máy.

Máy ATM kéo thẻ vào máy và đọc nó. (Nếu máy đọc thẻ không thể đọc được thẻ do chèn không đúng hoặc thẻ hỏng, thẻ sẽ bị đẩy ra, màn hình lỗi được hiển thị và phiên làm việc bị hủy bỏ)

Khách hàng được yêu cầu nhập mã PIN của mình và sau đó được phép để thực hiện một hoặc nhiều giao dịch, lựa chọn từ một thực đơn các loại giao dịch có thể có.

Sau mỗi giao dịch, khách hàng được hỏi liệu anh / chị ấy có muốn thực hiện giao dịch khác không.

Khi khách hàng thực hiện giao dịch, thẻ sẽ được đẩy ra khỏi máy và kết thúc phiên.

Nếu một giao dịch bị hủy vì quá nhiều mục nhập PIN không hợp lệ, phiên cũng bị hủy bỏ, với thẻ được giữ lại trong máy.

Khách hàng có thể hủy bỏ phiên làm việc bằng cách nhấn phím Hủy khi nhập mã PIN hoặc chọn loại giao dịch.

Transaction Transaction là giao dịch trừu tượng

Transaction được bắt đầu trong một phiên khi khách hàng chọn một loại giao dịch từ thực đơn các tùy chọn. Khách hàng sẽ được yêu cầu cung cấp chi tiết thích hợp (ví dụ: tài khoản liên quan, số tiền). Thông tin giao dịch sẽ được gửi đến ngân hàng, cùng với thông tin từ thẻ của khách hàng và mã PIN mà khách hàng nhập.

Nếu ngân hàng phê duyệt giao dịch, các bước cần thiết để hoàn tất giao dịch (ví dụ như phát tiền mặt hoặc chấp nhận phong bì) sẽ được thực hiện, biên lai sẽ được in. Sau đó, khách hàng sẽ được hỏi liệu anh / chị ấy có muốn làm một giao dịch khác hay không.

Nếu ngân hàng báo cáo rằng mã PIN của khách hàng không hợp lệ, một thủ tục mở rộng sẽ được thực hiện để tiếp tục giao dịch. Nếu nhiều lần không hợp lệ, thẻ khách hàng được giữ lại, giao dịch bị hủy và khách hàng sẽ không được cung cấp tùy chọn để thực hiện giao dịch khác.

Nếu một giao dịch bị huỷ bỏ bởi khách hàng hoặc không thành công vì các lý do khác, màn hình sẽ được hiển thị thông báo cho khách hàng về lý do của sự thất bại của giao dịch và sau đó khách hàng sẽ được cung cấp cơ hội làm khác.

Khách hàng có thể hủy giao dịch bằng cách nhấn phím CANCEL.

Tất cả các tin nhắn đến ngân hàng và trả lời lại được ghi lại trong nhật ký của máy ATM.

Giao dịch rút tiền (Withdrawal transaction) Giao dịch rút tiền yêu cầu khách hàng chọn loại tài khoản để rút từ một danh mục các tài khoản có

thể và nhập số tiền cần rút.

Hệ thống xác minh rằng nó có đủ tiền trong tay để đáp ứng yêu cầu trước khi gửi giao dịch đến ngân hàng. (Nếu không, khách hàng sẽ được thông báo và yêu cầu nhập một số tiền khác.)

Nếu giao dịch được ngân hàng chấp thuận, số tiền đó sẽ được máy rút ra trước khi xuất hóa đơn.

Việc rút tiền được ghi lại trong nhật ký của máy ATM

Giao dịch rút tiền có thể được huỷ bởi khách hàng nhấn phím CANCEL bất kỳ lúc nào trước khi nhập số tiền.

Giao dịch gửi tiền (Deposit transaction) Giao dịch gửi tiền yêu cầu khách hàng chọn tài khoản để gửi tiền từ danh mục các tài khoản có thể

và nhập một khoản tiền trên bàn phím.

Thông tin giao dịch được gửi đến ngân hàng để xác minh rằng máy ATM có thể chấp nhận khoản tiền gửi từ khách hàng vào tài khoản này. Nếu giao dịch được chấp thuận, máy chấp nhận phong bì từ khách hàng có tiền mặt và / hoặc séc trước khi xuất trình biên nhận.

Sau khi nhận được phong bì, một thông báo thứ hai được gửi đến ngân hàng, để xác nhận rằng ngân hàng có thể ghi có vào tài khoản của khách hàng - phụ thuộc vào việc xác minh thủ công các phong bì đựng tiền bởi cán bộ điều hành sau đó. (Việc nhận được một phong bì cũng được ghi lại trong nhật ký của máy ATM)

Giao dịch gửi tiền có thể được huỷ bỏ bởi khách hàng nhấn phím CANCEL bất kỳ lúc nào trước khi đưa phong bì chứa tiền gửi. Giao dịch được tự động hủy nếu khách hàng không thể đưa phong bì có chứa khoản tiền gửi trong một khoảng thời gian hợp lý sau khi được yêu cầu làm như vậy.

Giao dịch chuyển tiền (Transfer transaction)

Giao dịch chuyển tiền yêu cầu khách hàng chọn tài khoản để chuyển từ một danh sác các tài khoản có thể, chọn một tài khoản khác để chuyển sang và nhập một khoản tiền trên bàn phím.

Không cần thực hiện thêm hành động nào sau khi giao dịch được ngân hàng chấp thuận trước khi in biên nhận.

Giao dịch chuyển khoản có thể được hủy bởi khách hàng nhấn phím CANCEL bất kỳ lúc nào trước khi nhập số tiền.

Giao dịch truy vấn số dư

Giao dịch truy vấn số dư yêu cầu khách hàng chọn tài khoản từ một danh sách các tài khoản.

Không cần thực hiện thêm hành động nào sau khi giao dịch được ngân hàng chấp thuận trước khi in biên nhận.

Có thể hủy giao dịch truy vấn số dư khi khách hàng nhấn phím CANCEL trước khi chọn tài khoản để truy vấn.

Thủ tục kiểm tra PIN không hợp lệ (Invalid PIN Extension) Thủ tục kiểm tra PIN không hợp lệ được bắt đầu từ bên trong

giao dịch khi ngân hàng báo cáo rằng giao dịch của khách hàng bị từ chối do mã PIN không hợp lệ.

Khách hàng được yêu cầu nhập lại mã PIN, thông tin mã PIN được gửi lại cho ngân hàng.

Nếu ngân hàng chấp thuận giao dịch, hoặc không chấp thuận vì một lý do nào đó, giao dịch đã chọn sẽ được tiếp tục; nếu không quá trình tái nhập mã PIN được lặp lại.

Khi mã PIN được nhập lại thành công, mã PIN được sử dụng cho cả giao dịch hiện tại và tất cả giao dịch tiếp theo trong phiên. Nếu khách hàng không thành công trong ba lần nhập mã PIN, thẻ sẽ được giữ lại vĩnh viễn, màn hình hiển thị thông báo cho khách hàng về điều này và đề nghị liên hệ với ngân hàng và toàn bộ phiên khách sẽ bị hủy.

Nếu khách hàng chọn phím CANCEL thay vì nhập lại mã PIN, giao dịch sẽ bị hủy.

System

Operator

Customer

System Startup

System Shutdown

Session

Transaction

Invalid PIN

WithdrawalDeposit Transfer

Inquiry

Bank

<<include>>

<<extend>>

OperatorPanel ATM CashDispenser NetworkToBank

1 : switchOn()

2 : perpromStartup()

3 : getInitialCard()

4 : initialCard5 : setInitalCard(initialCard)

6 : openConnection()

Sequence Diagram for System Startup Use Case

OperatorPanel ATM NetworkToBank

1 : switchOff()

2 : performShutdown()

3 : closeConnection()

Sequence Diagram for System Shutdown Use Case

while customer wants to perform transactionsloop

CardReader ATM CustomerConsoleSession

Transaction

1 : cardInserted()

2 : create(this)

<<create>>

3 : performSection()

4 : readCard()

5 : card

6 : readPIN()

7 : PIN

8 : create(atm,this,card,pin)

<<create>>

9 : performTransaction()

10 : doAgain

11 : ejectCard()

Sequence Diagram for Session Use Case

Transaction NetworkToBank CustomerConsoleReceipt

1 : message := getSpecificsFromCustomer()

2 : send(message,balances)

3 : logSend(message)

4 : logResponse(status)5 : status

6 [invalid PIN] : status := performInvalidPINExtension()

7 [status ok] : receipt := completeTransaction()

8 : printReceipt(receipt)

9 : getMenuChoice(status message, yes no menu)

10 : customer wants to do another

Sequence Diagram for Transaction Use Case

Biểu đồ Withdrawal Transaction Use Case

Biểu đồ Deposit Transaction Use Case

Biểu đồ Inquiry Transaction Use Case

Biểu đồ Invalid PIN Extension

Xác định các lớp

Xác định quan hệ giữa các lớp

Xây dựng biểu đồ lớp

Xác định thuộc tính

Lớp ATM Lớp CardReader (máy đọc thẻ) Lớp CashDispenser (khe trả tiền) Lớp CustomerConsole (tương tác khách hàng) Lớp EnvelopeAcceptor (chấp nhận phong bì) Lớp Log (ghi nhật ký) Lớp NetworkToBank (liên lạc với ngân hàng) Lớp OperatorPanel (điều khiển của cán bộ điều hành) Lớp ReceiptPrinter (máy in biên nhận) Lớp Session (phiên) Lớp Transaction (giao dịch) Lớp Withdrawal (rút tiền) Lớp Deposit (gửi tiền) Lớp Transfer (chuyển tiền) Lớp Inquiry (truy vấn số dư) Lớp Balances( số dư ngân hàng) Lớp Card (thông tin thẻ ngân hàng) Lớp Message (thông điệp liên lạc) Lớp Receipt (thông tin giấy biên nhận) Lớp Status (thông tin trạng thái)

Lớp ATM

Khởi động khi bật công tắc

Tắt khi tắt công tắc

Bắt đầu một phiên mới khi khách hàng chèn thẻ

Cung cấp truy cập vào các lớp thành phần cho các phiên và các giao dịch

Lớp CardReader (máy đọc thẻ)

Cho ATM biết khi nào thẻ được lắp

Đọc thông tin từ thẻ

Trả thẻ

Giữ thẻ

Lớp CashDispenser (khe tiền trả)

Giữ tiền mặt trong máy ATM, bắt đầu với số tiền khởi tạo

Báo cáo liệu có đủ tiền mặt hay không

Thanh toán tiền

Lớp CustomerConsole (tương tác khách hàng)

Hiển thị tin nhắn

Hiển thị lời nhắc, chấp nhận mã PIN từ bàn phím

Hiển thị dấu nhắc và trình đơn, chấp nhận sự lựa chọn từ bàn phím

Hiển thị dấu nhắc, chấp nhận một khoản tiền từ bàn phím

Phản hồi khi phím CANCEL được nhấn bởi khách hàng

Lớp EnvelopeAcceptor (chấp nhận phong bì)

Chấp nhận phong bì từ khách hàng; báo cáo nếu đã hết thời gian hoặc hủy

Lớp Log (ghi nhật ký)

Ghi nhật ký các thông điệp gửi về ngân hàng

Ghi nhật ký các phản hồi từ ngân hàng

Ghi nhật ký việc xuất/trả tiền mặt

Ghi nhật ký việc nhận phong bì tiền

Lớp NetworkToBank (liên lạc với ngân hàng)

Bắt đầu kết nối với ngân hàng khi khởi động

Gửi tin nhắn tới ngân hàng và chờ phản hồi

Ngắt kết nối với ngân hàng khi tắt máy

Lớp OperatorPanel (điều khiển của cán

bộ điều hành)

Thông báo cho ATM về thay đổi chuyển đổi

trạng thái công tắc

Cho phép cán bộ điều hành nhập số tiền ban

đầu

Lớp ReceiptPrinter (máy in biên nhận)

In biên nhận

Lớp Session (phiên) Thực hiện một phiên làm việc Cập nhật giá trị PIN nếu khách hàng phải nhập lại mã PIN

Lớp Transaction (giao dịch) Là lớp trừu tượng

Cho phép khách hàng chọn loại giao dịch

Thực hiện mở rộng việc kiểm tra mã PIN không hợp lệ

Lớp Withdrawal (rút tiền) Thực hiện các hoạt động đặc biệt đối với trường hợp sử dụng giao dịch rút tiền

Lớp Deposit (gửi tiền) Thực hiện các hoạt động đặc biệt đối với trường hợp sử dụng giao dịch gửi tiền

Lớp Transfer (chuyển tiền) Thực hiện các hoạt động đặc biệt đối với trường hợp sử dụng giao dịch chuyển

tiền

Lớp Inquiry (truy vấn số dư) Thực hiện các hoạt động đặc biệt đối với trường hợp sử dụng giao dịch truy vấn

số dư

Lớp Balances( số dư ngân hàng)

Biểu diễn thông tin về số dư tài khoản tại ngân hàng Lớp Card (thông tin thẻ ngân hàng)

Biểu diễn thông tin được mã hoá trên thẻ ATM của khách hàng

Lớp Message (thông điệp liên lạc)

Biểu diễn thông tin được gửi qua mạng tới ngân hàng Lớp Receipt (thông tin giấy biên nhận)

Biểu diễn thông tin được in trên giấy biên nhận Lớp Status (thông tin trạng thái)

Biểu diễn thông tin trạng thái giao dịch được ngân hàng trả lại

Customer

Operator ATM

Card

Operator Panel

SessionCard Reader

Customer Console

Receipt Printer

TransactionNetwork To Bank Bank

Log

Cash Dispenser

Envelope Acceptor

ATM

CustomConsole

CardReader

Session

Card

Transaction

Withdrawal Deposit Transfer Inquiry

AccountInformation

ReceiptPrinter

OperatorPanel

NetworkToBankEnvelopAcceptorCashDispenser

Log

Message

Balances

Receipt

Status

Money

1

1

1

1

1 1

1

1

1

1

1

1

1

1

1

1

1

1

11

1

*

1

*

1 *

ATM - id: int

- place: String

- bankName: String

- bankAddress: InetAddress

- cardReader: CardReader

- cashDispenser: CashDispenser

- customerConsole: CustomerConsole

- envelopeAcceptor: EnvelopeAcceptor

- log: Log

- networkToBank: NetworkToBank

- operatorPanel: OperatorPanel

- receiptPrinter: ReceiptPrinter

- state: int

- switchOn: boolean

- cardInserted: boolean

- OFF_STATE: final int

- IDLE_STATE: final int

- SERVING_CUSTOMER_STATE: final int

+ ATM(id: int, place: String, bankName: String,

bankAddress: InetAddress)

+ run()

+ switchOn()

+ switchOff

+ cardInserted()

+ getID(): int

+ getPlace(): String

+ getBankName(): String

+ getCardReader(): CardReader

+ getCashDispenser(): CashDispenser

+ getCustomerConsole(): CustomerConsole

+ getEnvelopeAcceptor(): EnvelopeAcceptor

+ getLog(): Log

+ getNetworkToBank(): NetworkToBank

+ getOperatorPanel(): OperatorPanel

+ getReceiptPrinter(): ReceiptPrinter

- performStartup()

- performShutdown()

CardReader

- atm: ATM

+ CardReader(atm: ATM)

+ readCard(): Card

+ ejectCard()

+ retainCard()

CashDispenser

- log: Log

- cashOnHand: Money

+ CashDispenser(log: Log)

+ setInitialCash(initialCash: Money)

+ checkCashOnHand(amount: Money): boolean

+ dispenseCash(amount: Money)

CustomerConsole

+ CustomerConsole()

+ display(message: String)

+ readPIN(prompt: String): int throws Cancelled

+ readMenuChoice(prompt: String, menu: String []): int throws Cancelled

+ readAmount(prompt: String): Money throws Cancelled

EnvelopeAcceptor

- log: Log

+ EnvelopeAcceptor(log: Log)

+ acceptEnvelope() throws Cancelled

Log

+ Log()

+ logSend(message: Message)

+ logResponse(status: Status)

+ logCashDispensed(amount: Money)

+ logEnvelopeAccepted()

OperatorPanel

- atm: ATM

+ OperatorPanel(atm: ATM)

+ getInitialCash(): Money

ReceiptPrinter

+ ReceiptPrinter()

+ printReceipt(receipt: Receipt)

Session

- atm: ATM

- pin: int

- state: int

- READING_CARD_STATE: final int

- READING_PIN_STATE: final int

- CHOOSING_TRANSACTION_STATE: final int

- PERFORMING_TRANSACTION_STATE: final int

- EJECTING_CARD_STATE: final int

- FINAL_STATE: final int

+ Session(atm: ATM)>

+ performSession()

+ setPIN(int pin)

Transaction

# atm: ATM

# session: Session

# card: Card

# pin: int

# serialNumber: int

# message: Message

# balances: Balances

- TRANSACTION_TYPES_MENU: final String []

- nextSerialNumber: int

- state: int

- GETTING_SPECIFICS_STATE: final int

- SENDING_TO_BANK_STATE: final int

- INVALID_PIN_STATE: final int

- COMPLETING_TRANSACTION_STATE: final int

- PRINTING_RECEIPT_STATE: final int

- ASKING_DO_ANOTHER_STATE: final int

# Transaction(atm: ATM, session: Session,

card: Card, pin: int)

+ makeTransaction(atm: ATM, session:

Session, card: Card, pin: int): Transaction

throws Cancelled

+ performTransaction(): boolean throws

CardRetained

+ performInvalidPinExtension(): Status throws

Cancelled, CardRetained

+ getSerialNumber(): int

# getSpecificsFromCustomer(): Message

throws Cancelled

# completeTransaction(): Receipt throws

Cancelled

Withdrawal

- from: int

- amount: Money

+ Withdrawal(atm: ATM, session: Session, card: Card, pin: int)

# getSpecificsFromCustomer(): Message throws Cancelled

# completeTransaction(): Receipt

Deposit

- to: int

- amount: Money

+ Deposit(atm: ATM, session: Session, card: Card, pin: int)

# getSpecificsFromCustomer(): Message throws Cancelled

# completeTransaction(): Receipt throws Cancelled

Transfer

- from: int

- to: int

- amount: Money

+ Transfer(atm: ATM, session: Session, card: Card, pin: int)

# getSpecificsFromCustomer(): Message throws Cancelled

# completeTransaction(): Receipt

Inquiry

- from: int

+ Inquiry(atm: ATM, session: Session, card: Card, pin: int)

# getSpecificsFromCustomer(): Message throws Cancelled

# completeTransaction(): Receipt

AccountInformation

+ ACCOUNT_NAMES: final String[]

+ ACCOUNT_ABBREVIATIONS: final String []

Balances

- total: Money

- available: Money

+ Balances()

+ setBalances(total: Money, available: Money)

+ getTotal(): Money

+ getAvailable(): Money

Card

- number: int

+ Card(number: int)

+ getNumber(): int

Message

+ WITHDRAWAL: final int

+ INITIATE_DEPOSIT: final int

+ COMPLETE_DEPOSIT: final int

+ TRANSFER: final int

+ INQUIRY: final int

- messageCode: int

- card: Card

- pin: int

- serialNumber: int

- fromAccount: int

- toAccount: int

- amount: int

+ Message(messageCode: int,

cardNumber: Card, pin: int, serialNumber:

int, fromAccount: int, toAccount: int,

amount: Money)

+ toString(): String

+ setPIN(pin: int)

+ getMessageCode(): int

+ getCard(): Card

+ getPIN(): int

+ getSerialNumber(): int

+ getFromAccount(): int

+ getToAccount(): int

+ getAmount(): Money

Money

- cents: long

+ Money(dollars: int)

+ Money(dollars: int, cents: int)

+ Money(toCopy: Money)

+ toString(): String

+ add(amountToAdd: Money)

+ subtract(amountToSubtract: Money)

+ lessEqual(compareTo: Money): boolean

Receipt - headingPortion: String []

# detailsPortion(): String []

- balancesPortion: String []

# Receipt(atm: ATM, card: Card, transaction: Transaction, balances: Balances)

+ getLines(): Enumeration

Status

+ toString(): String

+ isSuccess(): boolean

+ isInvalidPIN(): boolean

+ getMessage(): String

Biểu đồ gói