首頁 > 軟體

C語言實現銀行管理系統(檔案操作)

2022-03-18 19:00:55

本文範例為大家分享了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 %sn",&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.1fn",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 %sn",&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.1fn",bank[item].Balance);
            printf("請輸入需要取款的金額");
            printf("您的賬戶型別是%sn",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 %sn",&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.1fn",bank[item].Balance);
            printf("您的賬戶型別是%sn",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  %sn",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  %sn",&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 %sn",&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  %sn",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  %sn",bank[i].accountNo,bank[i].accountName,bank[i].Password,bank[i].Balance,bank[i].VIPoNormal);
        }
        fclose(fp);
        printf("儲存成功!!!");
} 


//介面
void menu() 
{
    int num;
    printf(" nn                    nn");
    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;
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com