#include<stdio.h>
#include<stdlib.h>

int main ()
{
    //初始化
    int account_1 , password_1 , password_2 = 0 , password_3 = 0 , account_2 = 0 , password_4 = 0; //账号;登录密码,取款密码,登录检查密码,检查登录账户,修改密码判断是不是6位
    char tab_1; //用户是否同意进入
    int tab_a = 0 , tab_b , tab_c , tab_d = 0 , tab_e , tab_f; //判断取款密码是否为6位数.判断取款密码是否为6位数,判断进入登录还是管理员,判断是否进入账户主页主页;账户主页选项;判断用户修改是否输入正确
    int administration_password , administration_a; //管理员密码,判断管理员选项
    double interest = 0 , capital = 10000 , money = 0 , interest_rate = 0.0175 , year = 0 , capital_1 = 0; //利息,本金,变动的钱,利率,年份,预测本金
    //注册账户
    printf ( "第一次使用需要注册账户 \n" );
    printf ( "不同意输入N,输入其他代表同意 \n:" );
    //获取用户是否同意进入
    tab_1 = getchar ( );

    if ( tab_1 == 'n' || tab_1 == 'N' )
    {
        return 1;
    }

    while ( getchar ( ) != '\n' );  //清楚缓存

    //注册登录账户
    printf ( "账户名(只支持数字):" );
    while ( scanf ( "%d" , & account_1 ) != 1 )
    {
        while ( getchar ( ) != '\n' );  //清楚缓存
        printf ( "请输入合法的数字:" );
        continue;
    }

    while ( getchar ( ) != '\n' );  //清楚缓存
    //注册登录密码
    printf ( "登录密码(只支持数字):" );
    while ( scanf ( "%d" , & password_1 ) != 1 )
    {
        while ( getchar ( ) != '\n' );  //清楚缓存
        printf ( "请输入合法的数字:" );
        continue;
    }
    while ( getchar ( ) != '\n' );  //清楚缓存
    //注册取款密码
    //注册取款密码
    printf ( "取款密码(只支持6位数字):" );
    while ( password_2 == 0 )
    {
        //判断是不是输入的数字
        while ( scanf ( "%d" , & password_2 ) != 1 )
        {
            while ( getchar ( ) != '\n' );  //清楚缓存
            printf ( "请输入合法的数字:" );
            continue;
        }
        tab_b = password_2;
        //判断是否为6位数

        while ( tab_b != 0 )
        {
            tab_b /= 10;
            tab_a ++;
        }

        if ( tab_a != 6 )
        {
            printf ( "当前输入%d位,密码是6位数 \n请重新输入:" , tab_a );
            password_2 = 0;
            tab_a = 0;
            continue;
        }
        if ( tab_a == 6 )
        {
            break;
        }
    }
    while ( getchar ( ) != '\n' );  //清楚缓存
    //提示用户输入成功
    printf ( "创建成功 \n" );
    printf ( "账户名:%d \n" , account_1 );
    printf ( "密码:%d \n" , password_1 );
    printf ( "密码:%d \n" , password_2 );
    printf ( "初始金额为%lf \n" , capital );

    //此层循环为主页面开始
    while ( 1 )
    {
        printf ( "----银行主页----\n" );
        printf ( "0.退出程序 \n" );
        printf ( "1.登录银行账户 \n" );
        printf ( "请输入数字:" );
        scanf ( "%d" , & tab_c );
        printf ( "----银行主页----\n" );

        while ( getchar ( ) != '\n' );  //清楚缓存
        //0退出
        if ( tab_c == 0 )
        {
            printf ( "欢迎下次使用" );
            return 1;
        }

        //获取是否输入正确
        if ( tab_c != 0 && tab_c != 1 && tab_c != 2 )
        {
            printf ( "输入错误请重新输入 \n" );
            continue;
        }

        //银行主页开始
        while ( tab_c == 1 )
        {
            printf ( "需要登陆账号 \n" );
            //获取用户账号
            printf ( "请输入账号:" );
            scanf ( "%d" , & account_2 );
            while ( account_1 != account_2 )  //判断账户是否正确
            {
                while ( getchar ( ) != '\n' );  //清楚缓存
                printf ( "请输入正确的账号:" );
                scanf ( "%d" , & account_2 );
            }
            //获取用密码
            printf ( "请输入密码:" );
            scanf ( "%d" , & password_3 );
            while ( password_1 != password_3 )  //判断密码是否正确
            {
                while ( getchar ( ) != '\n' );  //清楚缓存
                printf ( "请输入正确的密码:" );
                scanf ( "%d" , & password_3 );
            }
            // 正确的账号和密码
            printf ( "登录成功!\n" );
            tab_d = 1; //进入主页
            //此层输出账户主页
            while ( tab_d == 1 )
            {
                printf ( "----账户主页----\n" );
                printf ( "0.退出程序 \n" );
                printf ( "1.退出账户 \n" );
                printf ( "2.存钱 \n" );
                printf ( "3.取钱 \n" );
                printf ( "4.查看余额 \n" );
                printf ( "5.预测未来存款(当前利率为%.3lf) \n" , interest_rate );
                printf ( "6.修改账号 \n" );
                printf ( "7.修改密码 \n" );
                printf ( "8.修改取款密码 \n" );
                printf ( "请输入数字:" );
                scanf ( "%d" , & tab_e );
                printf ( "----账户主页----\n" );

                while ( getchar ( ) != '\n' );  //清楚缓存

                //重置判断
                tab_f = 0;
                tab_a = 0; //取款数字是否为6位
                //选择开始
                switch ( tab_e )
                {
                    case 0:
                    {
                        printf ( "欢迎下次使用" );
                        return 1;
                    }

                    case 1:
                    {
                        tab_d = 0; //使不进入其他循环
                        tab_c = 999; //使不进入其他循环
                        printf ( "退出成功\n" );
                        while ( getchar ( ) != '\n' );  //清楚缓存
                        break;
                    }

                    case 2:
                    {
                        printf ( "请输入需要存入多少钱:" );
                        while ( scanf ( "%lf" , & money ) != 1 )
                        {
                            while ( getchar ( ) != '\n' );  //清楚缓存
                            printf ( "请输入合法的数字:" );
                            continue;
                        }
                        capital += money;
                        break;
                    }

                    case 3:
                    {
                        printf ( "请输入当前密码或取款密码:" );
                        while ( scanf ( "%d" , & password_3 ) != 1 || password_3 != password_2 )
                        {
                            while ( getchar ( ) != '\n' );  //清楚缓存
                            printf ( "当密码错误,请重新输入:" );
                            continue;
                        }
                        printf ( "请输入需要取出多少钱:" );
                        while ( scanf ( "%lf" , & money ) != 1 || money > capital )
                        {
                            while ( getchar ( ) != '\n' );  //清楚缓存
                            printf ( "数字不合法或本金不足,请重新输入:" );
                            continue;
                        }
                        capital -= money;
                        break;
                    }

                    case 4:
                    {
                        printf ( "当前余额为%.3lf: \n" , capital );
                        break;
                    }

                    case 5:
                    {
                        printf ( "请输入预测多少年后:" );
                        while ( scanf ( "%lf" , & year ) != 1 || year < 0 )
                        {
                            while ( getchar ( ) != '\n' );  //清楚缓存
                            printf ( "请输入合法的数字:" );
                            continue;
                        }
                        double interest = capital * interest_rate * year; // 计算利息
                        double capital_1 = capital + interest; // 计算预测余额
                        printf ( "预测%.0lf年后获得\n" , year );
                        printf ( "利息%.3lf\n" , interest );
                        printf ( "余额%.3lf \n" , capital_1 );
                    }

                    case 6:
                    {
                        //验证用户开始
                        while ( tab_f == 0 )
                        {
                            printf ( "需要验证用户\n输入0退出\n" );
                            printf ( "请输入当前登录账户名或取款密码:" );
                            while ( scanf ( "%d" , & password_3 ) != 1 )
                            {
                                while ( getchar ( ) != '\n' );  //清楚缓存
                                printf ( "数字不合法或密码错误,请重新输入:" );
                                continue;
                            }

                            //检查是否退出
                            if ( password_3 == 0 )
                            {
                                printf ( "退出成功" );
                                tab_f = 1;
                                break;
                            }

                            //输入成功退出
                            if ( password_3 == password_2 || password_3 == account_1 )
                            {
                                printf ( "验证成功 \n" );
                                tab_f = 1;
                                break;
                            } else
                            {
                                printf ( "输入错误请重新输入 \n" );
                                continue;
                            }

                        }//验证用户结束


                        //修改新账户
                        while ( tab_a == 0 )
                        {
                            printf ( "请输入新账户名:" );
                            while ( scanf ( "%d" , & password_3 ) != 1 )
                            {
                                while ( getchar ( ) != '\n' );  //清楚缓存
                                printf ( "非法数字,请重新输入:" );
                                continue;
                            }

                            //二次确认账户
                            printf ( "请二次输入你的账户名:" );
                            while ( scanf ( "%d" , & password_4 ) != 1 || password_4 != password_3 )
                            {
                                while ( getchar ( ) != '\n' );  //清楚缓存
                                printf ( "账户名不一样,请重新输入:" );
                                continue;
                            }
                            //退出循环
                            break;
                        }//修改新的账户结束

                        account_1 = password_3;
                        printf ( "修改账号成功" );
                        printf ( "当前账户名是%d" , account_1 );
                        break;
                    }

                    case 7:
                    {
                        //验证用户开始
                        while ( tab_f == 0 )
                        {
                            printf ( "需要验证用户\n输入0退出\n" );
                            printf ( "请输入当前登录密码或取款密码:" );
                            while ( scanf ( "%d" , & password_3 ) != 1 )
                            {
                                while ( getchar ( ) != '\n' );  //清楚缓存
                                printf ( "数字不合法或密码错误,请重新输入:" );
                                continue;
                            }

                            //检查是否退出
                            if ( password_3 == 0 )
                            {
                                printf ( "退出成功" );
                                tab_f = 1;
                                break;
                            }

                            //输入成功退出
                            if ( password_3 == password_2 || password_3 == password_1 )
                            {
                                printf ( "验证成功 \n" );
                                tab_f = 1;
                                break;
                            } else
                            {
                                printf ( "输入错误请重新输入 \n" );
                                continue;
                            }

                        }//验证用户结束


                        //修改新密码
                        while ( tab_a == 0 )
                        {
                            printf ( "请输入新密码:" );
                            while ( scanf ( "%d" , & password_3 ) != 1 )
                            {
                                while ( getchar ( ) != '\n' );  //清楚缓存
                                printf ( "非法数字,请重新输入:" );
                                continue;
                            }

                            //二次确认密码
                            printf ( "请二次输入你的密码:" );
                            while ( scanf ( "%d" , & password_4 ) != 1 || password_4 != password_3 )
                            {
                                while ( getchar ( ) != '\n' );  //清楚缓存
                                printf ( "密码不一样,请重新输入:" );
                                continue;
                            }
                            //退出循环
                            break;
                        }//修改新的密码结束

                        password_1 = password_3;
                        printf ( "修改账户密码成功" );
                        printf ( "当前密码为:%d" , password_1 );
                        break;
                    }

                    case 8:
                    {
                        //验证用户开始
                        while ( tab_f == 0 )
                        {
                            printf ( "需要验证用户\n输入0退出\n" );
                            printf ( "请输入当前取款密码或账户登录密码:" );
                            while ( scanf ( "%d" , & password_3 ) != 1 )
                            {
                                while ( getchar ( ) != '\n' );  //清楚缓存
                                printf ( "数字不合法或密码错误,请重新输入:" );
                                continue;
                            }

                            //检查是否退出
                            if ( password_3 == 0 )
                            {
                                printf ( "退出成功" );
                                tab_f = 1;
                                break;
                            }

                            //输入成功退出
                            if ( password_3 == password_2 || password_3 == password_1 )
                            {
                                printf ( "验证成功 \n" );
                                tab_f = 1;
                                break;
                            } else
                            {
                                printf ( "输入错误请重新输入 \n" );
                                continue;
                            }

                        }//验证用户结束

                        //修改新密码
                        while ( tab_a != 6 )
                        {
                            printf ( "请输入新密码:" );
                            while ( scanf ( "%d" , & password_3 ) != 1 )
                            {
                                while ( getchar ( ) != '\n' );  //清楚缓存
                                printf ( "非法数字,请重新输入:" );
                                continue;
                            }

                            //判断是否为6位数
                            tab_a = 0;//初始化判断

                            //为了防止刚刚的密码没有了

                            password_4 = password_3;
                            while ( password_4 != 0 )
                            {
                                password_4 /= 10;
                                tab_a ++;
                            }

                            if ( tab_a != 6 )
                            {
                                printf ( "当前输入%d位,密码是6位数 \n请重新输入\n" , tab_a );
                                continue;
                            }

                            if ( tab_a == 6 )
                            {
                                printf ( "请二次输入你的密码:" );
                                while ( scanf ( "%d" , & password_4 ) != 1 || password_4 != password_3 )
                                {
                                    while ( getchar ( ) != '\n' );  //清楚缓存
                                    printf ( "密码不一样,请重新输入:" );
                                    continue;
                                }
                                if ( password_4 == password_3 )
                                {
                                    break;
                                }
                                break;
                            }//修改新的密码结束


                        }

                        password_2 = password_3;
                        printf ( "修改取款密码成功" );
                        printf ( "当前密码为:%d \n" , password_2 );
                        break;
                    }

                    default: //输入了其他
                    {
                        printf ( "输入错误,请重新输入 \n" );
                        while ( getchar ( ) != '\n' );  //清楚缓存
                        break;
                    }
                }//选择结束
            }


        }//银行主页结束


    }//此层循环为主页面结束
    return 0;
}
