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就是这个样子

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352

推荐阅读更多精彩内容

  • # C语言函数实现ATM取款机代码全过程 ## 需求运行结果如下: ## main函数里面只有代码的逻辑结构,进行...
    yuan_hh阅读 229评论 0 0
  • 心得体会 随着对代码的逐渐熟悉,越发觉得养成逻辑思维和调整自己时间的重要性。经历了几天的代码生活,真心感到有一丝的...
    宁晓鸯阅读 826评论 0 1
  • 目的: 学习函数的作用以及调用方法等,并利用函数编写ATM小程序 技术: 1.为什么要使用函数:当不使用...
    我也不知道_2c95阅读 341评论 0 1
  • JNI,即Java本地接口,是Java与其他语言通信的桥梁 一,使用场景 1,需要调用Java语言不支持的,依赖于...
    王元阅读 411评论 0 1
  • 2018年8月16日 星期四 天气晴 今天闺女所有的辅导班都上完了,接下来就应该好好放松几天了。我说一家人出...
    周鲁玲阅读 85评论 0 1