模拟 ATM 机取款的过程_原创解法

题目:

(1)、定义两个能保存5 个整形数的数组,一个用于保存5 个人的卡号,一个用于保存对应卡号的密码。

(2)、判断输入的卡号是否在数组中。

(3)、如果在数组中就让输入密码,判断是否和卡号对应的密码匹配。

(4)、判断密码,24小时内只允许输入 3 次 错误的密码。输入错误应该提示还剩下的输入次数,3次都输入错误提示 24 小时内不允许操作该卡。

(5)、密码正确就让用户对该账户进行相应的操作。

(6)、注意取款的限制。
(
7)、上述功能对于一个ATM 机是循环的过程,也就是说每个客户都会按照上面的操作进行操作,一个用户操作完成,下一个用户来了还可以进行相应的操作 .


主函数:

#import <Foundation/Foundation.h>
#import "MyHeadFile.h"
int main(int argc, const char * argv[])
{
    int cardNumber[SIZECARD] ={0} , password[SIZECARD] = {0} ;
    int money[SIZECARD] = {0} , freezeCard [SIZECARD] = {0};
    int card = 0 , pw = 0 ,judge1 = 1 , judge2 = 1 ,judge3 = -1, temp = 0, moneyNum = 0;
    int targetCard = 0;
    
    creatCard(cardNumber);
    creatPassword(password);
    creatMoney(money);
    printf("一下为已有账号及其密码和账户余额:\n");
    for (int i = 0; i < SIZECARD ; i++ )
    {
        printf("账号: %d ", cardNumber[i]);
        printf("密码: %d ",password[i]);
        printf("余额: %d \n",money[i]);
    }
    printf("\n");
    printf("\n");
    printf("\n");
    while ( judge1 )//启动ATM
    {
        char c[1024] ={0};
        char c2[1024] ={0};
        card = 0;
        pw = 0;
        printf("请输入账号: ");
        scanf("%s" , c);
        printf("请输入密码: ");
        scanf("%s" ,c2);
        if ( legitimacy(c,c2) )//判断账号合法性
        {
            copyContent( c, c2, &card , &pw ); //复制账号
            if(selectFreezeCard( freezeCard , card) == 0) //判断账号是否被冻结
            {
                //printf("%d  ",selectFreezeCard( freezeCard , card));
               if (selectCard( cardNumber, card )) //判断账号是否存在
               {
                   while(judge2 < 3) //密码循环
                   {
                    if(selectPassword (password , pw))//判断密码是否正确
                    {
                        while (judge3) //进入账号具体操作
                        {   //关于输入金额或者账号是否合法 只做了一个例子, 2.存款 操作
                            printf("1. 查询余额  2. 存款  3.取款  4. 转账  0.退出\n");
                            printf("请输入数字选择:");
                            scanf("%d",&judge3);
                            switch (judge3)//switch 开始
                            {
                                case 0:
                                    
                                    break;
                                case 1:
                                    selectBlance(cardNumber , card,money);
                                    break;
                                case 2:
                                    printf("请输入存款金额:");
                                    char moneys[20] ={0};
                                    moneyNum = 0;
                                    scanf("%s" , moneys);
                                    if (legitimacy2(moneys))
                                    {
                                        copyContent2( moneys, &moneyNum);
                                        if( deposit(cardNumber, card,money,moneyNum))
                                        {
                                            printf("存款成功!\n");
                                        }
                                    }
                                    else
                                    {
                                        printf("非法操作!\n");
                                    }
                                    break;
                                case 3:
                                    printf("请输入取款金额:");
                                    moneyNum = 0;
                                   
                                    scanf("%d" , &moneyNum);
                                    if(withdrawals(cardNumber, card,money,moneyNum))
                                    {
                                        printf("取款成功!\n");
                                    }
                                    else
                                    {
                                        printf("余额不足!\n");
                                    }
                                    
                                    break;
                                case 4:
                                    targetCard = 0;
                                    printf("请输入目标账号:");
                                    scanf("%d", &targetCard);
                                    if( selectCard(cardNumber, targetCard))
                                    {
                                        printf("请输入转账金额:");
                                        moneyNum = 0;
                                        scanf("%d" , &moneyNum);
                                        if(withdrawals(cardNumber, card,money,moneyNum))
                                        {
                                            deposit(cardNumber,targetCard,money,moneyNum);
                                            printf("转账成功!\n");
                                            
                                            //调用selectBlance()显示转入账户余额,测试用
                                            selectBlance(cardNumber,targetCard,money);
                                        }
                                        else
                                        {
                                            printf("余额不足!\n");
                                        }
                                    }
                                    else
                                    {
                                        printf("对方账号不存在!\n");
                                    }
                                    break;
                                default:
                                    break;
                            }//switch 结束
                            if(judge3 == 0) // judge3=0 结束具体操作
                            {
                                judge2 = 4;
                                break;
                            }// judge3=0 结束具体操作 结束
                        }//进入账号具体操作 结束
                    }//判断密码是否正确结束
                    else//判断密码是否正确 else
                    {
                        
                        printf("密码不正确! 您还有%d次机会,超过三次账号在24消失内冻结\n",(3-judge2));
                        
                        judge2++;
                        printf("请输入密码: ");
                        scanf("%d" ,&pw);
                    }//判断密码是否正确 else 结束
                   }//密码循环 结束
                   if(judge2 > 2 && judge2 != 4) //超过三次冻结账号
                   {
                       printf("您的账号:%d 已被冻结,请24小时后尝试 .\n" , card);
                       freezeCard[temp++] = card;
                       judge2 = 1;
                   }//超过三次冻结账号 结束
                   else //超过三次冻结账号 else
                   {
                       judge2 = 1;
                   }//超过三次冻结账号 else 结束
                   
               }//判断账号是否存在结束
               else //判断账号是否存在 else
                {
                    printf("账号不存在!\n");
                }//判断账号是否存在 else 结束
                
            }//判断账号是否被冻结结束
            else//判断账号是否被冻结 else
            {
                printf("您的账号已被冻结!\n");
            }//判断账号是否被冻结 else 结束
            
        }//判断账号合法性结束
        else //判断账号合法性结束else
        {
            printf(" 请输入数字! \n");
            
            
            card = 0;
            pw = 0;
        }//判断账号合法性结束 else 结束
        
    }//ATM循环
    return 0;
}

