2019-07-31

用函数构建简单的ATM

目的

  • 能够灵活构造函数来使得我们的c语言程序更加简便,提高程序的可读性
  • 创造函数能够更有利于我们函数的移植,一个函数即可以在;一个程序里面重复使用,也可以移到其它程序当中使用

技术

  • 创立单独的代码块,从而编一个独立的函数,格式为:返回值 函数名称(参数,参数){},返回值可以是空的
  • 函数的使用,要先声明后实现,因为c语言程序是自上而下运行的
  • Main函数里面是代码的逻辑结构,搭框架 不做具体的事情 具体的事情给每一个函数去实现
  • 函数的定义不可以嵌套,但是调用可以嵌套

每个技术如何使用

比如在ATM中我们取完钱或者存款完毕的时候会问到我们是否继续,这时候我们就要编一个独立的函数,大括号里面的就是代码块,代码引用

bool iscontinue(){
    printf("是否继续,(Y/N):");
    getchar();
    char ch=getchar();
    if(ch=='N'){
        return false;
    }else{
        return true;
    }
            }

这个函数如果要使用,就必须在main函数前面声明一下,并且我们的这个函数时可以在其它函数中调用,比如就可以在我们写的取款的函数里面调用
代码引用

void withdraw(){
    int outmoney=0;
    while(1){
        printf("请输入取款金额:");
            scanf("%d",&outmoney);
            if(outmoney>0&&outmoney<=totalmoney){
                totalmoney-=outmoney;
                printf("取款成功,剩余%d元\n",totalmoney);
                bool ch=iscontinue();
                    if(ch==false){
                        return ;
                    }
            }else{
                printf("余额不足");
            }
    }
}

实际使用

我们取款首先要有一个欢迎界面,而main函数里面主要是代码的逻辑结构
从而要写一个单独的函数。
代码引用

 void welcome(){
    printf("*************\n");
    printf("欢迎光临\n");
    printf("*************\n");
}

然后我们开始要输入密码,对密码的输入次数也有限制
代码引用

bool loginATM() {
     int password;
     int wrongtime=0;
     while(1){
         
         printf("请输入密码:");
         scanf("%d",&password);
         if(password==initialpassword){

             return true;}
         else {wrongtime++;
         if(wrongtime==4){
             exit(EXIT_FAILURE);
         }else{printf("输入密码错误,已经错误%d次",wrongtime);
         }
         }
     }
 }

接下来就是欢迎界面和选择进行的操作,就是两个函数
函数引用

void showmenu(){
     printf("1.开始取款\n");
     printf("2.开始存款\n");
     printf("3.设置密码\n");
     printf("4.退出\n");
     printf("*************");
}
char getchoice(void){
    char ch[20]={};
    while(1){
    scanf("%s",ch);
    int count=strlen(ch);
    if(count!=1){
        printf("输入不合法");
    }else{
        char dh=ch[0];
        if(dh=='1'||dh=='2'||dh=='3'||dh=='4'){
            return dh;
        }else{
            printf("输入不合法");
        }
    }
    }
}

然后就是取款操作,在里面要嵌套一个是否继续进行操作的函数
代码引用

void withdraw(){
    int outmoney=0;
    while(1){
        printf("请输入取款金额:");
            scanf("%d",&outmoney);
            if(outmoney>0&&outmoney<=totalmoney){
                totalmoney-=outmoney;
                printf("取款成功,剩余%d元\n",totalmoney);
                bool ch=iscontinue();
                    if(ch==false){
                        return ;
                    }
            }else{
                printf("余额不足");
            }
    }
}
bool iscontinue(){
    printf("是否继续,(Y/N):");
    getchar();
    char ch=getchar();
    if(ch=='N'){
        return false;
    }else{
        return true;
    }
            }
void deposit(void){
    int inputmoney=0;
    while(1){
        printf("请输入存款金额:");
        scanf("%d",&inputmoney);
        totalmoney+=inputmoney;
        printf("存款成功,余额为:%d\n",totalmoney);
        bool ch=iscontinue();
        if(ch==false){
            return;}
    }
}
bool iscontinue(){
    printf("是否继续,(Y/N):");
    getchar();
    char ch=getchar();
    if(ch=='N'){
        return false;
    }else{
        return true;
    }
            }

要注意到这里面的继续函数是bool类型的,而且要用getchar()去掉enter键字符,然后才能选择是否进行操作。
后面的两个操作就是存款和更改密码了,都是要用函数表示的。
函数引用

void deposit(void){
    int inputmoney=0;
    while(1){
        printf("请输入存款金额:");
        scanf("%d",&inputmoney);
        totalmoney+=inputmoney;
        printf("存款成功,余额为:%d\n",totalmoney);
        bool ch=iscontinue();
        if(ch==false){
            return;}
    }
}
void setpassword(void){
    int newpwd1;
    int newpwd2;
    while(1){
        bool result=loginATM();
        printf("请输入新密码:");
        scanf("%d",&newpwd1);
        printf("请确认密码:");
        scanf("%d",&newpwd2);
        if(newpwd1==newpwd2){
        printf("设置密码成功!\n");
        return;
        }else{
            printf("两次密码不一致");
        }
    }
}

使用完毕后我们都会有一个退出界面,所以有一个退出界面的函数。
函数引用

void exitATM(int status){
    printf("********************\n");
    printf("   感谢你的使用   ");
    printf("********************\n");
    exit(status);

注意这些函数都是要在main函数之前声明的,而在main函数里面使用这些函数,main函数里面的引用是这样的。
代码引用

main{
welcome();
    bool result=loginATM();
    if(result==false){
        exitATM(EXIT_FAILURE);
    }
    
    while(1){
        showmenu();
        char choice=getchoice();
        switch(choice){
        case'1':
            printf("开始取款\n");
            withdraw();
            break;
        case'2':
            printf("开始存款\n");
            deposit();
            break;
        case'3':
            printf("更改密码\n");
            setpassword();
            break;
        defalut:
            exit(EXIT_SUCCESS);
            break;
        }
    }

使用我们函数构造ATM就是这个样子

你可能感兴趣的:(2019-07-31)