欢迎来到代码驿站!

C代码

当前位置:首页 > 软件编程 > C代码

C语言实现银行管理系统(文件操作)

时间:2023-03-17 13:21:46|栏目:C代码|点击:

本文实例为大家分享了C语言实现银行管理系统的具体代码,供大家参考,具体内容如下

银行管理系统主要有五个模块组成:

1、查询账户信息
2、存钱
3、取款
4、转账
5、退出系统

测试文件:(首先在cpp文件所在目录下添加这个文件,运行程序会自动添加文件,但是需要输入这些数据)

代码:

#include<stdio.h>    /*I/O函数*/
#include<stdlib.h>  /*其它说明*/
#include<string.h>  /*字符串函数*/
#define max 100
#define LEN 15      /* 账号和密码最大字符数,实际请更改*/
#define N 100        /* 最大账户数,实际请更改*/
int k=1,n=0, m=0;/* n代表当前记录的学生人数*/
//账户信息结构体
struct banker
{
    char accountNo[LEN];
    char accountName[LEN];
    char Password[LEN];
    float Balance;
    char VIPoNormal[LEN];
}bank[N];
void fileWrite();

//存钱
void Save()
{
    int item,i; 
    char s1[LEN+1]; //用来输账号的 
    printf("请输入需要存钱的账号\n");
    scanf("%s",&s1);
    for(i=0; i<n; i++)                  //n代表当前记录数
    {
        if(strcmp(s1,bank[i].accountNo)==0) 
        {
            item=i;
        } 
    }
    printf("请输入需要存钱的金额\n");
    float wd =0.0;
    scanf("%f",&wd); 
    bank[item].Balance+=wd;
    fileWrite(); 
    return;
} 
//查询银行账户信息
void seek()
{
    //先把账户信息读进来    必须输入该账号和对应的密码,输入错误则给出警告 
    int j=0;
    FILE * fp;
    if((fp=fopen("account.txt","r"))==NULL)
        return ;
    while(fscanf(fp,"%s %s %s %f %s\n",&bank[j].accountNo,&bank[j].accountName,&bank[j].Password,&bank[j].Balance,&bank[j].VIPoNormal)==5) 
    {
        j++;
    }
    n=j;
    int i=0,item=0,flag=0;
    char s1[LEN+1]; /* 以账号和密码最长长度+1为准*/  //用来输账号的 
    char s2[LEN+1]; /* 以账号和密码最长长度+1为准*/  //用来输密码的 
    printf("请输入需要查询的账号\n");
    scanf("%s",&s1);
    for(i=0; i<n; i++)                  //n代表当前记录数
    {
        if(strcmp(s1,bank[i].accountNo)==0) 
        {
            flag=1;
            item=i;
        } 
    } 
    if(0==flag)         //输入的账号和存好的账号不一致
        printf("该账号不存在!\n");
    else{
        int flag1=0;//判断密码输入是否正确 
        printf("请输入需要查询的账号对应的密码\n");
        scanf("%s",&s2);
        if(strcmp(s2,bank[item].Password)==0)
        {
            flag1=1;
        } 
        if(flag1==0){
            printf("密码输入错误\n");//这块可以改,重新输入,初步打算while循环 
            return; 
        }else{
            printf("密码输入正确\n");
            printf("您余额为:%10.1f\n",bank[item].Balance);
        }
        
    }
    return; 
    
} 


//取款模块
// vip一次最多3000 普通的2000
// 提取的钱超过余额则失败  ,用户可以选择重新输或者返回主菜单
// 取钱后进行相应的更新  

