项目收尾:主循环
本课属于 Coddy C 学习旅程的“面向对象编程”单元。第 27 课,共 61 课。
挑战
简单恭喜你:你已经构建了一个完整的银行账户库!现在该换个角色了。你不再是库的创建者,而要成为库的使用者。你的任务是编写一个主程序,全面测试你的 Account 模块。
你可以把它想象成一位顾客走进银行,办理一系列交易。你将创建账户、存款和取款、随时查看余额,最后在办完业务后关闭账户。
你将使用 3 个文件:
account.h:完整的头文件,包含不透明的Account类型和所有函数原型:create_account、destroy_account、deposit、withdraw和get_balance。account.c:完整的实现文件,包含隐藏的结构体,其中有id和balance,以及你在整个项目中编写的所有函数实现。main.c:现在轮到你大显身手了!编写一个程序,通过一系列贴近现实的交易,展示银行账户的完整生命周期。
你会收到 5 个输入:账户 ID(整数)、第一次存款、取款、第二次存款,以及尝试透支的金额(这笔取款因余额不足而应当失败)。
你的主程序应当讲述这个账户的完整历程:
- 创建账户并提示账户已创建
- 显示初始余额
- 进行第一次存款并显示新余额
- 取出一些资金并显示更新后的余额
- 再次存款并显示余额
- 尝试取出超过余额的金额。这次取款应当失败
- 显示最终余额(取款失败后余额不变)
- 关闭账户
按以下格式输出:
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 在线编译器