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

来源:互联网 发布:java下载32位 编辑:程序博客网 时间:2024/05/16 16:12

题目:

(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);//判读输入的账号和密码是否为数字  zhanghaohefaBOOL legitimacy ( char c[], char c2[]);//判读单一读入的账号或转账金额输入是否为数字  zhanghaohefaBOOL legitimacy2 ( char c[]);//复制内容 fuzhizhanghaovoid copyContent(char c[], char c2[],int * card ,int *pw);//单一复制内容 fuzhizhanghaovoid 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 ;}//判读输入的账号和密码是否为数字  zhanghaohefaBOOL 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;}//判读单一读入的账号或转账金额输入是否为数字  zhanghaohefaBOOL 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;}//复制内容 fuzhizhanghaovoid 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';    }}//单一复制内容 fuzhizhanghaovoid copyContent2(char c[], int * m ){    for (int i = 0; i< strlen(c); i++)    {  if(i!= 0)     {        *m *= 10;     }        *m +=c[i]-'0';    }   }





0 0
原创粉丝点击