void Withdraw()
{
    //首先肯定需要查询一下 
        //先把账户信息读进来    必须输入该账号和对应的密码,输入错误则给出警告 
    int j=0;
    FILE * fp;
    if((fp=fopen("account.txt","r"))==NULL)
        return ;
    while(fscanf(fp,"%s %s %s %f %s\n",&bank[j].accountNo,&bank[j].accountName,&bank[j].Password,&bank[j].Balance,&bank[j].VIPoNormal)==5) 
    {
        j++;
    }
    n=j;
    int i=0,item=0,flag=0;
    char s1[LEN+1]; /* 以账号和密码最长长度+1为准*/  //用来输账号的 
    char s2[LEN+1]; /* 以账号和密码最长长度+1为准*/  //用来输密码的 
    printf("请输入账号\n");
    scanf("%s",&s1);
    for(i=0; i<n; i++)                  //n代表当前记录数
    {
        if(strcmp(s1,bank[i].accountNo)==0) 
        {
            flag=1;
            item=i;
        } 
    } 
    if(0==flag)         //输入的账号和存好的账号不一致
        printf("该账号不存在!\n");
    else{
        int flag1=0;//判断密码输入是否正确 
        printf("请输入需要查询的账号对应的密码\n");
        scanf("%s",&s2);
        if(strcmp(s2,bank[item].Password)==0)
        {
            flag1=1;
        } 
        if(flag1==0){
            printf("密码输入错误\n");//这块可以改,重新输入,初步打算while循环 
            return; 
        }else{
            printf("密码输入正确\n");
            printf("您余额为:%10.1f\n",bank[item].Balance);
            printf("请输入需要取款的金额");
            printf("您的账户类型是%s\n",bank[item].VIPoNormal);
            printf("*****注意事项:*****\n");
            printf("取款金额不能超过限额\n");
            printf("V类型用户单次取款不得超过3000元\n");
            printf("N类型用户单次取款不得超过2000元\n");
            //判断类型
            float jud=0.0;
            if(strcmp(bank[item].VIPoNormal,"V")==0) 
            {
                jud=3000;
            }
            else jud=2000;
            float wd =0.0;
            scanf("%f",&wd); 
            while(bank[item].Balance<wd || wd>jud)
            {
                printf("输入不符合规范,请按照注意事项进行输入");
                scanf("%f",&wd);
            }
            //取款之后的更新操作
            bank[item].Balance-=wd;
            fileWrite(); 
        
        }
        
    }
    
    return;
}

//转账
void Transfer()
{
        //首先肯定需要查询一下 
        //先把账户信息读进来    必须输入该账号和对应的密码,输入错误则给出警告 
    int j=0;
    FILE * fp;
    if((fp=fopen("account.txt","r"))==NULL)
        return ;
    while(fscanf(fp,"%s %s %s %f %s\n",&bank[j].accountNo,&bank[j].accountName,&bank[j].Password,&bank[j].Balance,&bank[j].VIPoNormal)==5) 
    {
        j++;
    }
    n=j;
    int i=0,item=0,flag=0;
    char s1[LEN+1]; /* 以账号和密码最长长度+1为准*/  //用来输账号的 
    char s2[LEN+1]; /* 以账号和密码最长长度+1为准*/  //用来输密码的 
    printf("请输入账号\n");
    scanf("%s",&s1);
    for(i=0; i<n; i++)                  //n代表当前记录数
    {
        if(strcmp(s1,bank[i].accountNo)==0) 
        {
            flag=1;
            item=i;
        } 
    } 
    if(0==flag) 
        printf("该账号不存在!\n");
    else{
        int flag1=0;//判断密码输入是否正确 
        printf("请输入账号对应的密码\n");
        scanf("%s",&s2);
        if(strcmp(s2,bank[item].Password)==0)
        {
            flag1=1;
        } 
        if(flag1==0){
            printf("密码输入错误\n");//这块可以改,重新输入,初步打算while循环 
            return; 
        }else{
            printf("密码输入正确\n");
            printf("您余额为:%10.1f\n",bank[item].Balance);
            printf("您的账户类型是%s\n",bank[item].VIPoNormal);
            printf("请输入需要转账的账户");
            int flag2=0; 
            char s3[LEN+1];
            int item2=0;//标记目的账户 
            scanf("%s",&s3);
            for(i=0; i<n; i++)                 
            {
                if(strcmp(s3,bank[i].accountNo)==0) 
                {
                    flag2=1;
                    item2=i;
                } 
            }
            while(flag2==0){
                printf("账户输入有误请重新输入");
                scanf("%s",&s3);
                for(i=0; i<n; i++)                 
                {
                    if(strcmp(s3,bank[i].accountNo)==0) 
                    {
                        flag2=1;
                        item2=i;
                        printf("accountNo    accountName  Password   Balance  VIPoNormal  \n");
                        printf("--------------------------------------------------------------------\n");
                        printf("%s %16s %10s %10.1f  %s\n",bank[i].accountNo,bank[i].accountName,bank[i].Password,bank[i].Balance,bank[i].VIPoNormal);
                    } 
                }
            }
    
            printf("*****注意事项:*****\n");
            printf("转账金额不能超过限额\n");
            printf("V类型用户单次转账不得超过20000元\n");
            printf("N类型用户单次转账不得超过10000元\n");
            printf("请输入需要转账的金额\n");
            float jud=0.0;
            if(strcmp(bank[item].VIPoNormal,"V")==0) 
            {
                jud=20000;
            }
            else jud=10000;
            float money;
            scanf("%f",&money);
            while(money>jud || money>bank[item].Balance)
            {
                printf("输入不符合规范,请按照注意事项进行输入");
                scanf("%f",&money);
            }
            if(strcmp(bank[item].VIPoNormal,"V")==0) 
            {
                bank[item].Balance-=money*0.005; 
            }else{
                bank[item].Balance-=money*0.01; 
            }
            bank[item].Balance-=money;
            bank[item2].Balance+=money; 
            fileWrite();
            printf("转账成功\n");
        }
        
    }
    
    return;
} 

