C语言项目—银行储蓄系统

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#include<conio.h>
#include<ctype.h>
#include<windows.h>
struct person
{
    int num;
    char name[20];
    int  password;
    double money;
    int status;
} user[1000];
int N=0;
int n;
void readfile();       //用于将文件中的数据读入到数组中来进行处理
void writefile();      //用于将修改后的数据写入文件
void savemoney();      //存款
void withdraw();       //取款
void searchmoney();    //查询
void transferaccount();//转账
void reportloss();     //挂失
void cancelloss();     //解挂
void destroyaccount(); //销户
void changepassword(); //改密
int search();          //用于查找输入的账号是否存在
void MainMenu();       //是整个程序的驱动,便于用户进行选择业务
int inputpassword();
double inputmoney();
int main()
{
    int j;
    system("title 中国银行");
    system("color 1E");
    printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
    printf("\t\t\t\t欢迎进入中国银行系统!\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
    printf("正在登录,请稍后...\n");
    printf("===============================================================================\r");
    for(j=0; j<80; j++)
    {
        Sleep(50);
        printf(">");
    }
    system("cls");
    readfile();
    MainMenu();
    writefile();
    return 0;
}
void MainMenu()
{

    int m;
    printf("\t\t     *******************************\n");
    printf("\t\t     *            1.登录           *\n");
    printf("\t\t     *            2.注册           *\n");
    printf("\t\t     *******************************\n");
    printf("输入操作:");
    scanf("%d",&m);
    if(m==1)
    {
        int num,pass,t=3,f;
        do
        {
            printf("请输入您的账号:");
            scanf("%d",&num);
            n=search(num);
            if(n<0)
            {
                printf("该账号不存在!\n");
            }
            else
            {
                do
                {
                    printf("请输入密码:");
                    pass=inputpassword();
                    if(pass!=user[n].password)
                    {
                        t--;
                        if(t==0)
                        {
                            printf("您已输错了三次密码!");
                            break;
                        }
                        printf("密码输入错误,您还有%d次机会",t);
                    }
                    else
                    {
                        f=1;
                        break;
                    }
                }
                while(t);
                break;
            }
        }
        while(1);
        if(f==1)
        {
            int choice;
            do
            {

                printf("\t\t           *******************\n");
                printf("\t\t           * 1.存款   2.取款 * \n\n");
                printf("\t\t           * 3.查询   4.转账 * \n\n");
                printf("\t\t           * 5.挂失   6.解挂 * \n\n");
                printf("\t\t           * 7.销户   8.改密 * \n\n");
                printf("\t\t           * 9.退出          *\n\n");
                printf("\t\t           *******************\n");
                printf("请输入要办理的业务:");
                scanf("%d",&choice);
                if(choice>=0&&choice<=9)
                {
                    switch(choice)
                    {
                    case 1:
                        readfile();
                        savemoney();
                        writefile();
                        break;
                    case 2:
                        readfile();
                        withdraw();
                        writefile();
                        break;
                    case 3:
                        readfile();
                        searchmoney();
                        writefile();
                        break;
                    case 4:
                        readfile();
                        transferaccount();
                        writefile();
                        break;
                    case 5:
                        readfile();
                        reportloss();
                        writefile();
                        break;
                    case 6:
                        readfile();
                        cancelloss();
                        writefile();
                        break;
                    case 7:
                        readfile();
                        destroyaccount();
                        writefile();
                        break;
                    case 8:
                        readfile();
                        changepassword();
                        writefile();
                        break;
                    case 9:
                        printf("欢迎您再来!\n");
                    }
                }
            }
            while(choice!=9);
        }
    }
    int f;
    if(m==2)
    {
        int num,i,j,choice;
        int pass1,pass2;
        char name[20];
        double money;
        user[N].num=N+100001;
        printf("您的开户账号为:%d\n",user[N].num);
        printf("请输入您的姓名:");
        scanf("%s",name);
        printf("请输入6位数字开户密码:");
        pass1=inputpassword();
        fflush(stdin);
        printf("请再次输入密码:");
        pass2=inputpassword();
        if(pass1==pass2)
        {
            strcpy(user[N].name,name);
            user[N].password=pass1;
            user[N].money=0;
            user[N].status=0;
            N++;
            printf("注册成功!\n");
            f=1;
        }
        else
        {
            printf("\n两次输入密码不同,开户失败!\n");
        }
    }
    if(f==1)
    {
        int choice;
        do
        {
            printf("\t\t           *******************\n");
            printf("\t\t           * 1.存款   2.取款 * \n\n");
            printf("\t\t           * 3.查询   4.转账 * \n\n");
            printf("\t\t           * 5.挂失   6.解挂 * \n\n");
            printf("\t\t           * 7.销户   8.改密 * \n\n");
            printf("\t\t           * 9.退出          *\n\n");
            printf("\t\t           *******************\n");
            scanf("%d",&choice);
            if(choice>=0&&choice<=9)
            {
                switch(choice)
                {
                case 1:
                    savemoney();
                    break;
                case 2:
                    withdraw();
                    break;
                case 3:
                    searchmoney();
                    break;
                case 4:
                    transferaccount();
                    break;
                case 5:
                    reportloss();
                    break;
                case 6:
                    cancelloss();
                    break;
                case 7:
                    destroyaccount();
                    break;
                case 8:
                    changepassword();
                    break;
                case 9:
                    printf("欢迎您再来!\n");
                }
            }
        }
        while(choice!=9);
    }
}
void readfile()
{
    FILE *fp;
    int i = 0;
    if ((fp=fopen("account.txt", "r"))==NULL)
    {
        printf("error open!");
        exit(0);
    }
    while(fscanf(fp,"%d %s %d %lf %d",&user[i].num, user[i].name, &user[i].password, &user[i].money,&user[i].status ) != EOF)
    {
        i++;
    }
    N = i;
    fclose(fp);
}
void writefile()
{
    FILE *fp;
    int i=0;
    if ((fp=fopen("account.txt", "w"))==NULL)
    {
        printf("error open!");
        exit(0);
    }
    for(i=0; i<N; i++)
        fprintf(fp,"%d %s %d %f %d\n",user[i].num, user[i].name, user[i].password, user[i].money,user[i].status);
    fclose(fp);
}
int inputpassword()
{
    char a[10];
    int pass=0;
    int i;
    while(1)
    {
        for(i=0; i<6; i++)
        {
            a[i]=getch();
            putchar('*');
            if(a[i]>='0'&&a[i]<='9')
                pass=pass*10+a[i]-'0';
            else if(a[i]=='\b')         //当遇到退格键不做处理
            {
                printf("\b \b");
                i--;
            }
            else
            {
                pass=0;
                break;   //退出for循环后,再次接受
            }
        }
        fflush(stdin);  //清除键盘缓存区中已经有的输入
        printf("\n");
        if(pass==0)    //此条件成立可能由两种情况引起:输入了非数字字符被直接重置为0,或6位全0后正常退出for循环
        {
            printf("密码要求全为数字,且不能全0!\n");
            printf("请重新输入密码: ");
        }
        else
            break;
    }
    return pass;
}
double inputmoney()
{
    char a[100];
    double money=0;
    int i,f,t;
    while(1)
    {
        f=1;
        for(i=0; i<100; i++)
        {
            scanf("%c",&a[i]);
            if(a[i]>='0'&&a[i]<='9')
                money=money*10+a[i]-'0';
            else if(a[0]=='\n')
            {
                f=0;
                break;
            }
            else if(a[i]=='\n')
            {
                t=0;
                break;
            }
            else
            {
                f=0;
                break;  //退出for循环后,再次接受
            }
        }
        fflush(stdin); //清除键盘缓存区中已经有的输入
        if(f==0)       //此条件成立可能由两种情况引起:输入了非数字字符被直接重置为0,或6位全0后正常退出for循环
        {
            printf("金额要求全为数字!\n");
            printf("请重新输入金额:");
        }
        else if(t==0)
            break;
    }
    return money;
}
void savemoney()
{
    double money;
    printf("您的姓名为:%s\n",user[n].name);
    printf("请输入要存入的金额,存款下限为100,上限为100000000000:");
    do
    {
        fflush(stdin);
        money=inputmoney();
        if(money>100000000000)
        {
            printf("存款金额超过上限!\n");
            printf("请重新输入金额:");
        }
        else if(money<100)
        {
            printf("存款金额低于下限\n");
            printf("请重新输入金额:");
        }
        else
        {
            user[n].money+=money;
            printf("存款成功!\n");
            break;
        }
    }
    while(1);
}
void searchmoney()
{
    printf("您的姓名为:%s\n",user[n].name);
    if(user[n].status==0)
        printf("您的账户余额为:%.2f,并且您的账户状态正常!\n",user[n].money);
    else if(user[n].status==1)
        printf("您的账户余额为:%.2f,并且您的账户处于挂失状态!\n",user[n].money);
    else if(user[n].status==2)
        printf("您的账户已注销!\n");
}
void withdraw()
{
    double money;
    printf("您的姓名为:%s\n",user[n].name);
    if(user[n].status==0)
    {
        do
        {
            fflush(stdin);
            printf("请输入要取款的金额:");
            money=inputmoney();
            if(money>user[n].money)
            {
                printf("余额不足,无法取款!\n");
            }
            else
            {
                user[n].money-=money;
                printf("取款成功!您的账户余额为:%.2f\n",user[n].money);
                break;
            }
        }
        while(1);
    }
    else if(user[n].status==1)
    {
        printf("您的账户已挂失,无法取款!\n");
    }
    else if(user[n].status==2)
    {
        printf("您的账户已注销!\n");
    }
}
void transferaccount()
{
    int num2,n2;
    double money;
    printf("请输入转出账户的账号:");
    scanf("%d",&num2);
    n2=search(num2);
    if(n2<0)
        printf("账号不存在,无法转账!\n");
    else
    {
        if(user[n].status==0)
        {
            do
            {
                printf("请输入要转账的金额:");
                fflush(stdin);
                money=inputmoney();
                if(money>user[n].money)
                    printf("账户余额不足!\n");
                else
                {
                    user[n].money-=money;
                    printf("转账成功!您的账户余额为:%.2f\n",user[n2].money);
                    break;
                }
            }
            while(1);
        }
        else if(user[n].status==1)
        {
            printf("该账户已挂失,无法转账!\n");
        }
        else if(user[n].status==2)
        {
            printf("该账户已注销!\n");
        }
    }
}
void reportloss()
{
    if(n<0)
        printf("账号不存在,无法挂失!\n");
    else
    {
        printf("您的姓名为:%s\n",user[n].name);

        if(user[n].status==0)
        {
            user[n].status=1;
            printf("挂失成功!\n");
        }
        else if(user[n].status==1)
        {
            printf("您的账户已处于挂失状态,无须挂失!\n");
        }
        else if(user[n].status==2)
        {
            printf("您的账户已注销!\n");
        }
    }
}
void cancelloss()
{
    if(n<0)
        printf("账号不存在,无法取消挂失!\n");
    else
    {
        printf("您的姓名为:%s\n",user[n].name);
        if(user[n].status==1)
        {
            user[n].status=0;
            printf("取消挂失成功!\n");
        }
        else if(user[n].status==0)
        {
            printf("您的账户处于正常状态!\n");
        }
        else if(user[n].status==2)
        {
            printf("您的账户已注销!\n");
        }
    }

}
void changepassword()
{
    int pass1,pass2;
    if(n<0)
        printf("账号不存在,无法修改密码!\n");
    else
    {
        printf("您的姓名为:%s\n",user[n].name);
        if(user[n].status==0)
        {
            printf("请输入新的密码:");
            pass1=inputpassword();
            printf("请再次输入密码:");
            pass2=inputpassword();
            if(pass1==pass2&&user[n].status==0)
            {
                user[n].password=pass1;
                printf("改密成功!");
            }
        }
        else if(user[n].status==1)
        {
            printf("您的账户处于挂失状态,无法改密!\n");
        }
        else if(user[n].status==2)
        {
            printf("您的账户已注销!\n");
        }
    }
}
void destroyaccount()
{
    char ch;
    if(n<0)
        printf("账号不存在,无法销户!\n");
    else
    {
        if(user[n].status==0)
        {
            printf("您确定要销户?(y/n)");
            if(ch=='y')
            {
                user[n].status=2;
                printf("销户成功!\n");
            }
            else
                printf("操作已取消!\n");
        }
        else if(user[n].status==1)
        {
            printf("您的账户已挂失,无法注销!\n");
        }
        else if(user[n].status==2)
        {
            printf("您的账户已注销!\n");
        }
    }

}
int search(int num)
{
    int n=-1,i;
    for(i=0; i<N; i++)
    {
        if(user[i].num==num)
        {
            n=i;
            break;
        }
    }
    return n;
}

  • 10
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值