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

 更新时间:2022年03月18日 16:26:49   作者:weixin_45663946  
这篇文章主要为大家详细介绍了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开发的话,经常会用到宏定义,而宏定义中的#和##也会时不时遇到,本文主要就来和大家分享一下这两个符号的作用,需要的可以参考一下
    2023-05-05
  • C语言深入讲解栈与堆和静态存储区的使用

    C语言深入讲解栈与堆和静态存储区的使用

    对大多数C 语言初学者来说,堆栈却是一个很模糊的概念。堆栈是一种数据结构,一个在程序运行时用于存放的地方,相信这可能是很多初学者共同的认识,静态存储区即内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在
    2022-04-04
  • C语言的动态内存管理的深入了解

    C语言的动态内存管理的深入了解

    这篇文章主要为大家详细介绍了语言C的动态内存管理,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • C语言实现二叉链表存储

    C语言实现二叉链表存储

    这篇文章主要为大家详细介绍了C语言实现二叉链表存储的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • C++ getline函数用法详解

    C++ getline函数用法详解

    这篇文章主要介绍了C++ getline函数用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • VSCode断点调试CMake工程项目的实现步骤

    VSCode断点调试CMake工程项目的实现步骤

    这篇文章主要介绍了VSCode断点调试CMake工程项目的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • C语言实现动态版通讯录的代码分享

    C语言实现动态版通讯录的代码分享

    这篇文章主要为大家详细介绍了如何利用C语言实现一个简单的动态版通讯录,主要运用了结构体,一维数组,函数,分支与循环语句等等知识,需要的可以参考一下
    2023-01-01
  • C++实现LeetCode(117.每个节点的右向指针之二)

    C++实现LeetCode(117.每个节点的右向指针之二)

    这篇文章主要介绍了C++实现LeetCode(117.每个节点的右向指针之二),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C++中的几种排序算法

    C++中的几种排序算法

    这篇文章主要介绍了C++中的几种排序算法,需要的朋友可以参考下
    2014-02-02
  • C++ 读写文件安全又简洁的简单实例

    C++ 读写文件安全又简洁的简单实例

    这篇文章主要介绍了C++ 读写文件安全又简洁的简单实例的相关资料,需要的朋友可以参考下
    2017-06-06

最新评论