模拟 ATM 机取款的过程_原创解法
2015-02-13 11:38
309 查看
题目:
(1)、定义两个能保存5
个整形数的数组,一个用于保存5
个人的卡号,一个用于保存对应卡号的密码。
(2)、判断输入的卡号是否在数组中。
(3)、如果在数组中就让输入密码,判断是否和卡号对应的密码匹配。
(4)、判断密码,24小时内只允许输入
3 次 错误的密码。输入错误应该提示还剩下的输入次数,3次都输入错误提示
24 小时内不允许操作该卡。
(5)、密码正确就让用户对该账户进行相应的操作。
(6)、注意取款的限制。
(7)、上述功能对于一个ATM
机是循环的过程,也就是说每个客户都会按照上面的操作进行操作,一个用户操作完成,下一个用户来了还可以进行相应的操作 .
主函数:
MyHeadFile.h 文件
MyHeadFile.m文件
(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"); b9e2 //调用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'; } }
相关文章推荐
- 使用面向对象的方式模拟TOM使用ATM进行存取款的操作
- 使用面向对象的方式模拟TOM使用ATM进行存取款的操作
- 模拟银行取款ATM(面向对象,构造方法)
- Python实现HIT软件学院Java第一次实验(模拟ATM过程)
- ATM系统实现[11]——取款窗口[00原创]
- ATM的功能的模拟: 开户 销户 查询余额 查询最后5笔明细 存款 取款 转帐 退出
- [原创]CLR GC垃圾收集过程模拟(用C#来显示垃圾收集过程的视觉效果)
- 简单的ATM取款过程
- java-第九章-循环结构进阶-ATM的取款过程
- 模拟银行卡的存取款过程
- 用C语言控制台程序模拟一个ATM 机存取款流程
- Java模拟ATM运行过程(第一版)
- Java中用面向过程做的小“ATM”机
- [原创] Legato 8.1 oracle full backup skip 奇怪的问题处理过程 -- 非调度日期手工运行调度也不成功(skip)
- 用Scala模拟Spark集群启动过程
- 没有硬件,我们就玩模拟的——android4.0编译过程
- [原创]使用RemObjects Hydra 开发 RemObjects SDK Service 过程中的异常问题解决
- 用C语言实现距离向量算法的过程模拟
- java 使用线程做一个简单的ATM存取款实例.(转)
- 实验:C++实验2-模拟ATM