You are on page 1of 65

Nhập môn KTLT

(tiếp)

Nguyễn Diệu Hương


huongnd@it-hut.edu.vn
huongnd-fit@mail.hut.edu.vn
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

1. ATM xác thực người dùng, thông qua:


„ 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)
2. 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

1. Màn hình nhắc người dùng nhập số tài


khoản
2. Người dùng nhập số TK (5 kí tự)
3. Màn hình nhắc người dùng nhập số PIN
4. Người dùng nhập số PIN
5. Nếu số TK và PIN:
„ Đú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
1. Người dùng nhập lựa chọn (1-6)
2. Nếu số tiền muốn rút so với số tiền trong TK:
„ > : 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)
3. Nếu khay đựng tiền (Cash Dispenser):
„ 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.
4. Trừ số tiền rút trong số dư tài khoản của người
dùng trong CSDL
5. Máy phát tiền ra khay
6. 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

1. Màn hình nhắc người dùng nhập số tiền muốn nạp


2. Người dùng nhập:
„ Số tiền: thực hiện 3.
„ 0: hoãn giao dịch và hiện menu chính
3. Hiện thông báo yêu cầu đặt tiền vào khay (deposit
slot)
4. Nếu khay đút tiền:
‰ 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. Nhận dạng các lớp


2. Nhận dạng các thuộc tính của lớp
3. Nhận dạng các trạng thái và hành động của
đối tượng
4. Nhận dạng các thao tác của lớp
5. 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. ATM
2. Screen
3. Keypad
4. CashDispenser
5. DepositSlot
6. Account
7. BankDatabase
8. BalanceInquiry
9. Withdrawal
10. 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
ATM người dùng được xác
Mô tả lớp 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 Thực hiện các giao dịch tài chính
BalanceInquiry [không có]
Withdrawal [không có]
Deposit [không có]
BankDatabase 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
Account 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 Đối tượng nhận


Withdrawal 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 "Screen.h"
#include "Keypad.h"
#include "CashDispenser.h"
#include "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 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
{
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ế

You might also like