//插入学生信息函数
void insert() 
{
    int i;
    printf("请输入待增加的账户数:");
    scanf("%d",&n);
    FILE * fp;
    if((fp=fopen("account.txt","at"))==NULL) 
        printf("文件为空!\n");
    for(i=0; i<n; i++) 
    {
        printf("\n请输入第%d个账户的账号:",i+1);
        scanf("\n%s",&bank[i].accountNo);
        printf("\n请输入第%d个账户的姓名:",i+1);
        scanf("%s",&bank[i].accountName);
        printf("\n请输入第%d个账户的密码:",i+1);
        scanf("%s",&bank[i].Password);
        printf("\n请输入第%d个账户的余额:",i+1);
        scanf("%f",&bank[i].Balance);
        printf("\n请输入第%d个账户的类别:",i+1);
        scanf("%s",&bank[i].VIPoNormal);
//        sort();   //调用按学号排序函数
        //写入文件
        fprintf(fp,"%s %16s %10s %10.1f  %s\n",&bank[i].accountNo,&bank[i].accountName,&bank[i].Password,&bank[i].Balance,&bank[i].VIPoNormal);
    }
    printf("\n添加成功!!!\n");

    fclose(fp);
}


//显示当前信息
void display() 
{
    int i=0;
    FILE * fp;
    if((fp=fopen("account.txt","r"))==NULL)
        printf("文件为空!\n");
    while(fscanf(fp,"%s %s %s %f %s\n",&bank[i].accountNo,&bank[i].accountName,&bank[i].Password,&bank[i].Balance,&bank[i].VIPoNormal)==5) 
    {
        i++;
    }
    n=i;               //记录文件中数据的行数
    printf("accountNo    accountName  Password   Balance  VIPoNormal  \n");
    printf("--------------------------------------------------------------------\n");
    for(i=0;i<n;i++)    //依次输出学生信息
    {
        printf("%s %16s %10s %10.1f  %s\n",bank[i].accountNo,bank[i].accountName,bank[i].Password,bank[i].Balance,bank[i].VIPoNormal);
    }
     fclose(fp);
}


//保存当前账户信息
void fileWrite()
{
        FILE *fp;
        int i;
        if((fp=fopen("account.txt","w"))==NULL) 
            printf("文件为空!\n");
        for(i=0; i<n; i++) 
        {
            fprintf(fp,"%s %16s %10s %10.1f  %s\n",bank[i].accountNo,bank[i].accountName,bank[i].Password,bank[i].Balance,bank[i].VIPoNormal);
        }
        fclose(fp);
        printf("保存成功!!!");
} 


//界面
void menu() 
{
    int num;
    printf(" \n\n                    \n\n");
    printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
    printf(" *                   银行管理系统                    *\n");
    printf(" *                                                       *\n");
    printf(" *       * * * * * * *系统功能菜单* * * * * * *          *\n");
    printf(" *    --------------------------------------------       *\n");
    printf(" *    1. 查询账户信息   *\n");
    printf(" *    2. 存钱           *\n");
    printf(" *    3. 取款           *\n");
    printf(" *    4. 转账           *\n");
    printf(" *    5. 退出系统       *\n");

    printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
    printf("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - \n");
    printf("请选择菜单编号:");
    scanf("%d",&num);
    switch(num) {
        case 0:
//            help();
            break;
        case 1:
            seek();
            break;
        case 2:
            Save();
            break;
        case 3:
            Withdraw();
            break;
        case 4:
            Transfer();
            break;
        case 5:
           k=0;
            break;
        default:
            printf("请在0-8之间选择\n");
    }
}


//主函数    
int main() 
{
    while(k) 
    {
        menu();
    }
    system("pause");
    return 0;
}

上一篇:C语言实现实时钟表

栏    目:C代码

下一篇:C++ 双向循环链表类模版实例详解

本文标题:C语言实现银行管理系统(文件操作)

本文地址:http://www.codeinn.net/misctech/227613.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有