MyHeadFile.h 文件

#import <Foundation/Foundation.h>
#define SIZECARD 5
//创建账号
void creatCard (int cardNumber[]  );

//创建密码
void creatPassword( int password[] );

//创建余额
void creatMoney(int money[]);

//查询卡号
BOOL selectCard( int cardNumber[] , int card  );

//查询密码
BOOL selectPassword( int password[] , int pw  );

//查询余额
void selectBlance(int cardNumber[] , int card , int money[]);

//存款操作
BOOL deposit(int cardNumber[] , int card , int money[], int  moneyNum);

//取款操作
BOOL withdrawals(int cardNumber[] , int card , int money[], int  moneyNum);

//判读输入的账号和密码是否为数字  zhanghaohefa
BOOL legitimacy ( char c[], char c2[]);

//判读单一读入的账号或转账金额输入是否为数字  zhanghaohefa
BOOL legitimacy2 ( char c[]);

//复制内容 fuzhizhanghao
void copyContent(char c[], char c2[],int * card ,int *pw);

//单一复制内容 fuzhizhanghao
void copyContent2(char c[], int * m );

MyHeadFile.m文件

//创建账号
void creatCard (int cardNumber[]  )
{
    int  temp = 0 , storage = 0;
    for(int i = 0; i < SIZECARD; i++)
    {
        storage = 0;
        temp = arc4random()%(9999-1000+1)+1000;
        for(int j = 0; j <= i; j++)
        {
            if(temp ==cardNumber[j] )
            {
                storage = 1;
            }
        }
        if(storage == 1)
        {
            i--;
            storage = 0;
        }
        else
        {
            cardNumber[i] = temp;
        }
    }
}

