C语言基础练习—模拟ATM取款机

目的

通过这个模拟ATM取款机demo可以练习使用条件控制语句和函数。

方法

方法一:

先用for语句以及if语句进行密码输入及判断,main函数内用switch语句将代码分成若干个部分来分别实现不同功能,再用for语句进行密码正确之后的内容的整体循环。

方法二:

大体与方法一相同,只是把switch里面每一个分支中的功能单独交给一个函数去实现,使得main函数只搭框架,从而变得更加简洁,易懂。

具体实现

注意:

1.在写代码的时候一定要及时并准确定义变量
2.记得声明函数

方法一

方法一的变量定义
  • 首先用户需要输入密码登录,密码错误三次即显示错误次数太多,请联系客服。
  • 其次用户登录后出现菜单界面,进行功能选择。
  • 第三在每次进行一次操作后用户将选择继续或者退出。

用户输入密码
方法一

  • for循环
    先提示用户输入密码
    然后第一个if语句判断密码是否输入正确,正确则break,跳出for循环。不正确则判断再进入第二个目的是控制操作次数的if语句,未满三次则继续for循环,如果次数达到三次,则会显示‘错误次数太多,请联系客服’的字样并且退出循环。

菜单界面

密码输入正确后,弹出菜单界面,用户进行功能选择,此时就要想到switch分支语句实现不同功能的。

  • 首先显示菜单页面


    菜单

首先让用户输入选项
scanf("%d", &choice);

然后开始switch语句


        case 2: //取款 
            int temp2;
            for(;1<2;){
                printf("输入取款金额:");
                scanf("%d", &temp2);
            
                if(temp2 > total){
                    printf("余额不足 "); 
                }else{
                    total -= temp2;
                    printf("取款成功 余额为%d\n",total);
                    break;
                }
            }
            break;
        case 3: //查询余额 
            printf("当前余额为:%d\n",total);
            break;
        case 4: //更改密码 
            break;
        default://退出 
            exit(EXIT_SUCCESS);
            //exit(EXIT_FAILURE);
            break;
    } 

以上是将全部代码写在switch语句里面的方法一,对于这部分,如果使用函数,即使用方法二,将会使switch语句以及main函数更加简洁易懂,所以接下来运用函数来简化主函数

方法二

(由于方法一和方法二的变量定义稍有不同,所以下面将会重新列出)

声明函数:在练习初期尽量使用简单的函数名,方便快速辨认。

  • 声明函数并定义全局变量


    方法二
  • 主函数内定义局部变量


    方法二
  • 用户输入密码并判断正误


    方法二
  • 菜单页面与方法一相同
  • 用户输入选项后(scanf("%d",&num);),
    进入switch语句
    switch(num){
case 1:
    cunkuan();
    break;


case 2:
    qukuan();
    break;


case 3:
    genggai();
    break;

case 4:
    printf("%d\n",num1);
    break;

default:
    printf("谢谢使用\n");
    exit(EXIT_SUCCESS);
    break;
}

注意
调用函数的格式为:函数名();
一定要记得末尾加分号


存款

存款函数

存款的内容很简单,只要将存入的金额与原来的本金相加即可,故不做赘述。


取款

取款函数

  • 在取款功能中出现了fflush(stdin);这一语句
    这是因为当上一次有输入的情况下必须要将上一次缓冲区里面的内容清空
    要清空缓冲区有如下两种方式
    方式一:
    getchar(); //直接拿走内容
    (getchar();从终端接收一个字符)
    方式二:
    fflush(stdin);//刷新输入流
  • 在取款函数中还要用一个for循环来判断用户输入的取款金额是否超过了本金,如果超过则重新输入

更改密码

更改密码函数

这个函数的作用是更改账户密码,首次输入新密码后,须再次输入相同密码才能设置成功,可用一个for循环来实现。


查询余额
只要用一条语句来输出余额即可


退出
使用这一条语句即可实现这一功能exit(EXIT_SUCCESS);


在一次操作结束后,需要询问用户是否继续,所以在switch语句之后要用一个for循环来实现

image.png

此时这个for循环中出现了getchar();
所以意味着在这个循环里也要在再次输入之前将上一次缓冲区里面的内容清空

然而在第一个if语句中,如果输入的为y,则跳出for循环,但是用户选择y就是要继续进行操作,那跳出了这个for循环又要怎么重新弹出菜单界面进行再次操作呢?
所以,再次运用for循环,将switch语句和目的是选择是否继续的for循环全部包含在一个新的for循环里,并且放在输入密码的for循环下面,从而达到目的;
新的for循环: for(;1 < 2;){}


至此,这个demo就完成了

反思

  • 对定义变量的能力还不够好
  • 还没有熟练掌握何时需要清空缓冲区
  • 在之前重复引用函数造成了bug。即
    qukuan();
    printf("%d",qukuan());
  • 还有重复声明函数出现bug,即
    int qukuan():
    (以上两点皆是因为对于函数的运用还不熟练)

收获

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

推荐阅读更多精彩内容