美文网首页
C语言练习-ATM机实现(基础方法)

C语言练习-ATM机实现(基础方法)

作者: 一只洁_ | 来源:发表于2019-07-31 14:20 被阅读0次

    目的

    实现ATM机的基本操作步骤:
    请输入密码:123
    错误-> 密码错误请重新输入: 最多输入4 -> 此卡已冻结 请联系客服 -> 退出

    正确->

    1.取款
    请输入取款金额:xxx-> 取款成功 当前余额为xxx
    ->余额不足 是否继续1/0
    2.存款
    请输入金额:xxx -> 存款成功 当前余额:xxx
    3.更改密码
    请输入原始密码->请设置密码->请确认密码
    4.退出

    技术

    1.while循环
    2.switch用法
    3.if else语句

    技术使用

    1.显示界面
    printf("************\n");
    printf("  欢迎使用\n");
    printf("************\n");
    
    2.输入密码,并且判断密码是否正确;如果密码错误,请重新输入,最多输入4次,超过4次,显示此卡已冻结请联系客服,并且退出程序。
    int passWord = 1212;
    int inputPassword = 0;
    int wrongTime = 0;
    while (1)
    {
        printf("请输入密码:");
        scanf("%d", &inputPassword);
        if (inputPassword ==passWord )
        {
             //密码正确
            break;
        }
        else
        {
              //密码错误
            wrongTime++;
            printf("密码错误,");
        }if (wrongTime == 4)
        {
            printf("此卡已冻结,请联系客服。\n");
             //我用的vs 所以需要暂停一下才能看到提醒的这一句话
            system("pause");
            exit(EXIT_FAILURE);
        }
    }
    

    将输入密码这一操作放在一个while循环里,如果密码正确,跳出循环;如果密码输入错误,继续循环,而当密码输入错误次数超过4次时,系统提醒,并且退出程序。

    3.显示操作界面
    printf("1.取款\n");
    printf("2.存款\n");
    printf("3.更改密码\n");
    printf("4.退出\n");
    
    4.用户选择操作,并且判断选择是否合法。
    int choice;
    printf("请输入你的选择:");
    while (1)
    {
        scanf("%d", &choice);
        if (choice >= 1 && choice <= 4){
            break;
        }
        else
        {
            printf("您的选择不正确,请重新选择");
        }
    }
    

    这里解释一下,会有人想,如果输入的是字母怎么办?可现实中,你去ATM机取款或者网上用手机支付,键盘上也只有数字,虽然还有一个 . 但应该很少有人这样选择点吧,所以不加入考虑。

    5.执行各个操作

    首先我们用switch来实现每一步的操作

    switch (choice)
    {
    case 1:
        //取款
        break;
    case 2:
        //存款
        break;
    case 3:
        //更改密码
        break;
    default:
        //退出
        break;
    }
    

    然后分步执行

    • 取款
      用户取款时有两种情况:
      1.余额足够->取款,并且告诉用户卡上余额
      2.余额不足->提醒用户,并且询问是否继续取款
      代码如下:
      float oglMoney = 2000;
    //ATM机取款只能取100的倍数,所以定义drawMoney为整型
      int drawMoney = 0;
      int answer = 0;
      while (1)
        {
            printf("请输入取款金额:");
            scanf("%d", &drawMoney);
            if (drawMoney <= oglMoney)
            {
                oglMoney = oglMoney - drawMoney;
                printf("取款成功,当前余额为:%f", oglMoney);
                break;
            }
            else
            {
                printf("余额不足,是否继续?(1.继续/0.退出):");
                scanf("%d",&answer);
                if (answer == 0)
                {
                    printf("感谢您的使用,再见");
                    system("pause");
                    exit(EXIT_SUCCESS);
                }
            }
        }
    
    • 存款
      存款比较简单,用户输入存款金额(放入存款金额),然后机器显示余额就行。
      代码如下:
    float oglMoney = 2000;
    int inputMoney = 0;
    printf("请输入存款金额:");
    scanf("%d", &inputMoney);
    oglMoney = oglMoney + inputMoney;
    printf("存款成功,当前余额为:%f", oglMoney);
    
    • 更改密码

    更改密码则是用户首先输入原始密码,判断原始密码是否正确;若正确,然后输入新密码,再次输入新密码,再判断两次新密码输入是否一样->一样,修改密码成功;不一样,重新设置
    代码如下:

        int newPassword1, newPassword2;
        int passWord = 1212;
        int inputPassword = 0;
        printf("请输入原始密码:");
        while (1)
        {
            scanf("%d", &inputPassword);
            if (inputPassword == passWord)
            {
                    printf("请输入新的密码:");
                    scanf("%d", &newPassword1);
                    printf("请确认新的密码:");
                    scanf("%d", &newPassword2);
                    if (newPassword1 == newPassword2)
                    {
                        printf("密码修改成功!");
                        break;
                    }
                    else
                    {
                        printf("两次密码不同,请重新输入");
                    }
                }
            else
            {
                printf("密码错误,请重新输入:");
            }
        }
    

    ps:输入原始密码我做的比较不严谨,没有实现输入一定次数卡被冻结的功能,如果想实现这个功能,可以参照上面进入页面首次输入密码时的代码。

    • 退出

       printf("感谢你的使用,再见\n");
       system("pause");
       exit(EXIT_SUCCESS);
      

    实战

    #include "stdafx.h"
    #include "iostream"
    #include "stdlib.h"
    
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    printf("************\n");
    printf("  欢迎使用\n");
    printf("************\n");
    
    int passWord = 1212;
    int inputPassword = 0;
    
    int wrongTime = 0;
    while (1)
    {
        printf("请输入密码:");
        scanf("%d", &inputPassword);
        if (inputPassword == passWord)
        {
            break;
        }
        else
        {
            wrongTime++;
            printf("密码错误,");
        }if (wrongTime == 4)
        {
            printf("此卡已冻结,请联系客服。\n");
            system("pause");
            exit(EXIT_FAILURE);
        }
    }
    
    printf("1.取款\n");
    printf("2.存款\n");
    printf("3.更改密码\n");
    printf("4.退出\n");
    
    int choice;
    printf("请输入你的选择:");
    while (1)
    {
        scanf("%d", &choice);
        if (choice >= 1 && choice <= 4){
            break;
        }
        else
        {
            printf("您的选择不正确,请重新选择:");
        }
    }
    
    float oglMoney = 2000;
    int drawMoney = 0;
    int answer = 0;
    int inputMoney = 0;
    int newPassword1, newPassword2;
    
    switch (choice)
    {
    case 1:
        //取款
        while (1)
        {
            printf("请输入取款金额:");
            scanf("%d", &drawMoney);
            if (drawMoney <= oglMoney)
            {
                oglMoney = oglMoney - drawMoney;
                printf("取款成功,当前余额为:%f", oglMoney);
                break;
            }
            else
            {
                printf("余额不足,是否继续?(1.继续/0.退出):");
                scanf("%d",&answer);
                if (answer == 0)
                {
                    printf("感谢您的使用,再见\n");
                    system("pause");
                    exit(EXIT_SUCCESS);
                }
            }
        }
        break;
    case 2:
        //存款
        printf("请输入存款金额:");
        scanf("%d", &inputMoney);
        oglMoney = oglMoney + inputMoney;
        printf("存款成功,当前余额为:%f", oglMoney);
        break;
    case 3:
        //更改密码
        printf("请输入原始密码:");
        while (1)
        {
            scanf("%d", &inputPassword);
            if (inputPassword == passWord)
            {
                    printf("请输入新的密码:");
                    scanf("%d", &newPassword1);
                    printf("请确认新的密码:");
                    scanf("%d", &newPassword2);
                    if (newPassword1 == newPassword2)
                    {
                        printf("密码修改成功!");
                        break;
                    }
                    else
                    {
                        printf("两次密码不同,请重新输入");
                    }
                }
            else
            {
                printf("密码错误,请重新输入:");
            }
        }
        break;
    default:
        //退出
        printf("感谢你的使用,再见\n");
        system("pause");
        exit(EXIT_SUCCESS);
        break;
    }
    
    system("pause");
    return 0;
    }
    
    运行结果

    输入密码
    1.密码正确

    07311.png
    2.密码错误 且四次都错
    07312.png

    选择操作
    1.选择操作不正确

    07313.png

    2.选择操作正确

    • 取款
      a.额度够:


      07314.png

    b.额度不够:
    继续取:


    07315.png

    退出:


    07316.png
    • 存款


      07317.png
    • 更改密码
      a.原始密码输入错误:


      07318.png

    b.两次密码输入不同


    07319.png

    c.更改密码成功:


    073110.png
    • 退出


      073112.png

    以上。

    感悟

    这段demo不是特别难,但是在写代码的时候一定要记住要分板块,一个板块实现一个功能,切忌用一个循环包含所有的功能,因为这样做以后写程序后期维护修改起来会非常麻烦。还有在一些很基础的代码上不要犯错误 比如scanf语句 scanf("%x",&xxx); &一定不要忘记写。这个方法比较基础,然后会发现内容全部都在main函数里面,代码结构太复杂,不利于阅读,不方便移植,所以下一篇会用函数来实现这个功能。

    相关文章

      网友评论

          本文标题:C语言练习-ATM机实现(基础方法)

          本文链接:https://www.haomeiwen.com/subject/mxhzrctx.html