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

目的

实现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函数里面,代码结构太复杂,不利于阅读,不方便移植,所以下一篇会用函数来实现这个功能。

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

推荐阅读更多精彩内容