您的位置:首页 > 其它

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

2015-02-13 11:38 309 查看
题目:

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

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息