#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//账户结构体
struct account {
char name[30];
char account_number[15];
double balance;
};
//声明函数
void create_account();
void display_account(char account_number[]);
void deposit(char account_number[]);
void withdraw(char account_number[]);
void transfer(char account_number[]);
int main(){
int choice;
char account_number[15];
do{
printf("1.创建账户\n");
printf("2.查看账户信息\n");
printf("3.存款\n");
printf("4.取款\n");
printf("5.转账\n");
printf("6.退出系统\n");
printf("\n请选择需要的操作:");
scanf("%d", &choice);
switch(choice){
case 1: create_account(); break;
case 2:
printf("请输入账户号码:");
scanf("%s", account_number);
display_account(account_number);
break;
case 3:
printf("请输入账户号码:");
scanf("%s", account_number);
deposit(account_number);
break;
case 4:
printf("请输入账户号码:");
scanf("%s", account_number);
withdraw(account_number);
break;
case 5:
printf("请输入账户号码:");
scanf("%s", account_number);
transfer(account_number);
break;
case 6: exit(0); break;
default: printf("无效选择,请重新输入。\n");
}
} while(1);
return 0;
}
//创建账户
void create_account(){
struct account acc;
printf("\n请输入账户名称:");
scanf("%s", acc.name);
printf("请输入账户号码:");
scanf("%s", acc.account_number);
printf("请输入账户余额:");
scanf("%lf", &acc.balance);
FILE *fp;
fp = fopen("accounts.dat", "ab+");
fwrite(&acc, sizeof(acc), 1, fp);
fclose(fp);
printf("账户创建成功。\n\n");
}
//查看账户信息
void display_account(char account_number[]){
struct account acc;
int found = 0;
FILE *fp;
fp = fopen("accounts.dat", "rb");
while(fread(&acc, sizeof(acc), 1, fp)==1){
if(strcmp(acc.account_number, account_number)==0){
found = 1;
break;
}
}
fclose(fp);
if(found==1){
printf("\n账户名称:%s\n账户号码:%s\n账户余额:%.2f\n\n", acc.name, acc.account_number, acc.balance);
}
else{
printf("\n账户不存在。\n\n");
}
}
//存款
void deposit(char account_number[]){
struct account acc;
int found = 0;
double amt;
FILE *fp;
fp = fopen("accounts.dat", "rb+");
while(fread(&acc, sizeof(acc), 1, fp)==1){
if(strcmp(acc.account_number, account_number)==0){
found = 1;
printf("\n账户名称:%s\n账户号码:%s\n账户余额:%.2f\n\n", acc.name, acc.account_number, acc.balance);
printf("请输入存款金额:");
scanf("%lf", &amt);
fflush(stdin);
acc.balance += amt;
fseek(fp, -sizeof(acc), SEEK_CUR);
fwrite(&acc, sizeof(acc), 1, fp);
printf("存款成功。当前余额:%.2f\n\n", acc.balance);
break;
}
}
fclose(fp);
if(found==0){
printf("\n账户不存在。\n\n");
}
}
//取款
void withdraw(char account_number[]){
struct account acc;
int found = 0;
double amt;
FILE *fp;
fp = fopen("accounts.dat", "rb+");
while(fread(&acc, sizeof(acc), 1, fp)==1){
if(strcmp(acc.account_number, account_number)==0){
found = 1;
printf("\n账户名称:%s\n账户号码:%s\n账户余额:%.2f\n\n", acc.name, acc.account_number, acc.balance);
printf("请输入取款金额:");
scanf("%lf", &amt);
fflush(stdin);
if(amt > acc.balance){
printf("余额不足,无法完成取款。\n\n");
}
else{
acc.balance -= amt;
fseek(fp, -sizeof(acc), SEEK_CUR);
fwrite(&acc, sizeof(acc), 1, fp);
printf("取款成功。当前余额:%.2f\n\n", acc.balance);
}
break;
}
}
fclose(fp);
if(found==0){
printf("\n账户不存在。\n\n");
}
}
//转账
void transfer(char account_number[]){
struct account acc1, acc2;
int found1 = 0, found2 = 0;
double amt;
char target_account_number[15];
FILE *fp;
fp = fopen("accounts.dat", "rb+");
//找到原账户
while(fread(&acc1, sizeof(acc1), 1, fp)==1){
if(strcmp(acc1.account_number, account_number)==0){
found1 = 1;
printf("\n您当前的账户余额:%.2f\n\n", acc1.balance);
printf("请输入目标账户号码:");
scanf("%s", target_account_number);
fflush(stdin);
rewind(fp);
//找到目标账户
while(fread(&acc2, sizeof(acc2), 1, fp)==1){
if(strcmp(acc2.account_number, target_account_number)==0){
found2 = 1;
printf("\n账户名称:%s\n账户号码:%s\n账户余额:%.2f\n\n", acc2.name, acc2.account_number, acc2.balance);
printf("请输入转账金额:");
scanf("%lf", &amt);
fflush(stdin);
if(amt > acc1.balance){
printf("余额不足,无法完成转账。\n\n");
}
else{
acc1.balance -= amt;
acc2.balance += amt;
fseek(fp, -2*sizeof(acc1), SEEK_CUR);
fwrite(&acc1, sizeof(acc1), 1, fp);
fwrite(&acc2, sizeof(acc2), 1, fp);
printf("转账成功。您当前的账户余额:%.2f,目标账户余额:%3.2f\n\n", acc1.balance, acc2.balance);
}
break;
}
}
break;
}
}
fclose(fp);
if(found1==0){
printf("\n账户不存在。\n\n");
}
else if(found2==0){
printf("\n目标账户不存在。\n\n");
}
}
欢迎订阅专栏,数据结构实验,期末大作业,前端后端都有哦,想我发哪个方面的资源或文章可以私信我,免费的哦