Menu
CoddyTech

Xử lý rút tiền

Thuộc phần Lập trình hướng đối tượng trong hành trình C của Coddy. Bài học 25 trên 61.

challenge icon

Thử thách

Dễ

Số dư tài khoản ngân hàng của bạn đang tăng lên! Giờ mình sẽ thêm chức năng rút tiền. Khác với gửi tiền, việc rút tiền có thêm một ràng buộc. Bạn không thể rút nhiều tiền hơn số tiền mình có. Hàm withdraw của bạn cần kiểm tra số dư trước khi cho phép giao dịch.

Dựa trên dự án tài khoản ngân hàng hiện có, bạn sẽ mở rộng module để thêm chức năng rút tiền. Đây là lúc tính đóng gói phát huy tác dụng. Hàm của bạn có thể truy cập số dư ẩn để xác minh tài khoản có đủ tiền hay không, điều mà code bên ngoài không thể làm trực tiếp.

Bạn sẽ làm việc với ba tệp:

  • account.h: Thêm nguyên mẫu hàm mới: withdraw. Hàm này nhận một con trỏ Account và một khoản tiền kiểu double, rồi trả về một giá trị kiểu int (1 nếu thành công, 0 nếu rút tiền thất bại). Giữ nguyên tất cả khai báo hiện có của bạn cho create_account, destroy_account và deposit.
  • account.c: Triển khai hàm withdraw. Việc rút tiền chỉ thành công nếu thỏa mãn cả hai điều kiện: khoản tiền phải dương (lớn hơn không), VÀ tài khoản phải có đủ tiền (số dư >= khoản tiền). Nếu cả hai điều kiện đều thỏa mãn, hãy trừ khoản tiền khỏi số dư và trả về 1. Nếu không, hãy trả về 0 mà không thay đổi số dư.
  • main.c: Minh họa quy trình gửi và rút tiền hoàn chỉnh. Tạo một tài khoản, gửi tiền để thiết lập số dư, rồi thử rút tiền: cả trường hợp thành công lẫn thất bại.

Bạn sẽ nhận bốn đầu vào: ID tài khoản (một số nguyên), khoản tiền gửi (để tạo số dư ban đầu), khoản tiền rút thành công (nhỏ hơn hoặc bằng khoản tiền đã gửi) và khoản tiền rút thất bại (lớn hơn số dư còn lại).

Trong tệp chính, hãy tạo một tài khoản và in thông báo xác nhận. Gửi khoản tiền ban đầu và in kết quả. Sau đó thực hiện lần rút tiền thành công và in trạng thái thành công hay thất bại. Cuối cùng, thử rút khoản tiền lẽ ra sẽ thất bại do không đủ tiền và in kết quả đó. Hủy tài khoản và xác nhận đã dọn dẹp.

In đầu ra theo định dạng này:

Account 1001 created
Deposit 500.00: 1
Withdraw 200.00: 1
Withdraw 400.00: 0
Account destroyed

Trong đó, 1001 là ID tài khoản, 500.00 là khoản tiền gửi, 200.00 là khoản tiền rút thành công và 400.00 là khoản tiền rút thất bại (vì chỉ còn 300.00 sau lần rút đầu tiên). Định dạng tất cả khoản tiền với hai chữ số thập phân bằng cách dùng %.2f.

Hàm withdraw của bạn thể hiện sức mạnh của tính đóng gói. Hàm có thể kiểm tra số dư ẩn bên trong để đưa ra quyết định, trong khi code bên ngoài không thể bỏ qua bước xác thực này hoặc xem trực tiếp số dư.

Tự làm thử

#include <stdio.h>
#include "account.h"

int main() {
    int account_id;
    scanf("%d", &account_id);
    
    double valid_amount;
    scanf("%lf", &valid_amount);
    
    double invalid_amount;
    scanf("%lf", &invalid_amount);
    
    Account* account = create_account(account_id);
    printf("Account %d created\n", account_id);
    
    int result_invalid = deposit(account, invalid_amount);
    printf("Deposit %.2f: %d\n", invalid_amount, result_invalid);
    
    int result_valid = deposit(account, valid_amount);
    printf("Deposit %.2f: %d\n", valid_amount, result_valid);
    
    destroy_account(account);
    printf("Account destroyed\n");
    
    return 0;
}

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Trình biên dịch C online