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

2019-07-31  本文已影响0人  一只洁_

目的

实现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;
}

然后分步执行

  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:输入原始密码我做的比较不严谨,没有实现输入一定次数卡被冻结的功能,如果想实现这个功能,可以参照上面进入页面首次输入密码时的代码。

实战

#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.选择操作正确

b.额度不够:
继续取:


07315.png

退出:


07316.png

b.两次密码输入不同


07319.png

c.更改密码成功:


073110.png

以上。

感悟

这段demo不是特别难,但是在写代码的时候一定要记住要分板块,一个板块实现一个功能,切忌用一个循环包含所有的功能,因为这样做以后写程序后期维护修改起来会非常麻烦。还有在一些很基础的代码上不要犯错误 比如scanf语句 scanf("%x",&xxx); &一定不要忘记写。这个方法比较基础,然后会发现内容全部都在main函数里面,代码结构太复杂,不利于阅读,不方便移植,所以下一篇会用函数来实现这个功能。

上一篇下一篇

猜你喜欢

热点阅读