取款逻辑
本课属于 Coddy C 学习旅程的“面向对象编程”单元。第 25 课,共 61 课。
挑战
简单你的 Bank Account 正在不断发展!现在,让我们添加取款功能。与存款不同,取款有一个额外的限制:你不能取出超过账户余额的钱。你的取款函数需要先检查余额,再允许进行交易。
在现有的 Bank Account 项目基础上,你将为模块扩展取款功能。这正是封装发挥作用的地方。你的函数可以访问隐藏的余额,以确认资金是否充足,而外部代码无法直接做到这一点。
你将使用 3 个文件:
account.h:添加一个新的函数原型:withdraw。这个函数接收一个 Account 指针和一个double金额,并返回一个int(成功时返回 1,取款失败时返回 0)。保留现有的create_account、destroy_account和deposit声明。account.c:实现withdraw函数。只有同时满足以下两个条件,取款才能成功:金额必须为正数(大于零),并且账户资金充足(余额 >= 金额)。如果两个条件都满足,就从余额中扣除相应金额并返回 1。否则,返回 0,且不修改余额。main.c:演示完整的存款和取款流程。创建一个账户,存入一笔钱以建立余额,然后测试取款,包括成功和失败的情况。
你将收到 4 个输入:账户 ID(一个整数)、存款金额(用于存入初始资金)、成功取款金额(小于或等于存款金额)以及失败取款金额(大于剩余余额)。
在主文件中,创建一个账户并打印确认信息。存入初始资金并打印结果。然后进行成功取款,并打印取款是否成功。最后,尝试进行一次应该失败的取款(资金不足),并打印结果。销毁账户并确认清理完成。
按以下格式打印输出:
Account 1001 created
Deposit 500.00: 1
Withdraw 200.00: 1
Withdraw 400.00: 0
Account destroyed其中,1001 是账户 ID,500.00 是存款金额,200.00 是成功取款的金额,400.00 是失败取款的金额(第一次取款后只剩下 300.00)。使用 %.2f 将所有金额格式化为两位小数。
你的取款函数展示了封装的强大之处。它可以在内部检查隐藏的余额并据此做出判断,而外部代码无法绕过这种验证,也无法直接查看余额。
亲手试试
#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;
}面向对象编程中的所有课
自己练习: C 在线编译器