c语言全功能ATM机代码

时间: 2023-08-12 18:53:03 浏览: 72
以下是一个更完整的C语言ATM机代码示例,包括了更多的功能和用户验证: ``` #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_ACCOUNTS 10 #define MAX_NAME_LENGTH 50 #define PIN_LENGTH 4 typedef struct { char name[MAX_NAME_LENGTH]; int accountNumber; int balance; char pin[PIN_LENGTH+1]; } Account; Account accounts[MAX_ACCOUNTS]; int numAccounts = 0; int loadAccounts() { FILE* fp = fopen("accounts.txt", "r"); if (!fp) { printf("Error: could not open accounts file.\n"); return 0; } char line[100]; while (fgets(line, sizeof(line), fp)) { char* name = strtok(line, ","); char* accountNumberStr = strtok(NULL, ","); char* balanceStr = strtok(NULL, ","); char* pin = strtok(NULL, ","); Account account; strncpy(account.name, name, MAX_NAME_LENGTH); account.accountNumber = atoi(accountNumberStr); account.balance = atoi(balanceStr); strncpy(account.pin, pin, PIN_LENGTH+1); accounts[numAccounts++] = account; } fclose(fp); return 1; } int saveAccounts() { FILE* fp = fopen("accounts.txt", "w"); if (!fp) { printf("Error: could not open accounts file.\n"); return 0; } for (int i = 0; i < numAccounts; i++) { fprintf(fp, "%s,%d,%d,%s\n", accounts[i].name, accounts[i].accountNumber, accounts[i].balance, accounts[i].pin); } fclose(fp); return 1; } Account* getAccountByNumber(int accountNumber) { for (int i = 0; i < numAccounts; i++) { if (accounts[i].accountNumber == accountNumber) { return &accounts[i]; } } return NULL; } void printAccount(Account* account) { printf("Name: %s\n", account->name); printf("Account Number: %d\n", account->accountNumber); printf("Balance: %d\n", account->balance); } int authenticate(Account* account) { char pin[PIN_LENGTH+1]; printf("Enter your PIN: "); scanf("%s", pin); if (strcmp(pin, account->pin) == 0) { printf("Authentication successful.\n"); return 1; } else { printf("Authentication failed. Incorrect PIN.\n"); return 0; } } void checkBalance(Account* account) { printf("Your balance is %d\n", account->balance); } void deposit(Account* account) { int amount; printf("Enter the amount to deposit: "); scanf("%d", &amount); account->balance += amount; printf("Deposit successful. Your new balance is %d\n", account->balance); } void withdraw(Account* account) { int amount; printf("Enter the amount to withdraw: "); scanf("%d", &amount); if (amount > account->balance) { printf("Withdrawal failed. Insufficient balance.\n"); } else { account->balance -= amount; printf("Withdrawal successful. Your new balance is %d\n", account->balance); } } void transfer(Account* account) { int targetAccountNumber, amount; printf("Enter the target account number: "); scanf("%d", &targetAccountNumber); Account* targetAccount = getAccountByNumber(targetAccountNumber); if (!targetAccount) { printf("Transfer failed. Target account not found.\n"); return; } printf("Enter the amount to transfer: "); scanf("%d", &amount); if (amount > account->balance) { printf("Transfer failed. Insufficient balance.\n"); } else { account->balance -= amount; targetAccount->balance += amount; printf("Transfer successful. Your new balance is %d\n", account->balance); } } void changePin(Account* account) { char newPin[PIN_LENGTH+1]; printf("Enter your new PIN: "); scanf("%s", newPin); strncpy(account->pin, newPin, PIN_LENGTH+1); printf("PIN changed successfully.\n"); } int main() { if (!loadAccounts()) { return 1; } int option, accountNumber; while (1) { printf("Welcome to the ATM machine!\n"); printf("Please enter your account number (or -1 to exit): "); scanf("%d", &accountNumber); if (accountNumber == -1) { break; } Account* account = getAccountByNumber(accountNumber); if (!account) { printf("Account not found.\n"); continue; } if (!authenticate(account)) { continue; } while (1) { printf("Please select an option:\n"); printf("1. Check Balance\n"); printf("2. Deposit\n"); printf("3. Withdraw\n"); printf("4. Transfer\n"); printf("5. Change PIN\n"); printf("6. Exit\n"); scanf("%d", &option); switch(option) { case 1: checkBalance(account); break; case 2: deposit(account); break; case 3: withdraw(account); break; case 4: transfer(account); break; case 5: changePin(account); break; case 6: printf("Thank you for using the ATM machine!\n"); saveAccounts(); return 0; default: printf("Invalid option. Please try again.\n"); } } } return 0; } ``` 该代码使用了结构体来存储账户信息,并将其保存在accounts.txt文件中。代码中包括了更多的功能,如转账和更改PIN码。在每次用户验证和交易后,代码会将账户信息保存回文件中。

相关推荐

最新推荐

recommend-type

餐馆点菜系统C语言源代码

主要为大家详细介绍了餐馆点菜系统C语言源代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

用c语言编写ATM取款机模拟系统

用c语言编写ATM取款机模拟系统,利用到了数组,结构体和指针等知识点,是一个关于c语言的综合运用的示例。
recommend-type

CRC4的C语言实现代码

这里给大家分享一个函数,实现DSP通讯中的CRC4校验 。特征码为0x13。
recommend-type

两例信捷C语言功能块应用案例.docx

C语言功能块的工作原理:进入参数修改页面后,瞬间通知功能块,把原参数的数据(数据求和)赋值给外部的一个软元件地址存放,然后可以检测是否修改了参数,如果任意一个参数别修改,则重新读到的参数和就与之前存放...
recommend-type

C语言高效有限状态机(FSM)详细设计说明书.docx

有限状态机是一种用来进行对象行为建模的工具,其作用主要是描述对象在它的生命周期内所经历的状态序列,以及如何响应来自外界的各种事件。在计算机科学中,有限状态机被广泛用于建模应用行为、硬件电路系统设计、...
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MySQL数据库性能提升秘籍:揭秘性能下降幕后真凶及解决策略

![MySQL数据库性能提升秘籍:揭秘性能下降幕后真凶及解决策略](http://xiaoyuge.work/explain-sql/index/2.png) # 1. MySQL数据库性能优化概述** MySQL数据库性能优化是一项至关重要的任务,可以显著提高应用程序的响应时间和整体用户体验。优化涉及识别和解决影响数据库性能的因素,包括硬件资源瓶颈、软件配置不当和数据库设计缺陷。通过采取适当的优化策略,可以显著提升数据库性能,满足业务需求并提高用户满意度。 # 2. MySQL数据库性能下降的幕后真凶 ### 2.1 硬件资源瓶颈 #### 2.1.1 CPU利用率过高 **症状:
recommend-type

如何在unity创建按钮

在 Unity 中创建按钮的步骤如下: 1. 在 Unity 中创建一个 UI Canvas,选择 GameObject -> UI -> Canvas。 2. 在 Canvas 中创建一个按钮,选择 GameObject -> UI -> Button。 3. 在场景视图中调整按钮的位置和大小。 4. 在 Inspector 中设置按钮的文本、颜色、字体等属性。 5. 添加按钮的响应事件,选择按钮,在 Inspector 的 On Click () 中添加相应的方法。 这样就可以创建一个按钮了,你可以在游戏中使用它来触发相应的操作。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。