C语言实现银行ATM存取款系统完整源码及解析

木白
木白
发布时间:2026-10-16| 7人浏览过
原创

本文提供了一个基于C语言开发的银行ATM管理系统完整示例。该系统涵盖了从用户注册开户、身份验证到存取款、转账及信息修改的完整银行业务流程。通过结构体管理数据、文件存储记录和模块化函数设计,展示了如何使用纯C语言构建具有持久化存储能力的命令行应用程序,非常适合用于计算机课程设计或C语言基础进阶练习。

系统功能需求与架构分析

本系统旨在模拟真实的银行定期储蓄与ATM业务环境,主要面向终端用户提供以下核心功能:

  1. 开户业务:新用户需输入账户号(存单号)、姓名、身份证号码、6位密码以及初始存款金额。系统会校验身份证号码的唯一性,确保每个身份证在同一时期仅对应一个账户。
  2. 系统登录:用户通过输入的存单号和密码进行身份验证,验证成功后进入主菜单。
  3. 存取款业务:支持按预设档位(如200元、500元、1000元等)或自定义金额进行存款和取款操作,并实时更新账户余额。
  4. 账户管理:包含余额及详细信息查询、账号密码修改、账户间资金转账等功能。

在技术实现上,系统采用文件持久化的方式保存用户数据。当数据进行任何写操作(存款、取款、修改密码等)时,程序会将内存中的整个数组重新写入临时文件,待操作成功后再将原数据文件替换为更新后的文件,从而保证数据的一致性。同时,使用 getch() 函数处理密码输入,实现字符不回显的安全显示效果。

核心数据结构与全局变量

系统定义了一个名为 chuhu 的结构体来存储储户信息,并定义了足够大的数组来容纳多笔交易记录。

#define N 1000
struct chuhu{
	char idnum[9];      // 账户(存单号)
	char name[10];      // 姓名
	char idnumber[20];  // 身份证号码
	char password[7];   // 密码(6位+结束符)
	double cunkuan;     // 存款金额
}hu[N];

业务流程详解

第1步:系统主界面展示与初始化

程序启动后,首先通过 system("COLOR 0A") 设置控制台输出颜色,然后调用 Flag1() 函数绘制主界面。该界面提供三个选项:开户、登录系统和退出。

第2步:用户开户(注册流程)

选择“开户业务”后,进入 zhuce() 函数。操作流程如下:

  1. 打开或创建 chuh.txt 数据文件。
  2. 提示用户依次输入存单号、姓名。
  3. 使用循环读取并屏蔽密码输入,存储在 password 字段。
  4. 身份证号校验:检查输入的身份证是否为18位,并与现有数组比对,防止重复开户。
  5. 输入初始存款金额,将上述所有信息格式化为字符串追加写入文件。

第3步:登录验证机制

选择“登录系统”时,调用 yanzheng() 函数。系统遍历文件中的所有记录,核对用户输入的存单号和密码是否匹配。只有两者完全一致且存在于文件中,才能返回认证成功的标识,否则提示错误并要求重新输入或返回上一级。

第4步:核心金融服务操作

验证成功后,进入 Flag2() 函数显示的功能菜单,包括:存款、取款、查询、转账、修改密码、退出。

第5步:存款与取款实现(数据刷新逻辑)

无论是 cunkaun()(存款)还是 qukaun()(取款),都遵循相同的底层数据更新逻辑以确保数据安全:

  1. 输入需要操作的存单号。
  2. 定位到对应的账户索引。
  3. 执行加减运算修改 hu[i].cunkuan。
  4. 关键步骤:由于C语言没有内置数据库事务,程序创建一个临时文件 back.txt。它将当前内存中所有(不仅是本次操作的)账户数据根据最新的状态重新序列化写入临时文件。
  5. 关闭原文件和数据流,利用 system("del chuh.txt") 删除旧文件,最后用 rename("back.txt","chuh.txt") 完成原子替换。这有效避免了断电或崩溃导致的数据丢失。

第6步:信息查询与其他功能

  • 查询业务:display() 函数根据存单号查找对应索引,并在控制台打印出该用户的详细资料(注:出于安全演示考虑,源码直接显示了明文密码,实际生产环境中应加密存储)。结果如下图:
  • 修改密码:xiugai() 函数同样采用先写入临时文件再替换原文件的策略,确保新密码能够持久化保存。

注意事项与局限性说明

  1. 并发安全问题:该系统适用于单任务、单线程的个人计算机环境。如果在多线程环境下运行,频繁的文件读写和重命名可能会导致竞态条件(Race Condition)或文件锁定冲突。
  2. 安全性不足:密码以明文形式存储在本地文本文件中,极易泄露。真正的银行系统必须对密码进行哈希加盐处理(如BCrypt),并通过SSL/TLS加密通道传输。
  3. 输入边界检查:部分输入未做严格的长度限制(如除身份证外的其他文本输入),若输入超长可能导致缓冲区溢出(Buffer Overflow),在实际工程中应增加 fgets 的安全读取方式或手动截断。
  4. 平台依赖:源码使用了 conio.h 头文件和 system() 命令调用,这使得它在标准的 POSIX 环境(如 Linux)下可能无法直接编译运行,建议主要在 Windows (Dev-C++, Visual Studio) 环境中测试。

总结

通过以上分析和代码拆解,我们可以清晰地看到如何利用C语言的基础特性构建一个具备基本逻辑闭环的应用程序。虽然代码在界面美观度和工程规范性上较为朴素,但它准确地呈现了数据处理的核心思路:内存计算、文件I/O、状态保持。以上就是C语言简单实现银行ATM存取款功能的详细内容,更多关于C语言 ATM存取款的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。