结构体ATM机
2015-07-11 11:39
337 查看
//
// main.m
// 结构体ATM
//
// Created by dllo on 15/7/10.
// 该代码是模拟ATM机存取款编写的,每次运行时,所有数据恢复初始值,但是如果是执行时程序中的结束即调用检查账号函数时,程序中的数据会根据上一次的运行结果进行执行,要注意,一但密码输入3次错误后,就无法在对该账号进行操作,想要恢复只能重新运行该代码
// Copyright (c) 2015年 Clare. All rights reserved.
//
}
//
// 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 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); // 调用服务函数
}
// main.m
// 结构体ATM
//
// Created by dllo on 15/7/10.
// 该代码是模拟ATM机存取款编写的,每次运行时,所有数据恢复初始值,但是如果是执行时程序中的结束即调用检查账号函数时,程序中的数据会根据上一次的运行结果进行执行,要注意,一但密码输入3次错误后,就无法在对该账号进行操作,想要恢复只能重新运行该代码
// Copyright (c) 2015年 Clare. All rights reserved.
//
import
import “ATM.h”
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.
//
import
import “ATM.h”
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); // 调用服务函数
}
相关文章推荐
- [安卓]新闻客户端(八) 新闻详情 & 编码 & 推送 & 适配
- 使用vundle进行Vim插件管理
- 睡觉是有好处的。
- 线程和进程的区别
- 关于gridview水平居中,平均布局
- [代码收藏]设为首页和加入收藏的JavaScript代码(兼容多浏览器)
- mysql乱码问题
- FMDB官方使用文档-GCD的使用-提高性能(翻译)
- 怎样用大白菜U盘安装版Win8系统
- 搜索引擎爬虫技术研究(爬虫框架)-WebCollector
- 【一天一个canvas】圆形渐变(八)
- C1_作业
- SQL C 接口
- 指针的问题1
- 实现CodeIgniter在eclipse中的自动补全
- 【动态规划】POJ1664-放苹果
- Java - Thinking in Java 第4章 控制执行流程
- IOS 给Button设置一个简单的动画
- select监听多个客户端 -- linux函数
- find peak element