小程序:模拟ATM机取款的过程
1).定义两个能保存5个整形数的数组,一个用于保存5个人的卡号,一个用于保存对应卡号的密码
2).判断输入的卡号是否在数组中。
3).如果在数组中就让输入密码,判断是否和卡号对应的密码匹配。
4).判断密码,24小时内只允许输入3次错误的密码。输入错误应该提示还剩下的输入次数,3次都输入错误提示24小时内不允许操作该卡。
5).密码正确就让用户对该账户进行相应的操作。
6).注意取款的限制。
7).述功能对于一个ATM机是循环的过程,也就是说每个客户都会按照上面的操作进行操作,一个用户操作完成,下一个用户来了还可以进行相应的操作.
3.功能实现
1).定义两个能保存5个整形数的数组,一个用于保存5个人的卡号,一个用于保存对应卡号的密码
2).判断输入的卡号是否在数组中。
3).如果在数组中就让输入密码,判断是否和卡号对应的密码匹配。
4).判断密码,24小时内只允许输入3次错误的密码。输入错误应该提示还剩下的输入次数,3次都输入错误提示24小时内不允许操作该卡。
5).密码正确就让用户对该账户进行相应的操作。
6).注意取款的限制。
7).述功能对于一个ATM机是循环的过程,也就是说每个客户都会按照上面的操作进行操作,一个用户操作完成,下一个用户来了还可以进行相应的操作.
1.函数声明部分:
//随机产生卡号
void InputCard(int m[],int count);
//随机产生密码
void InputPwd(int m[],int count);
//随机产生money
void InputMoney(int m[], int count);
//判断卡号是否正确
BOOL isCard(int m[],int count,int username);
//输出卡号和密码
void OutputCard_Pd(int m[], int count);
//判断密码是否正确
BOOL isPwd(int password, int pwd);
//根据账号获取密码
int requestPwd(int username, int m[], int count);
//取款操作
int OutputMoney(int a, int b);
//转账操作
BOOL tranMoney(int a, int m[], int count);
//存款操作
int cunMoney(int a , int b);
2.对应方法实现
#import <Foundation/Foundation.h>
//随机输入
void InputValue(float a[], int count){
for (int i = 0; i < count; i++) {
a[i] = arc4random() % (40 - 20 + 1) + 20.5;
}
}
//升序方法
void tempSort(float a[], int x, int y) {
if (a[x] > a[y]) {
float temp = a[x];
a[x] = a[y];
a[y] = temp;
}
}
//排序函数
void sort(float a[], int count) {
for (int i = 0; i < count - 1; i++) {
for (int j = 0 ; j < count - 1 - i; j++) {
//换位方法
tempSort(a, j, j+1);
}
}
}
//输出
void OutputValue(float a[], int count) {
printf("\n");
for (int i = 0; i < count; i++) {
printf("%.1f ",a[i]);
}
}
//随机产生卡号
void InputCard(int m[],int count) {
for (int i = 0; i < count ; i++) {
m[i] = arc4random() % (9000 - 1000 + 1) + 1000;
}
}
//随机产生密码
void InputPwd(int m[],int count) {
for (int i = 0; i < count ; i++) {
m[i] = arc4random() % (200 - 100 + 1) + 100;
}
}
//随机产生money
void InputMoney(int m[],int count) {
for (int i = 0; i < count ; i++) {
m[i] = arc4random() % (10000 - 10 + 1) + 10;
}
}
//判断卡号是否正确
BOOL isCard(int m[],int count ,int username) {
BOOL flag = NO;
for (int i = 0; i < count; i++) {
if (username == m[i]) {
flag = YES;
}
}
return flag;
}
//判断密码是否正确
BOOL isPwd(int password, int pwd){
BOOL flag = NO;
if (password == pwd) {
flag = YES;
}
return flag;
}
//输出卡号和密码
void OutputCard_Pd(int m[], int count) {
for (int i = 0; i < count; i++) {
printf("%4d ", m[i]);
}
printf("\n");
}
//通过账号获取密码下标.
int requestPwd(int username,int m[],int count) {
int index = 0;
for (int i = 0; i < count; i++) {
if (username == m[i]) {
index = i;
}
}
return index;
}
//取款操作
int OutputMoney(int a, int b) {
int x = a - b;
a = x;
return x;
}
//存款操作
int cunMoney(int a , int b) {
int x = a + b;
a = x;
return x ;
}
3.功能实现
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
//定义2个整形数组
int username[5] = {0};//定义数组,并初始化为0
int password[5] = {0};
int money[5] = {0};//账户余额
InputCard(username, 5); //随机卡号
InputPwd(password, 5); //随机密码
InputMoney(money, 5); //随机money
OutputCard_Pd(username, 5); //取出卡号
OutputCard_Pd(password, 5); //取出密码
OutputCard_Pd(money, 5); //随机money
int card_jie[5] = {0, 0, 0, 0, 0};//存放被冻结的卡号.
while(1){ //死循环.
int user = 0; //定义卡号初始化,
int s = 0;//如果s为1,冻结,如果为0,继续执行
while (1) {
printf("请输入银行卡号:\n");
scanf("%d",&user); //输入卡号
if (isCard(username, 5, user)) { //判断卡号是否存在
printf("卡号正确!\n");
break; //结束循环
}else{
printf("该卡不存在,请重新输入\n");
}
}
int j = requestPwd(user, username, 5); //获取对应用户名的下标
int pwd = 0; //定义变量密码,初始化为0
//判断卡是否冻结
for (int i = 0; i < 5; i++) {
if (card_jie[i] == username[j]) { //判断密码是否存在
s = 1; //如果存储冻结卡号的数组中有这个卡号 s = 1;
printf("你的卡已经被冻结,24小时之内不能操作\n");
break;
}
}
//用户名正确,操作.
if (isCard(username, 5, user)) {
if (s == 0) { //没有被冻结.
//账号正确
for (int i = 3; i >= 0; i--) {
printf("请输入密码:\n");
scanf("%d",&pwd);
if (isPwd(password[j], pwd)) { //判断密码
printf("你输入的密码正确\n");
break;
} else {
if (i == 1) { //第三次的时候
printf("密码错误,你已经输入3次,24小时之内不能操作.\n");
//卡冻结时把冻结卡号存放在数组中
for (int i = 0; i < 5; i++) {
if (card_jie[i] == 0) {
card_jie[i] = username[j]; //如果为0,将卡号保存在数组中
//printf("asdasd = %d\n",card_jie[i]);
break;//循环结束,挨个存储.
}
}
break;
}
printf("你输入的密码不正确,你还有%d 次机会,请重新输入\n",i - 1);
}
}
}
}
//当账号密码正确
int x = money[j]; //定义变量x,将money操作后的值,赋值给x.
if(isCard(username, 5, user)){
if (isPwd(password[j], pwd)) {//用户名密码正确后,进行操作.
while(1){
int num = 0;
printf("请选择你要进行的操作: 1.查询余额 2.取款 3.转账 4.存款 5.退出\n");
scanf("%d",&num);
if (num == 1) {
//查询余额操作
printf("你的账户余额为:%d\n",x);
} else if(num == 2) {
//取款
int mon = 0;
printf("请输入你要取款的金额:\n");
scanf("%d",&mon);
if (x < mon) {
printf("你的余额不足!");
} else {
x = OutputMoney(x, mon);//取款
printf("取款成功,卡上余额为:%d\n", x);
}
} else if(num == 3) {
//转账
printf("请输入你要转的账户卡号:\n");
int phone = 0;
scanf("%d",&phone);
if (isCard(username, 5, phone)) {
int c = requestPwd(phone, username, 5); //通过卡号,获取卡号的下标.
printf("请输入你要转账的金额:\n");
int m = 0;
scanf("%d",&m);
if (m > x) {
printf("余额不足,你不能转账\n");
} else {
x = x - m ;
money[c] = money[c] + m; //把对方账户钱数加上转账钱数.
printf("转账成功!,你所剩余额为:%d\n",x);
}
} else {
printf("你输入的卡号不正确\n");
}
} else if(num == 4) {
//存款(少一个判断钱数上线操作,即判断如果大于最大限度,不能存款,我这里是默认int型.即最大值20亿左右.)
printf("请输入你要存的钱数:\n");
int y = 0;
scanf("%d",&y);
x = cunMoney(x, y);//存款操作
printf("存款成功,你的余额为:%d\n", x);
} else if(num == 5) {
//退出
money[j] = x; //推出时,把原来的余额替换成操作后的.
break;
} else {
//如果输入错误,即推出,
money[j] = x; //推出时,把原来的余额替换成操作后的.
break;
}
}
}
}
}
return 0;
}
<p>
</p><p>
</p>