Menu
CoddyTech

项目收尾:主循环

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

challenge icon

挑战

简单

恭喜你:你已经构建了一个完整的银行账户库!现在该换个角色了。你不再是库的创建者,而要成为库的使用者。你的任务是编写一个主程序,全面测试你的 Account 模块。

你可以把它想象成一位顾客走进银行,办理一系列交易。你将创建账户、存款和取款、随时查看余额,最后在办完业务后关闭账户。

你将使用 3 个文件:

  • account.h:完整的头文件,包含不透明的 Account 类型和所有函数原型:create_account、destroy_account、deposit、withdraw 和 get_balance。
  • account.c:完整的实现文件,包含隐藏的结构体,其中有 id 和 balance,以及你在整个项目中编写的所有函数实现。
  • main.c:现在轮到你大显身手了!编写一个程序,通过一系列贴近现实的交易,展示银行账户的完整生命周期。

你会收到 5 个输入:账户 ID(整数)、第一次存款、取款、第二次存款,以及尝试透支的金额(这笔取款因余额不足而应当失败)。

你的主程序应当讲述这个账户的完整历程:

  1. 创建账户并提示账户已创建
  2. 显示初始余额
  3. 进行第一次存款并显示新余额
  4. 取出一些资金并显示更新后的余额
  5. 再次存款并显示余额
  6. 尝试取出超过余额的金额。这次取款应当失败
  7. 显示最终余额(取款失败后余额不变)
  8. 关闭账户

按以下格式输出:

Account 2001 created
Balance: 0.00
Deposited 1000.00
Balance: 1000.00
Withdrew 250.00
Balance: 750.00
Deposited 500.00
Balance: 1250.00
Withdrawal failed: insufficient funds
Balance: 1250.00
Account 2001 closed

其中,2001 是账户 ID,金额应与输入相符。使用 %.2f 将所有金额格式化为小数点后两位。当 withdraw 返回 0 时,应输出取款失败消息。

这个收尾挑战展示了你对封装的全部理解。你的主程序只通过 Account 的公共接口与它交互,不会直接访问隐藏的内部数据。

亲手试试

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

int main() {
    // TODO:从输入中读取 account_id、deposit1、withdraw_amount、deposit2 和 overdraft

    // TODO:创建账户并打印 "Account <id> created"

    // TODO:打印初始余额

    // TODO:进行第一次存款,打印 "Deposited <amount>" 和新余额

    // TODO:取款,打印 "Withdrew <amount>" 和更新后的余额

    // TODO:进行第二次存款,打印 "Deposited <amount>" 和新余额

    // TODO:尝试透支取款;如果失败,打印 "Withdrawal failed: insufficient funds"
    // TODO:打印最终余额

    // TODO:打印 "Account <id> closed" 并销毁账户

    return 0;
}

面向对象编程中的所有课

自己练习: C 在线编译器