Menu
CoddyTech

取款逻辑

本课属于 Coddy C 学习旅程的“面向对象编程”单元。第 25 课,共 61 课。

challenge icon

挑战

简单

你的 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 在线编译器