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.
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ểudouble, rồi trả về một giá trị kiểuint(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 chocreate_account,destroy_accountvàdeposit.account.c: Triển khai hàmwithdraw. 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 destroyedTrong đó, 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
1Kiến thức cơ bản về lập trình mô-đun
Tệp tiêu đềInclude guardTệp mã nguồnHàm staticÔn tập: Máy tính mô-đun4Tính đóng gói
Khái niệm con trỏ mờĐịnh nghĩa struct mờHàm truy xuất và hàm gánKiểm tra tính hợp lệ trong hàm gánÔn tập: Hộp bí mật2Đối tượng và phương thức
Struct dưới dạng đối tượngCon trỏ 'Self'Tính đúng đắn của constCon trỏ và giá trịPhương thức hỗ trợÔn tập: trình quản lý Point5Dự án: Tài khoản ngân hàng đơn giản
Thiết lập dự ánTriển khai tài khoản3Vòng đời đối tượng
Mẫu hàm khởi tạoMẫu hàm hủyKhởi tạo trên ngăn xếpSao chép sâuÔn tập: lớp bao bọc chuỗi6Kế thừa bằng cách kết hợp
Nhúng structQuy tắc thành viên đầu tiênTruy cập thành viên lớp chaUpcastingÔn tập: hệ phân cấp hình dạngTự luyện tập: Trình biên dịch C online