//
// main.m
// 结构体ATM
//
// Created by dllo on 15/7/10.
// 该代码是模拟ATM机存取款编写的,每次运行时,所有数据恢复初始值,但是如果是执行时程序中的结束即调用检查账号函数时,程序中的数据会根据上一次的运行结果进行执行,要注意,一但密码输入3次错误后,就无法在对该账号进行操作,想要恢复只能重新运行该代码
// Copyright (c) 2015年 Clare. All rights reserved.
//
int main(int argc, const char * argv[]) {
ATM per1 = {111, 123, "zhangsan", 100, 1};
ATM per2 = {222, 234, "lisi", 200, 1};
ATM per3 = {333, 345, "wangwu", 300, 1};
ATM per4 = {444, 456, "maliu", 400, 1};
ATM per5 = {555, 567, "chengqi", 500, 1};
ATM per[5] = {per1, per2, per3, per4,per5};
checkCardNum(5, per);
printf("\n");
return 0;
}
//
// ATM.m
// 结构体ATM
//
// Created by dllo on 15/7/10.
// Copyright (c) 2015年 Clare. All rights reserved.
//
//
// ATM.h
// 结构体ATM
//
// Created by dllo on 15/7/10.
// Copyright (c) 2015年 Clare. All rights reserved.
//
int enterCardNum = 0;
int enterPassWord =0;
int checkCardNum(int count,ATM *p){ // count :下标总长度 p:指针
printf(“欢迎来到不坑你坑谁点取款机,不怕坑就输入你的卡号:”);
scanf(“%d”,&enterCardNum); // 输入卡号
for (int i = 0; i < count ; i++) { // 查询与输入信息相等的账号
if (p[i].cardNum == enterCardNum) {
if(p[i].Lock ){ // 判断该卡是否锁定
printf(“你还真敢输,来密码报一下:”);
checkPassWord(i, p,3,count); // 查询相对应的密码
}
printf(“你是不是%s那小子啊!你不会是冒认的吧!赶紧滚蛋!明儿的这个时候想清楚了密码再来!”,p[i].name); // 卡锁定,无法使用
checkCardNum(count, p);
return 0;
}
}
printf(“你输得这是啥,给我改了\n”);
checkCardNum(count,p); // 重新开始输入账号
return 1;
}
void checkPassWord(int index, ATM *p ,int num,int count){ //index 当前脚标
if (num ==0) { //密码输入三次错误之后执行锁定卡
// printf(“赶滚蛋!24小时之后再来!\n”);
p[index].Lock = 0; // 令BOOL型的lock变为假
checkCardNum(count,p); // 回到程序最初
return;
}
scanf(“%d”,&enterPassWord);
if (p[index].passWord != enterPassWord) { // 输入的密码不正确
printf(“你小子喝多了把,你还剩下%d次机会,赶紧重输下密码!\n”,num -1);
checkPassWord(index, p, num - 1,count); //num-1输入次数减1
} else {
printf(“哎呦!是%s你小子啊!\n”,p[index].name);
printf(“说说你有什么要求!\n”);
checkServer(index, p,count); // 选择服务
// printf(“来来来!让姐姐看看!你还有%g大洋!\n”, p[index].moneyCount);
}
}
void checkServer(int index,ATM *p,int count){
// printf(“说说你有什么要求\n”);
printf(“1.拿点钱买点小酒喝喝!\n2.我就看看我还有多少钱\n3.我这有点银子要存\n4.我啥也不干,就过来看看\n”);
int n = 0;
scanf(“%d”, &n);
switch (n) { // 选择服务
case 1:
printf(“你想要多少?\n”);
getMoney(index, p, count); // 调用取钱函数
break;
case 2:
printf(“哦!你就剩%g两了\n”,p[index].moneyCount);
printf(“说吧!你还有什么要求\n”);
checkServer(index, p,count); // 嵌套,再次循环服务函数
break;
case 3:
printf(“哎呀!快,请上座!你想要存多少啊?\n”);
saveMoney(index, p, count); // 调用存钱函数
break;
case 4:
printf(“赶紧滚蛋!别碍手碍脚的,小心姐姐我揍你!\n”);
checkCardNum(count, p); // 程序结束重新开始新的循环
return;
default:
break;
}
}
void getMoney(int index,ATM *p,int count){
float getmoney = 0;
scanf(“%g”, &getmoney);
if (getmoney < p[index].moneyCount) { // 比较要取的钱和账号中的钱
p[index].moneyCount -= getmoney; // 获得取钱后的余额
printf(“得,拿走吧!你只剩%g两了\n!”,p[index].moneyCount);
printf(“说吧!你还有什么要求\n”);
checkServer(index, p, count);
} else if (getmoney == p[index].moneyCount) {
p[index].moneyCount = 0;
printf(“拿着你所有的钱滚蛋!就这么点钱,来回存取,你不累,姐都累了!\n”); // 结束
checkCardNum(count, p);
return;
} else {
printf(“去去去!你哪有这么多钱,别给姐惹事啊!给你次机会再说次你要多少?\n”);
getMoney(index, p, count); // 嵌套
}
}
void saveMoney(int index,ATM *p,int count){
float money = 0;
scanf(“%g”,&money);
p[index].moneyCount += money; // 存钱后的总额
printf(“你现在已经有%g两了!你还需要什么服务吗?乐意为你效劳!\n”, p[index].moneyCount);
checkServer(index, p, count); // 调用服务函数
}