Nhập môn KTLT (tiếp) Nguyễn Diệu Hương
[email protected] [email protected]
5. Case Study: Phần mềm máy ATM
5.1. Xác định yêu cầu bài toán
Bài toán
Một ngân hàng muốn cài đặt một máy ATM mới cho phép người dùng thực hiện các giao dịch tài chính cơ bản Mỗi người dùng chỉ có 1 tài khoản (account) Người dùng được phép:
Xem số dư tài khoản Rút tiền mặt Nạp tiền vào tài khoản
Giao diện của máy ATM
Trước mỗi ngày, khay đựng tiền được nạp vào 500 tờ $20.
Một phiên giao dịch ATM xác thực người dùng, thông qua:
1. Æ
2.
Số tài khoản (account number) Số PIN (personal identification number) Tương tác với cơ sở dữ liệu về thông tin tài khoản của ngân hàng (số tài khoản, PIN, số dư tài khoản)
Thực hiện giao dịch xem số dư tài khoản/nạp tiền/rút tiền
Xác thực người dùng Màn hình nhắc người dùng nhập số tài khoản Người dùng nhập số TK (5 kí tự) Màn hình nhắc người dùng nhập số PIN Người dùng nhập số PIN Nếu số TK và PIN:
1.
2. 3. 4. 5.
Đúng: hiện menu chính Sai: thông báo và lặp lại bước 1
Menu chính
Giao dịch rút tiền
Giao dịch rút tiền Người dùng nhập lựa chọn (1-6) Nếu số tiền muốn rút so với số tiền trong TK:
1. 2.
Nếu khay đựng tiền (Cash Dispenser):
3.
4. 5. 6.
> : hiện thông báo và lặp lại 1. <= : thực hiện 3. (Nếu chọn 6-Cancel: Quay trở lại menu chính) Có đủ tiền: thực hiện 4. Không đủ tiền: hiện thông báo yêu cầu nhập ít hơn và quay lại 1.
Trừ số tiền rút trong số dư tài khoản của người dùng trong CSDL Máy phát tiền ra khay Màn hình hiện thông báo nhắc người dùng rút tiền khỏi khay.
Giao dịch nạp tiền Màn hình nhắc người dùng nhập số tiền muốn nạp Người dùng nhập:
1. 2.
Số tiền: thực hiện 3. 0: hoãn giao dịch và hiện menu chính
Hiện thông báo yêu cầu đặt tiền vào khay (deposit slot) Nếu khay đút tiền:
3.
4.
Nhận được tiền trong vòng 2 phút: hệ thống cộng số tiền nạp vào số dư TK của người dùng trong CSDL.
(Sau khi ngân hàng đã kiểm chứng khoản tiền, lượng tiền nạp vào này mới được phép rút)
Không nhận được tiền: hiện thông báo hoãn giao dịch và hiện menu chính.
User’s Use case diagram
5.2. Thiết kế hệ thống ATM
Thiết kế hệ thống ATM 1. 2. 3.
4. 5.
Nhận dạng các lớp Nhận dạng các thuộc tính của lớp Nhận dạng các trạng thái và hành động của đối tượng Nhận dạng các thao tác của lớp Nhận dạng sự tương tác giữa các đối tượng trong hệ thống
1. Nhận dạng các lớp
Các lớp 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
ATM Screen Keypad CashDispenser DepositSlot Account BankDatabase BalanceInquiry Withdrawal Deposit.
Mối quan hệ giữa các lớp
Mô hình mối quan hệ giữa các lớp cho hệ thống ATM
2. Nhận dạng thuộc tính của lớp
Mô tả lớp
ATM
người dùng được xác thực BalanceInquiry số tài khoản Withdrawal số tài khoản, số tiền Deposit số tài khoản, số tiền BankDatabase (không có) Account số tài khoản, PIN, số dư tài khoản Screen (không có) Keypad (không có) CashDispenser 500 tờ 20$ DepositSlot (không có)
Mô hình hóa các thuộc tính
3. Nhận dạng trạng thái và hành động của đối tượng
Sơ đồ trạng thái cho đối tượng ATM
Sơ đồ hành động của giao dịch BalanceInquiry
Sơ đồ hành động của giao dịch Withdrawal
4. Nhận dạng các thao tác/hành vi của lớp
Danh sách các động từ/ngữ động từ ATM BalanceInquiry Withdrawal Deposit BankDatabase
Account
Thực hiện các giao dịch tài chính [không có] [không có] [không có] Xác thực người dùng, truy cập số dư tài khoản, cộng thêm tiền muốn nạp vào tài khoản, trừ đi tiền muốn rút trong tài khoản Truy cập số dư tài khoản, cộng thêm tiền muốn nạp vào tài khoản, trừ đi tiền muốn rút trong tài khoản
Danh sách các động từ/ngữ động từ (tiếp) Screen
Hiện thông báo cho người dùng
Keypad
Nhận một giá trị số đầu vào từ người dùng
CashDispenser Phát tiền, quyết định liệu có đủ tiền so với yêu cầu rút tiền DepositSlot
Nhận tiền
Mô hình hóa hành vi
Nhận dạng các tham số của hành vi
BankDatabase – Tham số
Account – Tham số
Screen – Tham số
CashDispenser – Tham số
BalanceInquiry, Withdrawal và Deposit, Keypad, DepositSlot – Tham số
BalanceInquiry, Withdrawal và Deposit::execute
Keypad::getInput
DepositSlot::isEnvelopeReceived
5. Nhận dạng sự tương tác giữa các đối tượng trong hệ thống
Tương tác (collaboration): 2 đối tượng giao tiếp với nhau để thực hiện công việc
Liệt kê các tương tác - ATM Đối tượng gửi Thông báo
Đối tượng nhận
ATM
displayMessage
Screen
getInput
Keypad
authenticateUser
BankDatabase
execute
BalanceInquiry
execute
Withdrawal
execute
Deposit
Liệt kê các tương tác – BalanceInquiry Đối tượng gửi Thông báo
Đối tượng nhận
BalanceInquiry getAvailableBalance BankDatabase getTotalBalance
BankDatabase
displayMessage
Screen
Liệt kê các tương tác - Withdrawal Đối tượng gửi Thông báo Withdrawal
Đối tượng nhận
displayMessage
Screen
getInput
Keypad
getAvailableBalance
BankDatabase
isSufficientCashAvailable CashDispenser debit
BankDatabase
dispenseCash
CashDispenser
Liệt kê các tương tác - Deposit Đối tượng gửi Thông báo
Đối tượng nhận
Deposit
displayMessage
Screen
getInput
Keypad
isEnvelopeReceived DepositSlot credit
BankDatabase
Liệt kê các tương tác BankDatabase Đối tượng gửi Thông báo
Đối tượng nhận
BankDatabase validatePIN
Account
getAvailableBalance Account getTotalBalance
Account
debit
Account
credit
Account
validatePIN
Account
Lược đồ tương tác
Mô hình hóa cách các đối tượng tương tác với nhau 2 loại:
Lược đồ giao tiếp: Lược đồ tuần tự:
Lược đồ giao tiếp của ATM thực hiện truy cập số dư tài khoản
Lược đồ giao tiếp thực hiện truy cập số dư tài khoản
Hãy vẽ các lược đồ giao tiếp
Xác thực người dùng Giao dịch rút tiền Giao dịch nhận tiền
Lược đồ tuần tự mô hình hóa thực hiện giao dịch Withdrawal
Vẽ lược đồ tuần tự mô hình hóa giao dịch Deposit
5.3. Cài đặt hệ thống ATM
Xác định quyền điểu khiển
Phối hợp lược đồ lớp và lược đồ tương tác
Hướng dẫn cài đặt - 1
Tên của header file = tên của lớp trong lược đồ Sử dụng các tiền xử lý: #ifndef, #define và #endif
Ví dụ - Lớp Withdrawal // Withdrawal.h // Definition of class Withdrawal that // represents a withdrawal transaction #ifndef WITHDRAWAL_H #define WITHDRAWAL_H class Withdrawal { }; // end class Withdrawal #endif // WITHDRAWAL_H
Hướng dẫn cài đặt - 2
Dữ liệu thành viên = thuộc tính trong lược đồ lớp
Ví dụ - Lớp Withdrawal // Withdrawal.h // Definition of class Withdrawal that // represents a withdrawal transaction #ifndef WITHDRAWAL_H #define WITHDRAWAL_H class Withdrawal { private: // attributes int accountNumber; // account to withdraw funds from double amount; // amount to withdraw }; // end class Withdrawal #endif // WITHDRAWAL_H
Hướng dẫn cài đặt - 3
Quan hệ phối hợp = tham chiếu/con trỏ tới các đối tượng khác.
#ifndef WITHDRAWAL_H #define WITHDRAWAL_H #include #include #include #include
"Screen.h" "Keypad.h" "CashDispenser.h" "BankDatabase.h"
class Withdrawal { private: // attributes int accountNumber; // account to withdraw funds from double amount; // amount to withdraw // references to associated objects Screen &screen; // reference to ATM's screen Keypad &keypad; // reference to ATM's keypad CashDispenser &cashDispenser; // ref to cash dispenser BankDatabase &bankDatabase; // ref to the account db }; // end class Withdrawal #endif // WITHDRAWAL_H
Hướng dẫn cài đặt - 4
#include header_file khi chỉ sử dụng tham chiếu tới đối tượng là không cần thiết.
Lan truyền khai báo (forward declaration)
#ifndef WITHDRAWAL_H #define WITHDRAWAL_H class class class class
Screen; // forward declaration of class Screen Keypad; // forward declaration of class Keypad CashDispenser; // forward declaration of CashDispenser BankDatabase; // forward declaration of BankDatabase
class Withdrawal { private: // attributes int accountNumber; // account to withdraw funds from double amount; // amount to withdraw // references to associated objects Screen &screen; // reference to ATM's screen Keypad &keypad; // reference to ATM's keypad CashDispenser &cashDispenser; // ref to cash dispenser BankDatabase &bankDatabase; // ref to the account db }; // end class Withdrawal #endif // WITHDRAWAL_H
Hướng dẫn cài đặt - 5
Khuôn mẫu hàm thành viên = thao tác trong lược đồ
#ifndef WITHDRAWAL_H #define WITHDRAWAL_H class Screen; // forward declaration of class Screen class Keypad; // forward declaration of class Keypad class CashDispenser; // forward declaration of CashDispenser class BankDatabase; // forward declaration of BankDatabase class Withdrawal { public: // operations void execute(); // perform the transaction private: // attributes int accountNumber; // account to withdraw funds from double amount; // amount to withdraw // references to associated objects Screen &screen; // reference to ATM's screen Keypad &keypad; // reference to ATM's keypad CashDispenser &cashDispenser; // ref to cash dispenser BankDatabase &bankDatabase; // ref to the account db }; // end class Withdrawal #endif // WITHDRAWAL_H
Bài tập: cài đặt lớp Account
Bài tập
Hoàn thành cài đặt toàn bộ chương trình cho hệ thống ATM theo thiết kế