题目:
(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';
}
}