写一个银行自动ATM机存取系统的C语言代码要求a) 开户 b) 账户登录 c)密码修改 a) 存款 b) 取款 c) 转账 d) 余额查询
时间: 2024-04-21 16:26:17 浏览: 16
以下是一个包含开户、账户登录、密码修改、存款、取款、转账、余额查询功能的银行自动ATM机存取系统的C语言代码示例:
```c
#include <stdio.h>
#include <string.h>
#define MAX_ACCOUNTS 10
#define MAX_NAME_LEN 20
#define MAX_PASS_LEN 10
struct account {
int id;
char name[MAX_NAME_LEN];
char password[MAX_PASS_LEN];
int balance;
};
struct account accounts[MAX_ACCOUNTS];
int num_accounts = 0;
int current_account = -1;
void create_account() {
if (num_accounts >= MAX_ACCOUNTS) {
printf("对不起,系统最多只能支持 %d 个账户\n", MAX_ACCOUNTS);
return;
}
struct account new_account;
new_account.id = num_accounts + 1;
printf("请输入姓名:\n");
scanf("%s", new_account.name);
printf("请输入密码:\n");
scanf("%s", new_account.password);
new_account.balance = 0;
accounts[num_accounts] = new_account;
num_accounts++;
printf("账户创建成功,您的账户ID为:%d\n", new_account.id);
}
void login() {
char name[MAX_NAME_LEN];
char password[MAX_PASS_LEN];
printf("请输入账户名:\n");
scanf("%s", name);
printf("请输入密码:\n");
scanf("%s", password);
for (int i = 0; i < num_accounts; i++) {
if (strcmp(accounts[i].name, name) == 0 && strcmp(accounts[i].password, password) == 0) {
current_account = i;
printf("登录成功,欢迎回来,%s!\n", accounts[i].name);
return;
}
}
printf("账户名或密码错误,请重新输入\n");
}
void change_password() {
if (current_account == -1) {
printf("请先登录\n");
return;
}
char old_password[MAX_PASS_LEN];
char new_password[MAX_PASS_LEN];
printf("请输入旧密码:\n");
scanf("%s", old_password);
if (strcmp(accounts[current_account].password, old_password) != 0) {
printf("旧密码不正确,请重新输入\n");
return;
}
printf("请输入新密码:\n");
scanf("%s", new_password);
strcpy(accounts[current_account].password, new_password);
printf("密码修改成功\n");
}
void deposit() {
if (current_account == -1) {
printf("请先登录\n");
return;
}
int amount;
printf("请输入存款金额:\n");
scanf("%d", &amount);
accounts[current_account].balance += amount;
printf("存款成功,当前余额为:%d元\n", accounts[current_account].balance);
}
void withdraw() {
if (current_account == -1) {
printf("请先登录\n");
return;
}
int amount;
printf("请输入取款金额:\n");
scanf("%d", &amount);
if (amount > accounts[current_account].balance) {
printf("余额不足,取款失败\n");
return;
}
accounts[current_account].balance -= amount;
printf("取款成功,当前余额为:%d元\n", accounts[current_account].balance);
}
void transfer() {
if (current_account == -1) {
printf("请先登录\n");
return;
}
int target_id, amount;
printf("请输入转账目标账户ID:\n");
scanf("%d", &target_id);
if (target_id <= 0 || target_id > num_accounts) {
printf("目标账户不存在,请重新输入\n");
return;
}
if (target_id == accounts[current_account].id) {
printf("不能向自己转账,请重新输入\n");
return;
}
printf("请输入转账金额:\n");
scanf("%d", &amount);
if (amount > accounts[current_account].balance) {
printf("余额不足,转账失败\n");
return;
}
accounts[current_account].balance -= amount;
accounts[target_id - 1].balance += amount;
printf("转账成功,当前余额为:%d元\n", accounts[current_account].balance);
}
void check_balance() {
if (current_account == -1) {
printf("请先登录\n");
return;
}
printf("当前余额为:%d元\n", accounts[current_account].balance);
}
int main() {
int choice;
while (1) { // 不断循环,直到用户选择退出
printf("\n欢迎使用银行ATM机\n");
if (current_account == -1) {
printf("请选择操作:\n");
printf("1. 开户\n");
printf("2. 登录\n");
} else {
printf("请选择操作:\n");
printf("1. 修改密码\n");
printf("2. 存款\n");
printf("3. 取款\n");
printf("4. 转账\n");
printf("5. 余额查询\n");
printf("6. 注销\n");
}
scanf("%d", &choice);
switch (choice) {
case 1:
create_account();
break;
case 2:
login();
break;
case 3:
if (current_account == -1) {
printf("请先登录\n");
} else {
change_password();
}
break;
case 4:
if (current_account == -1) {
printf("请先登录\n");
} else {
deposit();
}
break;
case 5:
if (current_account == -1) {
printf("请先登录\n");
} else {
withdraw();
}
break;
case 6:
if (current_account == -1) {
printf("请先登录\n");
} else {
transfer();
}
break;
case 7:
if (current_account == -1) {
printf("请先登录\n");
} else {
check_balance();
}
break;
case 8:
if (current_account == -1) {
printf("欢迎下次再来!\n");
} else {
printf("注销成功,欢迎下次再来!\n");
current_account = -1;
}
return 0;
default:
printf("无效的选择,请重新选择\n");
break;
}
}
}
```
该代码在上一个示例的基础上增加了开户、账户登录、密码修改、转账等多个功能。在开户功能中,程序会检查账户数量是否超过上限,并让用户输入姓名和密码,然后分配一个新的账户ID。在登录功能中,程序会让用户输入账户名和密码,然后检查是否有对应的账户。在密码修改、存款、取款、转账、余额查询等功能中,程序会先检查用户是否已经登录,然后根据用户的选择执行相应的操作。如果用户选择了注销操作,程序会结束运行。