银行管理系统1

#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");
    }
}

欢迎订阅专栏,数据结构实验,期末大作业,前端后端都有哦,想我发哪个方面的资源或文章可以私信我,免费的哦

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

然然超绝肌肉线条

你的鼓励将是创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值