银行系统

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include<string.h>
#include<ctype.h>
#define  upNum 100
int N=0;
typedef struct
{
    int account;
    char name[10];
    char pass[6];
    double  money;
    int    state;     //0表示正常1表示注销2表示挂失
} bank;
bank n[upNum];
void writeData();
void readData();
int openaccount();
int pass();
int chooseInMenu();
void contest();
void  cancel();
void  cancelLoss();
 void updatePassword();
int main()
{
    int a,b,c;
    printf("欢迎来到本银行\n");
    printf("本银行功能如下\n");
    printf(" 1       登录 \n");
    printf(" 2       注册 \n");
    scanf("%d",&a);
    if(a==1)
    {
        readData();
        pass();
        contest();
        writeData();
    }
    else if(a==2)
    {
        readData();
        if(openaccount()==1)
        {
            printf("登录请按1,退出请按其他\n");
            scanf("%d",&b);
            if(b==1)
            {
                pass();
                contest();
                writeData();
            }
            else
                return 0;
        }
        else
        {
            printf("重新开户请按1,退出请按0\n");
            scanf("%d",&c);
            if(c==0)
                return 0;
            else
                openaccount();
            printf("请登录\n");
            pass();
            contest();
            writeData();
        }
    }
    return 0;
}
void readData()
{
    FILE *fp;
    int i=0;
    if ((fp=fopen("bank.txt", "r"))==NULL)
    {
        printf("data file cannot open!");
        exit(0);
    }
    for(i=0; i<N; i++)
    {
        fscanf(fp,"%d %s %s %lf %d\n",&n[i].account,n[i].name, n[i].pass,&n[i].money,&n[i].state);
    }
    N=i;
    fclose(fp);
}
void writeData()
{
    FILE *fp;
    int i=0;
    if ((fp=fopen("bank.txt", "w"))==NULL)
    {
        printf("data file cannot open!");
        exit(0);
    }
    for(i=0; i<N; i++)
        fprintf(fp,"%d %s %s %f %d\n",n[i].account,n[i].name, n[i].pass,n[i].money,n[i].state);
    fclose(fp);
}
int   openaccount()
{
    FILE *fp;
    char ch;
    char pass1[100],pass2[100];
    if ((fp=fopen("password.txt", "w"))==NULL)
    {
        printf("password file cannot open!");
        exit(0);
    }
    if(N==upNum)
    {
        printf("银行用户数已经达到上限,不能再开户");
        return 0;
    }
    printf("请输入账号;");
    scanf("%d",&n[N].account);
    printf("户主姓名:");
    scanf("%s",n[N].name);
    printf("请输入密码;");
    int i=0;
    while((ch=getch())!='\r')  //getch在接受输入后,不在屏幕上显示
    {
        pass1[i++]=ch;
        putchar('*');   //接受任何字符,屏幕上只显示*
    }
    pass1[i]='\0';
    fflush(stdin);
    printf("\n");
    printf("请再次输入;");
    i=0;
    while((ch=getch())!='\r')  //getch在接受输入后,不在屏幕上显示
    {
        pass2[i++]=ch;
        putchar('*');   //接受任何字符,屏幕上只显示*
    }
    pass2[i]='\0';
    fflush(stdin);
    printf("\n");
    if(strcmp(pass1,pass2)==0)
    {
        fprintf(fp, "%s %s", n[N].name, pass2);
        strcpy(n[N].pass,pass1);
        n[N].state=0;
        printf("存入金额:");
        scanf("%lf",&n[N].money);
        N++;
        printf("开户成功\n");
        return 1;
    }
    else
    {
        printf("两次密码不一致,未成功开户!\n");
        fclose(fp);
        return 0;
    }
    fclose(fp);
}
int pass()
{
    int c,j;
    char pass1[20];
    char ch;
    int iTry=3,k=-1;
    int right = 0;
    printf("请输入账号:");
    scanf("%d",&c);
    for(j=0; j<N; j++)
    {
        if(n[j].account==c)
            k=j;
    }
    if(k>=0)
    {
        do
        {
            printf("请输入密码:");
            int i=0;
            while((ch=getch())!='\r')  //getch在接受输入后,不在屏幕上显示
            {
                pass1[i++]=ch;
                putchar('*');   //接受任何字符,屏幕上只显示*
            }
            pass1[i]='\0';
            fflush(stdin);
            printf("\n");
            if(strcmp(n[k].pass,pass1)==0)
            {
                right = 1;
                break;
            }
            else
            {
                iTry--;
                printf("密码错误\n");
                if(iTry>0)
                    printf("超过3次将退出,你还可以尝试%d次!\n", iTry);
                else
                {
                    printf("对不起,你不能进入系统\n");
                }
            }
        }
        while(iTry);
    }
    else
    {
        printf("用户不存在请注册\n");
        openaccount();
        printf("请登录\n");
        pass();
    }
    return right;
}
void  cancel()
{
    int c;
    int k=-1,j;
    char pass[20];
    char ch;
    printf("待销户账号:");
    scanf("%d",&c);
    for(j=0; j<N; j++)
    {
        if(n[j].account==c)
            k=j;
    }
    if(k<0)
    {
        printf("该用户不存在,销户失败!\n");
    }
    else
    {
        printf("请输入密码");
        int i=0;
        while((ch=getch())!='\r')
        {
            pass[i++]=ch;
            putchar('*');
        }
        pass[i]='\0';
        fflush(stdin);
        printf("\n");
        if(strcmp(n[k].pass,pass)==0)
        {
            printf("余额:%.2f 元\n",n[k].money);
            printf("确认销户(y/n)?");
            if(tolower(getchar())=='y')
            {
                n[k].state=1;
                n[k].money=0;
                printf("取款 %.2f 元,销户成功!\n",n[k].money );
            }
            else
            {
                printf("你取消了操作,销户失败!\n");
            }
            fflush(stdin);
        }
        else
        {
            printf("输入的密码错误,销户失败!\n");
        }
    }
}
void save()
{
    int j,c,k=-1;
    double money;
    printf("请输入账号:");
    scanf("%d",&c);
    for(j=0; j<N; j++)
    {
        if(n[j].account==c)
            k=j;
    }
    if(k<0)
    {
        printf("该用户不存在,存款失败!\n");
    }
    else
    {
        if(n[k].state==0)
        {
            printf("户主姓名:%s\n",n[k].name);
            printf("输入存款额:");
            scanf("%lf", &money);
            n[k].money+=money;
            printf("存款后,您有%.2f元. \n",n[k].money);
        }
        else if(n[k].state==1)
        {
            printf("该用户已经销户,存款失败!\n");
        }
        else
        {
            printf("该用户处于挂失状态,存款失败!\n");
        }
    }
    return;
}
void withdraw()
{
    int k=-1,c,j;
    char pass[20],ch;
    double money;
    printf("请输入账号:");
    scanf("%d",&c);
    for(j=0; j<N; j++)
    {
        if(n[j].account==c)
            k=j;
    }
    if(k<0)
    {
        printf("该用户不存在,取款失败!\n");
    }
    else
    {
        if(n[k].state==0)
        {
            printf("户主姓名:%s\n",n[k].name);
            printf("请输入密码");
            int i=0;
            while((ch=getch())!='\r')
            {
                pass[i++]=ch;
                putchar('*');
            }
            pass[i]='\0';
            fflush(stdin);
            printf("\n");
            if(strcmp(n[k].pass,pass)!=0)
            {
                printf("输入密码错误,取款失败!\n");
            }
            else
            {
                printf("输入取款额:");
                scanf("%lf", &money);
                if(money>n[k].money)  //亲,不玩透支
                {
                    printf("余额不足,取款失败!\n");
                }
                else
                {
                    n[k].money-=money;
                    printf("取款后,还有%.2f元. \n",n[k].money);
                }
            }
        }
        else if(n[k].state==2)
        {
            printf("该用户处于挂失状态,取款失败!\n");
        }
        else
        {
            printf("该用户已经销户,取款失败!\n");
        }
    }
    return;
}
void showAccount()
{
    int k=-1,c,j;
    char pass[20],ch;
    printf("请输入查询账号:");
    scanf("%d",&c);
    for(j=0; j<N; j++)
    {
        if(n[j].account==c)
            k=j;
    }
    if(k<0)
    {
        printf("该用户不存在!\n");
    }
    else
    {
        if(n[k].state==0)
        {
            printf("户主姓名:%s\n",n[k].name);
            printf("请输入密码");
            int i=0;
            while((ch=getch())!='\r')
            {
                pass[i++]=ch;
                putchar('*');
            }
            pass[i]='\0';
            fflush(stdin);
            printf("\n");
            if(strcmp(n[k].pass,pass)!=0)
            {
                printf("输入密码错误,查询失败!\n");
            }
            else
            {
                printf("余额为%f",n[k].money);
            }
        }
        else if(n[k].state==2)
        {
            printf("该用户处于挂失状态,查询失败!\n");
        }
        else
        {
            printf("该用户已经销户,查询失败!\n");
        }
    }
}
void  transferAccounts()
{
    int k=-1,c,j,account,m=-1;
    char pass[20],ch;
    double  money;
    printf("请输入账号:");
    scanf("%d",&c);
    for(j=0; j<N; j++)
    {
        if(n[j].account==c)
            k=j;
    }
    if(k>=0)
    {
        if(n[k].state==0)
        {
            printf("请输入密码;");
            int i=0;
            while((ch=getch())!='\r')
            {
                pass[i++]=ch;
                putchar('*');
            }
            pass[i]='\0';
            fflush(stdin);
            printf("\n");
            if(strcmp(n[k].pass,pass)==0)
            {
                printf("请输入转入账号;");
                scanf("%d",&account);
                for(j=0; j<N; j++)
                {
                    if(n[j].account==c)
                        m=j;
                }
                if(m>0)
                {
                    printf("请输入转入金额");
                    scanf("%lf",&money);
                    n[k].money=n[k].money-money;
                    n[m].money=n[m].money+money;
                }
            }
        }
        else if(n[k].state==2)
        {
            printf("该用户处于挂失状态,查询失败!\n");
        }
        else
        {
            printf("该用户已经销户,查询失败!\n");
        }
    }
}
void reportLoss()
{
    int k=-1,c,j;
    char pass[20],ch;
    printf("请输入账号:");
    scanf("%d",&c);
    for(j=0; j<N; j++)
    {
        if(n[j].account==c)
            k=j;
    }
    if(k>=0)
    {
        if(n[k].state==0)
        {
            printf("请输入密码;");
            int i=0;
            while((ch=getch())!='\r')
            {
                pass[i++]=ch;
                putchar('*');
            }
            pass[i]='\0';
            fflush(stdin);
            printf("\n");
            if(strcmp(n[k].pass,pass)==0)
            {
                n[k].state=2;
                printf("挂失成功\n");
            }
        }
        else if(n[k].state==2)
        {
            printf("该用户处于挂失状态,无需挂失!\n");
        }
        else
        {
            printf("该用户已经销户,挂失失败!\n");
        }
    }

}
void  cancelLoss()
{
    int k=-1,c,j;
    char pass[20],ch;
    printf("请输入账号:");
    scanf("%d",&c);
    for(j=0; j<N; j++)
    {
        if(n[j].account==c)
            k=j;
    }
    if(k>=0)
    {
        if(n[k].state==0)
        {
            printf("该用户没有挂失\n");
        }
        else if(n[k].state==2)
        {
            printf("请输入密码;");
            int i=0;
            while((ch=getch())!='\r')
            {
                pass[i++]=ch;
                putchar('*');
            }
            pass[i]='\0';
            fflush(stdin);
            printf("\n");
            if(strcmp(n[k].pass,pass)==0)
            {
                n[k].state=0;
                printf("解挂成功\n");
            }
        }
        else
        {
            printf("该用户已经销户,挂失失败!\n");
        }
    }

}
void updatePassword()
{
    int k=-1,c,j;
    char pass[20],pass1[20],pass2[20],ch;
    printf("请输入账号:");
    scanf("%d",&c);
    for(j=0; j<N; j++)
    {
        if(n[j].account==c)
            k=j;
    }
    if(k>=0)
    {
        if(n[k].state==0)
        {

            printf("请输入旧密码;");
            int i=0;
            while((ch=getch())!='\r')
            {
                pass[i++]=ch;
                putchar('*');
            }
            pass[i]='\0';
            fflush(stdin);
            printf("\n");
            if(strcmp(n[k].pass,pass)==0)
            {
                i=0;
                printf("请输入新密码;");
                while((ch=getch())!='\r')
                {
                    pass1[i++]=ch;
                    putchar('*');
                }
                pass1[i]='\0';
                fflush(stdin);
                printf("\n请再次输入");
                 i=0;
                while((ch=getch())!='\r')
                {
                    pass2[i++]=ch;
                    putchar('*');
                }
                pass2[i]='\0';
                fflush(stdin);
                printf("\n");
                if(strcmp(pass1,pass2)==0)
                {
                    printf("修改成功\n");
                }
                else
                {
                    printf("两次密码不相同,修改失败\n");
                }
            }
        }
        else if(n[k].state==2)
        {
            printf("挂失中.请解挂\n");
        }
        else
        {
            printf("该用户已经销户,挂失失败!\n");
        }
    }
}
int chooseInMenu()
{
    int i;
    while(i)
    {
        printf("\n");
        printf("+----------------------------+\n");
        printf("+ 1 退出    2 销户    3 存款 +\n");
        printf("+ 4 取款    5 查询    6 转账 +\n");
        printf("+ 7 挂失    8 解挂    9 改密 +\n");
        printf("+----------------------------+\n");
        printf("请输入操作指令:");
        scanf("%d", &i);
        if(i>=0 && i<=9)
            break;
        else
            printf("请重新选择功能\n\n");
    }
    return i;
}
void contest()
{
    int iChoice;  //用于选择系统功能
    //办理业务
    do
    {
        iChoice = chooseInMenu();  //从菜单中获得功能代码
        switch(iChoice)
        {
        case 1:
            printf("欢迎您再来. \n");
            break;
        case 2:
            cancel();
            break;
        case 3:
            save();
            break;
        case 4:
            withdraw();
            break;
        case 5:
            showAccount();
            break;
        case 6:
            transferAccounts();
            break;
        case 7:
            reportLoss();
            break;
        case 8:
            cancelLoss();
            break;
        case 9:
            updatePassword();
            break;
        }
    }
    while(iChoice);
}


一分辛苦一分收获,只有自己一点点的努力才会有成功。抄袭别人的东西虽然可以不用自己动脑努力,但是这却是那么的可耻。加油你的大学不会放弃你。但是如果你自己放弃自己就不会有人能够救活你,不要让自己垂头丧气开开心心过好每一天。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值