//创建密码
void creatPassword( int password[] )
{
    for (int i = 0; i<SIZECARD; i ++)
    {
        password[i] = arc4random()%(9999-1000+1)+1000;
    }
    
}

//创建余额
void creatMoney(int money[])
{
    for (int i = 0; i<SIZECARD; i ++) {
        money[i] = arc4random()%(10000-0+1);
    }
}

//查询卡号
BOOL selectCard( int cardNumber[] , int card  )
{
    BOOL temp = 0;
    for (int i = 0; i < SIZECARD; i++) {
        if(card == cardNumber[i])
        {
            temp = 1;
        }
    }
    return temp ;
}

//查询冻结账号
BOOL selectFreezeCard( int freezeCard[] , int fc  )
{
    printf("查询是否被冻结的账号为: %d \n",fc);
    BOOL temp = 0;
    for (int i = 0; i < SIZECARD; i++)
    {
        if(fc == freezeCard[i])
        {
            temp = 1;
            printf("temp 被 改为 1 了! \n");
            return temp ;
        }
       // printf("冻结的账号: %d  \n",freezeCard[i]);
    }
    return temp ;
}

//查询密码
BOOL selectPassword( int password[] , int pw  )
{
    BOOL temp = 0;
    for (int i = 0; i < SIZECARD; i++) {
        if(pw == password[i])
        {
            temp = 1;
        }
    }
    return temp ;
}

//查询余额
void selectBlance(int cardNumber[] , int card , int money[])
{
    for (int i = 0; i < SIZECARD; i++)
    {
        if(card == cardNumber[i])
        {
            
            printf("余额:%d \n", money[i]);
            break;
        }
        
    }
    
}

//存款操作
BOOL deposit(int cardNumber[] , int card , int money[], int  moneyNum)
{  BOOL temp = 0;
    for (int i = 0; i < SIZECARD; i++)
    {
        if(card == cardNumber[i])
        {
            money[i] += moneyNum;
            return temp = 1;
            break;
        }
        
    }
    return temp;
    
}

//取款操作
BOOL withdrawals(int cardNumber[] , int card , int money[], int  moneyNum)
{
    BOOL temp = 0;
    
    for (int i = 0; i < SIZECARD; i++)
    {
        if(card == cardNumber[i])
        {
            if (money[i] >= moneyNum)
            {
                
                money[i] -=moneyNum;
                
                return  temp = 1;
            }
        }
    }
    return temp ;
}

//判读输入的账号和密码是否为数字  zhanghaohefa
BOOL legitimacy ( char c[], char c2[])
{
    
    BOOL temp = 1;
    for (int i = 0; i< strlen(c); i++)
    {
        if (c[i] < '0' || c[i] > '9')
        {
            temp = 0;
        }
    }
    for (int i = 0; i< strlen(c2); i++)
    {
        if (c2[i] < '0' || c2[i] > '9')
        {
            temp = 0;
        }
    }
    return  temp;
}

//判读单一读入的账号或转账金额输入是否为数字  zhanghaohefa
BOOL legitimacy2 ( char c[])
{
    
    BOOL temp = 1;
    for (int i = 0; i< strlen(c); i++)
    {
        if (c[i] < '0' || c[i] > '9')
        {
            temp = 0;
        }
    }
      return  temp;
}

//复制内容 fuzhizhanghao
void copyContent(char c[], char c2[],int * card ,int *pw)
{
    for (int i = 0; i< strlen(c); i++)
    {  if(i!= 0)
    {
        *card *= 10;
    }
        *card +=c[i]-'0';
    }
    for (int i = 0; i< strlen(c2); i++)
    {   if(i!=0)
    {
        *pw *= 10;
    }
        *pw +=c2[i]-'0';
    }
}
//单一复制内容 fuzhizhanghao
void copyContent2(char c[], int * m )
{
    for (int i = 0; i< strlen(c); i++)
    {  if(i!= 0)
     {
        *m *= 10;
     }
        *m +=c[i]-'0';
    }
   
}





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值