美文网首页
C语言练习-ATM机实现(函数篇)

C语言练习-ATM机实现(函数篇)

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

    目的

    用函数的方法来实现ATM机的功能
    代码的逻辑结构
    搭建框架 不做具体的事情。具体的事情交给每一个函数去实现

    技术

    建立函数

    技术使用

    1.搭建基本框架
    int _tmain(int argc, _TCHAR* argv[])
    {
    //登陆界面
    welcome();
    
    //输入密码
    bool result = passwordLogin();
    if (result == false)
    {
        exitATM(EXIT_FAILURE);
    }
    
    //显示菜单
    menu();
    
    //选择操作并执行
    while (1)
    {
        int choice = chooseChoice();
    
        switch (choice)
        {
        case 1:
            //取款
            withdraw();
            break;
        case 2:
            //存款
            deposit();
            break;
        case 3:
            //更改密码
            changePassword();
            break;
        default:
            //退出
            exitATM(EXIT_SUCCESS);
            break;
        }
    }
    
    system("pause");
    return 0;
    }
    

    以上是实现这个功能的基本框架 然后可以看到框架分为几个部分

    • 登陆界面
    • 输入密码
    • 显示菜单
    • 选择操作并执行
      因此开始第二步
    2.自定义函数
    • 登陆界面

      void welcome(void){
      printf("***********\n");
      printf(" 欢迎使用!\n");
      printf("***********\n");
      }
      
    • 输入密码

    bool passwordLogin(void){
    int inputPassword = 0;
    int wrongTime = 0;
    printf("请输入密码:");
    while (1)
    {
        scanf("%d", &inputPassword);
        if (inputPassword == passWord)
        {
            return true;
        }
        else
        {
            wrongTime++;
            if (wrongTime == 4)
            {
                printf("密码错误次数过多,此卡已冻结,有问题请联系客服\n");
                return false;
            }
            else
            {
                printf("密码错误,请重新输入密码:");
            }
        }
       }
     }
    

    由上面的代码可以看出,输入密码分三种情况:密码输入正确、密码输入错误,但重输密码4次内正确、密码输入4次都错误
    第一二种情况,函数返回值为 true
    第三种情况为false
    在主框架中可以看到,会判断返回值,如果为true,进行下一步操作。为false,则程序终止。
    退出程序的过程也可以编写一个函数

    void exitATM(int status){
    printf("感谢您的使用,再见\n");
    system("pause");
    exit(status);
    }
    
    • 显示菜单

      void menu(void){
      printf("1.取款\n");
      printf("2.存款\n");
      printf("3.更改密码\n");
      printf("4.退出\n");
      }
      
    • 用户选择操作

      int chooseChoice(void){
      int choice;
      printf("请选择你想要的操作:"); 
      while (1)
      {
       scanf("%d", &choice);
       if (choice >=1 && choice <= 4)
       {
           return choice;
       }
       else
       {
           printf("选择不合法,请重新选择:");
        }
       }
      }
      
    • 执行操作

    由于在取款中会有是否继续的程序,所以也定义一个函数

    bool wetherCountinue(void){
    int choice;
    
    printf("是否继续?1.继续/0.退出");
    scanf("%d", &choice);
    if (choice == 0)
    {
        return false;
    }
    else
    {
        return true;
    }
    

    }

    1.取款

    void withdraw(void){
    int money;
    int answer;
    
    while (1)
    {
        printf("请输入取款金额:");
        scanf("%d", &money);
        if (money > 0 && money <= oglMoney)
        {
            oglMoney = oglMoney - money;
            printf("取款成功,当前余额为:%d\n", oglMoney);
            int reslut = wetherCountinue();
            if (reslut == 0)
            {
                return;
            }
        }
        else
        {
            printf("卡上余额不足,");
            int result1 = wetherCountinue();
            if (result1 == 0)
            {
                return;
            }
        }
    }
    

    }

    2.存款

    void deposit(void){
    int inputMoney;
    
    printf("请输入存款金额:");
    scanf("%d",&inputMoney);
    oglMoney = oglMoney + inputMoney;
    printf("存款成功,当前余额为:%d",oglMoney);
    

    }

    3.更改密码

    void changePassword(void){
    bool result = passwordLogin();
    if (result == false)
    {
        exitATM(EXIT_FAILURE);
    }
    
    int newPassword1, newPassword2;
    
    while (1)
    {
        printf("请输入新的密码:");
        scanf("%d", &newPassword1);
        printf("请确认密码:");
        scanf("%d", &newPassword2);
        if (newPassword1 == newPassword2)
        {
            passWord = newPassword1;
            printf("更改密码成功!");
            break;
        }
        else
        {
            printf("两次密码不同,请重新输入.\n");
        }
      } 
    }
    

    4.退出

    void exitATM(int status){
    printf("感谢您的使用,再见\n");
    system("pause");
    exit(status);
    

    实战

    在使用每一个函数时,一定要声明!

    #include "stdafx.h"
    #include <stdlib.h>
    #include "iostream"
    void welcome(void);
    bool passwordLogin(void);
    void exitATM(int status);
    void menu(void);
    int chooseChoice(void);
    void withdraw(void);
    void deposit(void);
    void changePassword(void);
    
    //passWord 和 oglMoney在函数定义中使用了多次,所以定义两个全局变量
    int passWord = 1212;
    int oglMoney = 2000;
    int _tmain(int argc, _TCHAR* argv[])
    {
    //登陆界面
    welcome();
    
    //输入密码
    bool result = passwordLogin();
    if (result == false)
    {
        exitATM(EXIT_FAILURE);
    }
    
    //显示菜单
    menu();
    
    //选择操作并执行
    while (1)
    {
        int choice = chooseChoice();
    
        switch (choice)
        {
        case 1:
            //取款
            withdraw();
            break;
        case 2:
            //存款
            deposit();
            break;
        case 3:
            //更改密码
            changePassword();
            break;
        default:
            //退出
            exitATM(EXIT_SUCCESS);
            break;
        }
    }
    
    system("pause");
    return 0;
      }
    
    
    void welcome(void){
    printf("***********\n");
    printf(" 欢迎使用!\n");
    printf("***********\n");
    }
    
    void exitATM(int status){
    printf("感谢您的使用,再见\n");
    system("pause");
    exit(status);
    }
    
    bool passwordLogin(void){
    int inputPassword = 0;
    int wrongTime = 0;
    printf("请输入密码:");
    while (1)
    {
        scanf("%d", &inputPassword);
        if (inputPassword == passWord)
        {
            return true;
        }
        else
        {
            wrongTime++;
            if (wrongTime == 4)
            {
                printf("密码错误次数过多,此卡已冻结,有问题请联系客服\n");
                return false;
            }
            else
            {
                printf("密码错误,请重新输入密码:");
            }
         }
       }
    }
    
    void menu(void){
    printf("1.取款\n");
    printf("2.存款\n");
    printf("3.更改密码\n");
    printf("4.退出\n");
    }
    
    int chooseChoice(void){
    int choice;
    
    printf("请选择你想要的操作:");
    while (1)
    {
        scanf("%d", &choice);
        if (choice >=1 && choice <= 4)
        {
            return choice;
        }
        else
        {
            printf("选择不合法,请重新选择:");
         }
       }
    }
    
    bool wetherCountinue(void){
    int choice;
    
    printf("是否继续?1.继续/0.退出");
    scanf("%d", &choice);
    if (choice == 0)
    {
        return false;
    }
    else
    {
        return true;
     }
     }
    
    void withdraw(void){
    int money;
    int answer;
    
    while (1)
    {
        printf("请输入取款金额:");
        scanf("%d", &money);
        if (money > 0 && money <= oglMoney)
        {
            oglMoney = oglMoney - money;
            printf("取款成功,当前余额为:%d\n", oglMoney);
            int reslut = wetherCountinue();
            if (reslut == 0)
            {
                return;
            }
        }
        else
        {
            printf("卡上余额不足,");
            int result1 = wetherCountinue();
            if (result1 == 0)
            {
                return;
            }
        }
      }
    }
        
    void deposit(void){
    int inputMoney;
    
    printf("请输入存款金额:");
    scanf("%d",&inputMoney);
    oglMoney = oglMoney + inputMoney;
    printf("存款成功,当前余额为:%d",oglMoney);
    }
    
    void changePassword(void){
    bool result = passwordLogin();
    if (result == false)
    {
        exitATM(EXIT_FAILURE);
    }
    
    int newPassword1, newPassword2;
    
    while (1)
    {
        printf("请输入新的密码:");
        scanf("%d", &newPassword1);
        printf("请确认密码:");
        scanf("%d", &newPassword2);
        if (newPassword1 == newPassword2)
        {
            passWord = newPassword1;
            printf("更改密码成功!");
            break;
        }
        else
        {
            printf("两次密码不同,请重新输入.\n");
        }
      } 
    }
    

    心得

    使用函数使代码结构简单,方便阅读,利于移植。只是在定义函数的时候,会思考很多方面,就比如定义bool类型,一开始会觉得直接定义一个void,直接实现登陆密码,但这样在主函数里面,程序的写法看起来不够清楚,而且那样做运行起来也有一点漏洞。总的来说使用函数让框架更加清晰明了,也很锻炼自己的逻辑思维能力,所以在后面的学习过程中,在用函数实现更加清晰的情况下,尽量多使用函数。

    相关文章

      网友评论

          本文标题:C语言练习-ATM机实现(函数篇)

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